クリーム色の背景、色付き表示、高コントラスト、大きな文字のほうが読みやすいですか?配色と文字を選ぶと、すべてのページに一度で反映されます。

無料レッスン

言語モデルの関数呼び出し

このレッスンのあとで: モデルが呼び出しを頼めるように、関数を説明できる。

60分のレッスンコマンド2件AI コーディングエージェントのラボ:opencode でコードを説明・修正し、その結果を確かめる

モデルがあなたの関数を使う仕組み

言語モデルが書けるのはテキストだけです。あなたのコードを実行できないので、お店の値段を調べることはできません。この差を埋めるのが、関数呼び出し(ツール呼び出し)です。

あなたはモデルに関数を説明します。モデルは「この関数を呼んでください」という依頼を返し、呼び出しを行うのはあなたのプログラムです。

このレッスンのゴール

メモ

モデルが呼び出しを頼めるように、関数を説明できる。

キーワード

ことばいみれい
ツールプログラムがモデルに提供する関数
ツール呼び出しツールを実行してほしいというモデルの依頼
スキーマデータの形を説明したもの
引数呼び出しが関数に渡す値{"item": "なし"}
説明文ツールが何のためのものかをモデルに伝える言葉

学生が入力するセルは、このプレビューでは空白です。

ツールは名前と入力でできている

関数を提供するときは、3つのものを送ります。名前は、モデルがその関数を呼ぶときの名前です。説明文は、何をするか、いつ使うかを伝えます。パラメータは、どんな引数を受け取るかをJSONスキーマで書いたものです。

モデルはあなたのコードを見ません。読むのはこの説明だけなので、あいまいな説明だと、よくない依頼になります。

例で確認:ツールを部分ごとに見る

部分入っているものこのツールでは
nameモデルが呼ぶ名前get_price
description何をするか商品の値段を円で返す。
parameters引数のスキーマitemという文字列
required必須の引数item

学生が入力するセルは、このプレビューでは空白です。

ツールの説明を表示する

コマンド
docker exec -w /home/node/project agent node -e "const tool={type:'function',function:{name:'get_price',description:'商品の値段を円で返す。',parameters:{type:'object',properties:{item:{type:'string',description:'商品名。たとえばりんご'}},required:['item']}}};console.log(JSON.stringify(tool,null,2))"

ここでは表示のみで、実行されません。無料アカウントを作成すると、実行ボタンで自分のラボのターミナルに入力できます。

モデルは結果ではなく依頼を返す

モデルがツールを使いたいとき、応答には言葉の代わりにtool_callsというリストが入っています。各呼び出しには、id、関数のname、argumentsがあります。

引数は、オブジェクトではなく、1つのJSON文字列として届きます。値を使う前に、プログラムでその文字列を読み込む必要があります。

モデルにツール呼び出しを頼む

コマンド
docker exec -w /home/node/project agent node -e "const u=(process.env.AI_URL||'http://ai:4000')+'/v1/chat/completions';const ask=async(m,t)=>{const r=await fetch(u,{method:'POST',headers:{'content-type':'application/json',authorization:'Bearer lab'},body:JSON.stringify({model:'lab',messages:m,tools:t,tool_choice:'required',max_tokens:80})});const j=await r.json();if(r.ok)return j.choices[0].message;throw Error(r.status+' '+j.error.message)};const tool={type:'function',function:{name:'get_price',description:'値段を返す。',parameters:{type:'object',properties:{item:{type:'string'}}}}};(async()=>{let c;try{c=(await ask([{role:'user',content:'なしはいくらですか。'}],[tool])).tool_calls[0]}catch(e){console.log('呼び出しなし('+e.message+')。記録済みサンプル:');c={function:{name:'get_price',arguments:JSON.stringify({item:'なし'})}}}const f=c.function;console.log('名前:'+f.name);console.log('引数:'+f.arguments+' -> '+JSON.parse(f.arguments).item)})()"

ここでは表示のみで、実行されません。無料アカウントを作成すると、実行ボタンで自分のラボのターミナルに入力できます。

よくある間違い

注意

モデルが関数を実行すると思っている人が多くいます。実行はしません。書くのは依頼だけです。依頼を読み、関数を実行し、結果をどうするか決めるのは、あなたのプログラムです。

さらに:説明文を改良する

モデルに聞く実行の説明文を、たとえば値段を返すから値段に変えてみましょう。3回実行して、呼び出しが変わるか書き留めます。

モデルに聞く実行のツールには、requiredのリストがないので、モデルは商品名を入れ忘れることがあります。propertiesのあとにrequired:['item']を足して、もう一度実行し、何が変わるか書きましょう。

このラボとソースについて: AI コーディングエージェントのラボ:opencode でコードを説明・修正し、その結果を確かめる

授業で使いますか?このモジュールを学生に割り当てると、教員用ガイド、自動採点つきの課題、学生ごとのラボを使えます。