@legendzd/ai-agent-vue 1.0.4 → 1.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +94 -9
- package/dist/index.cjs +60 -60
- package/dist/index.mjs +62782 -62082
- package/dist/src/api/agent.d.ts +9 -2
- package/dist/src/components/ChatMessage.vue.d.ts +22 -1
- package/dist/src/plugin/index.d.ts +1 -0
- package/dist/src/stores/chat.d.ts +115 -55
- package/dist/src/types/agent.d.ts +78 -14
- package/dist/src/views/AgentChat.vue.d.ts +5 -3
- package/dist/src/views/AgentChatFull.vue.d.ts +5 -3
- package/dist/src/views/AgentChatMobile.vue.d.ts +5 -3
- package/dist/style.css +1 -1
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -8,8 +8,11 @@
|
|
|
8
8
|
- **多实例隔离** — 通过 `instanceId` 创建独立对话实例,不同用户/场景互不干扰
|
|
9
9
|
- **零配置即插即用** — 内置 Pinia + 持久化,宿主应用无需额外安装状态管理
|
|
10
10
|
- **会话管理** — 自动创建会话、历史记录、一键切换/新建对话
|
|
11
|
-
- **SSE 流式对话** — 支持 status/sql/data/chart_config/sources/analysis_chunk 等富事件类型
|
|
12
|
-
-
|
|
11
|
+
- **SSE 流式对话** — 支持 session/status/sql/data/chart_config/sources/run_plan/analysis_chunk 等富事件类型
|
|
12
|
+
- **分类存储与可配置渲染** — SQL/数据表格默认隐藏,执行计划可折叠,均可通过配置控制显隐
|
|
13
|
+
- **富内容渲染** — Markdown 代码高亮、SQL 可展开复制、结构化数据表格、ECharts 图表(支持暗色主题联动)、编号引用来源、执行计划折叠面板
|
|
14
|
+
- **增强错误样式** — 带左侧色条 + 警告图标的错误提示,深浅色主题适配
|
|
15
|
+
- **结构化数据访问** — 通过实例 ID 或消息 ID 获取 sql/data/chartConfig/sources/runPlan 等结构化数据
|
|
13
16
|
- **深色/浅色主题** — 通过 CSS 变量一键切换或自定义覆盖,所有布局均支持
|
|
14
17
|
- **语音输入** — 基于浏览器 Web Speech API,可配置语言
|
|
15
18
|
- **组件实例 API** — 通过 ref 直接访问对话数据、控制会话
|
|
@@ -42,15 +45,18 @@ app.use(AgentPlugin, {
|
|
|
42
45
|
app.mount('#app')
|
|
43
46
|
```
|
|
44
47
|
|
|
45
|
-
|
|
48
|
+
在模板中直接使用(插件注册后组件全局可用,自动继承全局配置):
|
|
46
49
|
|
|
47
50
|
```vue
|
|
48
51
|
<template>
|
|
49
|
-
<!--
|
|
52
|
+
<!-- 按钮弹窗布局(默认),自动继承全局注册的 apiUrl/userId -->
|
|
50
53
|
<AgentChat />
|
|
51
54
|
|
|
52
55
|
<!-- 等价于 -->
|
|
53
56
|
<AgentChatPopup />
|
|
57
|
+
|
|
58
|
+
<!-- 如需覆盖某项配置,只需传递对应字段即可 -->
|
|
59
|
+
<AgentChat :config="{ headerTitle: 'AI 助手' }" />
|
|
54
60
|
</template>
|
|
55
61
|
```
|
|
56
62
|
|
|
@@ -80,6 +86,15 @@ import '@legendzd/ai-agent-vue/dist/style.css'
|
|
|
80
86
|
右下角浮动按钮 + 弹出式聊天窗口,适合嵌入任意页面。
|
|
81
87
|
|
|
82
88
|
```vue
|
|
89
|
+
<!-- 已全局注册过配置时,直接使用即可 -->
|
|
90
|
+
<AgentChatPopup />
|
|
91
|
+
|
|
92
|
+
<!-- 或覆盖特定配置 -->
|
|
93
|
+
<AgentChatPopup :config="{
|
|
94
|
+
userId: 'user456',
|
|
95
|
+
}" />
|
|
96
|
+
|
|
97
|
+
<!-- 未全局注册时,需通过 config 传入必要配置 -->
|
|
83
98
|
<AgentChatPopup :config="{
|
|
84
99
|
apiUrl: 'http://your-server/api/v2',
|
|
85
100
|
userId: 'user123',
|
|
@@ -96,6 +111,14 @@ import '@legendzd/ai-agent-vue/dist/style.css'
|
|
|
96
111
|
左侧历史侧栏 + 右侧聊天窗口,适合作为独立聊天页面使用。
|
|
97
112
|
|
|
98
113
|
```vue
|
|
114
|
+
<!-- 已全局注册过配置时 -->
|
|
115
|
+
<AgentChatFull
|
|
116
|
+
:show-sidebar="true"
|
|
117
|
+
sidebar-width="280px"
|
|
118
|
+
sidebar-position="left"
|
|
119
|
+
/>
|
|
120
|
+
|
|
121
|
+
<!-- 未全局注册时 -->
|
|
99
122
|
<AgentChatFull
|
|
100
123
|
:config="{ apiUrl: 'http://your-server/api/v2', userId: 'user123' }"
|
|
101
124
|
:show-sidebar="true"
|
|
@@ -122,6 +145,13 @@ import '@legendzd/ai-agent-vue/dist/style.css'
|
|
|
122
145
|
全屏聊天 + 底部抽屉式历史面板,适配移动端安全区域。
|
|
123
146
|
|
|
124
147
|
```vue
|
|
148
|
+
<!-- 已全局注册过配置时 -->
|
|
149
|
+
<AgentChatMobile
|
|
150
|
+
safe-area-top="env(safe-area-inset-top, 0px)"
|
|
151
|
+
safe-area-bottom="env(safe-area-inset-bottom, 0px)"
|
|
152
|
+
/>
|
|
153
|
+
|
|
154
|
+
<!-- 未全局注册时 -->
|
|
125
155
|
<AgentChatMobile
|
|
126
156
|
:config="{ apiUrl: 'http://your-server/api/v2', userId: 'user123' }"
|
|
127
157
|
safe-area-top="env(safe-area-inset-top, 0px)"
|
|
@@ -353,6 +383,10 @@ destroyChatInstance('user-a')
|
|
|
353
383
|
| `enableVoice` | `boolean` | `true` | 是否启用语音输入(浏览器不支持时自动隐藏) |
|
|
354
384
|
| `voiceLang` | `string` | `'zh-CN'` | 语音识别语言 |
|
|
355
385
|
| `instanceId` | `string` | `'default'` | 实例 ID,用于多实例隔离 |
|
|
386
|
+
| `showSql` | `boolean` | `false` | 是否在消息中显示 SQL 区域 |
|
|
387
|
+
| `showData` | `boolean` | `false` | 是否在消息中显示数据表格区域 |
|
|
388
|
+
| `showRunPlan` | `boolean` | `true` | 是否显示执行计划/思考过程面板 |
|
|
389
|
+
| `defaultRunPlanExpanded` | `boolean` | `false` | 执行计划面板默认是否展开 |
|
|
356
390
|
|
|
357
391
|
### userId 两种写法
|
|
358
392
|
|
|
@@ -368,7 +402,7 @@ API 层优先使用 `getUserId()`,若未提供则 fallback 到 `userId` 静态
|
|
|
368
402
|
|
|
369
403
|
### config prop 合并规则
|
|
370
404
|
|
|
371
|
-
|
|
405
|
+
配置按优先级从高到低合并:**组件 config prop > 组件顶层 props > 全局插件注册 > 默认值**
|
|
372
406
|
|
|
373
407
|
```vue
|
|
374
408
|
<!-- 两种写法等价 -->
|
|
@@ -380,6 +414,11 @@ API 层优先使用 `getUserId()`,若未提供则 fallback 到 `userId` 静态
|
|
|
380
414
|
user-id="fallback"
|
|
381
415
|
:config="{ userId: 'priority' }"
|
|
382
416
|
/>
|
|
417
|
+
|
|
418
|
+
<!-- 全局注册的配置自动继承,组件只需覆盖差异项 -->
|
|
419
|
+
<!-- 假设 app.use(AgentPlugin, { apiUrl: 'http://...', userId: 'user123' }) -->
|
|
420
|
+
<AgentChat :config="{ headerTitle: 'AI 助手' }" />
|
|
421
|
+
<!-- 等价于 { apiUrl: 'http://...', userId: 'user123', headerTitle: 'AI 助手' } -->
|
|
383
422
|
```
|
|
384
423
|
|
|
385
424
|
## 组件实例 API
|
|
@@ -531,6 +570,25 @@ const chatRef = ref()
|
|
|
531
570
|
| `--agent-empty-color` | `#5a6b8a` | 空状态文字颜色 |
|
|
532
571
|
| `--agent-error-color` | `#f87171` | 错误文字颜色 |
|
|
533
572
|
| `--agent-error-bg` | `rgba(248,113,113,0.1)` | 错误背景色 |
|
|
573
|
+
| `--agent-error-border` | `0.0625rem solid rgba(248,113,113,0.3)` | 错误边框 |
|
|
574
|
+
| `--agent-error-border-radius` | `0.5rem` | 错误提示圆角 |
|
|
575
|
+
| `--agent-error-padding` | `0.5rem 0.75rem` | 错误提示内边距 |
|
|
576
|
+
| `--agent-error-icon-color` | `#f87171` | 错误图标颜色 |
|
|
577
|
+
| `--agent-error-text-color` | `#fca5a5` | 错误文本颜色 |
|
|
578
|
+
|
|
579
|
+
#### 执行计划
|
|
580
|
+
|
|
581
|
+
| 变量 | 默认值(深色) | 说明 |
|
|
582
|
+
|---|---|---|
|
|
583
|
+
| `--agent-run-plan-bg` | `rgba(99,102,241,0.06)` | 执行计划背景色 |
|
|
584
|
+
| `--agent-run-plan-border` | `0.0625rem solid rgba(99,102,241,0.15)` | 执行计划边框 |
|
|
585
|
+
| `--agent-run-plan-border-radius` | `0.5rem` | 执行计划圆角 |
|
|
586
|
+
| `--agent-run-plan-text-color` | `#a5b4fc` | 执行计划文本色 |
|
|
587
|
+
| `--agent-run-plan-toggle-color` | `rgba(99,102,241,0.5)` | 展开/折叠图标色 |
|
|
588
|
+
| `--agent-run-plan-icon-color` | `#818cf8` | 执行计划图标色 |
|
|
589
|
+
| `--agent-run-plan-font-size` | `0.8125rem` | 执行计划字号 |
|
|
590
|
+
| `--agent-run-plan-line-height` | `1.5` | 执行计划行高 |
|
|
591
|
+
| `--agent-run-plan-padding` | `0.5rem 0.75rem` | 执行计划内边距 |
|
|
534
592
|
| `--agent-code-block-bg` | `#0d1117` | 代码块背景 |
|
|
535
593
|
| `--agent-table-border` | `#253354` | 表格边框色 |
|
|
536
594
|
| `--agent-table-header-bg` | `#1a2340` | 表头背景 |
|
|
@@ -541,25 +599,42 @@ const chatRef = ref()
|
|
|
541
599
|
|
|
542
600
|
| 功能 | 方法 | 完整路径 |
|
|
543
601
|
|---|---|---|
|
|
544
|
-
| 创建会话 | POST | `${apiUrl}/
|
|
545
|
-
| 流式对话 | POST | `${apiUrl}/
|
|
546
|
-
| 获取历史 | GET | `${apiUrl}/
|
|
602
|
+
| 创建会话 | POST | `${apiUrl}/external/chat/session` |
|
|
603
|
+
| 流式对话 | POST | `${apiUrl}/external/query-data/stream` |
|
|
604
|
+
| 获取历史 | GET | `${apiUrl}/external/chat/sessions?userId=xxx` |
|
|
547
605
|
|
|
548
606
|
### SSE 事件类型
|
|
549
607
|
|
|
550
608
|
流式对话接口返回的 SSE 事件格式:
|
|
551
609
|
|
|
552
610
|
```json
|
|
611
|
+
{ "type": "session", "session_id": 123 }
|
|
553
612
|
{ "type": "status", "content": "正在查询数据..." }
|
|
554
613
|
{ "type": "sql", "content": "SELECT * FROM ..." }
|
|
555
614
|
{ "type": "data", "content": [{"col1": "val1", "col2": 100}] }
|
|
556
615
|
{ "type": "chart_config", "content": { /* ECharts 配置对象 */ }
|
|
557
616
|
{ "type": "sources", "content": [{ "id": "db", "title": "数据库" }] }
|
|
617
|
+
{ "type": "run_plan", "content": "1. 解析用户意图\n2. 查询相关数据..." }
|
|
558
618
|
{ "type": "analysis_chunk", "content": "正在分析..." }
|
|
559
619
|
{ "type": "done", "report_id": 123, "title": "分析报告" }
|
|
560
620
|
{ "type": "error", "message": "分析失败" }
|
|
561
621
|
```
|
|
562
622
|
|
|
623
|
+
### SSE 事件分类说明
|
|
624
|
+
|
|
625
|
+
| 事件类型 | 是否渲染 | 说明 |
|
|
626
|
+
|---|---|---|
|
|
627
|
+
| `session` | 否 | 会话信息,自动保存 session_id |
|
|
628
|
+
| `status` | 是 | 状态提示(如"正在分析意图"),渲染为等待文字+脉冲动画 |
|
|
629
|
+
| `sql` | 可配置 | 生成的 SQL 语句,默认不渲染,通过 `showSql: true` 开启 |
|
|
630
|
+
| `data` | 可配置 | SQL 查询结果数据,默认不渲染为表格,通过 `showData: true` 开启 |
|
|
631
|
+
| `chart_config` | 是 | ECharts 图表配置,使用 useEcharts 渲染(支持暗色主题联动) |
|
|
632
|
+
| `sources` | 是 | 引用来源,渲染为文末编号引用列表,正文中 `[1]` 自动转为上标链接 |
|
|
633
|
+
| `run_plan` | 可配置 | 执行计划/思考过程,默认渲染为可折叠面板,通过 `showRunPlan` 控制 |
|
|
634
|
+
| `analysis_chunk` | 是 | 正文文本流式片段 |
|
|
635
|
+
| `done` | 否 | 流结束标记,携带 report_id 和 title |
|
|
636
|
+
| `error` | 是 | 错误事件,渲染为带左侧色条+警告图标的错误提示 |
|
|
637
|
+
|
|
563
638
|
## 编程式 API
|
|
564
639
|
|
|
565
640
|
除组件方式外,插件也导出了底层 API 和 Store,供高级场景使用:
|
|
@@ -595,6 +670,7 @@ import {
|
|
|
595
670
|
type AgentFullLayoutProps,
|
|
596
671
|
type AgentMobileLayoutProps,
|
|
597
672
|
type ChatMessage,
|
|
673
|
+
type MessageStructuredData,
|
|
598
674
|
type SessionInfo,
|
|
599
675
|
type SourceInfo,
|
|
600
676
|
type StreamCallbacks,
|
|
@@ -615,9 +691,14 @@ setAgentOptions({ apiUrl: 'http://your-server/api/v2' })
|
|
|
615
691
|
const controller = streamChat(
|
|
616
692
|
{ sessionId: 'xxx', query: '你好', userId: 'user123' },
|
|
617
693
|
{
|
|
694
|
+
onSession: (sid) => console.log('会话ID:', sid),
|
|
618
695
|
onStatus: (text) => console.log('状态:', text),
|
|
619
|
-
|
|
696
|
+
onSql: (sql) => console.log('SQL:', sql),
|
|
697
|
+
onData: (data) => console.log('数据:', data),
|
|
620
698
|
onChartConfig: (config) => renderChart(config),
|
|
699
|
+
onSources: (sources) => console.log('来源:', sources),
|
|
700
|
+
onRunPlan: (text) => console.log('执行计划:', text),
|
|
701
|
+
onAnalysisChunk: (chunk) => process.stdout.write(chunk),
|
|
621
702
|
onDone: (reportId, title) => console.log('完成:', title),
|
|
622
703
|
onError: (msg) => console.error('错误:', msg),
|
|
623
704
|
onComplete: () => console.log('流结束'),
|
|
@@ -650,6 +731,10 @@ await chatStore.loadSessions()
|
|
|
650
731
|
await chatStore.newChat()
|
|
651
732
|
chatStore.switchSession('some-session-id')
|
|
652
733
|
chatStore.clearMessages()
|
|
734
|
+
|
|
735
|
+
// 按消息 ID 获取结构化数据(sql/data/chartConfig/sources/runPlan)
|
|
736
|
+
const msgData = chatStore.getMessageData('message-id')
|
|
737
|
+
console.log(msgData?.sql, msgData?.chartConfig)
|
|
653
738
|
```
|
|
654
739
|
|
|
655
740
|
## 开发
|