Преглед на файлове

[Mod 0000]修改AI助手多智能体时的思考面板渲染逻辑

wangkeyi преди 1 седмица
родител
ревизия
d9b50e533f

+ 24 - 8
src/views/ventAI/manageAssistent/components/AiAssistantModal.vue

@@ -117,6 +117,7 @@
             <AgentDetailPanel
               :messageIndex="activeAgentDetail.messageIndex"
               :agentName="activeAgentDetail.agent"
+              :agentId="activeAgentDetail.agentId"
               :messages="messages"
               @close="closeAgentDetail"
             />
@@ -279,7 +280,7 @@
   const previewFile = ref<AttachedFile | null>(null);
   const previewEditable = ref(false);
   const showFileList = ref(false);
-  const activeAgentDetail = ref<{ messageIndex: number; agent: string } | null>(null);
+  const activeAgentDetail = ref<{ messageIndex: number; agent: string; agentId?: string } | null>(null);
   const activePanel = ref<'chat' | 'skill' | 'sub-agents' | 'schedules'>('chat');
   const scheduleListForDetail = ref<any[]>([]);
   const showScheduleDetail = ref(false);
@@ -1050,10 +1051,14 @@
 
   const handleAgentDetailClick = (data: AgentDetailData) => {
     // 同一个 agent 再次点击则关闭面板
-    if (activeAgentDetail.value?.messageIndex === data.messageIndex && activeAgentDetail.value?.agent === data.agent) {
+    if (
+      activeAgentDetail.value?.messageIndex === data.messageIndex &&
+      activeAgentDetail.value?.agentId === data.agentId &&
+      activeAgentDetail.value?.agent === data.agent
+    ) {
       activeAgentDetail.value = null;
     } else {
-      activeAgentDetail.value = { messageIndex: data.messageIndex, agent: data.agent };
+      activeAgentDetail.value = { messageIndex: data.messageIndex, agent: data.agent, agentId: data.agentId };
       previewFile.value = null;
       showScheduleDetail.value = false;
     }
@@ -1309,7 +1314,8 @@
         }
         break;
 
-      // thinking_token - 模型思考过程内容
+      // thinking / thinking_token - 模型思考过程内容
+      case 'thinking':
       case 'thinking_token':
         if (normalizedContent) {
           if (data.source === 'subagent' && data.agent_id) {
@@ -1330,7 +1336,8 @@
         if (data.agent && data.agent !== 'system') {
           upsertStep(aiMsg.thinkingSteps!, {
             type: 'executing',
-            agent: data.agent,
+            agent: data.cn_agent || data.agent,
+            agentId: data.agent_id,
             message: data.message || '',
             timestamp: Date.now(),
           });
@@ -1355,7 +1362,10 @@
       case 'agent_todos':
       case 'updated_todo_list': {
         const agentName = data.cn_agent || data.agent || '智能助手';
-        const existingIdx = aiMsg.thinkingSteps!.findIndex((s) => s.type === 'updated_todo_list' && s.agent === agentName);
+        const agentId = data.agent_id;
+        const existingIdx = aiMsg.thinkingSteps!.findIndex(
+          (s) => s.type === 'updated_todo_list' && (agentId ? s.agentId === agentId : s.agent === agentName)
+        );
         if (existingIdx !== -1) {
           aiMsg.thinkingSteps![existingIdx].todos = data.todos || [];
           aiMsg.thinkingSteps![existingIdx].timestamp = Date.now();
@@ -1363,6 +1373,7 @@
           aiMsg.thinkingSteps!.push({
             type: 'updated_todo_list',
             agent: agentName,
+            agentId,
             todos: data.todos || [],
             message: data.message || '任务进度已更新',
             timestamp: Date.now(),
@@ -1379,6 +1390,7 @@
         upsertStep(aiMsg.thinkingSteps!, {
           type: 'executing',
           agent: data.cn_agent || data.agent || '智能助手',
+          agentId: data.agent_id,
           tool: (data.cn_tools || data.tools || []).join('、'),
           message: data.message || '',
           timestamp: Date.now(),
@@ -1392,6 +1404,7 @@
         upsertStep(aiMsg.thinkingSteps!, {
           type: 'tool_result',
           agent: data.cn_agent || data.agent || '智能助手',
+          agentId: data.agent_id,
           tool: data.cn_tool || data.tool || '',
           message: data.message || '执行完成',
           timestamp: Date.now(),
@@ -1408,6 +1421,7 @@
         upsertStep(aiMsg.thinkingSteps!, {
           type: 'agent_done',
           agent: data.cn_agent || data.agent || '智能助手',
+          agentId: data.agent_id,
           message: `${(data.message || '审查完成').replace(/(\d+ms)/g, '')}${data.duration_ms ? `(${(data.duration_ms / 1000).toFixed(0)}s)` : ''}${data.progress ? ` [${data.progress}]` : ''}`,
           timestamp: Date.now(),
         });
@@ -1433,7 +1447,8 @@
       case 'tool_select': {
         upsertStep(aiMsg.thinkingSteps!, {
           type: 'tool_call',
-          agent: extractAgentName(normalizedContent),
+          agent: data.cn_agent || extractAgentName(normalizedContent),
+          agentId: data.agent_id,
           tool: normalizedContent,
           message: `选择工具:${normalizedContent}`,
           timestamp: Date.now(),
@@ -1444,7 +1459,8 @@
       case 'error':
         upsertStep(aiMsg.thinkingSteps!, {
           type: 'tool_result',
-          agent: '系统',
+          agent: data.cn_agent || '系统',
+          agentId: data.agent_id,
           message: `❌ 执行失败:${normalizedContent}`,
           timestamp: Date.now(),
         });

+ 4 - 1
src/views/ventAI/manageAssistent/components/chatModal/AgentDetailPanel.vue

@@ -100,6 +100,7 @@
   const props = defineProps<{
     messageIndex: number;
     agentName: string;
+    agentId?: string;
     messages: Message[];
   }>();
 
@@ -115,11 +116,13 @@
     const msg = props.messages[props.messageIndex];
     if (!msg?.thinkingSteps) return null;
     const agentName = props.agentName;
+    const agentId = props.agentId;
     let thinkingContent = '';
     let content = '';
     const steps: ThinkingStep[] = [];
     for (const step of msg.thinkingSteps) {
-      if ((step.agent || '系统') === agentName) {
+      const match = agentId ? step.agentId === agentId : (step.agent || '系统') === agentName;
+      if (match) {
         if (step.thinkingContent) thinkingContent += step.thinkingContent;
         if (step.content) content += step.content;
         steps.push(step);

+ 9 - 9
src/views/ventAI/manageAssistent/components/chatModal/ChatMessages.vue

@@ -415,6 +415,7 @@
   export interface AgentDetailData {
     messageIndex: number;
     agent: string;
+    agentId?: string;
   }
 
   const emit = defineEmits<{
@@ -677,6 +678,7 @@
     emit('agent-detail-click', {
       messageIndex,
       agent: group.agent,
+      agentId: group.agentId,
     });
   };
 
@@ -711,23 +713,21 @@
 
   interface AgentGroup {
     agent: string;
+    agentId?: string;
     steps: ThinkingStep[];
   }
 
   const groupStepsByAgent = (steps: ThinkingStep[]): AgentGroup[] => {
-    const groupMap = new Map<string, ThinkingStep[]>();
+    const groupMap = new Map<string, AgentGroup>();
     for (const step of steps) {
       const agentName = step.agent || '系统';
-      if (!groupMap.has(agentName)) {
-        groupMap.set(agentName, []);
+      const groupKey = step.agentId || agentName;
+      if (!groupMap.has(groupKey)) {
+        groupMap.set(groupKey, { agent: agentName, agentId: step.agentId, steps: [] });
       }
-      groupMap.get(agentName)!.push(step);
+      groupMap.get(groupKey)!.steps.push(step);
     }
-    const result: AgentGroup[] = [];
-    for (const [agent, agentSteps] of groupMap) {
-      result.push({ agent, steps: agentSteps });
-    }
-    return result;
+    return Array.from(groupMap.values());
   };
 
   const getAgentCount = (steps: ThinkingStep[]): number => {