コンピュータアクセスシステム

自宅で無料にエージェントを構築する:オープンソースのツールとモデル


無料ツールとオープンソースモデルだけを使って、ラップトップで動く完全なマルチエージェントシステムを構築できる。クレジットカード不要、APIレート制限なし、ベンダーロックインなし。代償は?推論が遅く、能力がやや低いこと。しかし学習、実験、小規模な自動化には十分すぎるほどだ。

このガイドの終わりには、自分のハードウェアで動くローカル研究エージェントができあがる——ウェブ検索、ファイル読み取り、情報の合成——すべて無料で。

オープンソースエージェント開発の理由

コストの現実

Claude APIの価格は本番ワークロードには合理的だが、学習と実験はすぐに積み重なる。ローカル推論はこの懸念を完全に排除する——ゼロの限界コストで無限のイテレーション。

プライバシーとデータ管理

一部のワークロードはクラウドAPIに送れない。患者データ、独自コード、機密ビジネスロジック——すべてが自分のマシンに留まることで恩恵を受ける。ローカルモデルは、データがハードウェアを離れることなく同じ知的な動作を提供する。

現実確認

7〜13Bパラメータのオープンソースモデルは、複雑な推論、コード生成、指示への従順さでフロンティアモデルに明らかに劣る。精度が重要な本番環境では、商用APIが依然として最善の選択だ。学習とプロトタイピングには、ローカルモデルは優れている。

オープンソースLLMの選択

LLMファミリー

  • Llama(Meta):最も広くサポートされているファミリー。Llama 3は特に有能。
  • Mistral:優れた品質/パラメータ比。Mistral-7Bはそのサイズを上回る。
  • Phi(Microsoft):非常に効率的な小型モデル。Phi-3 MiniはGPUなしで動作。
  • Qwen(Alibaba):強力な多言語性能。

モデルサイズとハードウェア要件

モデルパラメータ量子化VRAM速度品質
Phi-3 Mini3.8B4-bit4GB非常に速い良好
Mistral-7B7B4-bit8GB速い良好
Llama-3-8B8B4-bit8GB速いとても良好
Llama-3-13B13B4-bit10GB中程度とても良好
Mixtral-8x7B46.7B (MoE)4-bit24GB遅い優秀

量子化:なぜ重要か

量子化はメモリ使用量を減らすためにモデルの重みを圧縮する。7Bパラメータのモデルは完全精度で約28GBのRAMが必要。同じモデルを4-bit量子化すると約4GBになり、品質の低下はわずかだ。

ハードウェア別の出発点:

  • ラップトップ(8〜16GB RAM): Phi-3 MiniまたはMistral-7Bの4-bit
  • 中程度のGPU搭載デスクトップ: GPUアクセラレーションでMistral-7BまたはLlama-3-8B
  • 高性能GPU搭載デスクトップ: Mixtral-8x7BまたはLlama-3-70Bの4-bit

ローカル推論のセットアップ

Ollama:最も簡単な入り口

Terminal window
# macOSにインストール
brew install ollama
# Linuxにインストール
curl -fsSL https://ollama.com/install.sh | sh
# Mistral-7Bをダウンロード
ollama pull mistral
# 低速ハードウェア向けの軽量オプション
ollama pull phi3
# 推論サーバーを起動
ollama serve

動作確認:

Terminal window
curl http://localhost:11434/api/generate -d '{
"model": "mistral",
"prompt": "AIエージェントとは一言で何か?",
"stream": false
}'

LM Studio:GUIの代替手段

LM Studioは、モデルをダウンロードして実行するためのグラフィカルインターフェースを提供するデスクトップアプリケーション。OpenAI互換のAPIエンドポイントを公開する。

オープンソースエージェントフレームワーク

フレームワーク最適な用途学習曲線
LangChain広範なツールサポート中程度
LangGraphステートマシンワークフロー中〜高
AutoGenマルチエージェント会話
CrewAIロールベースのマルチエージェント低〜中

AutoGenまたはLangChainから始めよう。 AutoGenはプロトタイピングが速い;LangChainはエージェントループをより制御できる。

最初のエージェントを構築する:ローカル研究アシスタント

環境セットアップ

Terminal window
python3 -m venv agent-env
source agent-env/bin/activate
pip install langchain langchain-ollama langchain-community duckduckgo-search

完全なエージェント

#!/usr/bin/env python3
"""
Ollama + LangChainを使ったローカル研究エージェント
前提条件:
- ollama serve(バックグラウンドで実行中)
- ollama pull mistral
- pip install langchain langchain-ollama langchain-community duckduckgo-search
"""
import json
from langchain_core.tools import tool
from langchain_core.prompts import ChatPromptTemplate
from langchain_ollama import ChatOllama
from langchain.agents import AgentExecutor, create_react_agent
from duckduckgo_search import DDGS
@tool
def search_web(query: str) -> str:
"""DuckDuckGoを使ってウェブで情報を検索する。"""
try:
with DDGS() as ddgs:
results = list(ddgs.text(query, max_results=5))
if not results:
return "結果が見つかりませんでした。"
return json.dumps(
[{"title": r["title"], "snippet": r["body"], "url": r["href"]}
for r in results],
indent=2, ensure_ascii=False
)
except Exception as e:
return f"検索に失敗しました:{e}"
@tool
def read_file(filepath: str) -> str:
"""ローカルファイルを読み取りその内容を返す。"""
try:
with open(filepath, "r") as f:
return f.read()
except FileNotFoundError:
return f"ファイルが見つかりません:{filepath}"
@tool
def calculate(expression: str) -> str:
"""単純な算術式を安全に評価する。"""
try:
result = eval(expression, {"__builtins__": {}}, {})
return str(result)
except Exception as e:
return f"計算エラー:{e}"
llm = ChatOllama(
model="mistral",
base_url="http://localhost:11434",
temperature=0.3,
)
prompt = ChatPromptTemplate.from_messages([
("system", """あなたは研究アシスタントです。ツールを使って質問に答えてください。
利用可能なツール:{tool_names}
ツールの説明:{tools}
このフォーマットに正確に従ってください:
Thought: 何を調べる必要があるか?
Action: ツール名
Action Input: ツールへの入力
Observation: ツールの結果
...(必要に応じて繰り返す)
Thought: 今、十分な情報がある。
Final Answer: あなたの完全な答え"""),
("user", "{input}"),
("placeholder", "{agent_scratchpad}"),
])
tools = [search_web, read_file, calculate]
agent = create_react_agent(llm, tools, prompt)
agent_executor = AgentExecutor(
agent=agent,
tools=tools,
verbose=True,
max_iterations=8,
handle_parsing_errors=True,
)
if __name__ == "__main__":
result = agent_executor.invoke({
"input": "今最も人気のあるオープンソースLLM三つは何ですか?名前とそれぞれの主要な特徴を教えてください。"
})
print(f"\n最終回答:\n{result['output']}")

実行

Terminal window
# ターミナル1:Ollamaを起動
ollama serve
# ターミナル2:エージェントを実行
python research_agent.py

能力の拡張:APIなしのツール

ローカルデータベースアクセス

import sqlite3
@tool
def query_database(sql: str) -> str:
"""ローカルデータベースで読み取り専用SQLクエリを実行する。"""
try:
conn = sqlite3.connect("data.db")
cursor = conn.cursor()
cursor.execute(sql)
rows = cursor.fetchall()
columns = [desc[0] for desc in cursor.description]
conn.close()
return json.dumps([dict(zip(columns, row)) for row in rows], indent=2)
except Exception as e:
return f"データベースエラー:{e}"

埋め込みによるローカル文書検索

Terminal window
pip install sentence-transformers chromadb
from sentence_transformers import SentenceTransformer
import chromadb
model = SentenceTransformer("all-MiniLM-L6-v2")
client = chromadb.Client()
collection = client.create_collection("docs")
@tool
def search_docs(query: str) -> str:
"""意味的類似性でローカル文書を検索する。"""
results = collection.query(
query_embeddings=[model.encode(query).tolist()],
n_results=3
)
return json.dumps(results["documents"][0], indent=2)

現実世界の制約と解決策

レイテンシ

推論ステップごとに2〜30秒を見込もう。戦略:

  • より少ないステップでエージェントを設計する;シンプルほど速い
  • 可能な場合はツール呼び出しをまとめる

精度のギャップ

軽減策:

  • より短く明示的なプロンプト — 期待するフォーマットを正確に指定する
  • 複雑なタスクをステップに分解する
  • ツールの出力をエージェントに返す前に検証する
  • ツール使用には0.1〜0.3の温度を使用する

デプロイメント:ラップトップから常時稼働へ

Docker

FROM python:3.12-slim
RUN pip install langchain langchain-ollama langchain-community duckduckgo-search
COPY research_agent.py .
ENV OLLAMA_HOST=host.docker.internal:11434
CMD ["python3", "research_agent.py"]

Systemdサービス(Linux)

Terminal window
sudo systemctl enable ollama
sudo systemctl start ollama

より深く:自宅でのマルチエージェントシステム

def run_pipeline(question: str) -> str:
research_result = researcher.invoke({"input": question})
final_output = writer.invoke({
"input": f"この調査に基づいて、明確な要約を書いてください:\n{research_result['output']}"
})
return final_output["output"]

オープンソースエージェント開発は今日実用的だ。道筋はこうだ:推論にOllama、エージェントループにLangChainまたはAutoGen、検索にDuckDuckGo、残りすべてに自分のマシンのファイルシステム。

シンプルに始めよう——上の研究エージェントから。動かそう。そして2つ目のツールを追加する。次に2つ目のエージェントを。


関連記事