← 기사 목록
日本語https://qiita.com/tags/llm/feed

「有向グラフ型ワークフロー」はもう限界。Gemini × TypeScriptで「2ステップ目の崖」と「伝言ゲーム」を突破する30行の爆速自律エージェント実装

추출된 키워드

34
Gemini·5TypeScript·5自律エージェント·5Synapse·5有向グラフ型ワークフロー·5AIエージェント·4状態駆動型·4State-centric·42ステップ目の崖·4伝言ゲーム·4マルチエージェント·4Global State·4オーケストレーター·3プロンプトインジェクション·3スパゲッティ・ワークフロー·3外部メモリ·3カプセル化·3推論ループ·3Local State·3フロントエージェント·3Agent Development Kit·3ADK·3ReAct·3Gemini API·3Google AI Studio·3Gemini 2.5 Flash·2Node.js·2npm·2GitHub·2LangGraph·2Dify·2GeminiAdapter·2Network·2Aggressive Summarization·2

원문

13,307
「有向グラフ型ワークフロー」はもう限界。Gemini × TypeScriptで「2ステップ目の崖」と「伝言ゲーム」を突破する30行の爆速自律エージェント実装

「有向グラフ型ワークフロー」はもう限界。Gemini × TypeScriptで「2ステップ目の崖」と「伝言ゲーム」を突破する30行の爆速自律エージェント実装

近年、話題沸騰中の 「AIエージェント(自律的に考えてツールを叩いて課題を解決する仕組み)」
個人開発や業務効率化で一度は作ってみた方も多いのではないでしょうか?

しかし、Dify や LangGraph などのノーコード/ローコードツールを使って「有向グラフ(固定の分岐や検証ノード)」を静的に線で繋いでいくと、以下のような壁にぶつかりがちです。

  • AIの判断ミスをカバーしようとノードや差し戻し分岐を増やしていくうちに、人間が制御しきれない**複雑で硬直化した「スパゲッティ・ワークフロー」**になってしまう。
  • マルチステップのReActループを回すと、2ステップ目に入った瞬間から極端にAIの精度が低下する。
  • AI同士に連携を任せると、重要な情報が途中で欠落し、**「伝言ゲームの崩壊」**が起きる。

これらの課題を、「エージェントの外部メモリ(状態:State)」 をシステムエンジンが自動制御することで根本から解決する、TypeScript 製の超軽量・最先端 AI エージェントフレームワーク 「Synapse」 が公開されました!

現在オープンベータ期間につき、完全無料・無制限(ライセンスキー不要、何エージェントでもOK) で利用可能です。

この記事では、Google AI Studio の API キーだけを使って、30行程度のコードで「自分で計画を立てて、ツールの結果を見て自己レビューし、軌道修正しながらタスクを完遂する本格的な自律型AIエージェント」を構築するクイックスタートと、その圧倒的に美しく強固な設計思想の裏側を豪華な図解とともに解説します!

1. 状態駆動型(State-centric)エージェントとは?

従来の多くのエージェントは、AIモデルに実行ログ(チャット履歴)をそのまま見せて「次は何をする?」と考えさせていました。

Synapse は、AIモデル自身に履歴をだらだら読ませるのをやめ、システムが外側に 「State(確定事実、仮説、計画タスクなどの記憶の箱)」 を保持します。

📊 有向グラフ(ワークフロー)型設計のイメージ

従来のワークフロー型は、人間が「分岐・検証・リトライ」のノードを静的に線で繋ぐ設計であり、AIをただの固定パーツとして扱うため、非常に硬直化しやすくなります。

🔁 既存のループと何が違うのか?「1単位のエージェント」への完全カプセル化

この「計画 ➔ 実行 ➔ 評価」という推論ループ自体は、一見すると既存の ReAct フレームワークと同じように見えるかもしれません。しかし、既存の仕組みと決定的に異なるのは、この全プロセスが外部の制御フローではなく【1単位のエージェント】の中に完全にカプセル化されて閉じている点です。

エージェント自身は、最初に立てた計画に縛られることなく、「短期記憶(手元のメモ帳)」に自分なりの計画を立ててツールを実行し、その結果からエッセンスだけを取り出して、全員が見る「共有ホワイトボード(Global State)」へと綺麗に書き出します。

そして、「目的を達成する情報が完全に揃う」と自己評価(ステップ3)がパスするまで、このループを自律的に周回します。

既存の有向グラフ型ツールなどでは、エージェントを動かすために「計画ノード」「ツール実行ノード」「評価ノード」を、人間が外側から線で繋いで制御する必要がありました。そのため、エージェントを増やしてマルチエージェントにしようとすると、システム全体の管理グラフが指数関数的に複雑化し、容易に設計が破綻します。

Synapse では、この美しい 3ステップの自律思考ループは、あくまで 「1つのエージェントが持つ独立した脳細胞(推論プロセス)」 です。

裏側で AI がどれほど泥臭く「実行 ➔ 評価 ➔ 計画更新」を繰り返していようと、それはエージェント単体のプライベートな営みとしてカプセル化されています。そのため、マルチエージェントシステムを構築する際も、開発者は複雑な連携フローや個別ステートの相互監視に頭を悩ませる必要は一切ありません。

「この自律した脳(エージェント)を、新しく1人ポコッと生やすだけ」

これだけでマルチエージェントの追加が完了します。個別の連携管理やステート制御は不要になり、全員が「共有ホワイトボード」だけを介して時系列の文脈を保ちながら自律協調するため、驚くほどシンプルで強固なシステムを維持できます。

なお、「ユーザーに最終回答を届けること」自体も、Synapse のシステム上は例外なく「実行フェーズ(ステップ2)」の1つのアクションとして扱われます。

評価(ステップ3)で「情報が揃った!」と判断された場合、次のサイクルで実行されるアクションが『最終回答の出力』へと切り替わります。そして、その「最後の実行フェーズ(ステップ2)」において最終回答が物理生成・出力され、ループを抜けるという、一貫した美しい制御フローになっています。

2. 爆速30行クイックスタート!

Google AI Studio で手に入る無料の Gemini API キーをご用意の上、以下の手順で進めてください。

① インストール

Node.js (v18以上, ESM推奨) プロジェクトで以下を実行します。

npm install @synapse-agent/framework

② 実装コード (
agent.js
)

Gemini API を使用して、自律的に「ユーザー情報を分析し、タスクを処理する」エージェントを動かす最小コードです。

import { Network, GeminiAdapter } from "@synapse-agent/framework";

// 1. 推論エンジン(Gemini)のセットアップ
const llm = new GeminiAdapter({
  apiKey: process.env.GEMINI_API_KEY, // Google AI Studio のキー
});

// 2. エージェントの役割と使用するツールを定義
const agents = [{
  name: "analyst_agent",
  prompt: "あなたは優秀なデータアナリストです。状態駆動(State-centric)で、自律的に思考し計画を立て、依頼を処理してください。",
  tools: ["fetch_user_profile"],
}];

// 3. ツールの仕様と「評価基準」を定義
const tools = [{
  name: "fetch_user_profile",
  summary: "ユーザーIDから詳細プロフィールを取得します。",
  schema: {
    args: [{ name: "userId", type: "STRING", required: true, desc: "ユーザー識別ID" }]
  },
  // AIがこのツールの結果を評価するための基準(重要!)
  evaluation: "取得したユーザーの登録日(joinedDate)が2年以上前であれば、プレミアム会員としてマークせよ。"
}];

// 4. ネットワーク(実行環境)を統合
const network = new Network({
  llm,
  agents,
  tools,
  onToolCall: async (call) => {
    console.log(`\n⚙️  [システム実行] ツールが呼び出されました: ${call.name}`, call.args);
    // 実際の実装(DBやAPI連携)を記述します
    if (call.name === "fetch_user_profile") {
      return { userId: call.args.userId, name: "太田", joinedDate: "2023-04-15" };
    }
  }
});

// 5. 実行
await network.verifyLicense(); // ベータ期間中は無制限に無料パス
network.resetStates();
const result = await network.get("analyst_agent").chat("userId: U999 のプレミアム判定を行ってください");

console.log("\n================ 最終回答 ================");
console.log(result.finalText);
console.log("==========================================");

③ 実行

環境変数をセットして実行します。

export GEMINI_API_KEY="あなたのAPIキー"
node agent.js

3. 何が起きているのか?(ターミナルの挙動を観察)

このプログラムを実行すると、裏側で AI が驚くべき自律プロセスを踏んでいる様子が確認できます。

  • 解釈 & 計画 (Init):
    AI は依頼を解釈し、自ら State(記憶)の中の
    tasks
    プロパティに
    【次に実行】 [fetch_user_profile] を用いて U999 のプロフィールを取得し、プレミアム会員か判定する。
    というタスクを自動で作成して書き込みます。
  • 実行 (Execution):
    記述した計画に基づいて、自動で
    fetch_user_profile
    ツールを引数
    { userId: "U999" }
    で叩きます。
  • 評価 & 統合 (Evaluation):
    ツールの実行結果(2023年登録 ➔ 2年以上前)を受け取ると、ツール定義に書かれた「評価基準(登録日が2年以上前ならプレミアム)」と照らし合わせ、AIが客観的に自己レビューを行います。
    レビュー結果として、State の
    facts
    ユーザー太田(U999)は登録日が2023年であり、2年以上前のためプレミアム会員の条件を満たしている
    という確定事実を書き込みます。
  • 終了判定と最終回答:
    タスクがすべて
    【完了】
    になったことを確認した AI は、最終回答ステップに進んで回答を生成し、綺麗にまとめられたテキストを出力します。

このすべての推論ループと状態の遷移が、プロンプトに細かく分岐を書くことなく、フレームワークのシステム制御のなかで自動的かつ確実に進行します。

4. なぜこの30行が、既存ツールやADKの「限界」を軽々と突破できるのか?

これは机上の空論ではありません。私自身が実際に様々なフレームワークや ADK (Agent Development Kit) を使い倒し、泥臭く自律エージェントを構築する中で身をもって痛感したリアルな限界を突破するために設計したアーキテクチャです。

既存のツールでエージェントを構築したことのある方なら、以下の「3つの絶望」に直面したはずです。

① 「2ステップ目の精度崩壊(崖)」の克服

既存エージェントでマルチステップを回すと、2ステップ目から急激にAIのIQが下がります。
その原因は、システムが「State(状態)」に結果の「意味や解釈」といった文脈を一切抽出して蓄積せず、AIに対して膨大なツールの実行生ログをただ見せ続け、毎回『その生ログをもう一度読むか?』をAIに選択させ続けているからです。

数千行の HTML や JSON の山に埋もれた AI は溺死します。
Synapse では、ツール結果(生ログ)は評価された瞬間にメモリから完全に破棄されます。AIの手元のメモ帳には「解釈・意味」だけが綺麗に整理されて残るため、何ステップ回しても脳がクリアなまま、極めて高い知性を維持し続けます。

【生ログ完全破棄 & 知見抽出のプロセス】

 [ 1. ツールを実行する ]
       │  (数千行のHTMLやJSONなどの、膨大でノイジーな「生データ」が返ってくる)
       ▼
 [ 2. 評価・エッセンス抽出 ]
       │  (AI自身が「この生データの中で、本当に必要な知見は何か?」を抜き出す)
       ├────────────────────────────────────────────┐
       ▼ (本当に必要なエッセンスだけ)                 ▼ (用済みの膨大な生データ)
 [ 3. 手元のメモ帳 & 共有ボードを更新 ]          [ 4. 机の上の「紙クズ」として完全破棄!]
   - facts: 「ユーザーAはプレミアム会員である」       ※AIの脳内コンテキストから、
   - tasks: 「ユーザーAのステータス確認 ➔ 完了」       ノイズになる生ログを完全に消し去る
       │
       ▼
 [ 次の思考ステップは、整理整頓されたクリーンなデスクから再スタート! ]

② AI同士の「伝言ゲーム崩壊」の根絶

マルチエージェントを組む時、最も破綻しやすいのが「エージェント同士のバトンの受け渡し(連携)」です。

最初は、「LLMの自然言語の対話に任せておけば、いい感じに連携してくれるだろう」と楽観視していました。しかし、エージェント同士は**「次に受け取る相手にとって本当に重要な詳細情報」を口頭で伝えない**ため、あっさりと連携が崩壊しました。

そこで次に、「自分が持っているすべての情報を次のエージェントに引き渡せ」とプロンプトで強制してみました。結果はこれもうまく動きませんでした。LLMは情報を引き渡すプロセスで**「行き過ぎた要約(Aggressive Summarization)」を本能的に行ってしまい、肝心なコンテキスト(文脈)が必ず途中で削ぎ落とされてしまう**のです。

これに対する Synapse の回答が、「全員で共有するホワイトボード(Global State)」に、時系列に沿った『人間的な思考のコンテキスト(何のために何を行い、何がわかり、その結果どうするのか)』を直接記録・更新し合う設計です。

【ホワイトボードに刻まれる時系列コンテキストのイメージ】

 [ 時系列: 09:00 / エージェントA ]
   - 目的: 「ユーザーUの解約率が高まっている仮説を検証するため」
   - 行動: 「過去3ヶ月のログインログDBを全検索した」
   - 事実: 「週のログイン回数が平均5回から1回未満に激減していることが判明」
   - 次のアクション(課題の発生): 「プラン変更 of 履歴とバッティングしていないか確認が必要」

次にバトンを受け取るエージェントは、不完全な「伝言」を頼りにする必要はありません。共有ホワイトボードの「時系列の文脈」を一目見るだけで、前任者の思考の軌跡を 100% 完璧に引き継ぎ、次の一手を打つことができます。

③ システム制御によるプロンプトの「クリーン化」

多くのエージェントでは、プロンプトに「ツールAの後はこう動け」「不要なツールは呼ぶな」と泥臭く指示を書き殴るため、プロンプトが指示のゴミで埋め尽くされます。

Synapse は、これをシステム制御で解決します。

  • 評価軸のカプセル化: 「ツール実行後の評価ロジック」はツール定義(
    evaluation
    )に持たせ、実行後のレビューフェーズにのみ動的にプロンプトに注入します。平時のプロンプトを一切汚しません。
  • 不要ツールの完全抹消: 1ターン目の計画立案時にAIが「今回はツールXは不要」と判断した瞬間、そのセッションのコンテキストからツールXの定義自体を完全に抹消します。AIからツールの存在自体が見えなくなるため、誤呼び出しや無駄な迷走が物理的に発生し得ません。

5. 認知プロセスの共有がもたらす「フラクタルな巨大化」

大規模な開発で特に美しいのは、この「状態駆動」のエージェントが、そのまま**「自己相似的(フラクタル)」に無限に巨大化・結合できるスケーラビリティ**です。

Synapse では、親エージェントから見ると、子エージェント(またはエージェントネットワーク全体)も「1つのツール」として抽象化されます。

  • 認知プロセスの隔離とカプセル化:
    各エージェントは自分専用 of「手元のメモ帳(Local State)」と「子ホワイトボード」を持ち、お互いの思考プロセスを汚染しません。
  • 副作用のない統合:
    子エージェントがどんなに長い自律思考ループを回しても、親エージェントから見れば、それは単なる「子エージェントというツールが実行され、結果が1枚のクリーンな状態として返ってきた」だけにすぎません。

この極めてクリーンなカプセル化とフラクタルな結合により、何百台のエージェントが協調して動く巨大なシステムであっても、一切のバグや迷走を招くことなく、信じられないほど綺麗にスケールさせることができます。

6. 商用化の鉄則:プロンプトインジェクションを防ぐ防壁「フロントエージェント」

商用プロダクトにエージェントをデプロイする際、ユーザーの生入力を直接オーケストレーター(何でもできる司令塔)に読ませるのは極めて危険です。プロンプトインジェクション攻撃によって、機密情報やDB仕様の漏洩を容易に招くからです。

Synapse では、ユーザーが直接対話するエージェントをただ一人に限定する 「フロントエージェント(受付)」 の構成を強く推奨しています。

  [ ユーザー(外部) ] 
        │  
        ▼ (生の入力 / 悪意あるインジェクションなど)
  [ フロントエージェント (受付) ] ➔ 感情・キャラクター・口調の制御 & 悪意の検知
        │  
        ▼ (フィルタリングされ、純粋に整理整頓されたタスク依頼)
  [ オーケストレーター (本丸) ] ➔ 100% 知的なタスク処理に脳容量を集中!
  • セキュリティガード: ユーザーの生の攻撃入力をフロントエージェントが防波堤として受け止め、本丸のオーケストレーターに悪意のあるプロンプトが直接届くのを完璧に遮断します。
  • 口調の完全分離: 「フレンドリーに喋る」といったキャラクター(感情ノイズ)はフロントのみに持たせるため、本丸のオーケストレーターから無駄な指示を一切排除し、推論の脳容量を100%知的なタスク処理に集中させられます。
  • レイテンシーの現実的解決: 通信が2回増えるため約1秒のラグが発生しますが、言語フィルタリングに限定されたフロントには
    Gemini 2.5 Flash
    などの極めて軽量・高速なモデルを割り当てることで、十分な実用スピードと最高水準の堅牢性を両立できます。

まとめ:オープンベータ無制限フリー開放中!

Synapse は、大規模で不安定になりがちなマルチエージェントを、システムエンジニアリング of 力で堅牢に動かすための「閉じた、副作用のない」最先端フレームワークです。

現在、バージョン 0.x のベータ期間中につき、何台のエージェントを配置してもライセンスキー不要で完全無料・無制限でご利用いただけます!

「プロンプトエンジニアリングの限界を超えて、実用に耐える AI エージェントをコードで実装したい」という方は、ぜひ一度触ってみてください。

もし動かしてみて「面白い!」「これから使ってみたい!」と感じていただけたら、GitHub で Star(⭐) をポチッと押して応援していただけると、開発メンバー全員が飛び跳ねて喜びます!