エージェント型開発のための認知DSL——合成エージェント・ワークフローのためのYAML入力・処理・出力インターフェース

著者: Asher Bond (asher.bond@distillative.ai)

要旨

エージェント型ソフトウェア開発——計画し、生成し、実行し、検証し、成果物を梱包するLLMエージェント——には、それを動かすモデルとは切り離して、エージェントが何をなすべきかを「指定する」ための明快な手段が要る。本稿が提示するのは認知DSL、すなわちワークフローを高階関数(HOF)の合成として書き下す小さなYAML記法である。各HOFは原子関数から組み上げた名前つきの段(ステージ)であり、あらゆる関数は明示的な**入力・処理・出力(IPO)**の三つ組として宣言される。この記法は関数合成をそのまま人間可読な形で符号化したものであり [1, 2, 3]、エージェントの計画を散文プロンプトのなかに埋もれさせるのではなく、検査可能・差分可能・再実行可能なものにする。本稿では記法そのもの、「あらゆる言語でのHello, World」という実例仕様、そして検証・再試行ループを示す。本稿の貢献はインターフェースにある——エージェント・ワークフローを、インタプリタが実行するデータとして書き下す方法である。

1. はじめに

プロンプト駆動のエージェントは、その計画を暗黙裏に、検査も版管理も検証も難しい自然言語の指示として符号化する。本稿はその明示的な代替を与える——計画をデータとして書け。ワークフローは一つのYAML文書となり、その最上位は順序づけられたHOF段(計画、コード生成、実行、検証、梱包)の並びであり、各段は原子関数の合成であり、各関数は宣言された入力・処理・出力の三つ組である。エージェントは散文から即興で振る舞うのではなく、この仕様を「解釈する」。

設計に風変わりなものは一つもない。計算を原子関数上の高階関数として編成するのは、関数合成の標準的な作法にほかならず [1, 2, 3]、各単位を入力・処理・出力として表現するのは計算機科学で最も古い分解である。ここでの一手は、その構造をエージェントの「著述される表層」とすること、それによって計画を読み、査読し、決定論的に再実行できるようにすることである。

2. 関連研究

関数合成。 本記法の意味論は、関数レベルプログラミング [1]、高階関数と遅延合成がもたらすモジュール性 [2]、そして第一級の値としての関数 [3] のそれである。原子関数を順に並べるHOF段は compose であり、一つの関数を言語のリスト全体に適用する段は map であり、再試行ループは有界な不動点である。

LLMエージェント。 このDSLを解釈するエージェントは、Transformerを基盤とするモデルである [4, 5]。それらが幻覚を起こしやすいことは文書化されており [6]、まさにそれゆえに本記法は「検証」段を、後付けではなく、あらゆるワークフローの第一級かつ必須の部分とする。

再裁定による信頼性。 DSLの継続的改善ループ——生成し、検証し、精錬し、再検証する——は、self-consistency [7] が推論に対して具現する「候補を産出し、しかるのちに裁定する」のと同じパターンである。DSLはこれを、検査可能な出力を持つあらゆる段へと一般化する。

3. 記法

ワークフローは一つのYAML文書である。その文法は三つの階層を持つ。

  1. プロジェクト(Project) —— 目標に名前を与え、順序づけられたHOF段を列挙する。
  2. HOF段(HOF stage) —— 宣言された入力、原子関数からなる順序づけられた process、そして出力を持つ、名前つきの局面。段は合成される——ある段の出力が次の段の入力となる。
  3. 原子関数(Atomic function) —— 葉となる単位であり、明示的な inputprocessoutput フィールドを備えた type: atomic_function として宣言される——すなわちIPOの三つ組である。非原子の葉型が二つ存在する。loop(条件に対する有界な再試行)と user_action(人間を要する手続き)である。

計画をこのように書くことがそれをデータにする——文法に照らして検証され、改訂をまたいで差分され、そして各 process を埋める特定のモデルとは独立に、インタプリタのもとで決定論的に実行される。

4. 実例——「あらゆる言語でのHello, World」

以下の仕様(全文からの抄録)は、記法の実際を示す。これは**[ILLUSTRATIVE]**である——記法の形を示すものであって、測定された実行ではない。

project:
 name: "Hello World in Every Language"
 description: "Generate, execute, and validate 'Hello, World!' programs in multiple languages."
 steps: [planning_HOF, code_generation_HOF, execution_HOF, validation_HOF, packaging_HOF]

planning_HOF: # HOF stage: Input -> Process(atomic functions) -> Output
 input: "user_prompt"
 process:
 - identify_languages: { type: atomic_function, input: "user_prompt", process: "select_languages", output: "language_list" }
 - setup_project_structure: { type: atomic_function, input: "language_list", process: "create_folder_structure", output: "project_structure" }
 output: "project_plan"

validation_HOF: # the mandatory validate-and-retry stage
 input: "initial_execution_results"
 process:
 - validate_outputs: { type: atomic_function, input: "execution_logs", process: "check_output_for_hello_world", output: "validation_report" }
 - fix_errors: { type: atomic_function, input: "validation_report", process: "identify_and_fix_errors", output: "refined_code_files" }
 - continuous_loop:
 type: loop
 condition: "until all programs output 'Hello, World!' correctly"
 actions: [validate_outputs, fix_errors, reexecute_and_revalidate]
 output: "validated_code_files"

あらゆる単位はIPOの三つ組であり、段は左から右へと合成され、validation_HOF はその条件が成り立つまで再実行する有界なループを担う。再試行の予算が現実のインタプリタにおいてこのループを有界にするため、充足不能な条件は空回りするのではなく明示的な失敗として終端する——YAMLの condition は意図を述べ、インタプリタが終端を強制する。

5. なぜ明示的な記法か

計画を散文としてではなく、合成されたIPOデータとして書くことから、三つの性質が導かれる。

根拠と適用範囲

認知DSLはインターフェースであり、指定され、端から端まで実演されている。それは一つの記法を定義する——計画はインタプリタが実行するデータであり、その価値——検査可能性、決定論的な継ぎ目、構造的検証——は記法の性質であって、それを読むことによって検証できる。二つの契約はインタプリタと記法に属し、記法はそれらを明示的に述べる——各段の入力・出力の境界、そして充足不能な条件のもとで検証ループを終端させる有限の再試行予算である。「認知DSL」「HOF段」「原子関数」は、通常の関数合成 [1, 2, 3] に対する本コーパスの用語である。

参考文献

  1. John Backus (1978). Can Programming Be Liberated from the von Neumann Style? A Functional Style and Its Algebra of Programs. Communications of the ACM. [1977 ACM Turing Award Lecture]
  2. John Hughes (1989). Why Functional Programming Matters. The Computer Journal.
  3. Christopher Strachey (2000). Fundamental Concepts in Programming Languages. Higher-Order and Symbolic Computation. [Reprint of 1967 lecture notes]
  4. Ashish Vaswani et al. (2017). Attention Is All You Need. Advances in Neural Information Processing Systems (NeurIPS). arXiv:1706.03762.
  5. Tom B. Brown et al. (2020). Language Models are Few-Shot Learners. Advances in Neural Information Processing Systems (NeurIPS). arXiv:2005.14165. [GPT-3]
  6. Ziwei Ji et al. (2023). Survey of Hallucination in Natural Language Generation. ACM Computing Surveys. arXiv:2202.03629.
  7. Xuezhi Wang et al. (2023). Self-Consistency Improves Chain of Thought Reasoning in Language Models. International Conference on Learning Representations (ICLR). arXiv:2203.11171.