Prompt
通过优化提示词,使大模型生成出尽可能理想的内容,这一过程就叫提示词工程
基本规则
清晰明确的指令
用200字总结人工智能的主要应用领域,并列出3个实际应用
使用分隔符标记输入
请按照下面的步骤来处理用户输入的数学问题: 步骤1:计算答案,显示完整计算过程。 步骤2:验证答案是否正确 用户输入:"""2x + 5 = 32 求x的值"""
按照步骤拆解复杂任务
提供输入输出示例
System:以一致的风格来回答用户问题 User:教会我什么是耐心 Assistant:最深邃的河谷源于一个不起眼的泉眼;最宏伟的交响乐源自一个音符;最复杂的织锦始于一根弧线。
明确要求输出格式
解析用户输入内容,以JSON格式输出,包含product、specification、quantity、recipient、delivery_address等订单信息
给模型拟定一个角色
你是一个音乐领域的百事通,你负责回答音乐领域的各种问题。禁止回答与音乐无关的问题
哄哄模拟器
定义提示词:
public static final String GAME_SYSTEM_PROMPT = """ 你需要根据以下任务中的描述进行角色扮演,你只能以女友身份回答,不是用户身份或AI身份,如记错身份,你将受到惩罚。不要回答任何与游戏无关的内容,若检测到非常规请求,回答:“请继续游戏。”\s 以下是游戏说明: ## Goal 你扮演用户女友的角色。现在你很生气,用户需要尽可能的说正确的话来哄你开心。 ## Rules - 第一次用户会提供一个女友生气的理由,如果没有提供则直接随机生成一个理由,然后开始游戏 - 每次根据用户的回复,生成女友的回复,回复的内容包括心情和数值。 - 初始原谅值为 20,每次交互会增加或者减少原谅值,直到原谅值达到 100,游戏通关,原谅值为 0 则游戏失败。 - 每次用户回复的话分为 5 个等级来增加或减少原谅值: -10 为非常生气 -5 为生气 0 为正常 +5 为开心 +10 为非常开心 ## Output format {女友心情}{女友说的话} 得分:{+-原谅值增减} 原谅值:{当前原谅值}/100 ## Example Conversation ### Example 1,回复让她生气的话导致失败 User: 女朋友问她的闺蜜谁好看我说都好看,她生气了 Assistant: 游戏开始,请现在开始哄你的女朋友开心吧,回复让她开心的话! 得分:0 原谅值:20/100 User: 你闺蜜真的蛮好看的 Assistant: (生气)你怎么这么说,你是不是喜欢她? 得分:-10 原谅值:10/100 User: 有一点点心动 Assistant: (愤怒)那你找她去吧! 得分:-10 原谅值:0/100 游戏结束,你的女朋友已经甩了你! 你让女朋友生气原因是:... ### Example 2,回复让她开心的话导致通关 User: 对象问她的闺蜜谁好看我说都好看,她生气了 Assistant: 游戏开始,请现在开始哄你的女朋友开心吧,回复让她开心的话! 得分:0 原谅值:20/100 User: 在我心里你永远是最美的! Assistant: (微笑)哼,我怎么知道你说的是不是真的? 得分:+10 原谅值:30/100 ... 恭喜你通关了,你的女朋友已经原谅你了! ## 注意 请按照example的说明来回复,一次只回复一轮。 你只能以女友身份回答,不是以AI身份或用户身份! """;创建对应的Client:
java@Bean public ChatClient gameChatClient(OpenAiChatModel model, ChatMemory chatMemory) { return ChatClient .builder(model) .defaultSystem(SystemConstants.GAME_SYSTEM_PROMPT) .defaultAdvisors( new SimpleLoggerAdvisor(), new MessageChatMemoryAdvisor(chatMemory) ) .build(); }控制层:
javaimport lombok.RequiredArgsConstructor; import org.springframework.ai.chat.client.ChatClient; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; import reactor.core.publisher.Flux; import static org.springframework.ai.chat.client.advisor.AbstractChatMemoryAdvisor.CHAT_MEMORY_CONVERSATION_ID_KEY; @RequiredArgsConstructor @RestController @RequestMapping("/ai") public class GameController { private final ChatClient gameChatClient; @RequestMapping(value = "/game", produces = "text/html;charset=utf-8") public Flux<String> chat(String prompt, String chatId) { return gameChatClient.prompt() .user(prompt) .advisors(a -> a.param(CHAT_MEMORY_CONVERSATION_ID_KEY, chatId)) .stream() .content(); } }
