ローカル LLM (Ollama・LM Studio・Gemma)
オフライン環境、あるいはセキュリティ要件でクラウド LLM を利用しづらい場合は、Ollama や LM Studio で起動したローカルモデルに MCP クライアントを接続して FindIP をツールとして利用できます。モデルは Llama 3.1、Qwen 2.5、Gemma 2 など tool use 対応の 8B 以上を推奨します。
事前準備
ローカルで稼働中の LLM インスタンス + FindIP API キー + tool calling 対応クライアント(例: FastMCP、または custom base URL を指定した OpenAI Python SDK)。
設定手順
Ollama でモデルを起動
ツール呼び出しに対応したモデルを起動します。
ollama serve ollama pull llama3.1:8b-instruct-q4_K_M # または: ollama pull qwen2.5:7b-instruct
FindIP 呼び出し関数の定義
OpenAI 互換 API(Ollama は localhost:11434/v1)にツールを登録します。
import os, requests
from openai import OpenAI
llm = OpenAI(base_url="http://localhost:11434/v1", api_key="ollama")
tools = [{
"type": "function",
"function": {
"name": "findip_search",
"description": "日・米・韓・中・EP の 5 か国特許セマンティック検索",
"parameters": {
"type": "object",
"properties": {
"query": {"type": "string"},
"top_k": {"type": "integer", "default": 10},
},
"required": ["query"],
},
},
}]
def findip_search(query, top_k=10):
return requests.post(
"https://api.findip.ai/api/v1/search/semantic",
headers={"X-API-Key": os.environ["FINDIP_API_KEY"]},
json={"query": query, "top_k": top_k},
timeout=30,
).json()ツール呼び出しループ
モデルが tool_calls を返したら実際に呼び出し、結果を再度モデルへ渡します。
messages = [{"role": "user", "content": "全固体電池 固体電解質の重要特許 5 件"}]
res = llm.chat.completions.create(model="llama3.1:8b-instruct-q4_K_M", messages=messages, tools=tools)
if res.choices[0].message.tool_calls:
for tc in res.choices[0].message.tool_calls:
result = findip_search(**eval(tc.function.arguments))
messages.append(res.choices[0].message)
messages.append({"role": "tool", "tool_call_id": tc.id, "content": str(result)})
final = llm.chat.completions.create(model="llama3.1:8b-instruct-q4_K_M", messages=messages, tools=tools)
print(final.choices[0].message.content)プロンプト例
Prompt
"ペロブスカイト太陽電池の安定性向上分野について、日本・米国を中心に重要特許 5 件を抽出し、クレーム要約とともにまとめてください。"
よくある問題
モデルがツール呼び出しを行いません。
ツール呼び出しに対応したモデルか確認してください。Llama 3.1 8B/70B Instruct、Qwen 2.5 7B 以上、Gemma 2 27B などが安定しています。7B 未満は失敗率が高くなります。
応答が遅すぎます。
ローカルモデルが直接データを読んで要約すると負荷が大きくなります。FindIP 応答から title・abstract のみ抽出してモデルへ渡すと、トークン消費は約 1/5 に減ります。
MCP 標準をそのまま使いたいです。
FastMCP や LangChain の MCP アダプタで https://api.findip.ai/mcp に直接接続することも可能です。ただし OAuth フローはヘッドレス環境では追加実装が必要なため、API Key 方式の方がシンプルです。