Skip to content

实战:Spring Boot 接入思路

将 LangChain Agent 集成到 Spring Boot 后端服务中。

架构设计

前端 → Spring Boot API → Python Agent 服务
                            └── LangChain Agent

方案一:HTTP API 调用

在 Spring Boot 中通过 HTTP 调用 Python Agent 服务:

python
# Python: agent_service.py
from flask import Flask, request, jsonify
from langchain.agents import create_agent
from langchain.tools import tool

app = Flask(__name__)

@tool
def search_db(query: str) -> str:
    """查询数据库"""
    return f"查询结果: {query}"

agent = create_agent(
    model="openai:gpt-4o",
    tools=[search_db],
)

@app.route("/api/chat", methods=["POST"])
def chat():
    data = request.json
    result = agent.invoke({
        "messages": [{"role": "user", "content": data["message"]}]
    })
    return jsonify({
        "reply": result["messages"][-1].content
    })

if __name__ == "__main__":
    app.run(port=5000)
java
// Spring Boot: AgentController.java
@RestController
@RequestMapping("/api/agent")
public class AgentController {

    @PostMapping("/chat")
    public ResponseEntity<Map<String, String>> chat(@RequestBody ChatRequest request) {
        RestTemplate restTemplate = new RestTemplate();
        
        Map<String, String> body = new HashMap<>();
        body.put("message", request.getMessage());
        
        ResponseEntity<Map> response = restTemplate.postForEntity(
            "http://localhost:5000/api/chat",
            body,
            Map.class
        );
        
        return ResponseEntity.ok(response.getBody());
    }
}

方案二:消息队列

java
// Spring Boot: 通过 RabbitMQ/Kafka 异步调用
@RabbitListener(queues = "agent.requests")
public void handleAgentRequest(AgentRequest request) {
    // 发送到 Python Agent 服务
    // 接收结果后回写数据库或推送前端
}

方案三:SSE 流式响应

python
# Python: 流式输出
from flask import Response, stream_with_context

@app.route("/api/chat/stream", methods=["POST"])
def chat_stream():
    def generate():
        for event in agent.stream({
            "messages": [{"role": "user", "content": data["message"]}]
        }):
            yield f"data: {json.dumps(event)}\n\n"
    return Response(stream_with_context(generate()), mimetype="text/event-stream")

部署建议

  • Python Agent 服务作为独立微服务部署
  • 使用 Docker 容器化
  • 通过 Nginx 反向代理统一入口
  • 使用 Redis 缓存会话状态

下一步

本站为非官方中文学习站点,不代表 LangChain 官方。部分内容参考官方文档并重新整理为中文学习笔记。