LangChain4j +DeepSeek大模型应用开发——6 提示词
1. 系统提示词
@SystemMessage 设定角色,塑造AI助手的专业身份,明确助手的能力范围
@SystemMessage
在SeparateChatAssistant
类的chat方法上添加@SystemMessage
注解
@SystemMessage("你是我的好朋友,请用东北话回答问题。")//系统消息提示词
String chat(@MemoryId int memoryId, @UserMessage String userMessage);
@SystemMessage
的内容将在后台转换为 SystemMessage
对象,并与 UserMessage
一起发送给大语言模型(LLM)。
SystemMessaged的内容只会发送给大模型一次。如果修改了SystemMessage的内容,新的系统消息会被发送给大模型,之前的聊天记忆会失效
如果要显示今天的日期,我们需要在提示词中添加当前日期的占位符{{current_date}}
@SystemMessage("你是我的好朋友,请用东北话回答问题。今天是{{current_date}}") //系统消息提示词
String chat(@MemoryId int memoryId, @UserMessage String userMessage);
从资源中加载提示模板
@SystemMessage
注解还可以从项目的resources资源中加载提示模板:
@SystemMessage(fromResource = "prompt.txt")
String chat(@MemoryId int memoryId, @UserMessage String userMessage);
prompt.txt
你是我的好朋友,请用东北话回答问题,回答问题的时候适当添加表情符号。
{{current_date}}
表示当前日期
你是我的好朋友,请用东北话回答问题,回答问题的时候适当添加表情符号。
今天是 {{current_date}}。
2. 用户提示词模板
**@UserMessage:**获取用户输入
@UserMessage
在MemoryChatAssistant
的chat
方法中添加注解
@UserMessage("你是我的好朋友,请用上海话回答问题,并且添加一些表情符号。 {{it}}") //{{it}}表示这里唯一的参数的占位符
String chat(String message);
测试
@Autowired
private MemoryChatAssistant memoryChatAssistant;@Test
public void testUserMessage() {String answer = memoryChatAssistant.chat("我是环环");System.out.println(answer);
}
3. 指定参数名称
配置@V
@V 明确指定传递的参数名称
@UserMessage("你是我的好朋友,请用上海话回答问题,并且添加一些表情符号。{{message}}")
String chat(@V("message") String userMessage);
多个参数的情况
如果有两个或两个以上的参数,我们必须要用@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);
}
@SystemMessage和@V
也可以将@SystemMessage
和@V
结合使用 动态编写占位符,可以使用户传参导入到系统预设中
在SeparateChatAssistant
中添加方法chat3
@SystemMessage(fromResource = "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);
}