2024-2025 年,AI 应用开发框架已从实验阶段进入企业生产阶段。Spring AI 和 LangChain4j 是 Java 生态中最成熟的 AI 开发框架。本文将带你从 RAG 到工具调用,实现完整的多 Agent 协作系统。
Spring AI vs LangChain4j
| 维度 | Spring AI | LangChain4j |
|---|---|---|
| Spring 集成 | 原生 Auto Configuration | 手动配置 |
| 模型支持 | OpenAI / Azure / Ollama | 20+ LLM 提供商 |
| RAG 能力 | 内置 VectorStore 抽象 | 更丰富 Retriever 实现 |
| 社区 | Spring 官方维护 | 独立社区,更新更快 |
选型建议:纯 Spring 技术栈优先 Spring AI;需多模型对接选 LangChain4j;两者可混合使用。
RAG(检索增强生成)完整实现
// 1. 文档加载与分割
@Bean
public VectorStore vectorStore(EmbeddingModel embeddingModel) {
return new PgVectorStore(jdbcTemplate, embeddingModel);
}
// 2. 文档摄入(ETL Pipeline)
DocumentReader reader = new JsonReader(new FileSystemResource("docs/"));
List<Document> documents = reader.get();
TextSplitter splitter = new TokenTextSplitter(true, 1000, 800, 10, true);
List<Document> chunks = splitter.apply(documents);
vectorStore.add(chunks);
// 3. 检索增强生成
@PostMapping("/api/chat")
public String chat(@RequestBody ChatRequest request) {
List<Document> relevantDocs = vectorStore.similaritySearch(
SearchRequest.query(request.getQuery())
.withTopK(5)
.withSimilarityThreshold(0.7)
);
String context = relevantDocs.stream()
.map(Document::getContent)
.collect(Collectors.joining("\n\n"));
return chatClient.prompt()
.system("根据以下参考资料回答问题。\n参考资料:\n" + context)
.user(request.getQuery())
.call().content();
}Function Calling:AI 调用真实 API
@Component
public class OrderTools {
@Autowired private OrderService orderService;
@Tool(name = "queryUserOrders", description = "查询用户最近的订单列表")
public List<Order> queryUserOrders(
@ToolParam(description = "用户ID") Long userId,
@ToolParam(description = "返回数量,默认5") @ToolDefault("5") int limit
) {
return orderService.getUserRecentOrders(userId, limit);
}
}
@Bean
public ChatClient chatClient(ChatModel chatModel, OrderTools orderTools) {
return ChatClient.builder(chatModel)
.defaultTools(orderTools)
.build();
}
// 用户:"帮我查一下最近的订单"
// AI 自动调用 queryUserOrders 并生成自然语言回答MCP(Model Context Protocol)集成
@Configuration
public class McpConfig {
@Bean
public McpServer mcpServer() {
return McpServer.builder()
.name("order-system")
.version("1.0.0")
.tool("searchOrders", "搜索订单", params -> {
return orderService.search(params.getString("keyword"));
})
.resource("order://recent", "最近订单", ctx ->
orderService.getRecentOrders(ctx.getUserId())
)
.build();
}
}
// MCP 三种原语:Tool(函数)、Resource(数据)、Prompt Template(提示模板)多 Agent 协作
// 智能客服场景:4 个 Agent 协作
// Agent 1: 意图识别 → 分类用户问题
// Agent 2: FAQ Agent → 匹配常见问题
// Agent 3: 订单 Agent → 查询订单(调用 Tools)
// Agent 4: 升级 Agent → 复杂问题转人工
interface CustomerServiceAgent {
@SystemMessage("""
你是智能客服助手。遵循以下流程:
1. 首先尝试从 FAQ 知识库匹配答案
2. 涉及订单问题,查询订单系统
3. 无法解决时,生成工单并告知用户
""")
String chat(@UserMessage String message);
}生产环境关键实践
- Token 控制:RAG 检索 TopK 控制在 3-5 条
- 缓存策略:相同问题缓存 LLM 响应,降低 20-40% 成本
- 熔断降级:LLM 调用必须有超时和重试机制
- Prompt 版本管理:纳入 Git 版本控制
总结
AI Agent 开发的本质是"给 AI 配备工具和知识"——RAG 提供知识,Function Calling 提供工具,MCP 标准化接口。多 Agent 协作让复杂任务被拆解为子任务,每个 Agent 负责最擅长的部分。
评论 (0)