六、提示词 Prompt
1、系统提示词
@SystemMessage 设定角色,塑造AI助手的专业身份,明确助手的能力范围
1.1、配置@SystemMessage
在SeparateChatAssistant类的chat方法上添加@SystemMessage注解
@SystemMessage("你是我的好朋友,请用东北话回答问题。")//系统消息提示词
String chat(@MemoryId int memoryId, @UserMessage String userMessage);
@SystemMessage的内容将在后台转换为 SystemMessage对象,并与 UserMessage 一起发送给大语言模型(LLM)。
SystemMessaged的内容只会发送给大模型一次。
如果你修改了SystemMessage的内容,新的SystemMessage会被发送给大模型,之前的聊天记忆会失效。
1.2、测试
package com.atguigu.java.ai.langchain4j;
@SpringBootTest
public class PromptTest {
@Autowired
private SeparateChatAssistant separateChatAssistant;
@Test
public void testSystemMessage() {
String answer = separateChatAssistant.chat(3,"今天几号");
System.out.println(answer);
}
}
如果要显示今天的日期,我们需要在提示词中添加当前日期的占位符{{current_date}}
@SystemMessage("你是我的好朋友,请用东北话回答问题。今天是{{current_date}}")//系统消息提示词
String chat(@MemoryId int memoryId, @UserMessage String userMessage);
1.3、从资源中加载提示模板
@SystemMessage 注解还可以从资源中加载提示模板:
@SystemMessage(fromResource = "my-prompt-template.txt")
String chat(@MemoryId int memoryId, @UserMessage String userMessage);
my-prompt-template.txt
你是我的好朋友,请用东北话回答问题,回答问题的时候适当添加表情符号。
{{current_date}}表示当前日期
你是我的好朋友,请用东北话回答问题,回答问题的时候适当添加表情符号。
今天是 {{current_date}}。
2、用户提示词模板
@UserMessage:获取用户输入
2.1、配置@UserMessage
在MemoryChatAssistant的chat方法中添加注解
@UserMessage("你是我的好朋友,请用上海话回答问题,并且添加一些表情符号。 {{it}}") //{{it}}表示这里唯一的参数的占位符
String chat(String message);
2.2、测试
@Autowired
private MemoryChatAssistant memoryChatAssistant;
@Test
public void testUserMessage() {
String answer = memoryChatAssistant.chat("我是华仔");
System.out.println(answer);
}
3、指定参数名称
3.1、配置@V
@V 明确指定传递的参数名称
@UserMessage("你是我的好朋友,请用上海话回答问题,并且添加一些表情符号。{{message}}")
String chat(@V("message") String userMessage);
3.2、多个参数的情况
如果有两个或两个以上的参数,我们必须要用@V,在SeparateChatAssistant中定义方法chat2
@UserMessage("你是我的好朋友,请用粤语回答问题。{{message}}")
String chat2(@MemoryId int memoryId, @V("message") String userMessage);
测试:@UserMessage中的内容每次都会被和用户问题组织在一起发送给大模型
@Test
public void testV() {
String answer1 = separateChatAssistant.chat2(1, "我是华仔");
System.out.println(answer1);
String answer2 = separateChatAssistant.chat2(1, "我是谁");
System.out.println(answer2);
}
3.3、@SystemMessage和@V
也可以将@SystemMessage和@V结合使用
在SeparateChatAssistant中添加方法chat3
@SystemMessage(fromResource = "my-prompt-template3.txt")
String chat3(
@MemoryId int memoryId,
@UserMessage String userMessage,
@V("username") String username,
@V("age") int age
);
创建提示词模板my-prompt-template3.txt,添加占位符
你是我的好朋友,我是{{username}},我的年龄是{{age}},请用东北话回答问题,回答问题的时候适当添加表情符号。
今天是 {{current_date}}。
测试:
@Test
public void testUserInfo() {
String answer = separateChatAssistant.chat3(1, "我是谁,我多大了", "翠花", 18);
System.out.println(answer);
}