DocsAI 接続 / ローカル LLM

ローカル 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)。

設定手順

1

Ollama でモデルを起動

ツール呼び出しに対応したモデルを起動します。

bash
ollama serve
ollama pull llama3.1:8b-instruct-q4_K_M
# または: ollama pull qwen2.5:7b-instruct
2

FindIP 呼び出し関数の定義

OpenAI 互換 API(Ollama は localhost:11434/v1)にツールを登録します。

python
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()
3

ツール呼び出しループ

モデルが tool_calls を返したら実際に呼び出し、結果を再度モデルへ渡します。

python
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 方式の方がシンプルです。

FindIP | Semantic Patent Search