基于 ./test/custom_react_agent
模块开发一个RESTful API,提供智能问答服务。用户通过POST请求提交问题,系统通过LangGraph Agent处理并返回格式化的JSON结果。
端点: POST /api/chat
请求格式:
{
"question": "请问中国共有多少个充电桩",
"user_id": "Paul", // 可选,默认为"guest"
"thread_id": "xxxx" // 可选,不传则自动生成新会话
}
响应格式:
{
"code": 200,
"message": "操作成功",
"success": true,
"data": {
// 核心响应内容
"response": "根据查询结果,当前数据库中共有3个服务区的收入数据...",
"sql": "SELECT COUNT(*) FROM charging_stations;", // 可选,仅当执行SQL时存在
"records": { // 可选,仅当有查询结果时存在
"columns": ["服务区名称", "总收入"],
"rows": [
{"服务区名称": "庐山服务区", "总收入": "7024226.1500"},
{"服务区名称": "三清山服务区", "总收入": "6929288.3300"}
],
"total_row_count": 3,
"is_limited": false
},
// Agent元数据
"react_agent_meta": {
"thread_id": "Paul:20250101120030001",
"conversation_rounds": 5,
"tools_used": ["generate_sql", "run_sql"],
"execution_path": ["agent", "prepare_tool_input", "tools", "format_final_response"],
"total_messages": 11,
"sql_execution_count": 1,
"context_injected": true,
"agent_version": "custom_react_v1"
},
"timestamp": "2025-01-01T12:00:30.123456"
}
}
错误响应格式:
{
"code": 500,
"message": "SQL执行失败",
"success": false,
"error": "详细错误信息",
"data": {
"react_agent_meta": {
"thread_id": "Paul:20250101120030001",
"execution_path": ["agent", "prepare_tool_input", "tools", "error"],
"agent_version": "custom_react_v1"
},
"timestamp": "2025-01-01T12:00:30.123456"
}
}
Code | 描述 | 场景 |
---|---|---|
200 | 成功 | 正常处理完成 |
400 | 请求错误 | 参数缺失或格式错误 |
500 | 服务器错误 | Agent执行异常 |
用户请求 → API层 → Agent处理 → format_final_response节点 → API层包装 → JSON响应
↓ ↓ ↓ ↓
参数验证 核心逻辑 生成data内容 包装HTTP格式
graph TD
A[用户POST请求] --> B[API层参数验证]
B --> C[调用Agent.chat()]
C --> D[Agent执行StateGraph]
D --> E[format_final_response节点]
E --> F[生成结构化data]
F --> G[返回到API层]
G --> H[包装HTTP响应格式]
H --> I[返回JSON响应]
{user_id}:{timestamp_with_milliseconds}
Paul:20250101120030001
guest
# 新会话:不传thread_id
{"question": "你好", "user_id": "Paul"}
# 继续会话:传递thread_id
{"question": "详细解释", "user_id": "Paul", "thread_id": "Paul:20250101120030001"}
# 重新开始:不传thread_id
{"question": "新问题", "user_id": "Paul"}
class ChatSession {
constructor(userId = 'guest') {
this.userId = userId;
this.threadId = null;
}
// 发送消息
async sendMessage(question) {
const payload = {
question,
user_id: this.userId
};
// 继续会话
if (this.threadId) {
payload.thread_id = this.threadId;
}
const response = await fetch('/api/chat', {
method: 'POST',
headers: {'Content-Type': 'application/json'},
body: JSON.stringify(payload)
});
const result = await response.json();
// 保存thread_id用于后续对话
if (result.success) {
this.threadId = result.data.react_agent_meta.thread_id;
}
return result;
}
// 开始新会话
startNewSession() {
this.threadId = null;
}
}
"""
Custom React Agent API 服务
提供RESTful接口用于智能问答
"""
from flask import Flask, request, jsonify
from flask_cors import CORS
from typing import Optional, Dict, Any
import asyncio
from datetime import datetime
def validate_request_data(data: Dict[str, Any]) -> Dict[str, Any]:
"""验证请求数据"""
errors = []
question = data.get('question', '')
if not question or not question.strip():
errors.append('问题不能为空')
elif len(question) > 2000:
errors.append('问题长度不能超过2000字符')
if errors:
raise ValueError('; '.join(errors))
return {
'question': question.strip(),
'user_id': data.get('user_id', 'guest'),
'thread_id': data.get('thread_id')
}
app = Flask(__name__)
CORS(app)
@app.route("/api/chat", methods=["POST"])
def chat_endpoint():
"""智能问答接口"""
data = request.get_json()
validated_data = validate_request_data(data)
# 实现逻辑...
return jsonify({"code": 200, "success": True, "data": result})
_format_final_response_node
方法chat()
函数的简化格式第一阶段:核心功能
第二阶段:增强功能
第三阶段:测试优化
字段 | 类型 | 必需 | 说明 |
---|---|---|---|
response | string | 是 | LLM的回答或SQL结果总结 |
sql | string | 否 | 执行的SQL语句,仅在数据库查询时存在 |
records | object | 否 | 查询结果数据,仅在有结果时存在 |
{
"columns": ["列名1", "列名2"], // 列名数组
"rows": [ // 数据行数组
{"列名1": "值1", "列名2": "值2"}
],
"total_row_count": 100, // 总行数
"is_limited": false // 是否被截断
}
{
"thread_id": "用户会话ID",
"conversation_rounds": 5, // 当前对话轮次
"tools_used": ["工具名称"], // 本次使用的工具
"execution_path": ["节点路径"], // 执行路径
"total_messages": 11, // 消息总数
"sql_execution_count": 1, // SQL执行次数
"context_injected": true, // 是否注入上下文
"agent_version": "custom_react_v1" // Agent版本
}
chat()
函数的简化返回格式/api/v1/chat
文档版本: v1.0
创建时间: 2025-01-01
作者: AI Assistant
适用范围: test/custom_react_agent 模块