AIアプリケーションを構築する場合でも、複雑なタスクを自動化する場合でも、AIエージェントを適切なデータやツールと連携させることは容易ではありません。単純なAIシステムは、推論、情報の取得、異なるソースをまたいだタスク処理が必要になると、うまく機能しないことが多くあります。LlamaIndex エージェントは、AIモデルをツール、データ、検索システムと連携させることで、タスクをより効果的に処理しやすくします。この記事を読んで、より賢く柔軟なAIアプリケーションのために LlamaIndex エージェントワークフローを構築・展開する方法を学びましょう。
LlamaIndex エージェントとは?
LlamaIndex エージェントとは、タスクについて推論し、それを完了するために必要な手順を判断できるAIシステムです。複雑なリクエストをより小さなタスクに分割し、ツールを選択し、必要に応じて外部データを利用できます。エージェントはまた、これまでの手順を記憶し、取得した情報を利用して応答の質を高めることができます。これにより、単純な一問一答形式の応答以上のタスクを処理できるようになります。
LlamaIndex エージェントはどのように機能しますか?
LlamaIndex エージェントは、モデルがタスクについて推論し、ツールを選択し、複数ステップのワークフローを完了できるようにすることで、LLMアプリケーションが単純な質問応答の範囲を超えて機能できるようにします。固定されたパイプラインに従うのではなく、エージェントはユーザーの目標と利用可能な機能に基づいて、必要な行動を動的に判断します。
一般的な LlamaIndex エージェントワークフローは、次のような流れになります。
User request
↓
Understand the task
↓
Select tools
↓
Execute actions
↓
Process results
↓
Return final responseユーザーの目標を理解する
エージェントがリクエストを受け取ると、基盤となるLLMはタスク、利用可能なコンテキスト、接続されているツールを分析し、最適な対応方法を判断します。
単純な問い合わせであれば、エージェントは直接応答を生成することがあります。複雑なタスクの場合は、リクエストをより小さなステップに分割し、必要な操作を判断します。
ツールを選択して使用する
ツールは、LLM単体を超えてエージェントの機能を拡張します。LlamaIndex エージェントは、FunctionTool や QueryEngineTool などのツールを通じて、カスタムのPython関数、クエリエンジン、API、データベース、検索システムに接続できます。
例えば、エージェントは検索ツールを使って情報を収集したり、データベースツールを使ってレコードを取得したり、カスタム関数を使って計算を実行したりできます。
エージェントループによってタスクを実行する
ツールを選択した後、エージェントはそのアクションを実行し、結果を観察して、次のステップを判断します。この推論と行動のループにより、エージェントは複数の操作を必要とする複雑なワークフローを処理できます。
Reason → Act → Observe → Repeatタスクが完了していない場合、エージェントはツールの呼び出しやアプローチの調整を続け、最終的な回答を生成するまで処理を続けます。
コンテキストとワークフローの管理
LlamaIndex エージェントは実行プロセス全体で関連するコンテキストを保持するため、複数ステップのタスクを管理し、前のステップの結果を利用できます。より複雑なアプリケーションでは、開発者はワークフローとマルチエージェントアーキテクチャを使って複数のエージェントを連携させ、各エージェントに特定の役割やタスクを担当させることができます。
例:
Research Agent
↓
Analysis Agent
↓
Writing Agentこれにより、LlamaIndex の react エージェントは AI リサーチアシスタント、企業向けナレッジシステム、自動化されたデータワークフローなどのアプリケーションに適したものとなっています。
LlamaIndex エージェントの主要コンポーネント
LlamaIndex マルチエージェントは複数のコンポーネントを組み合わせて、LLM を推論し、外部関数を利用し、コンテキストを維持できるシステムに変えます。各コンポーネントはそれぞれ異なる役割を持ちますが、互いに連携することでエージェントがタスクをより効果的に処理できるようにします。ここでは主要なコンポーネントのいくつかを紹介します。
LLM:エージェントの推論エンジン
LLM は、ユーザーのリクエストを解釈して次に何をすべきかを判断する、エージェントの中心的な推論エンジンとして機能します。利用可能なコンテキストを分析し、直接回答すべきか、ツールを使用すべきかを判断できます。LlamaIndex は複数の LLM プロバイダーをサポートしているため、開発者はアプリケーションの要件に応じてモデルを選択できます。このように、LLM はエージェントの意思決定と応答生成を制御しています。
ツール:エージェントの能力を拡張する
ツールを使うことで、エージェントはテキスト生成にとどまらないアクションを実行できます。ツールは単純な Python 関数の場合もあれば、API、クエリエンジン、その他の外部サービスと連携するための専用ツールの場合もあります。エージェントはユーザーのリクエストに基づいて使用するツールを判断し、必要な入力を提供します。ツールの実行結果は会話に追加され、エージェントが次のステップで利用できるようになります。
メモリ:コンテキストの維持
メモリにより、LlamaIndex エージェントはタスクを完了する間、関連情報を保持できます。デフォルトでは、エージェントは ChatMemoryBuffer を使用し、実行中に会話履歴を保持できるようにします。開発者はアプリケーションに応じて、トークン数の上限を設定するなど、メモリの設定をカスタマイズすることもできます。これにより、エージェントはコンテキストを維持し、複数のステップを必要とするタスクを処理できます。
LlamaIndex エージェントの種類
LlamaIndex では、必要とされる推論のレベル、ツールの使用、制御の度合いに応じて、タスクを処理するための異なるエージェントタイプが用意されています。主なタイプとその違いを見ていきましょう。
| エージェントの種類 | 動作の仕組み | 主な特徴 | 最適な利用シーン |
|---|---|---|---|
| FunctionAgent | 最新の LLM のファンクションコール機能を利用して、ユーザーのリクエストに基づき事前定義されたツールを選択・実行します。 | ネイティブなツールコール 構造化された入出力 信頼性の高いツール実行 シンプルな実装 | AI アシスタント 業務自動化ワークフロー API を利用したアプリケーション タスク志向のエージェント |
| ReActAgent | 推論(Reasoning)と行動(Acting)を組み合わせたアプローチを採用し、エージェントがタスクについて反復的に推論し、行動を取り、結果を観察しながら完了まで継続します。 | 段階的な推論 動的なツール選択 複数ステップのタスクに対応 柔軟な問題解決 | 研究アシスタント 複雑な質問応答 データ探索 オープンエンドなワークフロー |
| CodeActAgent | コードによる推論がより効果的な場合に、コードを生成・実行することでタスクを解決できます。 | コードの生成と実行 プログラムによる問題解決 計算タスクに適している | データ分析 科学的なワークフロー プログラミングアシスタント |
| マルチエージェントシステム | 複数の専門化されたエージェントが協力し、タスクを分担しながら複雑なワークフローを共同で完了します。 | エージェント間の連携 タスクの分担 役割の専門化 スケーラブルなワークフロー | 自動化された研究パイプライン 企業のワークフロー 複雑な業務プロセス |
これらのエージェントは、異なるタスクやワークフローに適したアプローチを開発者が選択できる柔軟性を提供します。エージェントのタイプを選択したら、次のステップは、その推論とツール利用を支える高性能な LLM バックエンドに接続することです。ここでは、LlamaIndex と Kimi API を使って AI エージェントを構築する方法を見ていきましょう。
LlamaIndex と Kimi API で AI エージェントを構築する方法
LlamaIndex を LLM API に接続することで、エージェントはリクエストを理解し、適切なアクションを選択するための推論能力を得られます。以下のステップでは、モデルの設定からエージェントの実行まで、LlamaIndex と Kimi API を使って AI エージェントをセットアップする方法を示します。
ステップ1:前提条件
始める前に、以下が用意されていることを確認してください。
Python 3.9 以上がインストールされていること
Moonshot AI Platform で取得した有効な Kimi API キー
LlamaIndex エージェントおよび RAG の概念に関する基本的な知識
ステップ2:依存関係のインストール
元のサンプルでは llama-index-llms-ollama を使用していますが、Kimi の OpenAI 互換 API に接続するために llama-index-llms-openai に置き換えます。ローカルで無料の埋め込みを利用するため、HuggingFace の埋め込みパッケージはそのまま使用します。
pip install llama-index llama-index-llms-openai llama-index-embeddings-huggingfaceステップ3:環境変数の設定
Kimi API キーは環境変数を使って安全に保存してください。スクリプト内に直接記述しないようにしてください。
export KIMI_API_KEY = "your-kimi-api-key-here"Windows(PowerShell)の場合:
$env:KIMI_API_KEY = "your-kimi-api-key-here"ステップ4:Kimi API を使った基本的なエージェントの作成
starter_kimi.py という名前のファイルを作成します。これはOllama LLMをKimiに置き換えるものですが、エージェントのロジックとツール定義は同じままです。
from llama_index.core.agent.workflow import FunctionAgent; import os
from llama_index.llms.openai import OpenAI; import asyncio
from llama_index.embeddings.huggingface import HuggingFaceEmbedding
from llama_index.core import Settings
# Configure global settings
Settings.llm = OpenAI(
model="kimi-latest", # Or: kimi-k2, kimi-k2.5, etc.
api_key=os.getenv("KIMI_API_KEY"),
api_base="https://api.moonshot.ai/v1",
temperature=0.3,
request_timeout=120.0,
)
Settings.embed_model = HuggingFaceEmbedding(
model_name="BAAI/bge-base-en-v1.5"
)
# Define a calculator tool
def multiply(a: float, b: float) -> float:
"""Useful for multiplying two numbers."""
return a * b
# Create the agent
agent = FunctionAgent(
tools=[multiply],
llm=Settings.llm,
system_prompt="You are a helpful assistant that can multiply two numbers.",
)
async def main():
response = await agent.run("What is 1234 * 4567?")
print(str(response))
if __name__ == "__main__":
asyncio.run(main())スクリプトを実行します:
python starter_kimi.py期待される出力:
The answer to 1234 * 4567 is 5635678.ステップ5:チャット履歴(コンテキスト)を追加する
マルチターンの会話を可能にするには、Context オブジェクトを渡します。エージェントは呼び出しをまたいで記憶を保持します。
from llama_index.core.workflow import Context
# Create context
ctx = Context(agent)
# Run agent with context
response = await agent.run("My name is Logan", ctx=ctx)
print(response)
response = await agent.run("What is my name?", ctx=ctx)
print(response)ステップ6:Kimi APIでRAG機能を追加する
ドキュメント検索機能でエージェントを強化します。埋め込みステップはローカルのままで、生成はKimiを経由します。
サンプルデータを準備する
mkdir data
wget https://raw.githubusercontent.com/run-llama/llama_index/main/docs/examples/data/paul_graham/paul_graham_essay.txt -O data/paul_graham_essay.txtRAG対応エージェントの完全なスクリプト
starter_kimi_rag.py を作成します:
from llama_index.core import VectorStoreIndex, SimpleDirectoryReader, Settings; import os
from llama_index.core.agent.workflow import AgentWorkflow; import asyncio
from llama_index.llms.openai import OpenAI
from llama_index.embeddings.huggingface import HuggingFaceEmbedding
# Global settings
Settings.embed_model = HuggingFaceEmbedding(model_name="BAAI/bge-base-en-v1.5")
Settings.llm = OpenAI(
model="kimi-k3",
api_key=os.getenv("KIMI_API_KEY"),
api_base="https://api.moonshot.ai/v1",
temperature=0.3,
)
# Load documents and build index
documents = SimpleDirectoryReader("data").load_data()
index = VectorStoreIndex.from_documents(documents)
query_engine = index.as_query_engine()
# Define tools
def multiply(a: float, b: float) -> float:
"""Useful for multiplying two numbers."""
return a * b
async def search_documents(query: str) -> str:
"""Useful for answering natural language questions about Paul Graham's essay."""
response = await query_engine.aquery(query)
return str(response)
# Create enhanced agent
agent = AgentWorkflow.from_tools_or_functions(
[multiply, search_documents],
llm=Settings.llm,
system_prompt="""You are a helpful assistant that can perform calculations
and search through documents to answer questions.""",
)
async def main():
response = await agent.run(
"What did the author do in college? Also, what's 7 * 8?"
)
print(response)
if __name__ == "__main__":
asyncio.run(main())スクリプトを実行します:
python starter_kimi_rag.pypython starter_kimi_rag.pyステップ7:RAGインデックスを永続化する
実行するたびにドキュメントを再処理しないよう、ベクトルインデックスをディスクに永続化します。
# Save the index
index.storage_context.persist("storage")
# Later, load the index
from llama_index.core import StorageContext, load_index_from_storage
storage_context = StorageContext.from_defaults(persist_dir="storage")
index = load_index_from_storage(storage_context)
query_engine = index.as_query_engine()# Save the index
index.storage_context.persist("storage")
# Later, load the index
from llama_index.core import StorageContext, load_index_from_storage
storage_context = StorageContext.from_defaults(persist_dir="storage")
index = load_index_from_storage(storage_context)
query_engine = index.as_query_engine()トラブルシューティング
エージェントのセットアップ中に問題が発生した場合、認証、接続、パッケージのインストール、埋め込みの速度に影響するいくつかの一般的な問題が考えられます。以下の表では、よくあるエラーとその解決策をまとめているので、セットアップの問題をすばやく解決できます。
| 問題 | 原因 | 解決方法 |
|---|---|---|
AuthenticationError | API キーが無効または未指定 | KIMI_API_KEY が正しくエクスポートされているか確認してください |
Connection timeout | api.moonshot.ai へのネットワーク遅延 | request_timeout を 300.0 以上に増やしてください |
ModuleNotFoundError | パッケージが見つからない | pip install llama-index-llms-openai を再実行してください |
| CPU上での埋め込み処理が遅い | Hugging Face モデルが CPU 上で実行されている | より小さいモデルを使用するか、GPU アクセラレーションを有効にしてください |
Kimi APIを使用するメリット
エージェントが接続され動作するようになると、LlamaIndexとKimi APIの組み合わせは、高性能なAIアプリケーションを構築する上で実用的な利点をいくつも提供します。以下は、LlamaIndexエージェントでKimi APIを使用する主なメリットです。
より賢いAIエージェントを構築: Kimi APIは、優れた言語理解と推論能力によってLlamaIndexエージェントを強化し、エージェントがツールを選択し、情報を処理し、タスクをより効果的に完了できるようにします。
データ検索と分析を改善: LlamaIndexのデータフレームワークと組み合わせることで、Kimiはプライベートなドキュメントやナレッジベースを活用し、より正確でコンテキストに応じた応答を生成できます。
柔軟なAIワークフローを実現: LlamaIndexはエージェントをツール、API、クエリエンジンと接続し、Kimiはこれらの機能をいつどのように使うべきかを判断するための知能を提供します。
複雑なAIアプリケーションをサポート: ロングコンテキストの理解力とエージェント機能を備えたLlamaIndex向けKimi APIは、リサーチアシスタント、ナレッジエージェント、ドキュメント分析アプリケーションの構築に適しています。
LlamaIndexエージェントの実際の活用例
LlamaIndexエージェントは、AIが推論し、情報にアクセスし、行動を起こす必要がある幅広いタスクに利用できます。LLMをツールやデータと接続する能力により、リサーチ、business、分析、カスタマーサポートなど、さまざまな分野で活用されています。以下に実用的な活用例を紹介します。
AIリサーチアシスタント
AIリサーチアシスタントは、ドキュメントを検索し、関連情報を取得して、複雑な質問への回答を助けることができます。リサーチタスクをより小さなステップに分割し、必要に応じて異なるツールを使用することができます。これにより、大量の情報を分析し、詳細な回答を用意することが容易になります。
企業向けナレッジエージェント
企業向けナレッジエージェントは、従業員を社内のドキュメント、データベース、ナレッジベースと接続できます。関連する企業情報を取得し、利用可能なビジネスデータに基づいて回答を提供できます。これにより、従業員は複数のシステムを手動で調べることなく、より早く情報を見つけられるようになります。
データ分析エージェント
データ分析エージェントは、データセットを扱い、ツールを使って情報を処理・分析・解釈できます。計算を実行し、パターンを特定し、結果を分かりやすく説明することができます。これにより、レポート作成、データ探索、ビジネス分析などのタスクに役立ちます。
カスタマーサービスエージェント
カスタマーサービスエージェントは、製品情報やFAQ、サポート資料にアクセスして顧客からの質問に対応できます。ツールを使って関連する詳細情報を取得し、利用可能なコンテキストに基づいてリクエストを処理することも可能です。これにより、定型的なサポート業務を自動化しつつ、より速く一貫性のある回答を提供できます。
まとめ
LlamaIndex のエージェントは、推論やツールの利用、関連情報の活用ができるAIシステムを構築するための実用的な手段です。その柔軟性により、単純な会話を超えたアプリケーション作りに役立ちます。適切なLLMバックエンドを組み合わせれば、これらのエージェントはさまざまなタスクやワークフローに適応させることができます。Kimi API を LlamaIndex と組み合わせて試し、自分だけのAIエージェントを構築・検証してみてください。Kimi を試して、何を作れるか探ってみましょう。