|
@@ -157,9 +157,17 @@ async def chat(request: Request):
|
|
|
|
|
|
|
|
# 获取前端发送的组件列表(实现动态组件注册)
|
|
# 获取前端发送的组件列表(实现动态组件注册)
|
|
|
available_components = data.get('availableComponents')
|
|
available_components = data.get('availableComponents')
|
|
|
|
|
+ enabled_mcp_list = data.get('enabledMcpList') # 前端发送的已启用 MCP 列表
|
|
|
|
|
+
|
|
|
if available_components:
|
|
if available_components:
|
|
|
print(f"[DEBUG /api/chat] Using dynamic components from frontend ({len(available_components)} chars)")
|
|
print(f"[DEBUG /api/chat] Using dynamic components from frontend ({len(available_components)} chars)")
|
|
|
|
|
|
|
|
|
|
+ # DEBUG: 打印已启用的 MCP 列表
|
|
|
|
|
+ if enabled_mcp_list is not None:
|
|
|
|
|
+ print(f"[DEBUG /api/chat] Enabled MCP list from frontend: {enabled_mcp_list}")
|
|
|
|
|
+ else:
|
|
|
|
|
+ print(f"[DEBUG /api/chat] No enabled MCP list from frontend, using all configured MCPs")
|
|
|
|
|
+
|
|
|
# 创建对话管理器(带 token 和组件提示)
|
|
# 创建对话管理器(带 token 和组件提示)
|
|
|
conv_manager = ConversationManager(
|
|
conv_manager = ConversationManager(
|
|
|
api_key=ANTHROPIC_API_KEY,
|
|
api_key=ANTHROPIC_API_KEY,
|
|
@@ -167,7 +175,8 @@ async def chat(request: Request):
|
|
|
model=ANTHROPIC_MODEL,
|
|
model=ANTHROPIC_MODEL,
|
|
|
session_id=session_id,
|
|
session_id=session_id,
|
|
|
mcp_tokens=parsed_tokens,
|
|
mcp_tokens=parsed_tokens,
|
|
|
- components_prompt=available_components # 动态组件提示
|
|
|
|
|
|
|
+ components_prompt=available_components, # 动态组件提示
|
|
|
|
|
+ enabled_mcp_list=enabled_mcp_list # 前端传递的已启用 MCP 列表
|
|
|
)
|
|
)
|
|
|
|
|
|
|
|
# 格式化对话历史
|
|
# 格式化对话历史
|
|
@@ -209,7 +218,8 @@ async def generate_chat_stream(
|
|
|
conversation_history: List[Dict[str, Any]],
|
|
conversation_history: List[Dict[str, Any]],
|
|
|
session_id: Optional[str],
|
|
session_id: Optional[str],
|
|
|
mcp_tokens: Optional[Dict[str, str]] = None,
|
|
mcp_tokens: Optional[Dict[str, str]] = None,
|
|
|
- available_components: Optional[str] = None # 新增:前端发送的组件列表
|
|
|
|
|
|
|
+ available_components: Optional[str] = None, # 新增:前端发送的组件列表
|
|
|
|
|
+ enabled_mcp_list: Optional[List[str]] = None # 新增:前端发送的已启用 MCP 列表
|
|
|
):
|
|
):
|
|
|
"""生成 SSE 流式响应的异步生成器"""
|
|
"""生成 SSE 流式响应的异步生成器"""
|
|
|
try:
|
|
try:
|
|
@@ -238,6 +248,12 @@ async def generate_chat_stream(
|
|
|
else:
|
|
else:
|
|
|
print(f"[DEBUG generate_chat_stream] Using default components")
|
|
print(f"[DEBUG generate_chat_stream] Using default components")
|
|
|
|
|
|
|
|
|
|
+ # DEBUG: 打印已启用的 MCP 列表
|
|
|
|
|
+ if enabled_mcp_list is not None:
|
|
|
|
|
+ print(f"[DEBUG generate_chat_stream] Enabled MCP list from frontend: {enabled_mcp_list}")
|
|
|
|
|
+ else:
|
|
|
|
|
+ print(f"[DEBUG generate_chat_stream] No enabled MCP list from frontend, using all configured MCPs")
|
|
|
|
|
+
|
|
|
# 创建对话管理器(带 token 和组件提示)
|
|
# 创建对话管理器(带 token 和组件提示)
|
|
|
conv_manager = ConversationManager(
|
|
conv_manager = ConversationManager(
|
|
|
api_key=ANTHROPIC_API_KEY,
|
|
api_key=ANTHROPIC_API_KEY,
|
|
@@ -245,7 +261,8 @@ async def generate_chat_stream(
|
|
|
model=ANTHROPIC_MODEL,
|
|
model=ANTHROPIC_MODEL,
|
|
|
session_id=session_id,
|
|
session_id=session_id,
|
|
|
mcp_tokens=parsed_tokens,
|
|
mcp_tokens=parsed_tokens,
|
|
|
- components_prompt=available_components # 动态组件提示
|
|
|
|
|
|
|
+ components_prompt=available_components, # 动态组件提示
|
|
|
|
|
+ enabled_mcp_list=enabled_mcp_list # 前端传递的已启用 MCP 列表
|
|
|
)
|
|
)
|
|
|
|
|
|
|
|
# 格式化对话历史
|
|
# 格式化对话历史
|
|
@@ -432,17 +449,19 @@ async def chat_stream(request: Request):
|
|
|
session_id = request.headers.get('X-Session-ID')
|
|
session_id = request.headers.get('X-Session-ID')
|
|
|
mcp_tokens = request.headers.get('X-MCP-Tokens') # MCP tokens (JSON string)
|
|
mcp_tokens = request.headers.get('X-MCP-Tokens') # MCP tokens (JSON string)
|
|
|
available_components = data.get('availableComponents') # 前端发送的组件列表
|
|
available_components = data.get('availableComponents') # 前端发送的组件列表
|
|
|
|
|
+ enabled_mcp_list = data.get('enabledMcpList') # 前端发送的已启用 MCP 列表
|
|
|
|
|
|
|
|
# DEBUG: 打印收到的 token
|
|
# DEBUG: 打印收到的 token
|
|
|
print(f"[DEBUG /api/chat/stream] mcp_tokens type: {type(mcp_tokens)}")
|
|
print(f"[DEBUG /api/chat/stream] mcp_tokens type: {type(mcp_tokens)}")
|
|
|
print(f"[DEBUG /api/chat/stream] mcp_tokens value: {mcp_tokens[:150] if mcp_tokens else 'None'}...")
|
|
print(f"[DEBUG /api/chat/stream] mcp_tokens value: {mcp_tokens[:150] if mcp_tokens else 'None'}...")
|
|
|
print(f"[DEBUG /api/chat/stream] available_components: {len(available_components) if available_components else 0} chars")
|
|
print(f"[DEBUG /api/chat/stream] available_components: {len(available_components) if available_components else 0} chars")
|
|
|
|
|
+ print(f"[DEBUG /api/chat/stream] enabled_mcp_list: {enabled_mcp_list}")
|
|
|
|
|
|
|
|
if not message:
|
|
if not message:
|
|
|
raise HTTPException(status_code=400, detail="Message is required")
|
|
raise HTTPException(status_code=400, detail="Message is required")
|
|
|
|
|
|
|
|
return StreamingResponse(
|
|
return StreamingResponse(
|
|
|
- generate_chat_stream(message, conversation_history, session_id, mcp_tokens, available_components),
|
|
|
|
|
|
|
+ generate_chat_stream(message, conversation_history, session_id, mcp_tokens, available_components, enabled_mcp_list),
|
|
|
media_type="text/event-stream",
|
|
media_type="text/event-stream",
|
|
|
headers={
|
|
headers={
|
|
|
'Cache-Control': 'no-cache',
|
|
'Cache-Control': 'no-cache',
|