HN 日本語サマリー

← 一覧へ戻る
オープンソース

Collaborative Human Agent Protocol (CHAP)

Collaborative Human Agent Protocol (CHAP) (github.com)

20 pointsby arsalanshahid4 コメント

要約

CHAP (Collaborative Human-Agent Protocol) は、人間とエージェントが協力して作業を行うためのプロトコルです。エージェントが作成したドラフトと人間の編集内容を、クエリ、再生、検証可能な「エンベロープ」として保存します。これにより、問題発生時の原因究明が容易になり、開発プロセスにおけるエージェントの意思決定の履歴を追跡・分析することが可能になります。

全文翻訳

Collaborative Human-Agent Protocol (CHAP) 人間とエージェントが協力して実際の作業を行うためのプロトコルです。ボットが何かを作成し、人間がそれを編集した場合、その編集はどこに保存されるのでしょうか?CHAPでは、クエリ、再生、そして6ヶ月後に検証できるエンベロープに保存されます。 インストール · 90秒ツアー · 12のシナリオ · このリポジトリについて · ペーパー CHAPが存在する理由 エージェントが実際の作業を行っています。コードレビューのドラフト作成、チケットのトリアージ、和解案の提案、契約書のレビューなどです。人間はそれぞれを承認、編集、または拒否します。現在、その決定は、アプリケーションコード、チャットスレッド、チケットコメント、そしてあなたの頭の中に存在します。6週間後に問題が発生した場合、何が起こったのかを再構築するには45分かかり、半分は推測になります。CHAPは、それらの決定を置く場所を1つ、それらを置くための形状を1つ提供します。エージェントのドラフトは成果物です。人間の編集は、差分、根拠、およびあなたが制御するタグを持つ構造化された上書きです。すべてがコンテンツハッシュによって連鎖します。4つのUIにわたるログをgrepする代わりに、チェーンをクエリします。それが全体のピッチです。 90秒ツアー ソロ開発者がCursorを使用してプルリクエストをレビューしています。ボットが「警告」をフラグ立てしますが、開発者はそれに同意しません。ここに、最初から最後まで、すべてのやり取りがあります。以下のクリップは、6つのラベル付きステップで約23秒実行されます。対応するコードはすぐ下にあります。そして、ここにコードがあります。すべての行です。以下の物語は、2つの言語で1つの連続したストーリーです。あなたが実際に使用するスタックを選んでください。 1. ワークスペースを起動します。SQLite永続化を備えた組み込みコーディネーター、2人の参加者、ワークスペース: TypeScript Python ```typescript 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", }); ``` ```python 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 ```typescript // The bot's review is the output of a task. 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", }); // You disagree with one comment. Override it. 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: "False positive. Framework " + "convention, not a bug.", tags: ["false-positive", "framework-pattern-misread"], }); ``` ```python # The bot's review is the output of a task. 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", }) # You disagree with one comment. Override it. 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": "False positive. Framework " "convention, not a bug.", "tags": ["false-positive", "framework-pattern-misread"], }) ``` サーフェスについて。TypeScriptは型付きファサード(coord.api.*)を出荷するため、すべてのメソッドで完全なオートコンプリートとコンパイル時チェックが可能です。Pythonはサーフェス上にJSON-RPCエンベロープ形状(coord.dispatch({...}))を維持し、コンシューマーは呼び出しサイトに合わせて自由にラップします。send()ヘルパーは、Pythonテストで使用されるイディオムです。どちらのパスも同一のワイヤーバイトを生成します。監査チェーンは、どのクライアントが呼び出しを行ったかに関わらず、バイト単位で同一です。 3. 2ヶ月後、自分が何をしてきたかを分析します。ここでプロトコルがあなたに報います。リファレンスリポジトリは、両方の言語で監査チェーン(HTTP経由またはSQLiteファイルから直接)を読み取り、上書きをグループ化する分析スクリプトを出荷します。 # TypeScriptリファレンス、SQLiteStoreに対して(ステップ1から): $ npm --prefix reference/core-plus-review run analyze -- --db ./chap.db wsp_pr_reviews # Pythonリファレンス、同じ考え方: $ python3 reference/python/analyze_overrides.py --db ./chap.db wsp_pr_reviews Override Learning Report ======================== Total overrides: 47 By tag: false-positive ████████████████ 31 (66%) framework-pattern-misread ███████████ 22 (47%) cosmetic-pref ████ 8 (17%) Top file paths: src/handlers/ 18 overrides src/components/ 9 overrides Cursorの次のプロンプトの改訂は、もはや推測ではありません。パターンを名前で引用します。 上書きエンベロープ、詳細 上書きエンベロープはCHAPで最も重要な形状です。すべてのフィールドにはジョブがあります: 最初の読書でほとんどの人が見落とす2つのフィールドは、intent_preservedとtagsです。intent_preservedは、洗練された上書き(人間はエージェントの決定に同意したが、その表現方法を書き直した)と、置換的な上書き(人間は異なる決定を下した)を区別します。これらは2つの異なる失敗モードであり、異なる修正を必要とします。あるポリシー条項の周りで高い洗練率が見られる場合、エージェントの取得がオフになっていることを意味します。同じ条項で高い置換率が見られる場合、ポリシー自体が曖昧であるか、エージェントのタスクコンテキストが間違っていることを意味します。tagsは、チームが合意した制御された語彙です。小さく保ってください。そこに入力したものは、3ヶ月後に集計する次元となり、「どのプロンプトを修正する必要があるか?」や「ボットが一貫して間違っているパスはどれか?」といった質問に答える際に役立ちます。 インストール TypeScript / Node: npm install @brightbeamai/chap-coordinator Python: pip install chap-coordinator どちらのパスでも、Coreとreview/1.0プロファイル、および実行可能なリファレンスが得られます。TypeScriptリファレンスはreference/にあり、Pythonリファレンスはreference/python/にあります。TypeScriptライブラリはpackages/coordinator/にあり、Pythonライブラリはpackages/coordinator-py/にあります。5分間のハンズオンウォークスルー:examples/00-five-minute-start.md。 本日出荷されるもの CHAP 0.2は公開ドラフトです。具体的には、このリポジトリには以下が含まれます: 仕様。Core(7つのメソッド、1つのエンベロープ、1つのワイヤーフォーマット)と11のオプションプロファイル。SPECIFICATION.mdで単一のドキュメントにまとめられているか、core/SPEC.mdおよびprofiles/から個別に読むことができます。 2つのリファレンス実装。どちらもCoreとすべてのプロファイルを含み、合計39のメソッドハンドラがあります。TypeScriptリファレンスはpackages/coordinator/にあり、HTTPサーバーはreference/core/およびreference/core-plus-review/にあり、ローカルLLMを備えた2つのブラウザセッションを持つ実行可能なプレイグラウンドはreference/playground/にあります。Pythonリファレンスはpackages/coordinator-py/にあり、HTTPサーバーはreference/python/にあります。どちらもコンフォーマンスハーネスに合格しています。