一、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区别); ListChatMessage 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(你是); ListChatMessage 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 ListString keywords; public UserIntent() { } public UserIntent(String intent, ListString keywords) { this.intent intent; this.keywords keywords; } public String getIntent() { return intent; } public void setIntent(String intent) { this.intent intent; } public ListString getKeywords() { return keywords; } public void setKeywords(ListString keywords) { this.keywords keywords; } }2. 定义SystemMessageSystemMessage( 你只输出标准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 规则角色任务格式约束四段式最稳禁止 AI 自由发挥用 “只输出”“禁止”“必须”变量用{{key}}和模板引擎一致SystemMessage放第一条优先级最高ListChatMessage在SystemMessage、UserMessage中出现的所有{{变量}}必须用V (变量名)绑定到方法参数八、总结总结下来提示词一共就两种用法一种是对话时放到ListChatMessage中的第一条进行定义另一种就是使用SystemMessage注解进行定义