实战: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 缓存会话状态
下一步
- Docker + Nginx 部署 — 生产部署
- 阿里云部署 — 云服务器部署
- Streaming 流式输出 — 流式响应