菜单

Copilot 系统

相关源文件

Copilot 系统在 AFFiNE 中提供 AI 辅助功能。它支持文本生成、图像创建、文档摘要和上下文感知聊天等功能。本文档介绍了 Copilot 系统的架构和组件,包括其后端服务、提供商集成和工作流系统。

系统概览

Copilot 系统由多个关键组件组成,它们协同工作以提供 AI 功能。

  1. 会话管理 - 处理用户聊天会话和消息历史记录。
  2. 提供商系统 - 集成外部 AI 提供商(OpenAI、Google Gemini、FAL AI)。
  3. 提示管理 - 管理预定义和自定义 AI 提示。
  4. 上下文系统 - 为 AI 响应提供文档上下文。
  5. 工作流系统 - 实现复杂的多步 AI 操作。
  6. 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 操作。

工作流系统包括:

  1. WorkflowGraphExecutor - 协调工作流节点执行。
  2. WorkflowNode - 表示工作流中的单个操作。
  3. NodeExecutor - 实现特定的操作类型。
  4. 节点类型:
    • 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 系统包含配额管理以控制使用量。

  1. 每个用户都有配额限制(除非他们拥有 unlimited_copilot 功能)。
  2. 系统跟踪已用 token 和消息计数。
  3. 执行 AI 操作前会检查配额。

来源

  • [packages/backend/server/src/plugins/copilot/session.ts:576-597]
  • [packages/backend/server/src/plugins/copilot/resolver.ts:308-315]

集成点

Copilot 系统集成了其他几个 AFFiNE 系统。

  1. 工作区系统 - 用于权限检查和工作区上下文。
  2. 文档系统 - 用于文档上下文和嵌入。
  3. 存储系统 - 用于处理文件附件。
  4. 用户系统 - 用于配额和权限管理。

这些集成使 Copilot 能够根据用户的 Worspace 和文档提供上下文相关的 AI 辅助。

来源

  • [packages/backend/server/src/plugins/copilot/resolver.ts:342-378]
  • [packages/backend/server/schema.prisma:464-482]