新增标题提取
This commit is contained in:
@@ -6,18 +6,19 @@ from typing import AsyncGenerator
|
||||
|
||||
from fastapi import APIRouter
|
||||
from fastapi.responses import StreamingResponse
|
||||
from src.schemas.chat import ChatRequest, HistoryResponse, HistoryItem
|
||||
from src.schemas.deep_agent_chat import DeepAgentChatRequest, HistoryResponse, HistoryItem
|
||||
from langchain_core.messages import HumanMessage, SystemMessage, AIMessageChunk, ToolMessage, AIMessage, ToolMessageChunk
|
||||
|
||||
from src.server.deep_agent.agents.main_agent import build_main_agent
|
||||
from src.server.deep_agent.tools.extract_suggested_questions import format_messages, generate_suggested_questions
|
||||
from src.server.deep_agent.tools.conversation_title_tool import conversation_title
|
||||
from src.server.deep_agent.tools.extract_suggested_questions import generate_suggested_questions
|
||||
|
||||
router = APIRouter(prefix="/chat", tags=["Furniture Design Chat"])
|
||||
logger = logging.getLogger(__name__)
|
||||
|
||||
|
||||
@router.post("/deep_agent_stream")
|
||||
async def chat_stream(request: ChatRequest):
|
||||
async def chat_stream(request: DeepAgentChatRequest):
|
||||
"""
|
||||
### 家具设计流式对话接口 (SSE)
|
||||
|
||||
@@ -34,6 +35,7 @@ async def chat_stream(request: ChatRequest):
|
||||
* `checkpoint_id`: (可选) 历史快照 ID。
|
||||
* `config_params`: (可选) 对话配置参数
|
||||
* `need_suggestion`: (可选) 是否需要建议按钮,需要建议的频率,0-1的浮点数
|
||||
* `need_title`: (可选) 是否需要标题
|
||||
* `use_report`: (可选) 是否需要使用report功能 true/false
|
||||
|
||||
|
||||
@@ -66,61 +68,6 @@ async def chat_stream(request: ChatRequest):
|
||||
### 5. 响应流说明
|
||||
所有响应均以 data: 开头,JSON 字符串格式,末尾以 \n\n 结束
|
||||
响应流包含三种类型的事件:会话开始、节点消息、会话结束
|
||||
会话开始:
|
||||
```
|
||||
{
|
||||
"thread_id": "str",
|
||||
"is_branch": "boolean",
|
||||
"status": "start"
|
||||
}
|
||||
```
|
||||
节点消息:
|
||||
```
|
||||
{
|
||||
"node": "节点名称(如Designer/Researcher/Main)",
|
||||
"content": "消息内容",
|
||||
"checkpoint_id": "快照ID",
|
||||
"is_delta": "boolean",
|
||||
"type": "消息类型",
|
||||
"tool_name": "工具名称(可选)",
|
||||
"tool_call_chunk": "工具调用片段(可选)",
|
||||
"tool_call_id": "工具调用ID(可选)"
|
||||
}
|
||||
|
||||
```
|
||||
报告增量消息:
|
||||
```
|
||||
{
|
||||
"node": "Researcher",
|
||||
"type": "report_delta",
|
||||
"content": "报告内容增量",
|
||||
"is_delta": true,
|
||||
"checkpoint_id": "xxx"
|
||||
}
|
||||
```
|
||||
AI 消息片段:
|
||||
```
|
||||
{
|
||||
"node": "Designer",
|
||||
"content": "设计建议内容",
|
||||
"checkpoint_id": "xxx",
|
||||
"is_delta": true,
|
||||
"type": "delta",
|
||||
"tool_call_chunk": {...}
|
||||
}
|
||||
```
|
||||
工具执行结果:
|
||||
```
|
||||
{
|
||||
"node": "ToolExecutor",
|
||||
"content": "工具执行结果",
|
||||
"checkpoint_id": "xxx",
|
||||
"is_delta": false,
|
||||
"type": "tool_result",
|
||||
"tool_name": "ImageGenerator",
|
||||
"tool_call_id": "yyy"
|
||||
}
|
||||
```
|
||||
|
||||
"""
|
||||
logger.info(f"chat request data: {request}")
|
||||
@@ -306,9 +253,16 @@ async def chat_stream(request: ChatRequest):
|
||||
})
|
||||
yield f"data: {json.dumps(payload_out, ensure_ascii=False)}\n\n"
|
||||
|
||||
# 获取建议消息
|
||||
if request.need_suggestion > 0 and random.random() < request.need_suggestion:
|
||||
suggested_questions = await generate_suggested_questions(main_agent, target_thread_id)
|
||||
yield f"data: {json.dumps({'suggested_questions': suggested_questions}, ensure_ascii=False)}\n\n"
|
||||
|
||||
# 获取标题
|
||||
if request.need_title:
|
||||
title = await conversation_title(agent=main_agent, config=current_config)
|
||||
yield f"data: {json.dumps({'title': title}, ensure_ascii=False)}\n\n"
|
||||
|
||||
yield f"data: {json.dumps({'status': 'end'}, ensure_ascii=False)}\n\n"
|
||||
|
||||
return StreamingResponse(event_generator(), media_type="text/event-stream")
|
||||
|
||||
Reference in New Issue
Block a user