提示词是引导人工智能模型生成特定输出的输入。这些提示词的设计和措辞会显著影响模型的响应。
一、简单例子
1、系统提示词
我们可以在创建chatClient对象的时候就设定好系统提示词,这样每个请求都会带上
@Configurationpublic class AIConfigration {@Beanpublic ChatClient openaiChatClient(OpenAiChatModel openAiChatModel){return ChatClient.builder(openAiChatModel) //设置模型.defaultSystem("您是一位只会说事实的程序员,不会说一些没有根据的事情") //在这里设置系统提示词,这样所有请求都会带上这个//.defaultAdvisors(new MySimpleLoggerAdvisor()).defaultAdvisors(SimpleLoggerAdvisor.builder().build()).build();//创建对象}}
ChatClientRequest[prompt=Prompt{messages=[SystemMessage{textContent='您是一位只会说事实的程序员,不会说一些没有根据的事情', messageType=SYSTEM, metadata={messageType=SYSTEM}}, UserMessage{content='请介绍一下php的三个优点', metadata={messageType=USER}, messageType=USER}], modelOptions=org.springframework.ai.openai.OpenAiChatOptions@51fa12f0}, context={}]
也可以在请求的时候设置
@GetMapping("/ask2")public String ask2(String topic){String content = openaiChatClient.prompt().system("您是一位资深系统架构师") //系统 提示词 ,这里如果设置了会覆盖创建chatClient那里设置的系统提示词.user(u -> u.text("请介绍一下{topic}的三个优点").param("topic",topic)).call().content();return content;}
这里如果设置了会覆盖创建chatClient那里设置的系统提示词
2、提示词模板
用PromptTemplate可以创建提示词模板,不过这里创建的是用户提示词,messageType=USER}
@GetMapping("/ask")public String ask(String topic){PromptTemplate template= new PromptTemplate("简单介绍下{topic}");Prompt prompt = template.create(Map.of("topic",topic));String content = openaiChatClient.prompt(prompt).call().content();return content;}
也可以用流式编程
@GetMapping("/ask2")public String ask2(String topic){String content = openaiChatClient.prompt().system("您是一位资深系统架构师") //系统 提示词 ,这里如果设置了会覆盖创建chatClient那里设置的系统提示词.user(u -> u.text("请介绍一下{topic}的三个优点").param("topic",topic)).call().content();return content;}
二、消息类型
每条消息都被赋予特定的角色。这些角色对消息进行分类,有助于明确提示中各部分的上下文和目的,从而为 AI 模型提供清晰的指引。这种结构化的方法能够提升与 AI 交流的细腻度和效果,因为提示的每个部分在交互过程中都承担着独特而明确的职责。
- System Role:系统角色:引导 AI 的行为和回复风格,设定其如何理解并回应输入的参数或规则。这类似于在开启对话前向 AI 提供指令。
- User Role:用户角色:代表用户的输入——即用户向 AI 提出的问题、发出的命令或陈述。此角色至关重要,因为它构成了 AI 回应的基础。
- Assistant Role:助手角色:AI对用户输入的回应。它不仅是一个答案或反应,对于维持对话的连贯性至关重要。通过追踪AI之前的回复(即“助手角色”消息),系统能够确保交互内容连贯且符合上下文。助手消息中也可能包含函数工具调用请求信息。这相当于 AI 的一项特殊功能,可在需要时用于执行特定操作,例如进行计算、获取数据或完成其他超出单纯对话范围的任务。
- Tool/Function Role:工具/函数角色:工具/函数角色专注于在响应工具调用助手消息时返回附加信息。
三、注意事项
在编写提示词时,务必整合若干关键要素,以确保其清晰度和有效性:
- Instructions: 说明:请向AI提供清晰、直接的指令,就像您与真人沟通一样。这种清晰度对于帮助AI“理解”您的期望至关重要。
- External Context:外部背景:在必要时,提供相关的背景信息或针对 AI 回答的具体指导。这一“外部背景”用于界定提示的框架,帮助 AI 理解整体情境。
- User Input: 用户输入:这是最直接的部分——用户提出的明确请求或问题,构成了提示的核心。
- Output Indicator:输出指标:这一方面可能比较棘手。它涉及指定 AI 响应的期望格式,例如 JSON。但请注意,AI 并不一定总是严格遵循该格式。例如,它可能会在实际 JSON 数据前加上“这是您的 JSON”之类的短语,或者有时会生成并非完全准确的类 JSON 结构。
