六、提示词 Prompt
1、系统提示词
@SystemMessage 设定角色,塑造AI助手的专业身份,明确助手的能力范围
1.1、配置 @SystemMessage
示例如下:
public interface SeparateChatAssistant {
/**
* 隔离聊天记忆功能
*
* @param memoryId 聊天ID
* @param message 用户信息
*/
// @SystemMessage("你是我的好朋友,请用东北话回答问题。今天是{{current_date}}") // 系统消息提示词 prompt
@SystemMessage(fromResource = "my-prompt-template.txt")
// 系统消息提示词 prompt 模版配置
String chat(@MemoryId int memoryId, @UserMessage String message);
@UserMessage("你是我的好朋友,请用上海话回答问题。今天是{{message}}")
String chat2(@MemoryId int memoryId, @V("message") String message);
@SystemMessage(fromResource = "my-prompt-template3.txt")
String chat3(
@MemoryId int memoryId,
@UserMessage String userMessage,
@V("userName") String userName,
@V("age") int age
);
}
详解:
@SystemMessage 的内容将在后台转换为 SystemMessage对象,并与 UserMessage 一起发送给大语言模型(LLM)
SystemMessaged 的内容只会发送给大模型一次,如果你修改了 SystemMessage 的内容,新的 SystemMessage 会被发送给大模型,之前的聊天记忆会失效。
如果要显示今天的日期,我们需要在提示词当中添加当前日期的占位符 {{current_date}}
@SystemMessage(fromResource = "my-prompt-template.txt")
这个相当于是从资源中加载提示词模版
2、用户提示词
@UserMessage 获取用户输入
2.1、配置 @UserMessage
- 示例如下:
@UserMessage("你是我的好朋友,请用上海话回答问题。今天是{{message}}")
String chat2(@MemoryId int memoryId, @V("message") String message);
- 解释如下:
1、配置 @V : 明确指定传递参数的名称
2、多个参数的情况:如果有两个或者两个以上的参数,我们必须要用 @V
3、系统提示词和@V配合使用
3.1、示例如下:
@SystemMessage(fromResource = "my-prompt-template3.txt")
String chat3(
@MemoryId int memoryId,
@UserMessage String userMessage,
@V("userName") String userName,
@V("age") int age
);
4、测试代码
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.xg.assistant.MemoryChatAssistant;
import org.xg.assistant.SeparateChatAssistant;
/**
* @description 系统消息提示词测试
*/
@SpringBootTest
public class PromptTest {
/**
* 系统提示词模版测试
*/
@Autowired
private SeparateChatAssistant separateChatAssistant;
@Test
void testSystemPromptTest() {
String answer = separateChatAssistant.chat(3, "今天几号");
System.out.println(answer);
}
/**
* 用户提示词测试
*/
@Autowired
private MemoryChatAssistant memoryAssistant;
@Test
void testUserPromptTest() {
String answer = memoryAssistant.chat("今天几号");
System.out.println(answer);
}
@Test
void testV() {
String answer = separateChatAssistant.chat2(3, "我是哇哈哈哈");
System.out.println(answer);
String answer1 = separateChatAssistant.chat2(3, "我是谁");
System.out.println(answer1);
}
@Test
void testUserInfo() {
// 1、从数据库中获取用户信息
String userName = "环环";
int age = 18;
String answer = separateChatAssistant.chat3(3, "今天几号", userName, age);
System.out.println(answer);
}
}
福利:具体的项目实现地址: gitee.com/xuegang001/…