Files
makelore/.project-docs/10-decisions/ADR-2026-09-11-personal-cloud-agents.md
T

97 lines
16 KiB
Markdown
Raw 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.
# 个人云智能体平台
## Status
Accepted / implemented,2026-09-11 集成。产品范围、三端分工、创建者付费与预算范围均已获用户确认。历史提案保留原样,本文表达已接受规则。
## Decision
- MakeLore Agents 面向个人创作者,支持配置试用、发布、微信渠道、应用 API 与主动/定时任务;桌面不再提供指定账号分享入口,不引入组织、团队钱包或小智平台。
- Works Square 拥有账号、模块/模型资格、短期授权和唯一 Token Points 账本;Yuxi 拥有云配置、不可变版本、访问授权、原生 Request/FIFO/Run、worker、checkpoint、调度及资源;MakeLore Main 拥有凭据、网络、文件传输与账号隔离的本机恢复记录,Renderer 使用 typed Host API。
- 创建者为自用、分享、API、定时、预览及知识流程中另行发起的聊天模型调用付款;知识库 embedding 由平台承担,不计算用户用量、词元点数或智能体金额预算。调用者独享会话/文件,应用是独立主体。创建者只查看应用调用状态、版本、时间及费用元数据,付款不增加内容权限。
- 接受请求时固化身份、版本和配置;恢复与子调用沿用根 Request。每次真实模型调用检查当前访问资格,收费聊天调用另按当前服务端政策检查金额预算;embedding 不进入预算。
- 对用户承担费用的聊天调用,每 Agent 可设根请求/每日上限;空值不增加限制,0 阻止新收费调用。北京时间零点划日,按模型准入日归属;原钱包锁内统计结算与未决预占。降低上限影响后续调用。未知用量继续预占,供应商异常超预占按原 pending_review 核对,不宣称供应商账单绝对封顶。
- 日程建议只保存建议;手动/建议新建均默认停用,创建者核对能力、限制、结果和费用后启用。Agent 归档停用,恢复后保持停用;排队、运行或等待回答/审批的会话不能归档,活动状态取原生最新顶层 Run。旧版恢复只创建新草稿。
- 个人 MCP/Skill/子智能体与知识复用原生资源所有权。知识替换先完成新索引,成功后移除旧文档;失败保留旧资料。本人附件导入不借用付款者权限。客户端未确认操作在重启后由用户明确重试或丢弃。
### 知识文档处理与可用状态
2026-09-15:上传、对话附件导入与替换成功登记后,客户端自动提交既有解析索引操作;持续展示等待处理、正在解析、建立索引、可用于回答或失败原因。Main 持有传输与操作恢复,Renderer 每 5 秒在上次读取完成后刷新已加载页面,库切换隔离结果,读取失败保留旧状态。
可用性以 Yuxi 已索引状态和实际分块为准,零分块明确提示没有可用内容;空文本重建保留原有可用数据。替换只有新内容实际可用后才清理旧文档;清理失败及重试期间不抹去已有可用事实。处理请求未确认时复用原操作 ID,看到新持久 Task 后解除不确定提示,新 Task 失败后的新意图可再次重试。该交互更新先前需用户另行点击解析索引的操作说明,embedding 平台承担、访问权限与聊天计费规则保持。
## Embedding Ownership And Funding(2026-09-15 accepted / implemented)
知识库 embedding 由 Yuxi 独占模型 spec、供应商模型 ID、地址、API Key 与实际维度,并由 Yuxi API/worker 直连供应商。费用由平台承担,不计算用户用量、不预占或扣除创建者词元点数、不占用智能体单次/每日金额预算;供应商可不返回 usage。账号、模块、调用者与知识库访问权限以及运行时限仍然生效。聊天模型继续沿用 Works Square/one-api 的授权和创建者计费;知识流程另行调用聊天模型时也遵守该规则。
本次明确修订早期“知识模型调用均由创建者付款”的范围。客户端知识模型列表使用 Yuxi 的 id/name/dimension,不与 Works Square/one-api 取交集;供应商凭据留在 Yuxi。客户端知识模型列表沿用 id/name/dimension 契约,配置说明只指向 Yuxi,知识及预算页面明确平台承担向量化成本。 配置和范围说明见[使用说明](../../README.md)。
## Consequences
云执行沿用 Yuxi 原生运行体系,WS 既有 Code/Canvas Gateway 和 MakeLore Code/Pi 保持各自范围。复用现有钱包避免重复账本。部署需兼容三端版本、WS 0088/0089、Yuxi 正式 schema 迁移及身份/服务凭据配置。
## Desktop Workspace(2026-09-12 accepted / implemented)
- Agents 使用账号级全高桌面工作区,配置与试用独立滚动;分栏可调整、展开及恢复,小窗口切换配置/试用面板。编辑区以“我的要求”和“高级设置”两个 Tab 切换,默认展示基础要求;能力、知识、限制位于高级设置内,正式对话和自动任务保留独立入口。
- 编辑草稿、已保存配置与当前试用修订分别持有状态。明确保存及页内切换保留未发送内容、附件、历史和未确认请求;最新草稿经用户明确选择后开始新试用并保留未发送文字。旧请求重试继续使用原请求身份及修订,不能因保存而重新创建收费请求。隐藏但继续运行的对话不提前标记已读或覆盖最近访问位置。
- 费用上限位于限制分类并独立保存,仍是服务端即时政策。首版不包含自动保存或离线草稿同步;退出工作区仍提示未完成输入。
- 实现源 `dca6deab292028c9f3cfd097a8c52ba0d43b35a9`,见[源任务](../30-worklog/tasks/20260912-agent-draft-design-9d82c9b4.md)。最终 65 项相关测试、类型检查、scoped ESLint(无错误)、Vite 构建与 Windows Electron 验收通过;覆盖大小窗口和 Electron 125%/150% 内容缩放。云端使用 Host API fixture,不等于真实收费链路或 macOS/OS DPI 验收。
## Guided First Helper(2026-09-14 accepted / implemented,2026-09-15 amended)
- 智能体交互面向非专业用户和 8–15 岁学生;老师引导后由学生独立创建、试用和改进第一个助手。这是已确认的体验目标,不增加教师/学生权限或课堂管理模型。
- 创建使用用途选择、填写要求、保存试用的短引导。用途示例可编辑,也可自定义;基础要求包含名字、用途、回答方式和补充说明,高级能力/知识/限制通过“高级设置”Tab 进入。
- “我的要求”和“高级设置”采用明确选中态并支持方向键切换。首次进入高级设置显示能力,之后保留上次查看的高级分类;再次点击当前 Tab 不收起或重置内容。切换回到内容顶部,同时保留未保存的要求、资源搜索、知识表单、费用输入和当前试用;切换本身不保存或发送。实现源 `868ab54be6575ea6bd170d2ece7b7c8d4f6c0007`,验证见[源任务](../30-worklog/tasks/20260915-agent-editor-tabs-8c46f6f5.md)。
- `system_prompt` 仍是保存指令的唯一来源。回答方式只增删明确的自然语言指令行,其余自由文本原样保留。仅新建助手首次选择真实目录中的首个可用模型,用户可以修改;既有助手不自动换模型,不虚构推荐标记。
- 示例问题只填入输入框。“保存并重新试用”成功后使用保存返回的修订,保留输入文字或填回上一问题,不自动发送;旧试用可对比,文件仍按原会话下载。运行、排队、审批、附件或未确认操作阻止替换试用;单独保存继续保留当前会话。
- 执行确认展示实际动作和参数,并可展开完整详情;既有审批决策和操作身份保持。首次“自己使用”先确认可用状态与创建者付费,再调用既有发布操作并打开独立正式对话;分享/API/渠道及版本管理仍在后续入口提供。
- Renderer 继续通过 typed Host API 消费原有 create/save/publish 合同;Main、Yuxi 和 Works Square 的职责与恢复、计费规则保持。小窗口与缩放沿用桌面分栏能力。
实现源 `6e6a8c92ddb66747a71af714809e2205292a0bf9`,见[源任务](../30-worklog/tasks/20260914-agent-ux-discussion-930b45dd.md)。相关回归、类型检查、lint、生产构建与 Electron fixture 验收已通过;全量测试仍有与本改动无关的既有 Pi runtime v6/v7 断言不一致。未进行真实收费模型或学生可用性研究,不据此宣称实际学习效果已验证。
## Desktop Access Entry(2026-09-20 amended / implemented)
用户明确移除“分享给指定用户”模块。桌面入口改名“使用与接入”,保留关联微信渠道、应用 API、费用、启停和版本管理;不再显示账号查找、分享授权管理或分享链接。该决定替代早期桌面指定用户分享入口,既有服务端授权、访问合同和历史费用记录不变,不自动撤销已存在的授权。
源 `e047877`,见[源任务](../30-worklog/tasks/20260919-remove-agent-user-share-64b7c21e.md)。50 项相关单测、类型检查、scoped lint、构建和 Electron 场景通过。
## Personal WeChat Publication(2026-09-13 accepted / implemented)
- The native Channels page owns account creation, local QR rendering, login verification, direct use by the scanning account, enable/pause, route switch, disconnect, safe activity and failed-file retry. Agent publication provides a linked-account summary. Pairing codes, contact invitations, audience configuration and caller management are removed.
- Renderer uses typed Host operations. Main owns credentials, network, per-account durable original operations and file saving. Verification codes never enter the recovery journal; uncertain mutations require explicit recovery.
- QR payloads are encoded locally. Account or Provider-generation changes clear transient state. Each selected account exposes its connection and current target; budgets remain the existing Agent policy.
- Own WeChat conversations use dedicated Yuxi session endpoints for approval, stop/new session, complete history pagination and automatically refreshed deliverables. The creator cannot browse invited callers' content.
- The scanning owner's first message establishes their history and available notification conversation. Scheduled result notification requires an explicitly selected self target. Execution completion and WeChat delivery status remain distinct; retrying a failed file part does not run the model again.
Source `2e710db0fb512f276fda8ae8a3939d366b34a972`, [source task](../30-worklog/tasks/20260913-agentbus-channels-ml-3ec75b90.md). Final 81 focused tests, typecheck, production build and 2 Electron scenarios passed, with independent review PASS. Tests use local Host fixtures; real WeChat, billing, packaging and deployment acceptance remain pending.
## User-Owned WeChat Accounts(2026-09-14 accepted / implemented)
- 用户在 MakeLore 的“渠道 > 微信”统一管理多个个人微信账号;账号可以先创建、扫码连接,再选择自己已发布的智能体。每个账号只有一个可选当前目标,多个账号可路由到同一智能体。
- 2026-09-20:创建、验证码提交或轮询返回当前绑定会话已确认时,收起二维码和验证码输入、停止轮询,并显示该账号的连接成功与下一步指引。未选目标时引导选择和启用,已暂停时引导启用,已启用时引导回微信;不自动路由或启用。仅提交验证码不算成功,已连接账号重新连接时保留新二维码直到新会话确认。源 `c953126`,见[验证记录](../30-worklog/tasks/20260920-wechat-qr-completion-29ea4d7c.md)。
- AgentBus Core 的 ChannelAccount 继续拥有账号、当前路由、代次和操作回执;无目标创建默认停用,请求体不增加 `enabled` 字段。清空目标必须停用,切换或清空路由保留微信登录凭据与 Provider generation。
- Yuxi 提供用户级 `/api/makelore/channel-accounts` 与按操作 ID 恢复的接口。已有 Agent binding 仅索引当前路由,历史 caller/session 保留;旧渠道与无目标账号均按 Core 账号清单呈现。多个账号分别保留通知目标和会话隔离。
- MakeLore Main 继续拥有凭据、请求与持久恢复,Renderer 只消费 typed Host API。智能体发布页改为关联渠道摘要与跳转;活动记录及微信对话定位到明确选中的账号。
- 已完成操作优先读取既有回执,再处理首次操作才需要的发布/归档及 Worker 条件;恢复不能重放旧路由或重新调用模型。账号与目标始终限定在可信创建者身份内;原创建者计费、受邀调用者内容隔离及扫码本人免配对规则保持。
- 本节取代此前将创建、连接与路由都放在智能体发布页的入口设计。先更新 AgentBus Core 与 Yuxi API/worker,再使用新版客户端;本批没有新环境变量、数据库迁移,也不要求修改 Works Square 或微信 Adapter。
源提交 `b7d8b1298f02e4b10b6d0089594d48720efc03e7`,见[已审查源任务](../30-worklog/tasks/20260913-user-channels-ml-8d61e4a9.md)。独立 Reviewer 最终 Standards/Spec PASS;本地测试证据与线上验收分开,真实微信、生产部署及收费模型未因这次合并视为通过。
## Scan-Bound WeChat Accounts(2026-09-14 accepted / implemented)
- 谁扫码就绑定谁。一个账号只接受经过 Adapter/Core 验证的扫码身份;其他微信通过各自扫码连接,可分别选择同一个已发布智能体。
- 移除使用范围、邀请码、邀请兑换和单个调用者管理。账号级连接、路由、启停/解绑、活动、微信对话、文件和既有控制流程保留;Main 仍拥有凭据与恢复,创建者继续付款。
- 历史 invited caller/session 不更改内容归属,不允许新的入站、内部恢复或待发结果继续交付;旧邀请码回执取消。服务端保留历史表,不需要新增 schema 迁移。
- MakeLore 已删除相应 typed Host 操作与界面;旧恢复记录只能在本机显式丢弃,不请求已删除 API、不阻塞其他账号。定时通知仍从隔离的扫码账号会话选择目标。
- 本节取代上述旧章节中的邀请、受众配置和单 caller 撤销规则;历史源任务与已发生的集成记录保留。部署需配套更新 MakeLore 与 Yuxi API/worker,本批不修改 AgentBus/Works Square,不新增环境变量。
源 `21e707d`,见[源任务](../30-worklog/tasks/20260914-wechat-scan-owner-ml-b4169ea9.md)。独立 Reviewer Standards/Spec PASS,测试与生产边界以源记录为准;真实微信与收费模型仍需发布环境验收。
## Evidence And Limits
The creator no-code change explicitly replaces the earlier pairing step. See [reviewed source task](../30-worklog/tasks/20260913-wechat-auto-self-ml-3679bce2.md): 64 focused tests, typecheck, build, scoped lint and an inspected Electron scenario passed; independent review passed. Main remains the network boundary and Yuxi/AgentBus establish identity. Compatible backend and client deployment is required; historical connections missing scanning identity need one reconnect. No real WeChat acceptance or installer was produced by this change.
源:WS `0f1fb8af`、Yuxi `1df0142`、MakeLore `303f262`;本仓库见 [源任务](../30-worklog/tasks/20260910-personal-agent-platform-d15b2559.md)。本批独立 Reviewer 最终 PASS。源验证包含 WS 113 passed / 1 skipped 和预算 PG 4 passed,Yuxi 1985 non-slow unit / 19 HTTP-存储 integration 及归档最后补丁 3 integration,MakeLore 39 unit / Renderer tsc / build / Electron 1 passed。模型授权/供应商及沙盒释放有明确替身;MakeLore Main 全仓保留 61 项既有类型诊断。
真实收费模型对账、完整服务/ARQ/provisioner 与重启、安装包/协议/跨设备、生产迁移和部署仍待验收。并行 OSS 替换与远程 Milvus 部署由各任务集成和验收;本决策不接受其尚未合入的存储实现。