一、Prompt
1、定义
在 LangChain4j 或大语言模型(LLM)的使用中,Prompt 指的是给模型的输入文本,用来告诉模型"你要做什么、怎么做"。它是 LLM 工作的核心,因为模型的输出完全依赖于你给的 prompt。
使用建议:
-
清晰明确:越具体,模型输出越准确
-
指令 + 上下文结合:系统指令 + 用户消息 + 记忆
-
可复用模板 :用
PromptTemplate可以批量生成 prompt,提高开发效率 -
控制长度:避免 prompt 太长导致 token 超限
2、核心作用
-
定义任务:告诉模型你想要做什么(生成文本、回答问题、翻译、摘要、代码等)
-
提供上下文:包含对话历史、系统指令或外部信息
-
控制风格/格式:指定输出的语气、格式或结构(如 JSON、Markdown、代码块等)
3、常用场景
| 场景 | Prompt 的作用 | 示例 |
|---|---|---|
| 问答 | 给模型问题和上下文,让它回答 | "请根据下面的文档回答问题:..." |
| 翻译 | 指定源语言、目标语言 | "将下面英文翻译成中文:..." |
| 摘要 | 告诉模型对文本做压缩总结 | "请将以下文章总结成 3 点要点:..." |
| 代码生成/辅助编程 | 指定功能或需求,让模型生成代码 | "请用 Java 写一个 HTTP 请求工具类:..." |
| 多轮对话 | 提供对话历史,让模型延续上下文 | "用户: ... AI: ... 用户: ... 继续回答" |
| 格式化输出 | 指定输出格式,如 JSON 或表格 | "请将以下数据转成 JSON:..." |
| 指令执行 | 让模型执行某种操作或决策 | "你是一个数学老师,请解释这个公式:..." |
4、类型
-
系统级 Prompt(System Prompt)
-
定义模型角色和行为
-
示例:
"你是一个经验丰富的 Java 开发专家"
-
-
用户级 Prompt(User Prompt)
-
用户提问或请求的内容
-
示例:
"帮我写一个快速排序的实现"
-
-
上下文 Prompt(Context / Memory)
-
来自
Memory的对话历史或外部数据 -
示例:模型在生成回答时参考最近 5 条消息或摘要
-
-
模板 Prompt(PromptTemplate)
-
可以用变量动态生成 Prompt
-
示例:
"请将文本 {text} 翻译成中文",然后替换{text}
-
5、实现方法
简单地说,就是把上面的mode.generate改成model.chat,
-
chat() = 对话专用,更容易处理上下文和多轮
-
generate() = 生成专用,灵活且可处理非对话任务
| 特性 | chat() | generate() |
|---|---|---|
| 主要用途 | 对话 / 聊天 | 通用文本生成 |
| 输入 | 单条 prompt 或消息列表(Message) | prompt 或 PromptSequence |
| 输出 | 单条文本 / ChatResult | Generation 对象,可包含多条候选 |
| 支持多轮对话 | ✅ (结合 Memory) | ❌ (一般用于单轮生成) |
| 适用场景 | 聊天机器人、对话应用 | 批量文本生成、问答、指令执行、填空任务 |
5.1 单轮Prompt
import dev.langchain4j.model.chat.ChatMessage;
import dev.langchain4j.model.chat.openai.OpenAiChatModel;
public class PromptExample {
public static void main(String[] args) {
OpenAiChatModel model = OpenAiChatModel.builder()
.apiKey("你的OPENAI_API_KEY")
.model("gpt-3.5-turbo")
.build();
// 用户 Prompt
String prompt = "请帮我写一段 Java 方法,用于计算数组的平均值";
// 调用模型
String response = model.chat(prompt).getText();
System.out.println("模型输出:\n" + response);
}
}
5.2 多轮对话 + 窗口记忆
import dev.langchain4j.memory.MessageWindowMemory;
import dev.langchain4j.model.chat.openai.OpenAiChatModel;
public class MultiTurnPromptExample {
public static void main(String[] args) {
OpenAiChatModel model = OpenAiChatModel.builder()
.apiKey("你的OPENAI_API_KEY")
.model("gpt-3.5-turbo")
.build();
// 创建短期记忆,保存最近5条消息
MessageWindowMemory memory = new MessageWindowMemory(5);
// 用户第一条消息
String userMessage1 = "你好,请帮我写一个 Java 方法计算数组平均值";
memory.addUserMessage(userMessage1);
// 调用模型
String response1 = model.chat(memory.getMessages(), "生成方法代码").getText();
memory.addAiMessage(response1);
System.out.println("AI 第一次输出:\n" + response1);
// 用户第二条消息
String userMessage2 = "请加上异常处理,如果数组为空返回0";
memory.addUserMessage(userMessage2);
// 调用模型,传入 memory.getMessages() 保持上下文
String response2 = model.chat(memory.getMessages(), "修改方法代码").getText();
memory.addAiMessage(response2);
System.out.println("AI 第二次输出:\n" + response2);
}
}
5.3 PromptTemplate动态模板生成
import dev.langchain4j.prompt.PromptTemplate;
PromptTemplate template = PromptTemplate.builder()
.template("请将下面的文本翻译成中文:\n{text}")
.build();
String text = "Hello, how are you?";
String prompt = template.format(Map.of("text", text));
// 然后像之前一样调用模型
String response = model.chat(prompt).getText();
System.out.println(response);
二、demo
前面的代码,使用prompt看下效果:


再把generate改成chat