fix: surface agent workflow progress
This commit is contained in:
@@ -1222,6 +1222,7 @@ export interface AgentChatEvent {
|
|||||||
| 'complete'
|
| 'complete'
|
||||||
| 'error'
|
| 'error'
|
||||||
| 'knowledge_retrieval'
|
| 'knowledge_retrieval'
|
||||||
|
| 'llm_chunk'
|
||||||
| 'node_complete'
|
| 'node_complete'
|
||||||
| 'node_event'
|
| 'node_event'
|
||||||
| 'node_start'
|
| 'node_start'
|
||||||
@@ -1235,8 +1236,10 @@ export interface AgentChatEvent {
|
|||||||
message_id?: string;
|
message_id?: string;
|
||||||
conversation_id?: string;
|
conversation_id?: string;
|
||||||
tokens_used?: number;
|
tokens_used?: number;
|
||||||
|
total_tokens?: number;
|
||||||
elapsed_time?: number;
|
elapsed_time?: number;
|
||||||
config?: WaitingInputConfig;
|
config?: WaitingInputConfig;
|
||||||
|
accumulated_content?: string;
|
||||||
// 对话流模式:节点执行事件
|
// 对话流模式:节点执行事件
|
||||||
node_id?: string;
|
node_id?: string;
|
||||||
node_type?: string;
|
node_type?: string;
|
||||||
@@ -1436,7 +1439,7 @@ export async function getAgentMessagesApi(
|
|||||||
conversationId: string,
|
conversationId: string,
|
||||||
params?: { page?: number; pageSize?: number },
|
params?: { page?: number; pageSize?: number },
|
||||||
) {
|
) {
|
||||||
return requestClient.get<PaginatedResponse<AgentMessage>>(
|
return requestClient.get<AgentMessage[] | PaginatedResponse<AgentMessage>>(
|
||||||
`${BASE_URL}/agent/conversations/${conversationId}/messages`,
|
`${BASE_URL}/agent/conversations/${conversationId}/messages`,
|
||||||
{ params },
|
{ params },
|
||||||
);
|
);
|
||||||
|
|||||||
@@ -140,7 +140,7 @@ async function loadMessages(convId: string) {
|
|||||||
|
|
||||||
try {
|
try {
|
||||||
const res = await getAgentMessagesApi(convId, { pageSize: 100 });
|
const res = await getAgentMessagesApi(convId, { pageSize: 100 });
|
||||||
chatMessages.value = res.items;
|
chatMessages.value = Array.isArray(res) ? res : res.items || [];
|
||||||
conversationId.value = convId;
|
conversationId.value = convId;
|
||||||
await nextTick();
|
await nextTick();
|
||||||
scrollToBottom();
|
scrollToBottom();
|
||||||
@@ -312,9 +312,20 @@ function handleStreamEvent(
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
case 'llm_chunk': {
|
||||||
|
currentStep.value = 'answering';
|
||||||
|
streamingContent.value =
|
||||||
|
event.accumulated_content ||
|
||||||
|
`${streamingContent.value}${event.content || ''}`;
|
||||||
|
assistantMessage.content = streamingContent.value;
|
||||||
|
assistantMessage.status = 'pending';
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
case 'complete': {
|
case 'complete': {
|
||||||
assistantMessage.status = 'completed';
|
assistantMessage.status = 'completed';
|
||||||
assistantMessage.total_tokens = event.tokens_used || 0;
|
assistantMessage.total_tokens =
|
||||||
|
event.tokens_used || event.total_tokens || 0;
|
||||||
assistantMessage.elapsed_time = event.elapsed_time || 0;
|
assistantMessage.elapsed_time = event.elapsed_time || 0;
|
||||||
currentStep.value = '';
|
currentStep.value = '';
|
||||||
break;
|
break;
|
||||||
|
|||||||
@@ -346,6 +346,63 @@ function handleWorkflowRunEvent(event: WorkflowStreamEvent) {
|
|||||||
);
|
);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
case 'llm_chunk': {
|
||||||
|
const content = event.accumulated_content || event.content || '';
|
||||||
|
if (content) {
|
||||||
|
const preview = content.length > 180 ? `${content.slice(0, 180)}...` : content;
|
||||||
|
pushRunEvent(
|
||||||
|
`智能体输出:${event.node_label || event.node_id || '节点'}`,
|
||||||
|
'running',
|
||||||
|
preview,
|
||||||
|
);
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
case 'answer': {
|
||||||
|
if (event.content) {
|
||||||
|
pushRunEvent('节点消息', 'info', event.content);
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
case 'parallel_start': {
|
||||||
|
pushRunEvent(
|
||||||
|
`开始并行分支:${event.node_label || event.node_id || '节点'}`,
|
||||||
|
'running',
|
||||||
|
event.branches?.join(' / '),
|
||||||
|
);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
case 'parallel_complete': {
|
||||||
|
pushRunEvent(
|
||||||
|
`并行分支完成:${event.node_label || event.node_id || '节点'}`,
|
||||||
|
'success',
|
||||||
|
);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
case 'loop_iteration_start': {
|
||||||
|
pushRunEvent(
|
||||||
|
`循环第 ${(event.iteration || 0) + 1} 轮开始`,
|
||||||
|
'running',
|
||||||
|
event.node_label || event.node_id,
|
||||||
|
);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
case 'loop_iteration_complete': {
|
||||||
|
pushRunEvent(
|
||||||
|
`循环第 ${(event.iteration || 0) + 1} 轮完成`,
|
||||||
|
'success',
|
||||||
|
event.node_label || event.node_id,
|
||||||
|
);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
case 'loop_iteration_error': {
|
||||||
|
pushRunEvent(
|
||||||
|
`循环第 ${(event.iteration || 0) + 1} 轮失败`,
|
||||||
|
'failed',
|
||||||
|
event.error || event.error_message,
|
||||||
|
);
|
||||||
|
break;
|
||||||
|
}
|
||||||
case 'complete': {
|
case 'complete': {
|
||||||
runStatus.value = 'completed';
|
runStatus.value = 'completed';
|
||||||
runElapsedTime.value = event.elapsed_time || 0;
|
runElapsedTime.value = event.elapsed_time || 0;
|
||||||
@@ -653,11 +710,7 @@ onUnmounted(() => {
|
|||||||
{{ $t('ai-platform.workflow.publish') }}
|
{{ $t('ai-platform.workflow.publish') }}
|
||||||
</ElDropdownItem>
|
</ElDropdownItem>
|
||||||
<ElDropdownItem
|
<ElDropdownItem
|
||||||
v-if="
|
v-if="item.status === 'published'"
|
||||||
item.status === 'published' &&
|
|
||||||
(item.workflow_type === 'data_process' ||
|
|
||||||
item.workflow_type === 'automation')
|
|
||||||
"
|
|
||||||
command="run"
|
command="run"
|
||||||
>
|
>
|
||||||
<Play class="mr-2 h-4 w-4" />
|
<Play class="mr-2 h-4 w-4" />
|
||||||
|
|||||||
Reference in New Issue
Block a user