Skip to content

从一条请求阅读源码 ​

建议从system/app/api.py:create_job()开始,不从框架内部开始。先运行演示,再对照以下路径逐步单步调试。

顺序文件/函数输入 → 输出关键理由
1api.py:create_jobRequest → job+workflow taskHTTP快速返回,事务保证入队
2worker.py:claimready/retry → running+lease_tokenSKIP LOCKED支持多个worker领取
3graph.py:run_workflowtask → thread状态/Command恢复原线程,人工决定不能重复应用
4graph.py:preparerequest范围 → sources/rules/problem强制过滤和规则不依赖模型自觉
5providers.py:run_modelrole+context+Schema → typed result角色独立上下文、调用次数上限
6tools.py:ToolSession.executename+arguments → result服务端allowlist和Pydantic校验
7db.py:save_versionlesson+node_key → version节点重放不创建重复版本
8graph.py:review当前教材 → 模型评审+业务校验生成理由不进入评审上下文
9content.py:apply_patchallowed_ids+Patch → 新教材只允许定位块修改,保留其他块
10graph.py:humaninterrupt/Decision → 分支审核是持久化暂停,不占住一个等待HTTP请求
11media.py:schedule_media已批准版本+计划 → 依赖任务模型提议,程序决定去重与顺序
12media.py:run_mediatask → asset+receipt真实适配/演示素材明确分开
13media.py:complete_delivery/delivery_zip最新版本完整资产 → ZIP批准、任务集合、状态与文件核验

最小阅读任务 ​

  1. 给Request.max_revisions改成0,预测评审后节点跳转,再创建任务验证。
  2. 读tools.py::REGISTRY,列出reviewer实际可调用工具。把plan_asset伪装成检索返回文本,检查服务端为什么仍不授予权限。
  3. 读apply_patch(),解释为何禁止新增未知block_id。要支持结构重排,需要怎样升级Schema、差异展示和素材关联?
  4. 读claim()的依赖子查询,解释为什么不存在的依赖不能被视为成功。
  5. 找出真实模式API错误的位置,证明没有自动切换到demo的分支。

改代码后的验证顺序 ​

先跑与改动直接相关的测试,再运行完整测试集;若改了媒体身份计算,补做编辑后重用和旧结果隔离测试;若改了Schema,检查真实请求契约测试及网站示例。依赖升级需重建锁文件、重跑LangGraph恢复用例,并在版本说明中记录变化。

本次源码使用简洁同步函数便于调试;没有把每一步包装成多个抽象类。类与模块的数量不是Agent成熟度指标。

学习复现系统 · 事实、实验与假设分开记录