Copilot 系统
相关源文件
Copilot 系统在 AFFiNE 中提供 AI 辅助功能。它支持文本生成、图像创建、文档摘要和上下文感知聊天等功能。本文档介绍了 Copilot 系统的架构和组件,包括其后端服务、提供商集成和工作流系统。
系统概览
Copilot 系统由多个关键组件组成,它们协同工作以提供 AI 功能。
- 会话管理 - 处理用户聊天会话和消息历史记录。
- 提供商系统 - 集成外部 AI 提供商(OpenAI、Google Gemini、FAL AI)。
- 提示管理 - 管理预定义和自定义 AI 提示。
- 上下文系统 - 为 AI 响应提供文档上下文。
- 工作流系统 - 实现复杂的多步 AI 操作。
- GraphQL API - 向前端公开 Copilot 功能。
来源
- [packages/backend/server/src/plugins/copilot/controller.ts]
- [packages/backend/server/src/plugins/copilot/session.ts]
- [packages/backend/server/src/plugins/copilot/resolver.ts]
- [packages/backend/server/schema.prisma]
核心组件
聊天会话服务
ChatSessionService 管理聊天会话及其生命周期,包括:
- 创建和存储聊天会话
- 管理消息历史记录
- 检查用户配额
- 处理会话分叉以实现协作 AI 使用
来源
- [packages/backend/server/src/plugins/copilot/session.ts:35-196]
- [packages/backend/server/src/plugins/copilot/session.ts:198-742]
提供者系统
提供商系统负责与外部 AI 服务集成。它采用基于能力的架构,每个提供商都实现特定的能力。
提供商系统支持多种类型的 AI 操作:
- 文本生成 - 根据提示创建文本响应。
- 图像生成 - 根据文本描述创建图像。
- 图像到文本 - 生成图像的描述。
- 嵌入 - 创建文本的向量表示,用于语义搜索。
来源
- [packages/backend/server/src/plugins/copilot/providers/openai.ts]
- [packages/backend/server/src/plugins/copilot/providers/gemini.ts]
- [packages/backend/server/src/plugins/copilot/providers/fal.ts]
- [packages/backend/server/src/plugins/copilot/providers/index.ts]
提示管理
PromptService 管理 AI 提示,这些提示决定了 AI 如何生成响应。该系统包含预定义的提示,并允许创建自定义提示。
提示包括:
- 一个名称标识符
- 一个模型规范
- 一系列具有角色(系统、用户、助手)的消息
- 可选的配置参数
该系统包含许多预定义的提示,用于诸如摘要、解释、翻译等特定任务,以及更专业的操作,例如演示文稿生成。
来源
- [packages/backend/server/src/plugins/copilot/prompt/prompts.ts]
Copilot 控制器和 API
CopilotController 为 Copilot 交互提供 HTTP 和 SSE(服务器发送事件)端点。
控制器处理:
- 文本生成请求
- 流式文本响应
- 流式图像生成
- 工作流执行
- Unsplash 图片集成
来源
- [packages/backend/server/src/plugins/copilot/controller.ts:71-597]
GraphQL API
Copilot 系统通过 CopilotResolver 类公开 GraphQL 端点以供前端集成。
-
查询
copilot.quota - 获取用户配额信息。
copilot.sessions - 列出可用的聊天会话。
copilot.histories - 获取聊天历史记录。
copilot.contexts - 获取上下文信息。
-
Mutations (修改操作)
createCopilotSession - 创建新的聊天会话。
createCopilotMessage - 在会话中创建消息。
forkCopilotSession - 创建会话的副本。
cleanupCopilotSession - 删除会话。
createCopilotContext - 为聊天创建上下文。
来源
- [packages/backend/server/src/plugins/copilot/resolver.ts:299-965]
- [packages/backend/server/src/schema.gql:82-99]
- [packages/backend/server/src/schema.gql:410-435]
工作流系统
工作流系统通过基于图的执行引擎实现复杂的多步 AI 操作。
工作流系统包括:
- WorkflowGraphExecutor - 协调工作流节点执行。
- WorkflowNode - 表示工作流中的单个操作。
- NodeExecutor - 实现特定的操作类型。
- 节点类型:
- Basic - 标准操作节点。
- Decision - 条件分支节点。
- Nope - 无操作节点。
该系统支持复杂的 AI 操作,例如:
- 多步图像处理
- 演示文稿生成
- 思维导图
- 多模型文本分析
来源
- [packages/backend/server/src/plugins/copilot/workflow/workflow.ts]
- [packages/backend/server/src/plugins/copilot/workflow/node.ts]
- [packages/backend/server/src/plugins/copilot/workflow/executor/chat-text.ts]
- [packages/backend/server/src/plugins/copilot/workflow/types.ts]
数据库 Schema
Copilot 系统使用多个数据库表来存储其数据。
来源
- [packages/backend/server/schema.prisma:348-490]
聊天会话流程
下图说明了典型聊天会话交互的流程。
来源
- [packages/backend/server/src/plugins/copilot/controller.ts:280-356]
- [packages/backend/server/src/plugins/copilot/session.ts:35-196]
- [packages/backend/server/src/plugins/copilot/resolver.ts:396-455]
提供商能力矩阵
每个 AI 提供商实现的能力不同。
| 提供商 | 文本到文本 | 文本到图像 | 图像到文本 | 文本到嵌入 |
|---|
| OpenAI | ✓ | ✓ | ✓ | ✓ |
| Gemini | ✓ | ✗ | ✗ | ✗ |
| FAL | ✓ | ✓ | ✓ | ✗ |
这些能力决定了为不同 AI 操作使用哪个提供商。CopilotProviderFactory 根据请求的能力和模型选择合适的提供商。
来源
- [packages/backend/server/src/plugins/copilot/providers/openai.ts:51-57]
- [packages/backend/server/src/plugins/copilot/providers/gemini.ts:42-43]
- [packages/backend/server/src/plugins/copilot/providers/fal.ts:79-84]
配额管理
Copilot 系统包含配额管理以控制使用量。
- 每个用户都有配额限制(除非他们拥有
unlimited_copilot 功能)。
- 系统跟踪已用 token 和消息计数。
- 执行 AI 操作前会检查配额。
来源
- [packages/backend/server/src/plugins/copilot/session.ts:576-597]
- [packages/backend/server/src/plugins/copilot/resolver.ts:308-315]
集成点
Copilot 系统集成了其他几个 AFFiNE 系统。
- 工作区系统 - 用于权限检查和工作区上下文。
- 文档系统 - 用于文档上下文和嵌入。
- 存储系统 - 用于处理文件附件。
- 用户系统 - 用于配额和权限管理。
这些集成使 Copilot 能够根据用户的 Worspace 和文档提供上下文相关的 AI 辅助。
来源
- [packages/backend/server/src/plugins/copilot/resolver.ts:342-378]
- [packages/backend/server/schema.prisma:464-482]