Claude Code 系列第37期:用非交互管道做计划—执行—审查闭环
难度:进阶|动手时间:25分钟|成本:免费;需要 Claude Code、Git 和一个可测试的代码仓库
适用与环境:适合需要让编码代理批量处理小任务、又不希望它直接无审查落库的人。
# 在仓库根目录执行;先让代理只产出计划
claude -p "请阅读当前仓库,输出不超过10项的修改计划;不要写文件,不要运行危险命令。" > plan.txt
claude -p "读取 plan.txt,逐项实现;修改前说明将改哪些文件,完成后运行项目已有测试,并报告失败原因。"
claude -p "审查本次工作区差异:检查需求覆盖、越权修改、测试充分性和潜在安全问题。只输出审查报告,不要改文件。" > review.txt
git diff --check
git diff
验证与常见坑:成功标准:计划、审查和差异检查都有可追溯输出。常见坑是把多个步骤塞进一条模糊提示,导致代理跳过审查;解决办法是让每个阶段都有独立输入输出。涉及密钥、支付、生产部署时不要让代理自行执行。
下期预告:下期预告:进入权限控制与 hooks,把审查变成每次提交前自动触发的硬门槛。
参考:https://docs.anthropic.com/en/docs/claude-code
Hermes Agent 系列第37期:把日报生产拆成可恢复的多代理工作图
难度:进阶|动手时间:35分钟|成本:免费;需要 Hermes Agent、网页检索工具和一个本地工作目录
适用与环境:本期把常驻调度拆成检索、核验、写作、验收四个边界清楚的节点;主控持有状态、权限和最终写入权。
from dataclasses import dataclass, field
@dataclass
class Job:
topic: str
evidence: list[str] = field(default_factory=list)
draft: str = ""
verified: bool = False
def research(job):
job.evidence = ["官方公告链接", "论文或仓库链接"]
return job
def write(job):
if len(job.evidence) < 2: raise ValueError("证据不足,禁止成稿")
job.draft = "中文稿件:事实、来源、分析分区"
return job
def verify(job):
job.verified = bool(job.draft and job.evidence)
return job
job = verify(write(research(Job("今日 AI 行业日报"))))
print({"evidence": len(job.evidence), "verified": job.verified})
验证与常见坑:预期输出:{"evidence": 2, "verified": True}。常见坑是子代理拥有直接写最终文件的权限;应让子代理只返回结构化结果,由主控统一验收后落盘。真实工具名和调度配置以当前 Hermes 文档为准。
下期预告:下期预告:把工作图接入 cron 和失败重试,增加幂等键、断点状态与人工批准节点。
参考:https://hermes-agent.nousresearch.com/docs
Claude 模型系列第37期:用统一接口做模型成本与限流对账
难度:进阶|动手时间:30分钟|成本:约模型调用费用;需要 Python 3.11+、兼容 OpenAI SDK 的中转站地址和环境变量密钥
适用与环境:本期建立可迁移的成本记录层:每次调用保存模型、输入输出 token、耗时和错误类型。
import os, time, json
from openai import OpenAI
client = OpenAI(api_key=os.environ["MODEL_API_KEY"], base_url=os.environ["MODEL_BASE_URL"])
model = os.environ.get("MODEL_NAME", "请替换为供应商文档中的模型名")
started = time.time()
try:
r = client.chat.completions.create(model=model, messages=[{"role":"user","content":"请用三句话解释什么是上下文压缩。"}])
u = getattr(r, "usage", None)
print(json.dumps({"model":model,"elapsed_s":round(time.time()-started,3),"prompt_tokens":getattr(u,"prompt_tokens",None),"completion_tokens":getattr(u,"completion_tokens",None),"text":r.choices[0].message.content},ensure_ascii=False))
except Exception as e:
print(json.dumps({"ok":False,"error_type":type(e).__name__,"message":"调用失败,请检查地址、密钥、模型名或限流状态"},ensure_ascii=False))
验证与常见坑:运行前:pip install "openai>=1.0",再设置 MODEL_API_KEY、MODEL_BASE_URL、MODEL_NAME。成功时应看到中文回答和 token 统计;常见问题是中转站不兼容接口、模型名不存在或触发限流。
下期预告:下期预告:加入重试预算、熔断和上下文压缩前后的成本对比。
参考:https://platform.openai.com/docs/api-reference/chat