スキップしてメイン コンテンツに移動

AIに「手」を与える:LangChain ToolsとFunction Callingの実装術

AIに「手」を与える:LangChain ToolsとFunction Callingの実装術

はじめに

LLMは「脳」としては優秀ですが、そのままでは「インターネットにアクセス」したり「正確な計算」を行ったりすることはできません。「現在時刻は?」「今日の天気は?」と聞かれても、学習データ(過去の情報)に基づいて推測することしかできないのです。

そこで必要なのが「Tools(ツール)」です。AIに関数(API)という「手」を与えることで、AIは自ら情報を検索し、計算し、外部システムを操作できるようになります。今回はその実装方法を解説します。

LLMだけではできないこと

Limitation

LLMは「次の単語を予測する機械」であり、論理的な思考やリアルタイムな情報収集は本来の機能ではありません。

例えば「12345 × 67890 は?」と聞くと、LLMは計算せずに「もっともらしい数字の並び」を生成しようとします(そしてよく間違えます)。しかし、計算機ツールを渡しておけば、AIは「これは計算が必要だ」と判断し、電卓APIを呼び出して正しい答えを返します。

Tool(道具)の定義方法

Pythonの関数に @tool デコレータを付けるだけで、簡単にAI用のツールを作成できます。

from langchain_core.tools import tool

@tool
def get_weather(city: str) -> str:
    """都市名を受け取り、現在の天気を返します。"""
    # 実際はここで外部APIを叩く
    return f"{city}の天気は晴れ、気温は25度です。"

print(get_weather.name) # get_weather
print(get_weather.args) # {'city': {'title': 'City', 'type': 'string'}}

重要なのはdocstring(関数の説明文)です。AIはこの説明文を読んで「このツールはいつ、どうやって使うべきか」を判断します。

AIにツールを実行させる (Function Calling)

OpenAIなどのFunction Calling対応モデルを使えば、ツールのリストを渡すだけで、AIが必要に応じて関数呼び出し用のJSONを出力してくれます。

llm_with_tools = llm.bind_tools([get_weather])

response = llm_with_tools.invoke("東京の天気は?")

# AIの返答はToolCallを含むメッセージになる
print(response.tool_calls)
# [{'name': 'get_weather', 'args': {'city': '東京'}, 'id': '...'}]

実践:Google検索エージェント

LangChainには最初から使える便利なツールセットが用意されています。例えば TavilySearchResults などの検索ツールを使えば、簡単に最新情報を調べるエージェントが作れます。

これをLangGraphなどのエージェント・フレームワークと組み合わせることで、「まず検索し、情報が足りなければ別の単語で再検索し、最後に答えをまとめる」といった自律的な行動が可能になります。

まとめ

Toolを使えるようになったAIを「エージェント」と呼びます。エージェント開発こそが、これからのAIエンジニアの主戦場です。

Security

AIに「ファイルの削除」や「メール送信」などのツールを持たせる場合は、必ず人間が確認するステップ(Human-in-the-loop)を入れるなど、セキュリティ対策を十分に行ってください。

次回からは、いよいよLangChainの華形機能である「RAG(検索拡張生成)」の仕組みについて深掘りしていきます。

このブログ記事はAIを利用して自動生成されました。

コメント