第六节 提示词 Prompt

亮子 | 2026-03-31 08:53:38 | 49 | 0 | 0 | 0

六、提示词 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

MemoryChatAssistantchat方法中添加注解

@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);
}