コンパイラ技術を使用したAI Agentの安定性を向上させる仕組み

スパイスコード代表の中河です。 スパイスコードは、「ロカルメ・オーダー」

order.localmet.com

という AI Agent を内包した ERP サービスを開発・提供しているスタートアップです。
本ブログでは、私たちの AI Agent がどのような仕組みで動いているのか、そして他の Agent とは何が異なるのかについて、ご紹介していく予定です。
第 2 回目となる今回は、「コンパイラ技術を使用した AI Agent の安定性を向上させる仕組み」として、第 1 回目に続いて古の技術を用いた弊社の AI Agent の仕組みについて、その概要をご紹介します。
※ Sandbox 技術の続きはそのうち別記事として書く予定です

AIエージェントアーキテクチャ

TL;DR: ロカルメ・オーダーでは Automation RPA と呼ばれる RPA を内蔵しているのですが、同じく内蔵している AI Agent がそれらを構築・実行する機能を持っており、特に構築部分では少し特殊なアーキテクチャを採用しています。


1. なぜいま “コンパイラ技術” なのか

  • AI Agentをプロダクトに投入するためにはパフォーマンスの安定性が大きな壁となる。

  • AI Agentが確率的に出力した結果をコンパイラ技術を通じて、確定的な物へ変換する事が出来る。

  • コンパイラ技術を元にAI Agentにフォードバックを行い自己改善するループを構築できる。

Automation RPA

例えば上記のようなワークフローを弊社のAI Agentが構築する場合、いきなりワークフローのデータ構造を出力するのではなく

  1. Python コードの出力
  2. Python コードを中間コードへ変換
  3. 中間コードをAutomationの処理構造に変換

という処理を行なっており、コンパイラのフロントエンド・バックエンドのようなアーキテクチャになっています。


2. アーキテクチャと実装

コンパイラアーキテクチャ概要

2.1 Python コードの出力

AI Agentはドキュメントや人間からの自然言語での指示を入力として以下のテンプレートを元にprocess関数を実装したPythonコードを出力します

import copy
from typing import Any
from {evaluate_module} import ( # you must keep this line
    {evaluate_functions}
)
from {process_module} import ( # you must keep this line
    {process_functions}
)

def process(arg: Any) -> Any:
    target = copy.deepcopy(arg)
    # your code, should convert target object
    return target

# you should keep following code
target = {target}
print(process(target))
2.2 Python コードを中間コードへ変換

コンパイラ・フロントエンドは Python の ast モジュールを使用し、AI Agent が出力した Python コードを構文解析して S 式で記述された中間コードを生成します。 この段階で文法エラーや事前に定めた制約に出力コードが従っていない場合にはエラーを返し、AI Agent にフィードバックします。 また、S 式で設計された中間コードは様々な用途に応用可能な仕様になっています。

2.3 中間コードをAutomationの処理構造に変換

コンパイラ・バックエンドは S 式フォーマットの中間コードを Automation の処理構造に変換します。 Automation の処理構造は JSON で記述され、ロカルメ・オーダー本体で実行されます。

構築されたAutomation


3. プロダクトでの構成例

実際のプロダクトでは、今回紹介した AI Agent 機構は独自の Agent OS(仮称)の上で独立したマイクロサービスとして動作し、Automation の実行系などは Go で実装されたロカルメ・オーダー本体で実行されるようになっています。


4. まとめと展望

  • 本手法のメリット: コンパイラ技術を使用して、ある程度 AI Agent の安定性を担保できる
  • 課題: 相変わらず実装が複雑で運用が大変
  • 次の一手: 今回はコンパイラ部分のみにフォーカスしてご紹介しました。そのうちアーキテクチャ図には記載したもののご紹介していなかった逆コンパイラ部分の仕組みもご紹介したいと思います。こちらはいわゆる human‑in‑the‑loop を実現する部分で、少し? 特殊な実装になっています ※ 他のコンテンツとの兼ね合いで、順番が前後する可能性があります ;-)

参考文献