测试 shudao-chat-py 中新增的报告兼容接口,这些接口完全对齐 Go 版本的实现。
http://127.0.0.1:22001http://127.0.0.1:28002curl -X POST "http://127.0.0.1:22001/apiv1/report/complete-flow" \
-H "Content-Type: application/json" \
-H "token: YOUR_EXTERNAL_TOKEN" \
-d '{
"user_question": "请帮我生成一份关于安全生产的报告",
"window_size": 5,
"n_results": 5,
"ai_conversation_id": null,
"is_network_search_enabled": false,
"enable_online_model": false
}'
预期行为:
http://127.0.0.1:28002/api/v1/report/complete-flow[报告兼容] 代理到 aichat 服务curl -X POST "http://127.0.0.1:22001/apiv1/report/complete-flow" \
-H "Content-Type: application/json" \
-H "token: YOUR_LOCAL_TOKEN" \
-d '{
"user_question": "请帮我生成一份关于安全生产的报告",
"window_size": 5,
"n_results": 5,
"ai_conversation_id": null,
"is_network_search_enabled": false,
"enable_online_model": false
}'
预期行为:
/apiv1/stream/chat-with-db[报告兼容] 降级到本地流式聊天curl -X POST "http://127.0.0.1:22001/apiv1/report/complete-flow" \
-H "Content-Type: application/json" \
-H "token: YOUR_TOKEN" \
-d '{
"user_question": "",
"window_size": 5,
"n_results": 5
}'
预期响应:
data: {"type": "online_error", "message": "Question cannot be empty"}
data: {"type": "completed"}
curl -X POST "http://127.0.0.1:22001/apiv1/report/update-ai-message" \
-H "Content-Type: application/json" \
-H "token: YOUR_EXTERNAL_TOKEN" \
-d '{
"ai_message_id": 123,
"content": "更新后的消息内容"
}'
预期响应:
{
"success": true,
"message": "AI message updated"
}
curl -X POST "http://127.0.0.1:22001/apiv1/report/update-ai-message" \
-H "Content-Type: application/json" \
-H "token: YOUR_LOCAL_TOKEN" \
-d '{
"ai_message_id": 123,
"content": "更新后的消息内容"
}'
预期行为:
curl -X POST "http://127.0.0.1:22001/apiv1/report/update-ai-message" \
-H "Content-Type: application/json" \
-H "token: YOUR_TOKEN" \
-d '{
"ai_message_id": 0,
"content": "测试内容"
}'
预期响应:
{
"success": false,
"message": "ai_message_id cannot be empty"
}
curl -X POST "http://127.0.0.1:22001/apiv1/sse/stop" \
-H "Content-Type: application/json" \
-H "token: YOUR_EXTERNAL_TOKEN" \
-d '{
"ai_conversation_id": 456
}'
预期响应:
{
"success": true,
"message": "Stop request received",
"ai_conversation_id": 456
}
curl -X POST "http://127.0.0.1:22001/apiv1/sse/stop" \
-H "Content-Type: application/json" \
-H "token: YOUR_LOCAL_TOKEN" \
-d '{
"ai_conversation_id": 456
}'
预期行为:
本地生成的 Token 应包含以下字段之一:
accountusername外部系统的 Token 不包含上述字段,会被识别为外部 Token
# Python 测试脚本
import jwt
# 本地 Token 示例
local_token_payload = {
"account": "test_account",
"username": "test_user",
"exp": 1234567890
}
# 外部 Token 示例
external_token_payload = {
"user_id": "external_user",
"exp": 1234567890
}
# 生成 Token(不验证签名)
local_token = jwt.encode(local_token_payload, "secret", algorithm="HS256")
external_token = jwt.encode(external_token_payload, "secret", algorithm="HS256")
print(f"本地 Token: {local_token}")
print(f"外部 Token: {external_token}")
# 停止 aichat 服务后测试
curl -X POST "http://127.0.0.1:22001/apiv1/report/complete-flow" \
-H "Content-Type: application/json" \
-H "token: YOUR_EXTERNAL_TOKEN" \
-d '{
"user_question": "测试问题"
}'
预期行为:
[报告兼容] 代理到 aichat 失败[报告兼容] 降级到本地流式聊天curl -X POST "http://127.0.0.1:22001/apiv1/report/complete-flow" \
-H "Content-Type: application/json" \
-H "token: YOUR_TOKEN" \
-d 'invalid json'
预期响应:
data: {"type": "online_error", "message": "Request parse error: ..."}
data: {"type": "completed"}
# 使用 Apache Bench 进行并发测试
ab -n 100 -c 10 -p request.json -T application/json \
-H "token: YOUR_TOKEN" \
http://127.0.0.1:22001/apiv1/report/complete-flow
测试长时间运行的 SSE 流是否稳定,不会中断或超时。
检查日志文件,确认以下关键日志:
[Token验证] 识别为本地 token: test_user
[Token验证] 不是本地 token 格式
[报告兼容] 代理到 aichat 服务
[报告兼容] 降级到本地流式聊天
[AIChat代理] SSE 请求: http://127.0.0.1:28002/api/v1/report/complete-flow
[报告兼容] 代理到 aichat 失败: ...
确认以下接口与 Go 版本完全一致:
/apiv1/report/complete-flow - POST - SSE 流式响应/apiv1/report/update-ai-message - POST - JSON 响应/apiv1/sse/stop - POST - JSON 响应http://127.0.0.1:28002 运行