协作人类代理协议 (CHAP)
CHAP存在的原因 你有代理在做实际工作。草拟代码审查,筛选工单,建议和解,审查合同。人类对每一个进行批准、编辑或拒绝。目前,这个决策存在于你的应用代码、聊天记录、工单评论和你的脑海中。当六周后出现问题时,重构发生了什么需要花费你四十五分钟,而且有一半是猜测。CHAP旨在为这些决策提供一个集中位置和一种结构。这是一个代理的草稿,人工的编辑是一个结构化的覆盖,其中包含diff、理由和你控制的标签。整个链条通过内容哈希链接在一起。你查询链而不是在四个用户界面中检索日志。这就是整个提案。 90秒的游览 一名独立开发者使用Cursor来审查拉取请求。机器人标记了一个“警告”,开发者对此表示不同意。这是整个交流的全过程,完整十足。下面的片段大约在六个标记步骤中运行23秒;对应的代码就位于下方。这是代码,每一行都在这里。下面的叙述是一个持续的故事,用两种语言表示;选择你实际使用的技术栈。 1. 启动工作区。 一个内嵌的协调器,使用SQLite持久化,两个参与者,一个工作区: TypeScript Python import { Coordinator } from "@brightbeamai/chap-coordinator"; import { SqliteStore } from "@brightbeamai/chap-coordinator/storage/sqlite"; const coord = new Coordinator({ store: new SqliteStore("./chap.db"), }); coord.api.workspace.create({ workspace: "wsp_pr_reviews", profiles: ["core/1.0", "review/1.0"], }); coord.api.participant.join({ workspace: "wsp_pr_reviews", from: "human:me@local", type: "human", }); coord.api.participant.join({ workspace: "wsp_pr_reviews", from: "agent:cursor#v1", type: "agent", }); from chap_coordinator import Coordinator from chap_coordinator.storage.sqlite import SqliteStore coord = Coordinator(store=SqliteStore("./chap.db")) def send(method, params): return coord.dispatch({ "jsonrpc": "2.0", "id": method, "method": method, "params": params, }) send("workspace.create", { "workspace": "wsp_pr_reviews", "profiles": ["core/1.0", "review/1.0"], }) send("participant.join", { "workspace": "wsp_pr_reviews", "from": "human:me@local", "type": "human", }) send("participant.join", { "workspace": "wsp_pr_reviews", "from": "agent:cursor#v1", "type": "agent", }) 2. 机器人草拟,你进行覆盖。 将你现有的Cursor集成连接到发出信封: TypeScript Python // 机器人的审查是一个任务的输出。 const { task_id } = coord.api.task.create({ workspace: "wsp_pr_reviews", from: "agent:cursor#v1", assignee: "agent:cursor#v1", kind: "code_review", input: { pr_id: "PR-482" }, }); coord.api.task.complete({ workspace: "wsp_pr_reviews", from: "agent:cursor#v1", task_id, output: cursorReview, }); coord.api.review.request({ workspace: "wsp_pr_reviews", from: "agent:cursor#v1", task_id, artefact: cursorReview, to: "human:me@local", }); // 你不同意一个评论。覆盖它。 coord.api.decide.override({ workspace: "wsp_pr_reviews", from: "human:me@local", task_id, intent_preserved: true, diff: [{ op: "replace", path: "/comments/0/severity", value: "info" }], rationale: "误报。框架" + "约定,而不是bug。", tags: ["false-positive", "framework-pattern-misread"], }); # 机器人的审查是一个任务的输出。 r = send("task.create", { "workspace": "wsp_pr_reviews", "from": "agent:cursor#v1", "assignee": "agent:cursor#v1", "kind": "code_review", "input": { "pr_id": "PR-482" }, }) task_id = r["result"]["task_id"] send("task.complete", { "workspace": "wsp_pr_reviews", "from": "agent:cursor#v1", "task_id": task_id, "output": cursor_review, }) send("review.request", { "workspace": "wsp_pr_reviews", "from": "agent:cursor#v1", "task_id": task_id, "artefact": cursor_review, "to": "human:me@local", }) # 你不同意一个评论。覆盖它。 send("decide.override", { "workspace": "wsp_pr_reviews", "from": "human:me@local", "task_id": task_id, "intent_preserved": True, "diff": [{ "op": "replace", "path": "/comments/0/severity", "value": "info" }], "rationale": "误报。框架" "约定,而不是bug。", "tags": ["false-positive", "framework-pattern-misread"], }) 关于表面。 TypeScript提供了一个类型化的外观(coord.api.*),因此每个方法都具有完整的自动补全和编译时检查。Python在表面上保持JSON-RPC信封的形状(coord.dispatch({...})),而消费者则根据调用站点的需求进行包装;send()助手是Python测试所使用的惯例。两条路径发出的字节完全相同;审核链是逐字相同的,无论哪个客户端进行了调用。 3. 两个月后,分析你...
本站免费、广告极少。如果觉得有帮助,可以请我们喝杯咖啡 —— 任何金额都对持续运营有实际帮助。
☕请我喝杯咖啡