uart1 是一个 UART,和知道它是被测设备的调试 CLI,完全是两回事。DUT 上下文就是您一次性写下的那段叙述,让智能体在系统层面而不是零散导线的层面来理解您的实验台。
DUT 上下文保存在 /etc/lager/bench.json 中,并通过 MCP 资源
lager://dut/overview.md 和 lager://dut/context,以及 discover_dut() 和 cite_schematic() 工具提供给智能体。
需要编写的两样东西
1. 每个 Net 的用途
每个 Net 都带有一句话的 purpose,以及可选的 notes,另外还有两个给编写测试的人的字段:dut_connection(该 Net 落在被测设备的哪个位置:连接器、引脚或测试点)和 test_hints(一行一条的提示)。purpose、notes 和 tags 请在 Net 管理器 TUI 中设置:- Purpose —— “DUT debug CLI over UART; primary command/response channel.”
- Notes(可选)—— 注意事项、跳线位置、示波器探测点。
- Tags(可选)—— 供规划工具匹配的简短关键字,例如
flash、boot-critical。
purpose 和 notes 是给智能体阅读的文字。tags 是规划工具用来打分的关键字,而与测试目标匹配的标签是最强的相关性信号。您也可以不用 TUI 来设置它们:--dut-connection 和 --test-hint 是在 CLI 中设置这两个字段的唯一途径;TUI 只编辑 purpose、notes 和 tags。2. 整个 DUT 的上下文
DUT 上下文描述整块板子:它的用途、MCU、主要外设、子系统,以及文档引用。请用lager dut 命令组来编写它。
bench.json 中是这样的:
附加原理图和数据手册
Lager Box 不是文档存储库。它记录的是指向您文档的指针;智能体用它自己的(具备视觉能力的)工具去获取和分析这些文档。这样既让 Box 保持轻量,也让智能体能用最合适的工具去阅读 PDF 或电路板图片。 无需手工编辑 JSON 就能附加一个指针:DocRef)包含:
--url、--repo-path、--external-id 和 --external-url 中至少要提供一个。MCP 服务器加载 bench.json 时,会跳过一个都没有提供的引用,并记录一条警告。
URL 还是 repo-path:该用哪个
不在您项目中的文档
智能体会先在您的项目根目录中查找repo_path。如果那里没有该文件,它会在 ~/.lager_dut_docs/ 下按相同的相对路径查找。例如,智能体会在 ~/.lager_dut_docs/docs/sch.pdf 查找 docs/sch.pdf。
请把该目录放在您的项目之外。lager python 会上传项目目录并跟随符号链接,压缩后大于 20 MB 的上传会被拒绝。放在项目中或链接到项目中的 PDF 文件夹,可能会让每次运行都失败。
智能体如何使用它
写好之后,这份上下文会驱动整个智能体循环:-
智能体读取
lager://dut/overview.md,得知:“这是一台电源回归实验台, STM32H7,包含闪存和电源树子系统,原理图在docs/sch.pdf。” -
plan_firmware_test("flash driver", "exercise QSPI")返回的计划已经限定在闪存子系统上,并附有指向原理图第 3 页的指引。 -
cite_schematic("flash_cs")只返回该 Net 的引用:智能体用它自己的文件工具直接打开docs/sch.pdf的第 3 页 —— 不必扫描整个 PDF。
让改动生效
MCP 服务器监视/etc/lager/bench.json、/etc/lager/saved_nets.json 和
/etc/lager/box_id,并在其中任何一个在磁盘上发生变化时自动重新加载。因此,在 lager dut edit、lager dut add-doc 或 lager nets describe 之后,智能体在下一次 discover_dut()、discover_bench() 或
lager://dut/overview.md 请求时就会看到新的上下文 —— 不需要任何手动步骤。
您也可以立即强制重新加载,以确认某项改动已经生效。已连接的智能体可以以 action="reload" 调用 box_manage 工具,您也可以重启 Box 服务。
