Files
qiming/qiming-mobile/docs/agent_integration_guide.md

102 lines
4.0 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 移动端 Agent 组件接入指南
本文档说明如何在移动端接入文件树、远程桌面和文件预览组件,以配合 `CustomActionService``AgentDetailService` 完成 Agent 完整能力的落地。
## 1. 架构概述
移动端采用了与 PC 端一致的事件驱动架构:
- **消息层** (`AgentDetailService`): 解析后端流式消息,自动触发 `OPEN_DESKTOP` (事件) 和 `REFRESH_FILE_LIST` (工具调用)。
- **交互层** (`task-result`): 用户点击任务结果时,触发 `OPEN_PREVIEW`
- **中枢层** (`CustomActionService`): 统一分发事件。
- **UI 层** (待接入): 监听事件并做出响应(如弹出抽屉、跳转页面)。
## 2. 核心事件监听
在你的聊天页面(如 `chat-conversation-component.uvue`)或全局布局中,监听以下事件:
```typescript
import { CustomEventType, OpenPreviewEventData, OpenDesktopEventData, RefreshFileListEventData } from '@/utils/customActionService.uts'
export default {
onLoad() {
// 1. 监听打开文件预览/文件树
uni.$on(CustomEventType.OPEN_PREVIEW, (data: OpenPreviewEventData) => {
console.log('收到打开预览请求:', data.conversationId)
// TODO: 打开文件树抽屉/侧边栏
// this.showFileTreeDrawer = true
// this.currentViewMode = 'preview'
// this.fetchFileList(data.conversationId)
})
// 2. 监听打开远程桌面
uni.$on(CustomEventType.OPEN_DESKTOP, (data: OpenDesktopEventData) => {
console.log('收到打开远程桌面请求:', data.conversationId)
// TODO: 显示远程桌面组件/跳转远程桌面页面
// this.showDesktopView = true
// this.currentViewMode = 'desktop'
// this.connectVNC(data.conversationId)
})
// 3. 监听刷新文件列表
uni.$on(CustomEventType.REFRESH_FILE_LIST, (data: RefreshFileListEventData) => {
console.log('收到刷新文件列表请求:', data.conversationId)
// TODO: 如果当前文件树是打开的,重新获取文件列表
// if (this.showFileTreeDrawer) {
// this.fetchFileList(data.conversationId)
// }
})
},
onUnload() {
// 记得移除监听
uni.$off(CustomEventType.OPEN_PREVIEW)
uni.$off(CustomEventType.OPEN_DESKTOP)
uni.$off(CustomEventType.REFRESH_FILE_LIST)
}
}
```
## 3. UI 组件接入要求
### 3.1 文件树组件 (File Tree)
- **触发时机**: 收到 `OPEN_PREVIEW` 或用户主动点击文件图标。
- **功能要求**:
- 根据 `conversationId` 调用后端 API 获取文件列表。
- 收到 `REFRESH_FILE_LIST` 事件时自动刷新。
- 点击文件项时,调用 `CustomActionService.openPage` 或内部逻辑进行预览。
### 3.2 远程桌面组件 (Remote Desktop)
- **触发时机**: 收到 `OPEN_DESKTOP` 或用户主动切换。
- **功能要求**:
- 建立 VNC 连接(这通常需要特定的 VNC 客户端组件或 WebView 方案)。
- 处理容器保活Keep-alive
- 支持键盘输入和触摸手势映射。
### 3.3 文件预览组件 (Preview)
- **触发时机**: 用户在文件树中点击文件。
- **功能要求**:
- 根据文件类型图片、Markdown、代码、HTML渲染不同内容。
- 对于 HTML/Web 应用,建议使用 `webview` 并通过 `CustomActionService.openPage` 打开。
## 4. 调试方法
你可以手动调用 `CustomActionService` 来模拟触发,测试 UI 响应:
```typescript
import { CustomActionService } from '@/utils/customActionService.uts'
// 模拟打开预览
CustomActionService.openPreviewView(123)
// 模拟打开远程桌面
CustomActionService.openDesktopView(123)
```
## 5. 常见问题
- **Q: `task-result` 点击无反应?**
- A: 检查是否传入了 `conversationId`。如果没有 `conversationId``task-result` 会降级发出 `task_result_click` 事件,你需要手动处理该事件。
- **Q: 样式不符合预期?**
- A: `task-result``Plan` 的样式已内置在组件中,如需全局调整,请修改 `uni_modules/mp-html` 下的相关文件。