IT咖啡馆 X 老陈聊AIDeepSeek Harness 中文学习手册
切换手册章节
读懂 Agent 如何工作   /   28

动手验证一张报销回执的生命周期

你会亲眼看到四笔虚构报销只留下两条回执,再验证行政组和门店组怎样使用同一个“审批规则”名称。两段程序都在本地 Node.js 运行,零模型调用。

本篇目录 5 节
01

第一步,打开练习包里的 cordis-demo

  1. 解压练习包,进入 cordis-demo 文件夹。在这里打开终端,可看到 demo.mjs、scopes.mjs、package.json、package-lock.json 和 README.md。第一次做可先直接读下一节的四行预期。
  2. 运行 node --version 检查 Node.js,运行 npm ci --ignore-scripts --no-audit --no-fund 安装锁定依赖。首次安装需能访问 npm。示例验证环境为 Node.js v24.22.1、npm 11.9.0,依赖为 @deepseek-ai/cordis 4.0.5。
  3. 执行 node demo.mjs。练习数据和产出都留在进程内存,运行期间可以离线。桌面端无需安装这个示例,也不需要提供 API Key。
文本 / 代码
node --version
npm ci --ignore-scripts --no-audit --no-fund
node demo.mjs
02

第二步,逐行预测,再与终端对照

动作终端能让你核验什么
开始时只有回执台;提交 A00依赖缺席,回执台等待。草稿数为 0。
装上格式服务;提交 A01(28.5 元)回执台开始监听提交事件。出现 A01|28.50 元|待人工审核。
卸下格式服务;提交 A02监听随消费方暂停而清理,A02 没有回执。A01 已经生成,仍保存在本次进程的草稿数组中。
恢复服务;提交 A03(42 元)只新增 A03|42.00 元|待人工审核。两条回执均在,程序结束后已开放的回执台计数为 0。
03

第三步,在源码中找到三处因果关系

打开 demo.mjs。inject 列出回执台必须等到的格式服务。ctx.on 将一次提交接到格式化方法。ctx.effect 把“回执台营业”的标记与清理它的函数一起登记。卸下格式服务后,回执台的必需依赖消失,两项注册随之撤下;已经写进数组的回执仍由业务保存。

脚本中的 assert 会直接核对内容、数量和清理结果。在练习副本中把提交 A03 的金额从 42 改成 43,保留原来的断言,再跑一次。报错中应显示实际的 43.00 元与预期的 42.00 元。将金额改回即可重新跑通。

文本 / 代码
inject: ['officeFormat']

// 提交事件到来时,使用当前可用的格式服务。
ctx.on('office/submitted', (id, yuan) => {
  drafts.push(ctx.officeFormat.format(id, yuan));
});
04

第四步,验证行政组与门店组各用哪套规则

在同一个目录运行 node scopes.mjs。两个子上下文分别隔离 officeRule,各自提供行政组或门店组的审批规则。终端应显示“行政区 → 行政组;门店区 → 门店组;根上下文 → 未提供。”三个断言分别检查行政区、门店区和根上下文。

两个部门访问服务时用的都是 officeRule。名字相同而结果不同,是因为它们的查找位置不同。想复核,打开 scopes.mjs,先找到两个 isolate,再看三条 get 的接收者。

文本 / 代码
node scopes.mjs
05

卡住时看哪里

看到的现象下一步
命令找不到 node 或 npm安装可用的 Node.js,重新打开终端,再查版本。
npm ci 报缺少 package-lock.json切到解压出的 cordis-demo 文件夹。确保包清单和锁文件在同一层。
ERR_MODULE_NOT_FOUND检查依赖安装是否成功。运行时包名是 @deepseek-ai/cordis。
期待看到桌面插件或报销文件观察终端输出和断言。本题启动独立 Node.js 进程,使用内存草稿;要接 DSH 工具注册表,请接着读官方教程第七章。

来源与延伸阅读

配套资料

知识库与演示素材

知识库附录含录屏分镜。练习包里的 INDEX.md 可按题目查找会议简报、只读目录核对、Cordis 报销回执,以及门店销售和团队练习。

查看图片