Canvas API 与管理
Canvas API 与管理
相关源文件
本章引用的主要源码文件:
.gitignoreapi/apps/restful_apis/agent_api.pyapi/db/services/canvas_service.pyapi/db/services/conversation_service.pybin/.gitkeepdeepdoc/parser/mineru_parser.pytest/testcases/test_http_api/test_session_management/test_agent_completions.pytest/testcases/test_http_api/test_session_management/test_agent_sessions.pytest/testcases/test_http_api/test_session_management/test_chat_completions.pytest/testcases/test_http_api/test_session_management/test_session_sdk_routes_unit.pytest/testcases/test_web_api/test_agent_app/test_agents_webhook_unit.pyweb/.eslintrc.cjsweb/src/components/collapse.tsxweb/src/components/embed-dialog/index.tsxweb/src/components/floating-chat-widget.tsxweb/src/components/home-card.tsxweb/src/components/next-message-item/group-button.tsxweb/src/components/pdf-drawer/hooks.tsweb/src/components/pdf-drawer/index.tsxweb/src/components/ui/sheet.tsxweb/src/hooks/use-agent-request.tsweb/src/interfaces/database/agent.tsweb/src/pages/agent/form-sheet/next.tsxweb/src/pages/agent/form/code-form/expanded-editor.tsxweb/src/pages/agent/form/code-form/index.tsxweb/src/pages/agent/form/code-form/monaco-config.tsweb/src/pages/agent/form/code-form/next-variable.tsxweb/src/pages/agent/form/code-form/schema.tsweb/src/pages/agent/form/code-form/use-values.tsweb/src/pages/agent/form/code-form/use-watch-change.tsweb/src/pages/agent/gobal-variable-sheet/index.tsxweb/src/pages/agent/hooks.tsxweb/src/pages/agent/hooks/use-build-dsl.tsweb/src/pages/agent/hooks/use-save-graph.tsweb/src/pages/agent/hooks/use-send-shared-message.tsweb/src/pages/agent/hooks/use-watch-form-change.tsweb/src/pages/agent/index.tsxweb/src/pages/agent/utils/build-output-list.tsweb/src/pages/agents/agent-card.tsxweb/src/pages/agents/agent-dropdown.tsxweb/src/services/agent-service.ts
本文档描述了 Canvas 工作流的 HTTP API 端点和管理操作。Canvas 工作流(也称为 Agent 或 DataFlow)是可视化工作流定义,支持创建、执行、版本管理和共享。关于 Canvas 执行内部机制的详细信息,请参见 Canvas 引擎与 DSL。关于组件架构,请参见 组件系统架构。
范围:本文涵盖 REST API 层、Canvas 持久化的数据库服务、会话管理、版本管理以及运行时状态处理。
API 路由结构
Canvas API 按功能组划分为模板管理、CRUD 操作和执行操作。这些功能主要在后台实现,并通过 SDK 和 Web 前端暴露。系统经过了大规模重构,以统一遵循 RESTful 规范。
标题:Canvas API 架构(代码实体)
来源:api/apps/restful_apis/agent_api.py:32-52、api/db/services/canvas_service.py:44-45、api/db/services/conversation_service.py:33-35、api/apps/sdk/session.py:54-140
Canvas 生命周期管理
创建与更新 Canvas
Canvas 的创建和更新涉及持久化定义图的领域特定语言(DSL)。系统使用 UserCanvasService 管理 UserCanvas 模型记录。访问权限通过 _require_canvas_access_sync 和 _require_canvas_owner_sync 等装饰器严格控制 api/apps/restful_apis/agent_api.py:71-97。
请求流程:
- 通过
UserCanvasService.query校验所有权api/apps/restful_apis/agent_api.py:94-95。 - 在
user_canvas表中保存或更新记录api/db/services/canvas_service.py:44-45。 - 通过
UserCanvasVersionService创建或更新版本快照api/db/services/canvas_service.py:27-27。 - 系统通过
CanvasReplicaService支持"副本"机制,用于管理冗余或扩展的 Agent 实例api/apps/restful_apis/agent_api.py:36-36。
检索 Canvas
系统提供多种方式来列出和检索 Canvas,支持按类别(Agent 与 DataFlow)和租户权限进行过滤。
| 服务方法 | 用途 | 实现位置 |
|---|---|---|
get_list | 租户的分页列表 | api/db/services/canvas_service.py:47-63 |
get_by_canvas_id | 详细视图,包含用户昵称和头像 | api/db/services/canvas_service.py:99-125 |
get_by_tenant_ids | 团队/共享访问的过滤列表 | api/db/services/canvas_service.py:142-185 |
get_all_agents_by_tenant_ids | 检索团队所有允许访问的 Agent | api/db/services/canvas_service.py:67-95 |
来源:api/db/services/canvas_service.py:42-195、api/apps/restful_apis/agent_api.py:71-97
Canvas 执行与会话
会话初始化
会话(对话)跟踪与 Agent Canvas 的多轮交互。当用户开始聊天时,create_agent_session 会初始化环境。
- DSL 检索:通过
get_agent_dsl_with_release根据release_mode是否激活来获取 DSLapi/apps/sdk/session.py:65。 - Canvas 重置:实例化
Canvas对象并调用canvas.reset()为执行做准备api/apps/sdk/session.py:72-73。 - 开场白生成:使用
canvas.get_prologue()填充初始消息api/apps/sdk/session.py:82。
对话处理
ConversationService 和 API4ConversationService 负责管理聊天历史的持久化。
- 创建:使用
get_uuid()生成唯一的session_idapi/apps/sdk/session.py:71。 - 持久化:逐轮消息被结构化并保存。系统使用
structure_answer格式化引用并处理"思考"块(例如<think>)api/db/services/conversation_service.py:73-110。 - 引用跟踪:引用和检索到的片段存储在
reference字段中,使用chunks_format格式化api/db/services/conversation_service.py:80-82。 - 规范化:前端和 SDK 使用
_normalize_agent_session将后端数据库记录转换为标准化的 JSON 结构以供显示api/apps/restful_apis/agent_api.py:116-145。
标题:Agent 会话执行(代码实体)
来源:api/apps/sdk/session.py:54-87、api/db/services/conversation_service.py:73-110、api/apps/restful_apis/agent_api.py:116-145
版本与模板管理
版本管理系统
UserCanvasVersionService 维护 DSL 快照的历史记录。
- 发布模式:用户可以在草稿 DSL 和"已发布"版本之间切换。
get_agent_dsl_with_release通过检查user_canvas_version表中的release标志来处理此逻辑api/apps/sdk/session.py:65。 - 最新版本:系统跟踪版本标题,以提供当前正在执行的迭代的上下文
api/apps/sdk/session.py:77。
模板管理
模板为各种 Agent 类型提供初始 DSL。
- CanvasTemplateService:管理
CanvasTemplate模型api/db/services/canvas_service.py:32-34。 - DataFlowTemplateService:用于以工作流为中心的 Agent 的模板服务别名
api/db/services/canvas_service.py:35-39。
前端管理界面
React 前端提供了管理这些实体的全面界面:
- AgentCanvas:用于编辑的主 React Flow 提供者
web/src/pages/agent/index.tsx:44。 - VersionDialog:允许用户查看和切换已保存的版本
web/src/pages/agent/index.tsx:71。 - FormSheet:一个滑出面板,使用
FormConfigMap配置单个节点参数web/src/pages/agent/form-sheet/next.tsx:49。
来源:api/db/services/canvas_service.py:32-43、api/apps/sdk/session.py:57-83、web/src/pages/agent/index.tsx:44-71、web/src/pages/agent/form-sheet/next.tsx:37-60