LangChain4j框架(三)核心接口使用(3)Prompt 构建(指令对话)

一、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

相关推荐
火车叼位9 小时前
也许你不需要创建.venv, 此规范使python脚本自备依赖
python
BD_Marathon9 小时前
设计模式——依赖倒转原则
java·开发语言·设计模式
火车叼位9 小时前
脚本伪装:让 Python 与 Node.js 像原生 Shell 命令一样运行
运维·javascript·python
孤狼warrior9 小时前
YOLO目标检测 一千字解析yolo最初的摸样 模型下载,数据集构建及模型训练代码
人工智能·python·深度学习·算法·yolo·目标检测·目标跟踪
devmoon9 小时前
在 Polkadot Runtime 中添加多个 Pallet 实例实战指南
java·开发语言·数据库·web3·区块链·波卡
Katecat996639 小时前
YOLO11分割算法实现甲状腺超声病灶自动检测与定位_DWR方法应用
python
Evand J9 小时前
TDOA(到达时间差)的GDOP和CRLB计算的MATLAB例程,论文复现,附参考文献。GDOP:几何精度因子&CRLB:克拉美罗下界
开发语言·matlab·tdoa·crlb·gdop
野犬寒鸦9 小时前
从零起步学习并发编程 || 第七章:ThreadLocal深层解析及常见问题解决方案
java·服务器·开发语言·jvm·后端·学习
云姜.9 小时前
java抽象类和接口
java·开发语言
xyq20249 小时前
Pandas 安装指南
开发语言