LangChain Model IO 提示词模版(JAVA版)
·
一、核心概念
1. 什么是 LangChain Model IO?
Model IO 是 LangChain 的入口核心模块,负责三件事:
- 构建提示词(提示词模板)
- 调用大模型(LLM/Chat Model)
- 解析输出结果
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 开发者最佳实践
- 优先用 ChatPromptTemplate:适配所有主流大模型,支持角色设定
- 必须用结构化输出:对接 Java 后端,强制返回 JSON / 实体类
- 少样本模板优化效果:复杂业务(提取、分类)必加示例
- 模板统一管理:将提示词放在配置文件(Nacos/Apollo),不硬编码
- 结合 RAG:将检索的上下文传入模板,解决大模型幻觉
七、总结
核心模板速记
- 基础模板:简单动态替换
- 对话模板:✅ 企业首选,支持系统 / 用户角色
- 少样本模板:✅ 提升准确率,复杂任务必备
- 结构化模板:✅ Java 后端必备,自动转实体类
核心作用
提示词模板 = 大模型的标准化接口
更多推荐


所有评论(0)