当前位置: 首页 > news >正文

Langchain4j(3) Prompt 提示词工程 + PromptTemplate + SystemMessage 高级用法

一、LangChain4j 提示词(Prompt)核心三件套

PromptTemplate:提示词模板,支持变量替换
SystemMessage:系统角色设定(决定 AI 行为)
UserMessage/AiMessage:对话消息载体

二、基础:PromptTemplate 变量替换

package org.deepseek.demo08; import dev.langchain4j.model.input.Prompt; import dev.langchain4j.model.input.PromptTemplate; import java.util.Map; public class PromptTemplateDemo { public static void main(String[] args) { // 1. 定义带变量的模板 PromptTemplate template = PromptTemplate.from( "你是专业的{{role}},请用{{style}}回答:{{question}}" ); // 2. 填入参数 Prompt prompt = template.apply(Map.of( "role", "Java工程师", "style", "简洁分点", "question", "什么是JVM?" )); // 3. 输出最终提示词 System.out.println(prompt.text()); } }

三、最常用:SystemMessage 角色设定(决定 AI 性格)

package org.deepseek.demo08; import dev.langchain4j.data.message.SystemMessage; import dev.langchain4j.data.message.UserMessage; import dev.langchain4j.data.message.ChatMessage; import dev.langchain4j.model.chat.ChatModel; import dev.langchain4j.model.openai.OpenAiChatModel; import java.util.List; public class SystemPromptDemo { public static void main(String[] args) { ChatModel model = OpenAiChatModel.builder() .baseUrl("https://api.deepseek.com") .apiKey("sk-XXXXXXXXXXXXXXXXXXXX") .modelName("deepseek-chat") .build(); // 系统提示(核心) SystemMessage system = SystemMessage.from(""" 你是Java技术助手。 规则: 1. 只回答技术问题 2. 回答简洁、分点 3. 不编造内容 """); UserMessage user = UserMessage.from("ArrayList和LinkedList区别"); List<ChatMessage> messages = List.of(system, user); String answer = model.chat(messages).aiMessage().text(); System.out.println(answer); } }

四、@SystemMessage定义角色

和 AiServices 结合:
接口 + @SystemMessage

写法一:

package org.deepseek.demo08; import dev.langchain4j.service.SystemMessage; import dev.langchain4j.service.UserMessage; public interface Assistant { @SystemMessage(""" 你是代码审查助手。 只输出问题和优化建议,不废话。 """) String review(@UserMessage String code); }
package org.deepseek.demo08; import dev.langchain4j.model.chat.ChatModel; import dev.langchain4j.model.openai.OpenAiChatModel; import dev.langchain4j.service.AiServices; public class AssistantDemo { public static void main(String[] args) { ChatModel model = OpenAiChatModel.builder() .baseUrl("https://api.deepseek.com") .apiKey("sk-XXXXXXXXXXXXXXXXXXXX") .modelName("deepseek-chat") .build(); // 系统提示(核心) Assistant assistant = AiServices.builder(Assistant.class) .chatModel(model) .build(); String result = assistant.review("public class A{}"); System.out.println(result); } }

写法二:

所有{{变量}}必须用@V ("变量名")绑定!

@SystemMessage("你是{{role}}") // 变量1 @UserMessage("用户问题:{{question}}") // 变量2 String answer(@V("role") String role,@V("question") String question);
package org.deepseek.demo08; import dev.langchain4j.model.chat.ChatModel; import dev.langchain4j.model.openai.OpenAiChatModel; import dev.langchain4j.service.AiServices; public class AssistantDemo { public static void main(String[] args) { // 2. 模型 ChatModel model = OpenAiChatModel.builder() .baseUrl("https://api.deepseek.com") .apiKey("sk-XXXXXXXXXXXXXXXXXX") .modelName("deepseek-chat") .build(); // 系统提示(核心) Assistant assistant = AiServices.builder(Assistant.class) .chatModel(model) .build(); String result = assistant.answer( "Java工程师", // 对应 {{role}} "什么是JVM?" // 对应 {{question}} ); // 输出结果 System.out.println(result); } }

五、高级:动态 SystemPrompt(模板 + 变量)

package org.deepseek.demo08; import dev.langchain4j.data.message.ChatMessage; import dev.langchain4j.data.message.SystemMessage; import dev.langchain4j.data.message.UserMessage; import dev.langchain4j.model.chat.ChatModel; import dev.langchain4j.model.input.PromptTemplate; import dev.langchain4j.model.openai.OpenAiChatModel; import java.util.List; import java.util.Map; public class SystemPromptDemo { public static void main(String[] args) { ChatModel model = OpenAiChatModel.builder() .baseUrl("https://api.deepseek.com") .apiKey("sk-XXXXXXXXXXXXXXXXXXXX") .modelName("deepseek-chat") .build(); // 写法一: // 静态文本(无变量、不替换) Prompt systemPrompt = Prompt.from("你是客服,语言:中文,风格:礼貌简洁"); SystemMessage system1 = systemPrompt.toSystemMessage(); // 写法二: // 真正的模板(可传变量、自动替换 {{key}}) PromptTemplate systemPromptTemplate = PromptTemplate.from(""" 你是{{role}}, 语言:{{lang}}, 风格:{{style}} """); String systemText = systemPromptTemplate.apply(Map.of( "role", "客服", "lang", "中文", "style", "礼貌简洁" )).text(); SystemMessage system = SystemMessage.from(systemText); UserMessage user = UserMessage.from("你是?"); List<ChatMessage> messages = List.of(system, user); String answer = model.chat(messages).aiMessage().text(); System.out.println(answer); } }

六、结构化输出专用强力 Prompt( JSON 场景必备)

1.定义Json实体

package org.deepseek.demo08; import java.util.List; public class UserIntent { private String intent; private List<String> keywords; public UserIntent() { } public UserIntent(String intent, List<String> keywords) { this.intent = intent; this.keywords = keywords; } public String getIntent() { return intent; } public void setIntent(String intent) { this.intent = intent; } public List<String> getKeywords() { return keywords; } public void setKeywords(List<String> keywords) { this.keywords = keywords; } }

2. 定义SystemMessage

@SystemMessage(""" 你只输出标准JSON,不输出任何解释、markdown、标点外文字。 输出格式: { "intent": "意图", "keywords": [] } """) UserIntent analyze(String text);

3.对话

package org.deepseek.demo08; import dev.langchain4j.model.chat.ChatModel; import dev.langchain4j.model.openai.OpenAiChatModel; import dev.langchain4j.service.AiServices; public class UserIntentDemo { public static void main(String[] args) { ChatModel model = OpenAiChatModel.builder() .baseUrl("https://api.deepseek.com") .apiKey("sk-XXXXXXXXXXXXXXXXXX") .modelName("deepseek-chat") .temperature(0.1) // 越低越稳定,结构化必须低 .build(); Assistant assistant = AiServices.builder(Assistant.class) .chatModel(model) .build(); String userText = "你们的Java课程多少钱?能不能优惠一点?我有点着急报名"; UserIntent result = assistant.analyze(userText); // 4. 直接使用结构化数据! System.out.println("用户意图:" + result.getIntent()); System.out.println("关键词:" + result.getKeywords()); } }

七、 Prompt 规则

  1. 角色>任务>格式>约束四段式最稳
  2. 禁止 AI 自由发挥:用 “只输出”“禁止”“必须
  3. 变量用{{key}},和模板引擎一致
  4. SystemMessage放第一条,优先级最高(List<ChatMessage>
  5. @SystemMessage@UserMessage中出现的所有{{变量}}必须用@V ("变量名")绑定到方法参数!

八、总结

总结下来提示词一共就两种用法,
一种是对话时放到List<ChatMessage>中的第一条进行定义,
另一种就是使用@SystemMessage注解进行定义

http://www.jsqmd.com/news/640046/

相关文章:

  • 前端 如何减少前端白屏时间?从原理到实战优化全攻略
  • 实验二《Python程序设计》20251223 胥安
  • 抖音批量下载终极指南:5分钟掌握无水印视频下载完整方案
  • 5分钟掌握Harepacker-resurrected:解锁MapleStory游戏资源编辑的完整方案
  • Obsidian PDF导出终极指南:Better Export PDF插件快速上手教程
  • APKMirror客户端:安全获取Android应用的三步实践方案
  • D3KeyHelper完全指南:暗黑3玩家的终极自动化助手
  • 2026测量传声器技术推荐:选型、校准与工业应用指南 - 速递信息
  • Qwen3-ASR-1.7B应用场景:会议录音转文字、视频字幕生成实战
  • 半监督医学分割的‘边界难题’有解了?手把手解读哈工大TMI 2025论文BoCLIS
  • Cursor AI编程助手破解工具:三步实现免费无限使用的终极指南
  • ACSL-6310-06TE,多通道双向15MBd高速数字逻辑门光耦合器
  • Zynq7000双核高效协作:共享内存管理与核间同步实战指南
  • PCL与Eigen版本冲突引发的内存析构陷阱
  • 如何为Unity游戏安装和使用MelonLoader:通用模组加载器完整指南
  • 上海市抖音公会营业性演出许可证入驻代办公司靠谱推荐哪家好 - 速递信息
  • 保姆级教程:从Cadence Innovus到Virtuoso的GDS完整导出与查看流程(避坑版)
  • 八大网盘直链解析神器:让文件下载告别等待的智能助手
  • Phi-4-Reasoning-Vision镜像免配置:双卡4090上1分钟完成15B模型加载实测
  • 微信小程序开发实战:基于和风天气API的精准天气预报(含自动定位与源码解析)
  • 如何用LaTeX高效排版Computational Linguistics投稿论文?最新模板与避坑指南
  • 终极指南:3步掌握Unlock-Music音乐解锁工具
  • 保姆级教程:手把手拆解RDMA网卡如何实现‘零拷贝’与‘内核旁路’
  • CANdela Studio 实战:从诊断调查表到CDD数据库的精准配置指南
  • 若依框架前后端不分离版代码生成实战:从建表到菜单配置全流程
  • 英雄联盟Akari助手终极指南:3分钟打造你的专属游戏智能管家
  • 保姆级教程:用USB-CAN分析仪抓包调试,从安装到收发报文避坑指南
  • 北京搬家为什么报价差 3 倍?拆解价格逻辑与避坑指南
  • AI专著撰写不用愁!精选工具助力,2周完成专业学术专著
  • League-Toolkit:基于LCU API的英雄联盟客户端智能优化解决方案