「AIエージェントキャッチアップ #33 - LLManager (LangGraph)」を開催しました

ジェネラティブエージェンツの大嶋です。

「AIエージェントキャッチアップ #33 - LLManager (LangGraph)」という勉強会を開催しました。

generative-agents.connpass.com

アーカイブ動画はこちらです。

www.youtube.com

LLManager

今回は、承認リクエストを管理するLangGraphのワークフロー「LLManager」について、ソースコードを読んだり動かしたいしてみました。

LLManagerのGitHubリポジトリはこちらです。

github.com

今回のポイント

LLManagerとは

LLManagerは、LangGraphで実装された、承認リクエストを管理するためのワークフローです。 LangGraphのサンプルの一つだと言えます。

LLManagerは以下のように動作します。

  1. リクエストに対してReasoning・Final AnswerというステップでLLMが承認・拒否の判断を下す
  2. LLMの判断に対して、人間がフィードバックする
  3. 人間による判断の修正があった場合、修正内容に応じたリフレクションが実行される

ワークフローをLangGraph Studioで表示すると以下のようになっています。

LLManagerの動作の様子

LLManagerは、README.md に記載の手順で動作しました。

LLManagerを起動してサンプルデータを流したあと、Agent Inboxと連携すると以下のように人間のフィードバック待ちのリストが表示されます。

LLMの判断をAcceptしたり編集することができます。

LLManagerは、LLMに一時的な回答をさせて人間が確認するという、Agent Inboxのサンプルアプリケーションだと言えます。

Storeを使ったFew-shotとリフレクションの実装

LLManagerの実装上の特徴のひとつは、LangGraphのStore機能を使ったFew-shotとリフレクションです。

LLManagerでは、過去の最終的な実行結果をFew-shotの例として活用し、人間による修正があった場合はリフレクションを実行して以後のプロンプトに含めるようになっています。

Few-shotの例やリフレクションの結果については、LangGraphのStore機能で実装されています。

github.com

configを使った設定の受け渡し

LLManagerには、以下の設定があります。

  1. approvalCriteria(承認基準):リクエストが承認される基準を定義
  2. rejectionCriteria(拒否基準):リクエストが拒否される基準を定義
  3. modelId(使用モデル):グラフで使用するモデルの指定

これらは以下のようにconfigで設定するよう実装されています。

export async function initialReasoning(
  state: ReasoningState,
  config: LangGraphRunnableConfig,
): Promise<ReasoningUpdate> {
  const { fewShotExamples, reflections } = await buildContext(state.query, {
    store: config.store,
    assistantId: config.configurable?.assistant_id,
  });

  const formattedPrompt = INITIAL_REASONING_PROMPT.replace(
    "{CONTEXT}",
    formatContextPrompt({
      fewShotExamples,
      reflections,
      approvalCriteria: config.configurable?.approvalCriteria,
      rejectionCriteria: config.configurable?.rejectionCriteria,
    }),
  );
    :

引用元:https://github.com/langchain-ai/llmanager/blob/178cb518e03282907e1f9cfd813cb233b45ee25d/src/reasoning/nodes/initial-reasoning.ts#L36

Stateではなくconfigで設定を受け渡したほうが、ワークフロー中にその値の変更がないことが明確といったメリットが考えられそうです。

LLManagerの実装には、LangGraphの様々な工夫が取り入れられており、サンプルとして参考になるものでした。

次回のご案内

以上、今回は「LLManager (LangGraph)」をキャッチアップしました。

次回は「AIエージェントキャッチアップ #34 - AGENTCY」ということで、Internet of Agentsのための組織「AGENTCY」が公開しているプロトコル等がテーマです!

generative-agents.connpass.com

ご興味・お時間ある方はぜひご参加ください!

また、その次の回以降のテーマも募集しているので、気になるエージェントのOSSなどあれば教えてください!