From f5a7a3eec9931148dc3a244640e103ee053ac4f5 Mon Sep 17 00:00:00 2001 From: Wenjie Zhang Date: Sat, 5 Apr 2025 02:23:32 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BC=98=E5=8C=96=E6=99=BA=E8=83=BD=E4=BD=93?= =?UTF-8?q?=E4=BD=93=E9=AA=8C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- server/routers/chat_router.py | 32 +++--- web/src/components/AgentChatComponent.vue | 19 +++- web/src/components/TokenManagerComponent.vue | 2 +- web/src/views/AgentView.vue | 114 +++++++++++++++---- 4 files changed, 127 insertions(+), 40 deletions(-) diff --git a/server/routers/chat_router.py b/server/routers/chat_router.py index 0bd56ca5..55959402 100644 --- a/server/routers/chat_router.py +++ b/server/routers/chat_router.py @@ -174,21 +174,25 @@ def chat_agent(agent_name: str, def stream_messages(): content = "" yield make_chunk(status="init", meta=meta) - for msg, metadata in agent.stream_messages(messages, config_schema=runnable_config): - if isinstance(msg, AIMessageChunk) and msg.content != "": - content += msg.content - yield make_chunk(content=msg.content, - msg=msg.model_dump(), - metadata=metadata, - status="loading") - else: - yield make_chunk(msg=msg.model_dump(), - metadata=metadata, - status="loading") + try: + for msg, metadata in agent.stream_messages(messages, config_schema=runnable_config): + if isinstance(msg, AIMessageChunk) and msg.content != "": + content += msg.content + yield make_chunk(content=msg.content, + msg=msg.model_dump(), + metadata=metadata, + status="loading") + else: + yield make_chunk(msg=msg.model_dump(), + metadata=metadata, + status="loading") - yield make_chunk(status="finished", - history=history_manager.update_ai(content), - meta=meta) + yield make_chunk(status="finished", + history=history_manager.update_ai(content), + meta=meta) + except Exception as e: + logger.error(f"Error streaming messages: {e}") + yield make_chunk(message=f"Error streaming messages: {e}", status="error") return StreamingResponse(stream_messages(), media_type='application/json') diff --git a/web/src/components/AgentChatComponent.vue b/web/src/components/AgentChatComponent.vue index 718299a3..d28caca3 100644 --- a/web/src/components/AgentChatComponent.vue +++ b/web/src/components/AgentChatComponent.vue @@ -444,6 +444,8 @@ const handleStreamResponse = async (response) => { await handleInit(value); } else if (value.status === 'finished') { await handleFinished(value); + } else if (value.status === 'error') { + await handleError(value); } else { await handleMessageById(value); } @@ -552,7 +554,7 @@ const handleFinished = async (data) => { const handleMessageById = async (data) => { const msgId = data.msg.id; const msgType = data.msg.type; - // console.log("data", data); + console.log("data", data); // 查找现有消息 const existingMsgIndex = messageMap.value.get(msgId); @@ -678,11 +680,26 @@ const updateExistingMessage = async (data, existingMsgIndex) => { } } + // 如果状态是error,则更新为error + if (data.status === 'error') { + msgInstance.status = 'error'; + msgInstance.message = data.message; + } + // 确保变更生效 await nextTick(); await scrollToBottom(); }; +const handleError = async (data) => { + console.error('处理错误状态:', data); + const lastMsg = messages.value[messages.value.length - 1]; + if (lastMsg) { + lastMsg.status = 'error'; + lastMsg.message = data.message; + } + isProcessing.value = false; +}; const appendToolMessageToExistingAssistant = async (data) => { // console.log("appendToolMessageToExistingAssistant", data); diff --git a/web/src/components/TokenManagerComponent.vue b/web/src/components/TokenManagerComponent.vue index bcf6adb7..4b074f85 100644 --- a/web/src/components/TokenManagerComponent.vue +++ b/web/src/components/TokenManagerComponent.vue @@ -42,7 +42,7 @@ + +
+ + + 智能体配置 + + + + + 访问令牌 + + + + + 打开独立页面 + +
+

所需环境变量:

@@ -62,12 +90,12 @@ 设置
-