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

相关推荐
码路飞8 小时前
写了个 AI 聊天页面,被 5 种流式格式折腾了一整天 😭
javascript·python
曲幽11 小时前
FastAPI压力测试实战:Locust模拟真实用户并发及优化建议
python·fastapi·web·locust·asyncio·test·uvicorn·workers
敏编程15 小时前
一天一个Python库:jsonschema - JSON 数据验证利器
python
前端付豪15 小时前
LangChain记忆:通过Memory记住上次的对话细节
人工智能·python·langchain
databook16 小时前
ManimCE v0.20.1 发布:LaTeX 渲染修复与动画稳定性提升
python·动效
花酒锄作田1 天前
使用 pkgutil 实现动态插件系统
python
前端付豪1 天前
LangChain链 写一篇完美推文?用SequencialChain链接不同的组件
人工智能·python·langchain
曲幽1 天前
FastAPI实战:打造本地文生图接口,ollama+diffusers让AI绘画更听话
python·fastapi·web·cors·diffusers·lcm·ollama·dreamshaper8·txt2img
老赵全栈实战1 天前
Pydantic配置管理最佳实践(一)
python
阿尔的代码屋2 天前
[大模型实战 07] 基于 LlamaIndex ReAct 框架手搓全自动博客监控 Agent
人工智能·python