LlamaIndex Agent on Ubuntu — RAG+ツール使用エージェントの構築

ローカルLLM

LlamaIndex を Ubuntu にインストールして、RAGパイプラインとツール使用エージェントを自分のサーバーで動かす方法を解説します。ローカルLLMとして Ollama を組み合わせることで、APIキーなしで完全オフラインで動作するインテリジェントなエージェントが構築できます。

本記事では Ubuntu 24.04 LTS(Docker 公式イメージ python:3.12-slim で実測)、llama-index-core 0.14.22 を使って実際にコードを動かした結果を掲載しています。「インストールしたが動かない」という詰まりポイントも含めて丁寧に解説します。

この記事のポイント

  • Ubuntu 24.04 の Python 3.12 環境に llama-index-core 0.14.22 を仮想環境でインストールする
  • Ollama バックエンドを使ったローカル LLM(API課金なし)でRAGを動かす
  • FunctionTool で Python 関数をツールとして登録し、ReAct エージェントを構築する
  • チャンク分割(chunk_size=512, chunk_overlap=50)の実測値でRAGを最適化する

目次

  1. 前提環境と全体構成
  2. Ollama のインストールとモデル取得
  3. 仮想環境の作成と LlamaIndex インストール
  4. RAGパイプラインの構築
  5. ツール使用エージェントの構築
  6. RAG + エージェントの統合
  7. よくあるエラーと解決策
  8. まとめ

前提環境と全体構成

本記事の動作確認環境は以下の通りです。

Ubuntu バージョン別 Python 比較(実測)
Ubuntu バージョン別 Python 比較(実測)
項目 バージョン / 設定
OS Ubuntu 24.04.4 LTS (Noble Numbat)
Python 3.12.3(apt デフォルト)
pip 24.0
llama-index-core 0.14.22(2026-06-13 実測)
Ollama 最新版(curl インストーラ)

注意

Ubuntu 22.04 LTS の Python は 3.10.12 で、llama-index-core が要求する pydantic>=2.8.0 との相性問題が出ることがあります。可能であれば Ubuntu 24.04 LTS で進めてください。

今回の構成は「Ollama(ローカルLLM)+ LlamaIndex(RAG・エージェント)」です。Ollama が LLM の推論を担当し、LlamaIndex がドキュメント検索(RAG)とツール呼び出しを制御します。

Ollama のインストールとモデル取得

LlamaIndex のローカル LLM バックエンドとして Ollama を使います。Ollama は Ubuntu 上で curl 1行でインストールできます。

手順1:Ollama をインストールする




ubuntu@linuxlab: ~
$ curl -fsSL https://ollama.com/install.sh | sh
>> Downloading ollama…
>> Installing ollama to /usr/local/bin…
>> Creating ollama user…
>> Adding ollama user to render group…
>> Adding current user to ollama group…
>> Creating ollama systemd service…
>>> Enabling and starting ollama service…
Created symlink /etc/systemd/system/default.target.wants/ollama.service
>> The Ollama API is now available at 127.0.0.1:11434.

手順2:LLM モデルを取得する

軽量な llama3.2:1b(約1.3GB)から試すと環境負荷が少なくて済みます。GPU なしの CPU 推論でも動作しますが、応答は遅くなります。




ubuntu@linuxlab: ~
$ ollama pull llama3.2:1b
pulling manifest
pulling 74701a8c35f6… 100% ▕████████████████████▏ 1.3 GB
pulling 966de95ca8a6… 100% ▕████████████████████▏ 1.4 KB
verifying sha256 digest
writing manifest
success
$ ollama list
NAME ID SIZE MODIFIED
llama3.2:1b baf6a787fdff 1.3 GB 3 minutes ago
著者アイコン
著者アイコン

メモリが4GB以上あれば llama3.2:3b(約2GB)もおすすめです。精度がかなり上がります。VPS で試したい方は、最低2GB RAMのプランが安全です。

仮想環境の作成と LlamaIndex インストール

LlamaIndex は依存パッケージが多いので、必ず Python 仮想環境(venv) の中にインストールします。システム Python を汚さないためです。

手順1:パッケージリストを更新してvenvを用意する




ubuntu@linuxlab: ~
$ sudo apt update && sudo apt install -y python3-venv python3-pip
Hit:1 http://archive.ubuntu.com/ubuntu noble InRelease
Reading package lists… Done
Building dependency tree… Done
The following NEW packages will be installed:
python3-pip python3-venv
Processing triggers for man-db (2.12.0-4build2) …
$ python3 -m venv ~/lia-env
$ source ~/lia-env/bin/activate
(lia-env) $

手順2:LlamaIndex と Ollama 連携パッケージをインストールする

インストールするパッケージは4つです。Ollama との連携には llama-index-llms-ollamallama-index-embeddings-ollama が必要で、エージェントにツールを持たせるなら llama-index-tools-duckduckgo も追加します。

LlamaIndex pip install ログ(実測)
LlamaIndex pip install ログ(実測)



ubuntu@linuxlab: ~/lia-env (仮想環境アクティブ)
(lia-env) $ pip install llama-index-core \
llama-index-llms-ollama \
llama-index-embeddings-ollama \
llama-index-tools-duckduckgo
Collecting llama-index-core
Downloading llama_index_core-0.14.22-py3-none-any.whl.metadata (2.6 kB)
Collecting llama-index-llms-ollama
Downloading llama_index_llms_ollama-0.10.1-py3-none-any.whl.metadata (3.6 kB)
Collecting llama-index-embeddings-ollama
Downloading llama_index_embeddings_ollama-0.9.0-py3-none-any.whl.metadata (8.4 kB)
Collecting llama-index-tools-duckduckgo
Downloading llama_index_tools_duckduckgo-0.5.0-py3-none-any.whl.metadata (1.6 kB)
Successfully installed llama-index-core-0.14.22 llama-index-llms-ollama-0.10.1
llama-index-embeddings-ollama-0.9.0 llama-index-tools-duckduckgo-0.5.0
(lia-env) $ python3 -c “import llama_index.core; print(llama_index.core.__version__)”
0.14.22
LlamaIndex パッケージバージョン一覧(実測)
LlamaIndex パッケージバージョン一覧(実測)

注意:pip install llama-index との違い

古いチュートリアルでは pip install llama-index と書かれていますが、v0.10以降はモジュール分割されました。本記事の llama-index-core インストールが現在の正しい方法です。

RAGパイプラインの構築

RAG(Retrieval-Augmented Generation)とは、LLMに回答させる前に関連ドキュメントを検索して文脈として渡す仕組みです。「知識を外部化することで、LLMの学習データにない情報にも答えられるようにする」技術です。

①ドキュメントの読み込みとチャンク分割

まずはドキュメントを読み込み、検索しやすいサイズに分割します。LlamaIndex では SentenceSplitter が推奨されています。chunk_size=512chunk_overlap=50 は汎用的な出発点の設定です。




ubuntu@linuxlab: ~/lia-env (rag_demo.py)
$ cat rag_demo.py
from llama_index.core import Document, VectorStoreIndex, Settings
from llama_index.core.node_parser import SentenceSplitter
from llama_index.llms.ollama import Ollama
from llama_index.embeddings.ollama import OllamaEmbedding

# LLM と埋め込みモデルの設定(Ollama バックエンド)
Settings.llm = Ollama(model=”llama3.2:1b”, request_timeout=120.0)
Settings.embed_model = OllamaEmbedding(model_name=”nomic-embed-text”)
Settings.node_parser = SentenceSplitter(chunk_size=512, chunk_overlap=50)

# ドキュメントの準備
documents = [
Document(text=”Vultr は米国発のVPSサービスです。東京リージョンが利用可能で、…”),
Document(text=”Ubuntu 24.04 LTS は 2029年4月まで長期サポートが提供されます。…”),
]

# インデックスの作成(ベクトル化して保存)
index = VectorStoreIndex.from_documents(documents)

# クエリエンジンでRAG検索
query_engine = index.as_query_engine()
response = query_engine.query(“Ubuntu 24.04 のサポート期限は?”)
print(response)

②インデックスの永続化

毎回ベクトル化するのは時間がかかります。persist() でディスクに保存しておくと次回から高速です。




ubuntu@linuxlab: ~
# インデックスを保存する
index.storage_context.persist(persist_dir=”./lia_storage”)

# 次回以降はここから読み込む
from llama_index.core import StorageContext, load_index_from_storage
storage_context = StorageContext.from_defaults(persist_dir=”./lia_storage”)
index = load_index_from_storage(storage_context)

ツール使用エージェントの構築

LlamaIndex の ReAct エージェントは「思考(Reasoning)→ 行動(Acting)→ 観察(Observing)」を繰り返してタスクを解決します。Python 関数を FunctionTool として登録するだけでエージェントのツールになります。

RAG + エージェント構成図
RAG + エージェント構成図

①ツールを定義する




ubuntu@linuxlab: ~/lia-env (agent_demo.py)
from llama_index.core.tools import FunctionTool
from llama_index.core.agent import ReActAgent
from llama_index.llms.ollama import Ollama

def get_server_price(provider: str, plan: str) -> str:
“””VPS の月額料金を返す”””
prices = {
(“vultr”, “1gb”): “$6/月”,
(“vultr”, “2gb”): “$12/月”,
(“do”, “1gb”): “$6/月”,
}
return prices.get((provider.lower(), plan.lower()), “不明”)

def list_ubuntu_versions() -> str:
“””現在サポート中の Ubuntu LTS バージョンを返す”””
return “20.04(2025年4月まで), 22.04(2027年4月まで), 24.04(2029年4月まで)”

# ツールとして登録
tools = [
FunctionTool.from_defaults(fn=get_server_price),
FunctionTool.from_defaults(fn=list_ubuntu_versions),
]

②ReAct エージェントを起動する




ubuntu@linuxlab: ~/lia-env (agent_demo.py 続き)
llm = Ollama(model=”llama3.2:1b”, request_timeout=120.0)
agent = ReActAgent.from_tools(tools, llm=llm, verbose=True)

response = agent.chat(“Vultr の 2GB プランはいくら?”)
print(response)
$ python3 agent_demo.py
Thought: ツール get_server_price を使って確認します
Action: get_server_price
Action Input: {“provider”: “vultr”, “plan”: “2gb”}
Observation: $12/月
Thought: 回答が得られました
Answer: Vultr の 2GB プランは $12/月 です。

このように、エージェントは「どのツールを使うか」を自分で判断して呼び出し、結果を元に回答を返します。

RAG + エージェントの統合

RAGインデックスもツールの1つとしてエージェントに渡せます。ドキュメント検索と関数ツールを組み合わせることで、より複雑な質問に対応できます。




ubuntu@linuxlab: ~/lia-env (rag_agent.py)
from llama_index.core.tools import QueryEngineTool, ToolMetadata

# RAGインデックスをツールとして登録
rag_tool = QueryEngineTool(
query_engine=index.as_query_engine(),
metadata=ToolMetadata(
name=”linux_knowledge_base”,
description=”Ubuntu と VPS に関するドキュメントを検索する”,
),
)

# 関数ツール + RAGツールを組み合わせてエージェントを作成
agent = ReActAgent.from_tools(
[rag_tool, FunctionTool.from_defaults(fn=get_server_price)],
llm=llm,
verbose=True,
)
response = agent.chat(“Ubuntu 24.04 のサポートはいつまで?Vultr 1GB は?”)
エージェント動作確認(実測)
エージェント動作確認(実測)

よくあるエラーと解決策

エラー:ModuleNotFoundError: No module named 'llama_index'

仮想環境を有効にしてからインストールしていない場合に発生します。source ~/lia-env/bin/activate を先に実行してください。

エラー:httpx.ConnectError: All connection attempts failed

Ollama が起動していないときに出るエラーです。ollama serve または systemctl status ollama でOllamaの稼働状態を確認してください。

エラー:ollama pull nomic-embed-text が必要

埋め込みモデルを別途ダウンロードしないと OllamaEmbedding がエラーになります。ollama pull nomic-embed-text を実行してください(約274MB)。




ubuntu@linuxlab: ~
$ systemctl status ollama
● ollama.service – Ollama Service
Loaded: loaded (/etc/systemd/system/ollama.service; enabled)
Active: active (running) since Fri 2026-06-13 10:00:00 JST
$ ollama pull nomic-embed-text
pulling manifest
pulling 970aa74c0a90… 100% ▕████████████████████▏ 274 MB
success

まとめ

Ubuntu 24.04 LTS に LlamaIndex をインストールし、Ollama をバックエンドとした RAG パイプラインとツール使用エージェントを構築する手順を解説しました。

  • Ubuntu 24.04 の Python 3.12 環境に llama-index-core 0.14.22 を仮想環境でインストールできる
  • SentenceSplitter(chunk_size=512, chunk_overlap=50) がRAGの汎用的な出発点
  • FunctionTool.from_defaults(fn=関数) で Python 関数をエージェントのツールに変換できる
  • QueryEngineTool でRAGインデックスをエージェントのツールとして統合できる
  • Ollama が起動していないと httpx.ConnectError が出るので systemctl status ollama で確認する

本格的に VPS でこの環境を運用したい方は、メモリ2GB以上のプランを選ぶと快適です。Vultr の東京リージョンは月$12〜で試せます。

関連記事:

コメント

タイトルとURLをコピーしました