> For AI agents: the complete documentation index is available at /llms.txt, the full documentation bundle is available at /llms-full.txt.

# Ask AI：官方 Agent 能力、账户与受控业务操作

我们要做的是一个能在 Retaintive 内理解当前工作、查证业务数据、提出并执行获准操作的助手。模型可以换，用户可以选择公司渠道或自己的 AI 计费渠道；工具、权限、业务记录和一致性仍由 Retaintive 管理。用户还需要看懂它的实际效果、谁付款、怎么排查问题。

**2026-10-04 02:49 UTC 状态：站内 test 已部署本轮加固，并完成指定长对话和取消场景复验；整体稳定性验收尚未完成。** 网站采用官方 Agents SDK。修复了 scoped Task 引用、历史权限过滤、有界 429 retry、共享 Outcome/Timeline reader 和每请求一次性恢复；真实测试又发现“缺证据却断言未转化”，已增加受限措辞检查并复测。此处记录的是 02:49 UTC 运行快照，当时代码仅在未合并 feature branch。当前 PR 状态见下方记录；未改 production。

**当前 review 状态（2026-10-04）：** 产品文档已提交 [docs PR #513](https://github.com/retaintive/docs/pull/513)；Ask AI 代码已提交 [infra PR #2619](https://github.com/retaintive/callytics-infrastructure/pull/2619)，同步 infra main `85adf7080`，功能尚未合并。只有原样 schema 基线修正 [#2611](https://github.com/retaintive/callytics-infrastructure/pull/2611) 已进入 main。production 放量条件由 [#2618](https://github.com/retaintive/callytics-infrastructure/issues/2618) 跟踪。本轮未修改共享数据库或重新部署，运行证据仍采用下方注明日期和版本的快照。

最新产品方向（2026-10-03 用户再次确认）：**聊天窗口必须留在 Retaintive 内**，不做让客户转去 ChatGPT / Claude 聊天的 connector、MCP 或 Marketplace 产品入口。当前主线继续站内 DeepSeek + 官方 Agents SDK，先加固连续追问、业务数据准确性和失败恢复；通用 Agent 能力优先复用官方 SDK，业务权限与最终写入由现有代码负责。普通客户直接使用 Retaintive AI，不要求理解 OpenRouter 或填写 API key。[商业接入申请与审批前后步骤](/ai/product/chatgpt-partner-application.md)已记录：用户已自行提交并提供 OpenAI 收件回执，等待产品匹配评估，尚未获批。站内订阅连接等待官方资格，不阻塞公司渠道；现有 API key 能力不代表最终普通客户入口设计。

本文是产品目标与可查看成果入口。工程契约与运行记录维护在 `callytics-infrastructure/openwiki/studio/ask-ai.md`；业务概念服从[产品北极星](/product-design/north-star.md)、[系统世界观](/product-design/system-worldview.md)和 [Task V3 contract](/product-design/v3/tasks-feature/task-domain-lifecycle.md)。

**发布流程事故补记（2026-10-04）：** 本任务曾将未合并 Ask AI 分支的 `0130` migration
提前应用到共享 test，违反已有发布流程，导致其他 PR 的 integration 和 test 部署被
migration drift 阻塞。用户用 [#2611](https://github.com/retaintive/callytics-infrastructure/pull/2611)
原样补齐 main 后恢复。上述功能复验不证明这一迁移操作合规。后续必须通过 Drizzle
generate → review / PR → merge → 同一 SHA 的 CI migrate / verify → deploy；合并前
只用 disposable branch 或本地 PostgreSQL，不直接改共享库、不改写已执行 migration。
此次只读核对了代码和 GitHub 结果，没有再次修改数据库或部署。

## 从对话历史还原完整目标

用户最初提出的重点是：能否直接使用 OpenAI / Claude 已经做好的 agent engineering，而不只是调用一次模型 API。后续明确要求看真实 demo、研究现有代码、区分账户和费用、支持权限内的业务修改，并优先保证功能和数据一致性。

| 原始目标                      | 本轮成果与边界                                                                               | 状态                                   |
| ------------------------- | ------------------------------------------------------------------------------------- | ------------------------------------ |
| 使用官方公开 harness，理解可复用的工程能力 | 站内采用官方 Agents SDK Runner；独立运行官方 Codex app-server。未把完整 ChatGPT / Codex / Claude 产品搬入网站 | 已实现、test / 本地分别验收                    |
| 站内体验可换模型，用户选择公司或自己的 AI 账户 | 公司 OpenRouter / DeepSeek；自带 OpenAI、Anthropic、OpenRouter API key。网站月费订阅连接需要官方接入条件      | API key 模式已实现；OpenRouter 真实成功；订阅外部阻塞 |
| 查业务数据，并处理用户原本可通过 UI 完成的操作 | 复用受限业务查询；首个动作是已有 managed Task 的 Next Action 改时间，必须点击确认                                | 查询与这一项受控修改已验收；全部 UI 操作未开放            |
| 把会话、费用、logs、数据一致性和重要预警做对  | owned conversation、逐轮 usage、付款人、取消、版本/幂等保护、安全诊断及监控                                    | 已实现、针对性验收；告警实际送达和 source maps 仍有边界   |
| 有看得懂、可操作、可交接的成果           | 设计原型、真实桌面/手机截图、test demo、本文和 OpenWiki                                                 | 已记录；production readiness 另行建设        |

因此，“test 第一版可用”对应一个已验证的阶段，不等于上述长期目标全部完成。

## 设计图与实际效果

### 历史设计原型

下面保存最初用于解释产品效果的设计图。它使用合成数据与模拟交互，表达助手、工具步骤、付款渠道和审批的位置；**不是当前部署截图，也不证明画面中的能力都已实现**。涉及 ChatGPT / Claude 订阅的连接画面只表达未来流程。

![Ask AI 历史设计原型，模拟数据与交互](/images/ask-ai-platform-design.png)

[打开可交互的历史设计原型](/diagrams/ask-ai-platform-design.html)。

还保留了“用户在外部 ChatGPT / Codex 客户端访问 Retaintive”的入口概念图，仅作为历史设计记录。**用户已明确排除这个产品入口，不在当前建设范围；尚未上线、未发布 Marketplace / MCP，也不代表网站可以直接使用订阅额度。**

![外部 ChatGPT / Codex 入口的历史概念，尚未上线](/images/ask-ai-platform-external-concept.png)

### 早期真实 test 截图

当前站内入口是既有页面旁的 Ask AI 面板。用户先照常登录 Retaintive，选择模型付款渠道；提问后看到真实工具进度、回答、可定位引用、费用状态，以及必要的改期卡片。

![真实 test 桌面：当前 Task 的改期预览](/images/ask-ai-platform-current-desktop.png)

![真实 test 手机：预览与 Confirm time change 按钮](/images/ask-ai-platform-current-mobile.png)

这些截图来自 2026-10-03 的合成 Task 验收：助手提出 10 月 9 日 15:00 的预览，未点击确认，因此实际 Task 仍安排在 10 月 8 日 15:00（America/New\_York）。旧截图里的预览会过期，体验时需要重新提问。

![真实 test 手机：已选择自带 API key 连接，并显示付款渠道](/images/ask-ai-platform-byok-mobile.png)

体验入口：[Retaintive test](https://studio-test.retaintive.ai)。需要对应测试门店权限。合成演示 Task 名称为 `Ask AI Smoke ask-ai-smoke-ae1dddaa`，显示门店为 Demo Studio；可以问“当前任务的下一步安排是什么”，或要求先预览改期。该任务没有自动外呼来源，本次没有发送真实电话或短信。

### 面板上的按钮做什么

```mermaid
flowchart TB
    A[登录 Retaintive · 当前门店权限] --> B[Ask AI 面板]
    B --> C[输入问题 → Send]
    C --> D[官方 SDK 调用受限业务工具]
    D --> E[校验答案与引用 → 显示回答和费用]
    C --> F[Stop → 取消请求]
    D --> G[修改时间请求 → 生成预览]
    G --> H[用户点击 Confirm time change]
    H --> I[既有 writer 检查权限、版本和幂等 → 保存]
    B --> J[AI accounts → 可选 API 连接设置]
```

| 控件                       | 用户操作后的效果                                                  | 是否修改业务数据                      |
| ------------------------ | --------------------------------------------------------- | ----------------------------- |
| `AI accounts` 设置图标       | 展开或收起 AI 账户设置；普通客户可以直接用公司渠道。现有 API key 表单是可选能力，仍待简化为高级入口  | 打开设置不修改；保存连接会保存加密凭据与 metadata |
| `New conversation` 回转箭头  | 从新话题开始；不携带旧会话上下文，旧服务端审计记录仍保留；提交或运行中禁用                     | 不修改 Task                      |
| `Close` ×                | 收起面板；页面上的 Ask AI 浮动入口可重新打开                                | 不修改 Task，也不代替 Stop            |
| `AI billing account` 下拉框 | 选择这一题由公司还是现有客户 API 连接付款；失败不会悄悄切回公司付费                      | 不修改 Task；提交/运行中或连接列表读取失败时禁用   |
| `Send` 纸飞机               | 提交当前问题，读取有权限的数据并生成回答；空输入、提交/运行中或打开 AI 设置时禁用               | 普通提问不写入；修改请求只生成预览             |
| `Stop`                   | 取消尚未结束的请求，迟到的答案不能覆盖取消状态；已用 tokens 仍可能计费                   | 不撤回此前已确认的业务操作                 |
| `T1` 等引用链接               | 打开对应的 Task / 数据来源，便于对照答案                                  | 不修改数据                         |
| `Confirm time change`    | 在预览有效时提交改期；后端再次检查权限、Task 版本和命令幂等性                         | 是，仅首版开放的 Next Action 时间修改     |
| `Save API connection`    | 保存可选的客户 API key 连接；API 项目额度和 ChatGPT / Claude 月费订阅是不同计费渠道 | 不修改 Task                      |

ChatGPT / Claude 订阅按钮当前没有可用的商业授权流程，不应让用户误以为填一个 API key 就接上自己的月费订阅。普通客户使用公司 AI 不需要完成这一步。

当前预览的到期检查位于 UI；写入复用既有 Task command，后端检查业务权限、版本和
幂等性，尚未将 proposal expiry 绑定为独立的服务端确认条件。这个 production 前的
缺口与“AI 不能自动保存”分别记录，不能用按钮禁用证明服务端已经拒绝所有过期提案。

## 2026-10-03 继续建设的决定

**产品决定**：聊天留在 Retaintive；普通客户直接使用公司 DeepSeek，不要求懂 API key
或 OpenRouter；优先借官方 SDK 的通用执行能力。先保证连续追问、数据准确性和失败
恢复。排除外部 ChatGPT/Claude connector 产品入口。ChatGPT 商业申请已收件、未批准，
等待期间公司渠道继续建设；API key 能力保留为可选能力，不代表最终普通客户入口。

**工程取舍**：保留官方 Agents SDK 0.18.0；安全的 provider HTTP 429 一次 run 最多额外
尝试一次，付款渠道不变，工具不重放。历史先过滤权限再取最近十轮。Task 引用由服务器
解析真实身份，正文引用一起验证；SMS 失败与计划不能冒充业务结果。读取 Task 关闭时
对齐实际 writer、保留时间毫秒和 Policy 守卫，把 Staff 审计归属与 Outcome credit 分开。

五分钟 Neon 巡检已在 test 改为每请求一次性 expiry，晚开始的请求有独立运行期限。
安排失败不启动付费 worker，恢复失败耗尽重试进入 DLQ；没有请求不报警。完整性检查
仍是请求触发抽查，晚确认未必再检查，DB insert→schedule 的 crash 仍靠下一次请求
兜底。Streaming、receipt-triggered audit/durable dispatch、所有关闭变体全量评测和
production rollout 继续待办，不能声称已完成。

早期本地验收 checkpoint：API 四组 227 pass、SDK/data/retry/schedule 七组 44 pass，真实
Neon 临时表超时 CAS 与历史权限 LIMIT 通过。最新真实 SDK 三轮合成 Task 问答正确区分
Next Action、Deadline 和未证明转化，Task version 5 与时间未变，模型费 `$0.00198024`。
这是指定场景的实测小样本，不代表所有业务问答准确，也不包含基础设施成本。

功能分支当时已同步 infra main `d6d858ede`，Ask AI 功能未合并；01:30 UTC 曾观察到 test worker/API 被后续 main
部署覆盖且 monitor 不存在。本轮已重新部署，下方旧截图/release 明确保留为历史证据。

## 本轮部署与真实验收（2026-10-04 02:49 UTC）

| 部分               | 当前 test release                                                                                              |
| ---------------- | ------------------------------------------------------------------------------------------------------------ |
| Worker / monitor | `33ffba7279b511029ec51a3419457433b30c40cd`；AWS Active / Successful                                           |
| API / Web        | `1620f69296bb73969f49878a193fb09599274e34`；test Pages `head` deployment `c4908aaa.studio-test-32h.pages.dev` |

真实长对话中，Task 工具正确报告没有已验证 Outcome，模型却两次写出“未转化”。只补
prompt 未能消除，因此增加服务端针对已发现 conversion 措辞的证据检查：同一句引用
的 Task 必须有匹配 canonical `lead_conversion` Outcome；重查缺失或异常会清除旧
支持。首次违规让官方 SDK 纠正一次，再犯拒绝发布答案和草稿，已知费用仍保存。
它不保证所有自由文本同义表达、人物绑定、复杂否定、时间范围和付款语义正确。

最新 query `b0f50d52-e039-4089-9a35-2847c53dd3b4` 在原长对话里成功，回答“当前记录
尚不能确认转化”，只有一次 Task 查询；三个模型 receipts、complete ledger、模型费
`$0.00098358`。旧错误答案保留为失败证据，不把 succeeded 请求状态等同业务答案正确。
Stop query `76645537-4730-4ada-9409-dc8f51913f6b` 落库 cancelled，页面显示 Stopped；
未 claim 运行（started\_at 为空），没有费用 telemetry，不伪造已知零成本。本轮只读验收前后 Task
snapshot 一致，version 5 和 Next Action `2026-10-08T19:00:00Z` 未改变。

![最新真实 test 桌面：有证据边界的回答、引用和本题费用](/images/ask-ai-platform-hardened-desktop.jpg)

![最新真实 test 手机：取消状态与最终只读回答](/images/ask-ai-platform-hardened-mobile.jpg)

普通 Playwright click 复验了设置、付款菜单、引用定位、关闭/重开、新对话、Send、Stop；
1280×800 与 390×844 没有面板横向溢出，console error 为 0，临时 viewport 已恢复。
root 全量 965 pass / 20 skip / 0 fail、API 四组 227 pass、最新 SDK 八组 63 pass、root
typecheck 和正常提交 hooks 通过；真实 Neon 五项只读/临时表验证通过。独立复核关闭
已发现的四个 guard 漏洞，另有八个失败重读探针通过；不代表所有业务语义全面验收。

CloudWatch 02:05–02:49 UTC 的 API/worker/monitor 未观察到 error event。一次性 Scheduler
callback 实际执行，首个 schedule 执行后自动删除，DLQ 三种消息计数为 0，三个 alarms
OK。impact/recovery 接 SNS；integrity 在 test 为 diagnostic、没有 notification action。
真实通知送达仍未验收。Sentry maps 带 Debug ID 配对留在本地，upload 缺写权限（HTTP403）。

本轮七条浏览器请求的已知模型费合计 `$0.00513720`，包含修复前错误答案；一次取消
没有费用 telemetry，不能把它当成完整账单保证，也不含基础设施费用。

## 到底借用了什么

模型负责理解问题和选择工具。harness 是围绕模型的执行机制，管理工具循环、运行生命周期和进度。Retaintive 提供业务工具，并决定什么数据可读、什么操作可写、谁付款和记录如何落库。

当前接入的是运行在我们服务器里的 **Agents SDK**，不是 OpenAI 托管 **Agents API** 的 Codex harness，也不等于完整 ChatGPT 产品。SDK 已支持 sessions 和 streaming；当前网站仍使用自有权限过滤的近期问答上下文与 polling，不能把官方支持当成本产品已经接入。后续优先评估复用官方实现，保留门店权限和最终答案校验。[官方运行与会话说明](https://developers.openai.com/api/docs/guides/agents/running-agents)。

| 层                | 可复用能力                                       | 本轮选择与 Retaintive 职责                                                     |
| ---------------- | ------------------------------------------- | ----------------------------------------------------------------------- |
| Agent runtime    | 官方运行循环、tool contract、生命周期、取消、输出校验基础         | 站内使用 `@openai/agents@0.18.0` Runner；业务授权仍在我们的代码                         |
| Model transport  | 原生 OpenAI transport 或多 provider adapter     | OpenAI 用原生 Responses；OpenRouter / DeepSeek 和 Anthropic 用 AI SDK adapter |
| 产品 UI            | SDK 可以提供事件/输出，产品接收后展示                       | 现有 Vue 面板、安全 Markdown、工具进度、引用与确认卡片由 Retaintive 实现                       |
| Session / data   | runtime 提供上下文运行能力                           | Neon 保存会话归属、问题、结果、引用与费用；我们重新核对历史权限                                      |
| 业务动作             | 模型提出使用某项能力                                  | 模型生成改期草稿，人点按钮后走既有 Task writer、版本、幂等和审计机制                                |
| Codex app-server | 官方公开的 thread、turn、stream、tool 和 approval 协议 | 本机当前个人 ChatGPT 登录的独立合成演示；未作为多用户网站后端                                     |

选择 Agents SDK 是结合当前 Lambda / Neon、既有工具和多模型需求的工程取舍。官方支持通过 AI SDK adapter 接其他模型；该 adapter 仍为 beta，需按选定 provider 验证。当前版本已固定，并保留 provider 多轮 contract tests。[官方 adapter 文档](https://openai.github.io/openai-agents-js/extensions/ai-sdk/)。

公开 SDK 代码作为依赖打包进我们的 worker，在 AWS Lambda 执行；模型通过选定 provider 的远程 API 运行。Neon 仍保存我们的业务记录，工具只查询权限范围内的结果，再将这些结果作为模型上下文发给所选 provider。自带 key 改变计费项目，不改变数据权限；也不意味着模型只在客户电脑计算。我们没有下载模型参数或完整 ChatGPT 产品的私有代码。

Codex 的公开 harness / app-server 是另一种可用路线，包含会话、事件流、工具与审批协议；应用继续拥有业务上下文和系统记录。开源 harness 与模型访问是两件事。[Codex 官方说明](https://developers.openai.com/blog/codex-as-a-platform)。

当前网站采用真实进度与 polling，结束后发布已校验的完整答案，**尚未实现逐 token streaming**。也没有开放任意 shell / SQL、MCP Marketplace、全部 UI mutation，或复制用户原 ChatGPT 的对话与记忆。

## 工具循环与确认写入

```mermaid
flowchart TD
    U[用户提出问题与页面 context] --> A[Retaintive API 核对身份 / 门店 / 付款渠道]
    A --> R[官方 Agents SDK Runner 请求选定模型]
    R --> T[模型请求业务工具]
    T --> G[我们的代码重新检查权限与输入]
    G --> D[从授权门店读取业务记录]
    D --> R
    R --> V[校验回答与服务器签发引用]
    V --> C[聊天显示答案 / 费用 / 可选改期草稿]
    C --> H{用户点击 Confirm time change?}
    H -->|未确认| N[Task 保持不变]
    H -->|确认| W[既有 Task API / writer 再次校验权限与版本]
    W --> S[保存新时间与事件 / command receipt]
    W -->|版本已变或时间不合法| E[拒绝并提示重新预览]
```

首个修改能力只调整已有 managed Task 的 **Next Action 时间**，保留行动内容。生成草稿时检查角色、DNC、Task 状态与身份、门店时区、夏令时歧义、未来时间和 deadline。卡片包含前后时间、理由、版本与有效期；聊天里回复“确认”不会保存。

确认复用现有 UI 的 Task 修改接口。相同 command 重试不重复改动；其他人已改 Task 时旧版本被拒绝。**草稿到期目前由 UI 在确认前检查，服务端既有 writer 没有核验 proposal 归属/到期的专门入口**；服务端仍强制业务权限、版本与时间约束。production 前需明确是否把草稿验证也收敛到服务端。不能把这个动作推广成“模型可以自由修改数据库”，也不能将 Task 改期当成课程预约、通话时长或业务 Outcome。

## 登录、token 和谁付钱

**Retaintive 登录决定业务权限；AI 计费连接决定这一轮模型请求由哪个 API 项目付钱。** 用户能登录某个模型账号，不会因此取得其他门店的数据权限。

```mermaid
flowchart LR
    U[用户] --> L[Retaintive 登录]
    L --> P[角色与 store_id 范围]
    P --> T[受限业务工具与确认操作]
    U --> B[选择 Ask AI 付款渠道]
    B --> C[Company AI：公司 API 项目]
    B --> K[自带 key：该 key 的 API 项目]
    B -. 后续需官方接入条件 .-> S[ChatGPT / Claude 月费订阅]
    C --> M[模型请求]
    K --> M
    T --> M
    I[Retaintive AWS / Neon / KMS / logs] --> T
```

| 方式                       | Ask AI 的模型账单                                  | Retaintive 继续承担               | 当前状态                    |
| ------------------------ | --------------------------------------------- | ----------------------------- | ----------------------- |
| Company AI               | 现有公司 OpenRouter API 项目                        | 平台运行、数据库、加密、logs，以及原有电话分析/转录  | test 真实成功               |
| 用户自带 API key             | key 所属 OpenAI / Anthropic / OpenRouter API 项目 | 同上，已有 call processing 不随该连接转移 | 三种接入已实现；OpenRouter 真实成功 |
| 用户 ChatGPT / Claude 月费订阅 | 需要官方允许的订阅使用路径，不能按 API key 处理                  | 平台运行与原有后台业务成本                 | 网站未开放                   |

API key 在服务端用 KMS 加密，绑定用户与连接；接口只返回 metadata，支持撤销。一次问题选择的付款人固定，key 无效、被撤销或额度不足时不会切换到公司渠道偷偷付款。第一版是用户自己的连接，尚未建设完整的组织 key 管理策略。

OpenAI 公开的 ChatGPT plan usage 路线面向开源/本地应用；付费或远程托管应用需要提交官方 interest form。我们尚未取得本站该路线的接入资格；公开本地流程不能作为 SaaS 接入已获准的证据。它也不提供原 ChatGPT 对话或其他账户 context。[官方适用范围](https://developers.openai.com/siwc/token-sharing-open-source)。Anthropic 要求第三方产品使用 claude.ai 登录/额度前事先获准；当前采用 API key 方式。[Claude 官方要求](https://code.claude.com/docs/en/agent-sdk/quickstart)。

用户在外部 ChatGPT / Codex / Claude 客户端通过 MCP 使用 Retaintive，需要独立授权与发布；用户已明确排除这个产品入口，本轮不建设、不发布它。

## 存储、排查与重要预警

Neon 记录 conversation 所属用户、query、结果、引用、进度、选定 provider / payer 和逐轮 usage。前端记录按环境与用户隔离，退出/切换身份会清理；模型历史按当前权限重新筛选。API key 不进入回答或 logs。默认关闭 OpenAI tracing 与敏感内容日志。历史自动保留/删除机制仍需 production 前补齐。

模型/工具前以及最终结果发布前重新检查权限；取消与终态采用条件更新，防止停下后被迟到结果改回成功。每轮已完成模型请求先保存 usage，失败或取消仍保留已知费用；未知/不完整费用不能当成零。工具输入允许一次纠正，数据库故障和撤权不进入该循环。安全诊断记录失败阶段、工具、错误类型与白名单字段，不写入原始错误正文或 SDK run state。

test 监控关注成批失败、已确认修改的证据不一致，以及恢复失败进入 DLQ；没有 idle heartbeat 报警。取消、撤权、客户 key 401/429 和孤立小错误不升级为系统预警。Task 一致性核对使用草稿、accepted event、command receipt 与 Timeline；目前为请求触发抽查，晚确认可能没有再次核对。具体阈值、恢复规则和操作步骤以 OpenWiki 工程页为准。

三个 CloudWatch alarms 在最后记录时为 OK，SNS 已接既有 dispatcher；**test 的一致性 alarm 为 diagnostic，未配置通知 action**。没有制造假 ALARM，Lark 送达尚未验收。Sentry source-map 上传因现有只读凭据返回 403；已保存 test 后端 maps 与补传计划，未声称上传完成，旧 Web build 没有生成 maps。

## 早期真实验收与版本快照

以下是 **2026-10-03 的 test snapshot**，并非“main / production 已包含”。infra source HEAD 为 `790571ee687dd36c6021b54eea2642d2726f7dc4`；运行部署版本与后续测试/文档提交分别记录：

| 部分               | test runtime release                       |
| ---------------- | ------------------------------------------ |
| Worker / monitor | `42333aabf178549aee7032d947eccd182898a21c` |
| API              | `baf438e239b2c2e2a45cc1d0d995dd2281d2ab09` |
| Web              | `20ee3b45d309d991ca902bee93251b07b56ff3e6` |

| 验收             | 真实证据与限制                                                                                                                                                  |
| -------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------- |
| 公司模型 / 提案预览    | query `ede2d47c-35a3-430b-b5f2-8454619468cc` 成功，约 `$0.000909`；未确认，Task 不变                                                                                |
| 自带 key 成功链路    | query `4c9c009d-51cc-448e-9573-bfe268f90157`：页面选连接 → KMS 解密 → 工具查询 → customer ledger → 撤销，费用 `$0.00087264`。使用现有测试 OpenRouter key 模拟客户连接，真实账单仍归原测试 API 项目 |
| 确认写入 / 重放 / 冲突 | 四次合法改期、四条 Timeline、四张 command receipts；重放 200 不重复增加版本，旧版本新命令 409。当前合成 Task version 5，Next Action 为 `2026-10-08T19:00:00Z`                                |
| 无外呼副作用         | 合成 Task 的 `task_change_outbox` 与 `rc_ring_out_attempts` 均为 0                                                                                             |
| 自动化验证          | 最新 runtime / recovery / provider / safe-error 22 项通过；此前隔离 Postgres monitor 15 项、worker gate / read-only、API / Web 以及浏览器验收记录保留；Node 24 typecheck 通过       |
| 尺寸与业务操作        | Playwright 桌面、tablet、mobile 核对，以及 Computer Use 查询/引用核对通过；截图使用合成数据                                                                                        |
| 本地个人 ChatGPT   | 官方 Codex app-server 完成两次合成工具调用与 streamed deltas；该实验未接网站真实业务，也未共享订阅给 SaaS 客户                                                                              |

OpenAI / Anthropic 的成功调用验证使用官方 SDK 的多轮 HTTP fixtures；未获得有效客户 key 完成这两种 provider 的真实付费成功请求。模型引用不存在的服务器 ref 会阻止答案发布；没有引用目前是 warning，不是 hard reject。合法引用通过权限与来源校验，也不等于所有回答语义通过完整业务评测。

失败记录保留：旧 `agent_run_failed` 缺少原始诊断，不能拿后来的错误复现冒充历史根因；本轮曾引入的 AI SDK adapter `outputSchema` 回归已修复并重新验收。不能以当前通过推断供应商永不失败或模型永不误判。

工程实现记录为 `callytics-infrastructure/.claude/specs/2026-10-03-ask-ai-platform-impl.md`。原始证据文件名：`verification.json`、`byok-success.json`、`health-verification.json`、`codex-personal-smoke.json`；交接位置和复验步骤由 OpenWiki 维护。可查看[脱敏验收摘要](/diagrams/ask-ai-platform-verification-summary.json)，它是历史记录，不代表当前运行健康。本文只保存必要的合成验收摘要，不包含 key、登录密码或用户私密对话。

## 成本与下一步条件

本轮沿用已有 AWS / Neon / Cloudflare / OpenRouter，未购买新服务。公司和 BYOK 样本中模型费是每题约千分之一美元量级，但不是固定价：工具轮数、上下文、缓存、模型和实时价格都会改变账单，基础设施另计。公司渠道目前有问题数量限制；尚未实现全公司硬美元预算。

本轮已选择按请求安排 expiry，空闲时不做五分钟 Neon polling。它减少空闲唤醒，不代表基础设施免费；production 前仍需按负载核算 Scheduler、Lambda、Neon、SQS、KMS 和 logs，并决定写入事件审计的范围。不会从本次小样本推定未来公司的总月费。

| 后续项                        | 当前处理与恢复条件                                                                               | 工程难点                         |
| -------------------------- | --------------------------------------------------------------------------------------- | ---------------------------- |
| ChatGPT / Claude 订阅接入      | 外部阻塞：先取得对应官方接入条件，再建设授权、refresh、撤销、额度与 workspace 隔离                                      | 资格与 auth 生命周期；不能复用个人订阅充当共享后端 |
| 草稿确认与更多业务写操作               | 当前确认依赖 UI 检查到期；production 前补 server proposal validation 的决策与验收。更多动作 DEFERRED，按业务优先级逐项设计 | 一致性与业务裁决；不是给所有 UI 操作套通用写工具   |
| Token streaming            | DEFERRED：确定传输、取消与最终答案校验/引用发布契约后实施                                                       | Lambda transport、迟到结果和显示状态   |
| 组织 key、硬预算与 retention / 删除 | production 前需要产品与数据政策，再实施及测试                                                            | 多用户归属、费用完整性、审计和删除范围          |
| 回答质量与更多真实门店场景              | 持续建设：准备人工确认的业务 scenarios / golden answers，按 provider 回归                                 | 区分工具/权限错误、数据缺失与模型理解错误        |
| Sentry maps / 告警送达         | source maps 缺写凭据；通知需真实渠道的独立受控验收                                                         | 发布权限、版本匹配及通知 routing         |
| Production 上线              | DEFERRED：完成上述必要政策、真实 provider 与业务验收、成本核算和上线 review                                      | 合并、迁移、配置、运行版本与 rollback 分别验证 |

难度以这些实际依赖和验收工作衡量，不在缺少接入资格、政策与样本时编造交付时长或供应商单价。
