Function Calling を活用した信頼できる企業向けAIエージェントの作り方

2024-09-15
tony

多くの企業が生成AIを活用して、業務用チャットボットを開発しています。近年 LLM(大規模言語モデル)の性能が全体的に底上げされたこともありますが、AIに企業のデータを学習させるさまざまな方法が登場したことも理由です。

かつては Fine Tuning 方式で大量のデータ入力と手作業が必要でしたが、最近は RAG(Retrieval-Augmented Generation)を活用すれば、データを学習した業務用チャットボットを簡単に作れるようになりました。

‍

1. RAG の原理

RAG の原理はシンプルです。基本的に2つの要素で構成されます。

  • 検索モジュール:外部のデータベースやドキュメントから必要な情報を検索する役割を担います。
  • 生成モジュール:検索された情報をもとに、ユーザーが求める応答を自然に生成する役割を担います。

RAG は、LLM の学習の限界や、時間の経過に伴う情報更新の問題を解決するのに役立ちます。基本的に、LLM が最新のデータや企業内部の機密資料などを活用したカスタマイズ済みの応答を提供できるよう支援します。

‍

RAG の構成

‍

1. Vector Store にデータを入力

2. ユーザーの質問を受信

-> ユーザーのコンテキストを保存・参照

3. 質問の分析

-> AI はユーザーから入力された命令や質問を自然言語処理(NLP)で分析します。たとえば「Galaxy S24 の長所は?」という命令があると、AI は製品情報を検索する関数が必要だと理解します

4. 情報の検索

-> 質問をベクトルに変換したうえで、事前に入力された Vector Store から、コサイン類似度などをもとに関連性の高い情報を探します(学習データの品質によってはハルシネーションが起こりえます)

5. 結果の返却

-> 質問の意図に合わせて回答を自然にまとめ、プロンプトに沿って回答します

‍

2. RAG の限界

RAG を活用してさまざまなリサーチを行いました。多くの企業が RAG を導入してチャットボットを開発しており、私たちもこの技術を積極的に活用しようとしました。しかし特定の環境では、RAG は次のような限界を示しました。

  1. 正確性の問題:RAG は検索された情報に基づいて回答を生成するため、検索された情報が不正確または不完全な場合、生成される回答の品質が大きく低下しました。たとえば、企業の Wiki にある情報を PDF に変換してそのまま Vector Store(ベクトルストア)に学習させると、AI が混乱を起こします。1年前に作成された議事録を最近の業務状況と誤認したり、同じテーマで書かれた会社のプロセスや規定を混ぜて誤った回答をしたりすることもあります。また、数千万行のデータベースの行(row)を学習させたあとで平均値や合計値を求めたところ、見当違いの数字を返すという致命的な問題も見つかりました。
  2. 遅延時間:RAG はリアルタイムで検索を行い、その結果をもとに応答を生成するため、通常の質問に比べて回答に時間がかかります。特に、ベクトルストアに保存されたデータが多いほど検索時間が長くなり、それに伴って応答速度も遅くなります。
  3. コストの問題:RAG を使うと、ベクトルストアから検索する入力トークンの量が増えます。このため LLM の API 利用コストが急激に増加することがあります。1回の質問で2〜3万トークンを使う場合もあり、保存されたデータ量に比例してさらに多くのトークンを消費します。

3. Function Calling による RAG の限界の克服

RAG のエージェントを分離し、プロンプトを最適化するなど複数の手順を踏みましたが、ある時点からそれ以上は回答の信頼性が向上しなくなりました。そこで別の方法を探し、その解決策が Function Calling でした。

Function Calling は、RAG の限界を克服できるさまざまな利点を提供します。

  • 正確性の向上:Function Calling は、データをより具体的かつ正確に処理できる特定の機能を呼び出します。たとえば、企業の内部システムからリアルタイムで情報を取得したり、計算や分析の作業を自動で処理したりできます。これにより LLM の応答は、単なる文章生成にとどまらず、実際のビジネスロジックを実行できるようになります。
  • 遅延時間の短縮:Function Calling では、あらかじめ定義された API を呼び出して特定の作業を実行するため、RAG の検索時間とデータ処理時間を短縮できます。これにより、リアルタイムに近い高速な応答が可能になります。
  • 拡張性:Function Calling は RAG と組み合わせて、AIエージェントの機能を拡張できます。たとえば、さまざまな企業向けソフトウェアシステムとの統合が可能になり、ユーザーに合わせた情報を提供できます。ERP や CRM システムと統合して、リアルタイムのデータを報告してもらったり、処理作業を依頼したりできる、本物のAIアシスタントとして活用できます。

‍

Function Calling

‍

1.ユーザーの質問を受信

-> ユーザーのコンテキストを保存・参照

2.質問の分析

-> AI はユーザーから入力された命令や質問を自然言語処理(NLP)で分析します。たとえば「Galaxy S24 の長所は?」という命令があると、AI は製品情報を検索する関数が必要だと理解します

3.関数の呼び出し

-> 命令を分析したあと、その作業を処理できる関数(または API)を呼び出します。このとき関数は、あらかじめ定義された命令とパラメータに基づいて呼び出されます。例)ニュースルームの Search API で Galaxy S24 を検索
(検索された結果を返すのでハルシネーションなし)

4.結果の返却

-> 関数が実行されたら、その結果をユーザーが理解できる形で再び提供します
例)取得した情報から Galaxy S24 の長所だけを抜き出して回答(このときプロンプトエンジニアリングが適用されます)

‍

4. 2つの技術の併用

企業向けAIエージェントを構築する際は、RAG と Function Calling の機能を適切に組み合わせることが重要です。その理由は、企業のすべてのデータがシステム上に存在するわけではなく、API で呼び出せない情報も多いからです。たとえば、企業の規定のように単一の事実として存在するデータは、RAG のほうが効率的です。

一方、営業、物流、管理など、リアルタイムで変化するビジネスプロセスのデータは、Function Calling を活用して処理する必要があります。

RAG と Function Calling を効果的に組み合わせてAIエージェントを構築すれば、企業環境でより信頼でき、効率的なAIソリューションを作れます。

‍

サービスについて知りたいですか?