詹学伟
詹学伟
Published on 2025-06-07 / 8 Visits
0
0

提示词 Prompt

一、系统提示词

@SystemMessage 设定角色,塑造AI助手的专业身份,明确助手的能力范围

1.配置@SystemMessage

在SeparateChatAssistant类的chat方法上添加@SystemMessage注解

@SystemMessage("你是我的好朋友,请用湖南话回答问题。")
String chat(@MemoryId int memoryId, @UserMessage String userMessage);

@SystemMessage 的内容将在后台转换为 SystemMessage 对象,并与 UserMessage 一起发送给大语言模型(LLM)。

SystemMessaged的内容只会发送给大模型一次。

如果你修改了SystemMessage的内容,新的SystemMessage会被发送给大模型,之前的聊天记忆会失效。

2.测试

package com.zhan.chat;

import com.zhan.chat.assistant.SeparateChatAssistant;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;

@SpringBootTest
class PromptSystemMessageTest {

    @Autowired
    private SeparateChatAssistant separateChatAssistant;


    @Test
    public void test() {
        String answer = separateChatAssistant.chat(4, "介绍下湖南的特点");
        System.out.println(answer);
    }
}

如果要显示今天的日期,我们需要在提示词中添加当前日期的占位符{{current_date}}

因为大语言模型的训练数据是有实效的

@SystemMessage("你是我的好朋友,请用湖南话回答问题。今天是{{current_date}}")
String chat(@MemoryId int memoryId, @UserMessage String userMessage);
package com.zhan.chat;

import com.zhan.chat.assistant.SeparateChatAssistant;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;

@SpringBootTest
class PromptSystemMessageTest {

    @Autowired
    private SeparateChatAssistant separateChatAssistant;


    @Test
    public void test() {
        String answer = separateChatAssistant.chat(4, "今天是几号?");
        System.out.println(answer);
    }
}

3.资源中加载提示模板

@SystemMessage 注解还可以从资源中加载提示模板:

@SystemMessage(fromResource = "my-prompt-hunan.txt")
String chat(@MemoryId int memoryId, @UserMessage String userMessage);

二、户提示词模板

@UserMessage:获取用户输入

1.配置@UserMessage

在 MemoryChatAssistant 的 chat 方法中添加注解


import dev.langchain4j.service.UserMessage;
import dev.langchain4j.service.V;
import dev.langchain4j.service.spring.AiService;
import dev.langchain4j.service.spring.AiServiceWiringMode;

/**
 * @author zhanxuewei
 */
@AiService(wiringMode = AiServiceWiringMode.EXPLICIT, chatModel = "qwenChatModel", chatMemory = "chatMemory")
public interface MemoryChatAssistant {

    @UserMessage("你是我的好朋友,请用上海话回答问题,并且添加一些表情符号。 {{message}}")
    String chat(String message);

}

2.测试

package com.zhan.chat;

import com.zhan.chat.assistant.MemoryChatAssistant;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;

@SpringBootTest
class PromptUserMessageTest {

    @Autowired
    private MemoryChatAssistant memoryChatAssistant;
    
    @Test
    public void test() {
        String answer = memoryChatAssistant.chat("我是詹学伟");
        System.out.println(answer);
    }

}

三、指定参数名称

1.置@V

@V 明确指定传递的参数名称

@UserMessage("你是我的好朋友,请用上海话回答问题,并且添加一些表情符号。{{message}}")
String chat(@V("message") String userMessage)

2.多个参数的情况

如果有两个或两个以上的参数,我们必须要用 @V ,在 SeparateChatAssistant 中定义方法 chat2

    @UserMessage("你是我的好朋友,请用粤语回答问题。{{message}}")
    String chat2(@MemoryId int memoryId, @V("message") String userMessage);

测试: @UserMessage 中的内容每次都会被和用户问题组织在一起发送给大模型

    @Test
    public void test2() {
        String answer = separateChatAssistant.chat2(4, "介绍下湖南的特点");
        System.out.println(answer);
    }

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,添加占位符

测试:

    @Test
    public void test3() {
        String answer = separateChatAssistant.chat3(5, "我是谁?", "詹学伟", 18);
        System.out.println(answer);
    }


Comment