AIGC宇宙 AIGC宇宙

超实用!Prompt程序员使用指南,大模型各角色代码实战案例

提示词(Prompt)是输入给大模型(LLM)的文本指令,用于明确地告诉大模型你想要解决的问题或完成的任务,也是大语言模型理解用户需求并生成准确答案的基础。 因此 prompt 使用的好坏,直接决定了大模型生成结果的质量(是否符合预期)。 图片Prompt 基本使用为了让大模型生成更符合预期的结果,我们在使用 Prompt 时,可以使用以下模版。

提示词(Prompt)是输入给大模型(LLM)的文本指令,用于明确地告诉大模型你想要解决的问题或完成的任务,也是大语言模型理解用户需求并生成准确答案的基础。因此 prompt 使用的好坏,直接决定了大模型生成结果的质量(是否符合预期)。

图片图片

Prompt 基本使用

为了让大模型生成更符合预期的结果,我们在使用 Prompt 时,可以使用以下模版。

图片图片

其内容组成为:

  • 背景:介绍与任务紧密相关的背景信息。这一环节有助于 LLM 深入理解讨论的具体环境,从而保证其生成内容与话题高度相关。
  • 目的:明确指出您期望 LLM 完成的具体任务。通过设定清晰、精确的目标指令,可引导 LLM 聚焦于实现既定任务,提升输出的有效性。
  • 风格:指定您希望 LLM 输出的写作风格,可以是某个具体名人、具体流派或者某类专家的写作风格。
  • 语气:定义输出内容应有的语气,比如正式、诙谐、温馨、关怀等,以便适应不同的使用场景和使用目的。
  • 受众:明确指出内容面向的读者群体,无论是专业人士、入门学习者还是儿童等,这样 LLM 就能调整语言和内容深度,使之更加贴合受众需求。
  • 输出:规定输出内容的具体形式,确保 LLM 提供的成果能直接满足后续应用的需求,比如列表、JSON 数据格式、专业分析报告等形式。

以下为阿里云提供的 Prompt 案例:

图片图片

在未使用 Prompt 模版时,LLM 输出虽表现尚可,但显得过于泛化,缺乏必要的细节和针对特定群体的吸引力。而在使用 Prompt 框架时,框架不仅提醒您考虑需求的其它方面,特别是一般 Prompt 中缺少的风格、语气和受众,还帮助 LLM 生成更针对年轻群体、细节更多、语言表达更加富有张力的输出。

Prompt 优化工具

当然,我们也可以使用一些工具来进行 Prompt 优化,例如阿里云百炼平台 Prompt 优化工具扩写等,如下图所示:

图片图片

Prompt 发展演化

从程序的角度来看 Prompt 的发展演化经过了以下几个阶段:

  • 简单字符串:最初的 Prompt 只是简单的文本字符串。
  • 占位符:引入占位符(如 {USER})以动态插入内容。
  • 多角色消息:将消息分为不同角色(如用户、助手、系统等),增强交互的复杂性和上下文感知能力。

Spring AI Prompt 组成

以 Spring AI 中的 Prompt 来看,它的实现源码如下:

复制
public class Prompt implements ModelRequest<List<Message>> {
    private final List<Message> messages;
    private ChatOptions chatOptions;
}

Prompt 实现了 ModelRequest 接口,并且包含了 messages 和 chatOptions 属性,其中:

  • messages:包含多个 Message 对象,每个消息代表对话中的一个部分。
  • chatOptions:配置选项,用于设置模型的某些属性。

Message API 关系图

Message 对象是 Content 的子类,Spring AI Message API 关系如下图所示:

图片图片

Prompt 角色分类

Prompt 中的主要角色(Role)包括以下几个:

  • 系统角色(System Role):设定 AI 行为边界。指导 AI 的行为和响应方式,设置 AI 如何解释和回复输入的参数或规则。
  • 用户角色(User Role):接收用户原始输入。代表用户的输入他们向 AI 提出的问题、命令或陈述。这个角色至关重要,因为它构成了 AI 响应的基础。
  • 助手角色(Assistant Role):AI 返回的响应信息,定义为“助手角色”消息。用它可以确保上下文能够连贯的交互。
  • 工具/功能角色(Tool/Function Role):桥接外部服务,可以进行函数调用如,支付/数据查询等操作。

角色在 Spring AI 枚举中被定义,如下源码所示:

复制
public enum MessageType {
    USER("user"),
    ASSISTANT("assistant"),
    SYSTEM("system"),
    TOOL("tool");
    // .....
}

系统和用户角色使用

复制
import org.springframework.ai.chat.client.ChatClient;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;

@RestController
@RequestMapping("/prompt")
publicclass PromptController {
    privatefinal ChatClient chatClient;
    public PromptController(ChatClient.Builder builder) {
        this.chatClient = builder.build();
    }
    @RequestMapping("/system")
    public String system(@RequestParam String city) {
        String result = chatClient.prompt()
        .system("你是一个旅行规划助手")
        .user(city)
        .call()
        .content();
        System.out.println(result);
        return result;
    }
}

以上程序执行结果如下:

图片图片

助手角色使用

AssistantMessage 助手消息类型可用于接收上次执行结果,并实现上下文连续对话,实现代码如下:

复制
import org.springframework.ai.chat.client.ChatClient;
import org.springframework.ai.chat.messages.AssistantMessage;
import org.springframework.ai.chat.messages.Message;
import org.springframework.ai.chat.messages.UserMessage;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;

import java.util.ArrayList;
import java.util.List;

@RestController
@RequestMapping("/prompt")
publicclass PromptController {
    privatefinal ChatClient chatClient;
    //使用集合记录消息历史
    List<Message> messages = new ArrayList<>();

    public PromptController(ChatClient.Builder builder) {
        this.chatClient = builder.build();
    }

    @RequestMapping("/assistant")
    public String assistant(@RequestParam String msg) {
        messages.add(new UserMessage(msg));
        // 助手消息
        AssistantMessage response = chatClient.prompt()
        .messages(messages)
        .call()
        .chatResponse()
        .getResult()
        .getOutput();
        messages.add(response);
        return response.getText();
    }
}

程序执行结果如下:

图片图片

从结果可以看出,第二次交互是在第一次交互的基础上执行的。

小结

除了 Prompt 以上内容之外,还有 PromptTemplate 以及 Prompt 使用技巧,例如为模型提供输出样例、设定完成任务步骤、使用思维链(Chain of Thought,COT)引导模型“思考”等具体技巧,咱们后期文章再慢慢聊。

相关资讯

腾讯云上线DeepSeek全系API接口并打通联网搜索

腾讯云宣布完成对深度求索(DeepSeek)大模型的深度整合——正式上线DeepSeek-R1和V3原版模型的API接口,并创新性接入自研大模型知识引擎,同步开放联网搜索能力。 凭借腾讯云在推理并发和生成速率等方面的优化,用户可以获得更加稳定、安全、低门槛的使用体验。 开发者只需在云上简单三步即可实现API接口调用,并通过大模型知识引擎提供的文档解析、拆分、embedding、多轮改写等能力,灵活构建专属的AI服务。
2/8/2025 2:09:00 PM
AI在线

微信搜索接入DeepSeek大模型 称AI不会使用朋友圈聊天等信息

近日,微信宣布其搜索功能接入 DeepSeek-R1模型,目前处于灰度测试阶段。 部分用户在微信搜索框选择 AI 搜索时,可体验到 DeepSeek-R1提供的深度思考功能。 微信方面表示,引入大模型旨在提升搜索的智能化和精准度,更好地理解用户搜索意图,分析处理复杂查询。
2/19/2025 11:18:00 AM
AI在线

DeepSeek-R1 登顶 Hugging Face:以10000 赞力压 150 万个模型

今日凌晨,全球最大开源平台之一 Hugging Face 的首席执行官 Clement Delangue 在社交平台发文宣布,DeepSeek-R1在 Hugging Face 上获得了超过10000个赞,成为该平台近150万个模型中最受欢迎的大模型。 这一里程碑式的成就标志着 DeepSeek-R1在全球 AI 社区中的广泛认可与影响力。 DeepSeek-R1的崛起速度令人瞩目。
2/24/2025 9:30:00 AM
AI在线
testab