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

相关推荐
云泽8084 小时前
C++ List 容器详解:迭代器失效、排序与高效操作
开发语言·c++·list
云帆小二4 小时前
从开发语言出发如何选择学习考试系统
开发语言·学习
许泽宇的技术分享5 小时前
当AI学会“说人话“:Azure语音合成技术的魔法世界
后端·python·flask
光泽雨5 小时前
python学习基础
开发语言·数据库·python
裤裤兔5 小时前
python爬取pdf文件并保存至本地
chrome·爬虫·python·pdf·网络爬虫
Solyn_HAN5 小时前
非编码 RNA(ceRNA/lncRNA/circRNA)分析完整流程:从数据下载到功能验证(含代码模板)
python·bash·生物信息学·r
CesareCheung5 小时前
JMeter 进行 WebSocket 接口压测
python·websocket·jmeter
beijingliushao5 小时前
95-Python爬虫-正则表达式
爬虫·python·正则表达式
百***06015 小时前
python爬虫——爬取全年天气数据并做可视化分析
开发语言·爬虫·python
jghhh016 小时前
基于幅度的和差测角程序
开发语言·matlab