diff --git a/config.yaml b/config.yaml index f13c4e2..a59ab84 100644 --- a/config.yaml +++ b/config.yaml @@ -1,7 +1,7 @@ # 配置文件 app: secret_key: ${APP_SECRET_KEY} - debug: false + debug: true host: 0.0.0.0 port: 8000 diff --git a/dashboard/src/router/index.js b/dashboard/src/router/index.js index b887e24..7ea70c5 100644 --- a/dashboard/src/router/index.js +++ b/dashboard/src/router/index.js @@ -8,12 +8,6 @@ const routes = [ component: () => import('../views/HomeView.vue'), meta: { requiresAuth: true } }, - { - path: '/about', - name: 'About', - component: () => import('../views/AboutView.vue'), - meta: { requiresAuth: true } - }, { path: '/settings', name: 'Settings', diff --git a/dashboard/src/services/api.js b/dashboard/src/services/api.js index 4b617d9..ccc9289 100644 --- a/dashboard/src/services/api.js +++ b/dashboard/src/services/api.js @@ -80,7 +80,7 @@ export const messagesAPI = { // 发送消息(非流式) send: (data) => api.post('/messages/', data), - // 发送消息(流式)- 返回 EventSource 或使用 fetch + // 发送消息(流式)- 使用原生 fetch 避免 axios 拦截 sendStream: (data) => { const token = localStorage.getItem('access_token') return fetch('/api/messages/stream', { diff --git a/dashboard/src/views/ConversationDetailView.vue b/dashboard/src/views/ConversationDetailView.vue index 115d9d3..37fc613 100644 --- a/dashboard/src/views/ConversationDetailView.vue +++ b/dashboard/src/views/ConversationDetailView.vue @@ -111,8 +111,50 @@ const sendMessage = async () => { const parsed = JSON.parse(data) if (parsed.type === 'text') { streamContent.value += parsed.content + } else if (parsed.type === 'tool_call') { + // 工具调用(只在完整结果时显示一次) + const data = parsed.data + if (data && Array.isArray(data) && data.length > 0) { + // 检查是否有完整的函数名 + const hasFunctionName = data.some(tc => tc.function && tc.function.name) + if (hasFunctionName) { + streamContent.value += '\n\n[调用工具] ' + data.forEach(tc => { + if (tc.function && tc.function.name) { + streamContent.value += `${tc.function.name} ` + } + }) + } + } + } else if (parsed.type === 'tool_result') { + // 工具结果 + streamContent.value += '\n\n[工具结果]\n' + if (Array.isArray(parsed.data)) { + parsed.data.forEach(tr => { + if (tr.content) { + try { + const result = JSON.parse(tr.content) + if (result.success && result.data && result.data.results) { + result.data.results.forEach(r => { + streamContent.value += `• ${r.title}\n${r.snippet}\n\n` + }) + } else { + streamContent.value += tr.content.substring(0, 500) + } + } catch { + streamContent.value += tr.content.substring(0, 500) + } + } else { + streamContent.value += '无结果' + } + }) + } + } else if (parsed.type === 'error') { + streamContent.value += '\n\n[错误] ' + (parsed.error || '未知错误') } - } catch (e) {} + } catch (e) { + console.error('Parse error:', e, data) + } } } } diff --git a/dashboard/src/views/SettingsView.vue b/dashboard/src/views/SettingsView.vue index 058625a..6fd3216 100644 --- a/dashboard/src/views/SettingsView.vue +++ b/dashboard/src/views/SettingsView.vue @@ -63,24 +63,29 @@
- +
-