5分钟用 Java 构建你的第一个 AI 应用
项目地址:j-langchain
适合人群:Java 开发者,无需 AI 经验
所需时间:5 分钟
为什么是 Java?
目前 AI 应用开发生态几乎被 Python 垄断,LangChain、LlamaIndex 都是 Python 优先。但企业级后端系统大量使用 Java,重写历史服务不现实。
j-langchain 是一个纯 Java 实现的 AI 应用开发框架,对标 Python 版 LangChain,让 Java 工程师也能快速构建:
- 基于大模型的问答、摘要、翻译应用
- RAG 知识库问答系统
- 自动化 Agent 工具调用
- 实时流式输出对话
快速开始
1. 添加依赖
<dependency>
<groupId>org.salt.jlangchain</groupId>
<artifactId>j-langchain</artifactId>
<version>1.0.12</version>
</dependency>
2. 配置大模型 API Key
# application.yml
spring:
ai:
aliyun:
api-key: ${ALIYUN_KEY}
核心概念:三步构建 AI 链
j-langchain 最核心的思想是链式编排:将 Prompt、LLM、Parser 串联成一个可执行的流水线。
输入 → [Prompt 模板] → [大模型] → [输出解析器] → 结果
Step 1:Hello AI — 最简单的三步链
@Test
public void hello() {
// 1. 定义 Prompt 模板,${topic} 是变量占位符
PromptTemplate prompt = PromptTemplate.fromTemplate(
"Tell me a joke about ${topic}"
);
// 2. 选择大模型(阿里云通义千问)
ChatAliyun llm = ChatAliyun.builder()
.model("qwen-plus")
.build();
// 3. 构建调用链:Prompt → LLM → Parser
FlowInstance chain = chainActor.builder()
.next(prompt)
.next(llm)
.next(new StrOutputParser())
.build();
// 4. 执行链,传入变量
ChatGeneration result = chainActor.invoke(chain, Map.of("topic", "programmers"));
System.out.println(result.getText());
}
三行核心代码:PromptTemplate → ChatAliyun → StrOutputParser,这就是 j-langchain 的最小工作单元。
Step 2:流式输出 — 打字机效果
用户等待 LLM 全部输出完才显示结果,体验很差。流式输出可以边生成边展示:
@Test
public void streamOutput() throws TimeoutException {
ChatAliyun llm = ChatAliyun.builder().model("qwen-plus").build();
// stream() 方法返回流式 Chunk 迭代器
AIMessageChunk chunk = llm.stream("用一句话解释什么是人工智能。");
StringBuilder sb = new StringBuilder();
while (chunk.getIterator().hasNext()) {
String token = chunk.getIterator().next().getContent();
sb.append(token);
System.out.print(token); // 逐 token 打印,实现打字机效果
}
}
stream() 返回 AIMessageChunk,内部是一个阻塞迭代器,每次 next() 获取一个 token,直到 LLM 生成完毕。
Step 3:JSON 结构化输出
AI 应用经常需要 LLM 返回结构化数据,而不是纯文本。使用 JsonOutputParser 即可:
@Test
public void jsonOutput() {
ChatAliyun llm = ChatAliyun.builder().model("qwen-plus").build();
FlowInstance chain = chainActor.builder()
.next(llm)
.next(new JsonOutputParser()) // 解析 JSON 格式输出
.build();
ChatGeneration result = chainActor.invoke(
chain,
"请以 JSON 格式列出3个编程语言,包含 name 和 year 字段。"
);
System.out.println(result.getText());
}
输出示例:
[
{"name": "Java", "year": 1995},
{"name": "Python", "year": 1991},
{"name": "Go", "year": 2009}
]
Step 4:事件流监控 — 调试神器
开发调试时,你可能想知道每个节点的输入输出是什么。streamEvent() 能返回链路中每个节点的完整事件:
@Test
public void eventMonitor() throws TimeoutException {
PromptTemplate prompt = PromptTemplate.fromTemplate("Tell me a joke about ${topic}");
ChatAliyun llm = ChatAliyun.builder().model("qwen-plus").build();
FlowInstance chain = chainActor.builder()
.next(prompt).next(llm).next(new StrOutputParser()).build();
EventMessageChunk events = chainActor.streamEvent(chain, Map.of("topic", "Java"));
while (events.getIterator().hasNext()) {
EventMessageChunk event = events.getIterator().next();
System.out.println(event.toJson()); // 打印每个节点的事件
}
}
输出的事件包含节点名称、类型(on_chain_start/on_chain_end)、输入输出数据,非常适合排查问题。
Step 5:使用本地模型 — 零成本运行
不想付费调 API?用 Ollama 在本地运行开源模型,完全免费:
# 安装 Ollama 并拉取模型
ollama pull qwen2.5:0.5b
@Test
public void localModel() {
PromptTemplate prompt = PromptTemplate.fromTemplate("用中文回答:${question}");
// 替换一行代码即可切换为本地模型,无需 API Key
ChatOllama llm = ChatOllama.builder().model("qwen2.5:0.5b").build();
FlowInstance chain = chainActor.builder()
.next(prompt).next(llm).next(new StrOutputParser()).build();
ChatGeneration result = chainActor.invoke(
chain, Map.of("question", "Java 和 Python 有什么区别?")
);
System.out.println(result.getText());
}
只需将 ChatAliyun 替换为 ChatOllama,其余代码完全不变——这正是框架抽象层的价值。
核心 API 总结
| API | 说明 |
|---|---|
PromptTemplate.fromTemplate(str) |
创建带变量的 Prompt 模板 |
ChatAliyun.builder().model(...).build() |
创建阿里云 LLM 实例 |
ChatOllama.builder().model(...).build() |
创建本地 Ollama LLM 实例 |
chainActor.builder().next(...).build() |
构建链式流水线 |
chainActor.invoke(chain, input) |
同步执行链 |
llm.stream(input) |
流式执行,返回 token 迭代器 |
chainActor.streamEvent(chain, input) |
获取链路事件流(调试用) |
下一步
- [文章2] Java AI 应用的 5 种链式编排模式 — Switch / Compose / Parallel / Route / Dynamic
- [文章3] 用 Java 实现 RAG:从 PDF 加载到智能问答全流程
- [文章4] Java 实现 ReAct Agent:工具调用与推理循环
完整代码见:
src/test/java/org/salt/jlangchain/demo/article/Article01HelloAI.java
AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。
更多推荐



所有评论(0)