Function CallingとAPI統合
LLMに外部関数やAPIを呼び出させ、現実世界のシステムと連携させる方法を身につけます。
「Function CallingとAPI統合」はCoddyKit上の無料AI Prompt Engineeringレッスンです。 これはレッスン1/3です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはAI Prompt Engineering学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 AI Prompt Engineeringコースには全3レッスンが含まれています。
外部ツールを呼び出す
LLMは強力ですが、主にテキストの世界で動作します。現実世界の情報が必要になったり、何らかの処理を実行する必要が生じたりした場合はどうすればよいでしょうか。
Function callingによって、LLMは外部ツールやAPIと連携できます。これにより言語とアクションの間の隔たりが埋まり、AIは次のことを実行できるようになります。
- 最新情報を取得する(天気、株価)
- アクションを実行する(メールを送信する、予約を取る)
- データベースやカスタムツールに接続する
これにより、AIシステムの新たな可能性が切り開かれます。
LLMの役割:呼び出しの提案
Function callingを有効にすると、利用可能なツール(関数)の説明をLLMに提供します。
LLMは直接回答する代わりに、ツールが役立つと判断する場合があります。その場合、関数名と引数を含む、関数呼び出しの構造化された「提案」を出力します。
重要:LLMが関数自体を実行するわけではありません。呼び出す関数と、その関数に渡す入力をアプリケーションに伝えるだけです。
ツールの定義
Function callingを使用するには、LLMが理解できる形式でツール(関数)を定義する必要があります。通常は、次の情報を提供します。
- 関数の名前(例:
get_current_weather) - 関数の動作を示す説明(LLMが正しく選択するために重要です)
- 受け取るパラメーターと、その型および説明(例:
location: string)
この「スキーマ」によって、LLMは有効な呼び出しを提案するために必要な情報をすべて把握できます。
天気ツールの定義
これは、天気ツールをPythonで概念的に定義した例です。明確な説明とパラメーターに注目してください。これをLLMに公開します。
この関数は、LLMが概念的に「呼び出す」外部ツールを表します。
def get_current_weather(location: str, unit: str = "celsius"):
"""
Get the current weather in a given location.
Args:
location (str): The city and state, e.g. "London, UK"
unit (str): The unit of temperature, "celsius" or "fahrenheit"
Returns:
dict: Weather information.
"""
# In a real app, this would call a weather API
if location == "London, UK":
return {"temperature": "15", "unit": unit, "forecast": "cloudy"}
elif location == "New York, USA":
return {"temperature": "20", "unit": unit, "forecast": "sunny"}
else:
return {"temperature": "N/A", "unit": unit, "forecast": "unknown"}
ツール用プロンプトの作成
LLMにツールを使わせるには、プロンプトでユーザーの意図を明確に示す必要があります。LLMはそれを受けて、ツールが役立つかどうかを判断します。
LLMに「get_weatherを呼び出してください」と明示的に指示するのではありません。代わりに、ツールの使用を暗示する質問をします。
- 「ロンドンの天気はどうですか?」
- 「明日の会議を予約してもらえますか?」
LLMはツールの説明を利用して、関数呼び出しが必要だと推測します。
LLMによる呼び出しの提案
LLMがツールを使うと判断した場合、直接的な回答は返しません。代わりに、呼び出す関数とその引数を示す構造化オブジェクト(通常はJSON)を返します。
次に、アプリケーションがこの出力を解析します。
「ロンドンの天気はどうですか?」と尋ねた場合に、LLMが提案する内容は次のようになります。
{
"tool_calls": [
{
"id": "call_abc123",
"function": {
"name": "get_current_weather",
"arguments": "{\"location\": \"London, UK\", \"unit\": \"celsius\"}"
},
"type": "function"
}
]
}アプリケーションによるツールの実行
LLMから関数呼び出しの提案を受け取ると、アプリケーションが処理を引き継ぎます。
- 要求された関数(例:
get_current_weather)を特定します。 - 引数(例:
"London, UK")を抽出します。 - アプリケーションの環境内で実際のPython関数を実行します(またはAPIを呼び出します)。
ここで、LLMの外部にある「現実世界」の処理が行われます。
LLMによるツール出力の処理
アプリケーションが関数を実行すると、結果(例:{"temperature": "15", ...})を受け取ります。
次に、この結果が、元の会話履歴および関数呼び出しの要求とともにLLMに返されます。
LLMはこの新しい情報を使って、ユーザーの元の質問に対する自然言語の回答を生成します。
エンドツーエンドのインタラクション
ここまでの内容をすべてつなげてみましょう。この例では、ユーザーの質問を受けたLLMが関数呼び出しを提案し、アプリケーションがそれを実行した後、LLMが最終的な回答を返す流れを示します。
これは、やり取りのループを簡略化して表したものです。
def get_current_weather(location, unit="celsius"):
if location == "London, UK":
return {"temp": "15", "unit": unit, "forecast": "cloudy"}
return {"temp": "N/A", "unit": unit, "forecast": "unknown"}
def simulate_llm_response(user_query):
# LLM 'thinks' and decides to call a tool
if "weather in London" in user_query:
return {
"type": "tool_call",
"function": "get_current_weather",
"args": {"location": "London, UK"}
}
return {"type": "text", "content": "I cannot help with that."}
def simulate_llm_final_response(tool_output):
# LLM processes tool output and gives natural language
temp = tool_output.get("temp", "N/A")
forecast = tool_output.get("forecast", "unknown")
return f"The weather in London is {temp} degrees and {forecast}."
def main():
user_input = "What is the weather in London, UK?"
print(f"User: {user_input}")
llm_output = simulate_llm_response(user_input)
if llm_output["type"] == "tool_call":
func_name = llm_output["function"]
func_args = llm_output["args"]
print(f"LLM suggested calling: {func_name}({func_args})")
# Execute the function
tool_result = get_current_weather(**func_args)
print(f"Tool output: {tool_result}")
# Feed result back to LLM
final_answer = simulate_llm_final_response(tool_result)
print(f"LLM's final answer: {final_answer}")
else:
print(f"LLM: {llm_output['content']}")
if __name__ == "__main__":
main()
Function callingの確認
LLMが関数呼び出しの要求を返したとします。アプリケーションが次に取るべき直ちに行う処理は何でしょうか。
まとめ:ツールの活用
このレッスンでは、function callingとAPI連携によって、LLMが現実世界とやり取りする方法を学びました。
次の事項を取り上げました。
- 説明とパラメーターを付けてツール(関数)を定義する。
- LLMが、呼び出すツールとその引数を提案する。
- アプリケーションが実際のツールを実行し、結果をLLMに返す。
- LLMがその結果を使って、情報に基づく最終的な回答を作成する。
この強力な手法により、LLMは単なるテキスト生成を超えて、アクションを実行したり、最新情報を取得したりできるようになります。
よくある質問
「Function CallingとAPI統合」レッスンは無料ですか?
はい。「Function CallingとAPI統合」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、AI Prompt Engineeringコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 AI Prompt Engineeringコースには全3レッスンが含まれています。
「Function CallingとAPI統合」で何を学びますか?
LLMに外部関数やAPIを呼び出させ、現実世界のシステムと連携させる方法を身につけます。 ブラウザで直接実行するハンズオンコードでAI Prompt Engineeringを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。
AI Prompt Engineeringを始めるのに経験は必要ですか?
事前経験は必要ありません。CoddyKitのAI Prompt Engineeringは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン1/3です。
「Function CallingとAPI統合」レッスンにはどのくらい時間がかかりますか?
ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。
このAI Prompt Engineeringレッスンでコードを書いて実行できますか?
はい。すべてのAI Prompt Engineeringレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。
このコースのすべてのレッスン
- Function CallingとAPI統合
- マルチエージェントプロンプティングシステム
- LLM向けカスタムツールとプラグイン