Spring AI + LangChain4j 企业级 AI 智能体开发实战:RAG、工具调用与多 Agent 协作

Spring AI + LangChain4j 企业级 AI 智能体开发实战:RAG、工具调用与多 Agent 协作

Ethan
2025-10-05 发布 / 正在检测是否收录...

2024-2025 年,AI 应用开发框架已从实验阶段进入企业生产阶段。Spring AI 和 LangChain4j 是 Java 生态中最成熟的 AI 开发框架。本文将带你从 RAG 到工具调用,实现完整的多 Agent 协作系统。

Spring AI vs LangChain4j

维度Spring AILangChain4j
Spring 集成原生 Auto Configuration手动配置
模型支持OpenAI / Azure / Ollama20+ 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);
}

生产环境关键实践

  1. Token 控制:RAG 检索 TopK 控制在 3-5 条
  2. 缓存策略:相同问题缓存 LLM 响应,降低 20-40% 成本
  3. 熔断降级:LLM 调用必须有超时和重试机制
  4. Prompt 版本管理:纳入 Git 版本控制

总结

AI Agent 开发的本质是"给 AI 配备工具和知识"——RAG 提供知识,Function Calling 提供工具,MCP 标准化接口。多 Agent 协作让复杂任务被拆解为子任务,每个 Agent 负责最擅长的部分。

© 版权声明
THE END
喜欢就支持一下吧
点赞 2 分享 收藏

评论 (0)

取消

Warning: file_put_contents(/var/www/html/usr/cache/pagecache/ec/eca1453026801135a8fdb24c0b15bfd1.cache): failed to open stream: Permission denied in /var/www/html/usr/plugins/PageCache/Plugin.php on line 188