一、核心概念

1. 什么是 LangChain Model IO?

Model IO 是 LangChain 的入口核心模块,负责三件事:

  1. 构建提示词(提示词模板)
  2. 调用大模型(LLM/Chat Model)
  3. 解析输出结果

2. 什么是提示词模板?

        将固定的提示词文案 + 动态变量(如用户问题、知识库内容)抽离封装,动态生成标准化提示词的工具。✅ 替代 Java 中繁琐的字符串拼接✅ 统一团队提示词规范✅ 支持动态参数、角色设定、结构化输出

3. 核心价值(Java 开发者必看)

  • 告别 StringBuilder 硬拼提示词
  • 支持系统提示、用户提问、少样本示例等标准化结构
  • 无缝对接 RAG/Agent 高级功能
  • 强制格式化输出(JSON / 指定格式),避免后端解析报错

二、前置准备:Java 依赖

        Maven 依赖(LangChain4j 核心 + 大模型适配,以 Ollama / 通义千问为例)

<!-- LangChain4j 核心 -->
<dependency>
    <groupId>dev.langchain4j</groupId>
    <artifactId>langchain4j</artifactId>
    <version>0.32.0</version>
</dependency>
<!-- 本地大模型 Ollama 适配 -->
<dependency>
    <groupId>dev.langchain4j</groupId>
    <artifactId>langchain4j-ollama</artifactId>
    <version>0.32.0</version>
</dependency>

三、核心提示词模板(由浅入深,企业级常用)

        LangChain4j 提供 4 种核心模板,覆盖 99% 业务场景:


模板 1:基础字符串模板(StringPromptTemplate)

适用场景

        简单的文本补全模型(极少用),仅需动态替换单个 / 多个变量。

代码示例

import dev.langchain4j.model.input.PromptTemplate;

public class BasicPromptDemo {
    public static void main(String[] args) {
        // 1. 定义模板:{question} 是动态占位符
        PromptTemplate promptTemplate = PromptTemplate.from(
            "你是一个专业的Java助手,请回答问题:{question}"
        );

        // 2. 传入动态参数,生成最终提示词
        String prompt = promptTemplate.apply("什么是Java虚拟机?");

        System.out.println(prompt);
        // 输出:你是一个专业的Java助手,请回答问题:什么是Java虚拟机?
    }
}

模板 2:对话提示模板(ChatPromptTemplate ✅ 最常用)

核心说明

        企业开发首选,适配所有聊天大模型(GPT、通义千问、文心一言、Ollama)。支持三大标准角色:

  • 🎯 System:系统提示(设定 AI 身份、规则、约束)
  • 👤 User:用户输入(问题 / 请求)
  • 🤖 Assistant:助手历史回复(多轮对话用)

代码示例(单轮对话)

import dev.langchain4j.model.chat.ChatLanguageModel;
import dev.langchain4j.model.ollama.OllamaChatModel;
import dev.langchain4j.model.input.PromptTemplate;
import dev.langchain4j.data.message.*;

import java.util.List;

public class ChatPromptDemo {
    public static void main(String[] args) {
        // 1. 连接本地 Ollama 大模型
        ChatLanguageModel model = OllamaChatModel.builder()
                .baseUrl("http://localhost:11434")
                .modelName("qwen:7b") // 通义千问本地模型
                .build();

        // 2. 定义对话模板(系统提示 + 用户问题)
        // 系统提示:固定身份规则
        String systemPrompt = "你是一名Java高级开发工程师,只回答Java技术问题,回答简洁专业";
        // 用户模板:动态参数
        PromptTemplate userTemplate = PromptTemplate.from("用户问题:{question}");

        // 3. 构建对话消息列表
        List<ChatMessage> messages = List.of(
                SystemMessage.from(systemPrompt), // 系统角色
                UserMessage.from(userTemplate.apply("Java泛型的作用是什么?")) // 用户角色
        );

        // 4. 调用模型
        String response = model.generate(messages).content().text();
        System.out.println(response);
    }
}

模板 3:少样本提示模板(FewShotPromptTemplate ✅ 提升准确率)

适用场景

        复杂任务(分类、信息提取、格式转换),给模型提供示例,大幅降低幻觉。

核心逻辑

        固定示例 + 用户问题 → 让模型模仿示例输出

代码示例

import dev.langchain4j.model.input.FewShotPromptTemplate;
import dev.langchain4j.model.input.PromptTemplate;
import dev.langchain4j.data.Prompt;

import java.util.List;
import java.util.Map;

public class FewShotPromptDemo {
    public static void main(String[] args) {
        // 1. 定义示例(文本 -> 分类)
        List<Map<String, String>> examples = List.of(
                Map.of("text", "SpringBoot", "category", "Java框架"),
                Map.of("text", "MySQL", "category", "数据库"),
                Map.of("text", "Redis", "category", "缓存中间件")
        );

        // 2. 示例模板
        PromptTemplate exampleTemplate = PromptTemplate.from(
            "文本:{text},分类:{category}"
        );

        // 3. 最终用户问题模板
        PromptTemplate userTemplate = PromptTemplate.from(
            "请分类以下文本:{text}"
        );

        // 4. 构建少样本模板
        FewShotPromptTemplate fewShotTemplate = FewShotPromptTemplate.builder()
                .examples(examples)
                .examplePrompt(exampleTemplate)
                .userPrompt(userTemplate)
                .build();

        // 5. 生成最终提示词
        Prompt prompt = fewShotTemplate.apply(Map.of("text", "MyBatis"));
        System.out.println(prompt.text());
    }
}

模板 4:结构化输出模板(JsonPromptTemplate ✅ 企业必备)

核心痛点

        Java 后端需要 AI 返回固定 JSON 格式,但大模型容易乱输出。该模板强制模型返回标准 JSON,无需手动解析。

代码示例(Java 实体类绑定)

import dev.langchain4j.model.input.StructuredPromptTemplate;
import dev.langchain4j.service.UserMessage;
import dev.langchain4j.model.ollama.OllamaChatModel;

// 1. 定义Java实体类(输出格式)
class UserInfo {
    public String name;
    public int age;
    public String job;
}

// 2. 结构化提示词模板(注解方式,LangChain4j 极简写法)
interface AIService {
    @UserMessage("从文本中提取用户信息,返回JSON格式:{{it}}")
    UserInfo extractUserInfo(String text);
}

public class StructuredPromptDemo {
    public static void main(String[] args) {
        // 连接模型
        OllamaChatModel model = OllamaChatModel.builder()
                .baseUrl("http://localhost:11434")
                .modelName("qwen:7b")
                .build();

        // 3. 创建服务,调用模板
        AIService aiService = dev.langchain4j.service.AiServices.create(AIService.class, model);
        UserInfo info = aiService.extractUserInfo("张三,28岁,Java高级开发工程师");

        // 直接获取Java对象,无需解析JSON
        System.out.println(info.name); // 张三
        System.out.println(info.job);  // Java高级开发工程师
    }
}

四、Model IO 完整工作流(必背)

        所有模板的执行流程完全一致,是 RAG/Agent 的基础:

定义模板 → 传入动态参数 → 生成提示词 → 调用大模型 → 解析输出

五、高级用法(企业级)

1. RAG 融合提示词模板

        将知识库检索结果作为动态变量传入模板,这是 RAG 核心:

PromptTemplate ragTemplate = PromptTemplate.from(
    "根据以下知识库内容回答用户问题:\n" +
    "知识库:{context}\n" +
    "用户问题:{question}"
);

2. 多轮对话模板

        结合记忆组件,保留历史对话,实现连贯聊天:

List<ChatMessage> messages = List.of(
    SystemMessage.from("你是Java助手"),
    UserMessage.from("什么是JVM?"),
    AssistantMessage.from("JVM是Java虚拟机..."),
    UserMessage.from("它的作用是什么?") // 多轮追问
);

3. 模板嵌套

复杂提示词拆分多个子模板,复用性更强:

java

运行

// 子模板1
PromptTemplate ruleTemplate = PromptTemplate.from("规则:{rule}");
// 子模板2
PromptTemplate questionTemplate = PromptTemplate.from("问题:{question}");
// 总模板
PromptTemplate mainTemplate = PromptTemplate.from(
    ruleTemplate + "\n" + questionTemplate
);

六、Java 开发者最佳实践

  1. 优先用 ChatPromptTemplate:适配所有主流大模型,支持角色设定
  2. 必须用结构化输出:对接 Java 后端,强制返回 JSON / 实体类
  3. 少样本模板优化效果:复杂业务(提取、分类)必加示例
  4. 模板统一管理:将提示词放在配置文件(Nacos/Apollo),不硬编码
  5. 结合 RAG:将检索的上下文传入模板,解决大模型幻觉

七、总结

核心模板速记

  1. 基础模板:简单动态替换
  2. 对话模板:✅ 企业首选,支持系统 / 用户角色
  3. 少样本模板:✅ 提升准确率,复杂任务必备
  4. 结构化模板:✅ Java 后端必备,自动转实体类

核心作用

提示词模板 = 大模型的标准化接口

Logo

汇聚全球AI编程工具,助力开发者即刻编程。

更多推荐