Wie ein Modell Ihre Funktionen nutzen kann
Ein Sprachmodell kann nur Text schreiben. Es kann keinen Preis in Ihrem Laden nachschlagen, denn es führt Ihren Code nicht aus. Funktionsaufrufe, auch Werkzeugaufrufe genannt, schließen diese Lücke.
Sie beschreiben dem Modell eine Funktion. Es antwortet mit der Bitte um einen Aufruf, und Ihr Programm führt den Aufruf aus.
Am Ende dieser Lektion
Notiz
Ich kann eine Funktion so beschreiben, dass ein Modell sie anfordern kann.
Schlüsselwörter
| Begriff | Was er bedeutet | Beispiel |
|---|---|---|
| Werkzeug | eine Funktion, die Ihr Programm einem Modell anbietet | |
| Werkzeugaufruf | die Bitte des Modells, ein Werkzeug auszuführen | |
| Schema | eine Beschreibung der Form von Daten | |
| Argumente | die Werte, die ein Aufruf an die Funktion gibt | {"artikel": "birne"} |
| Beschreibung | Worte, die dem Modell sagen, wofür ein Werkzeug da ist |
Die Zellen, die Lernende ausfüllen, bleiben in dieser Vorschau leer.
Ein Werkzeug hat einen Namen und Eingaben
Um eine Funktion anzubieten, senden Sie drei Dinge. Der Name ist der, den das Modell verwendet. Die Beschreibung sagt, was sie tut und wann man sie nutzt. Die Parameter sagen, welche Argumente sie nimmt, als JSON-Schema geschrieben.
Das Modell sieht Ihren Code nie. Es liest nur diese Beschreibung. Eine vage Beschreibung ergibt daher schlechte Anfragen.
Durchgerechnetes Beispiel: ein Werkzeug, Teil für Teil
| Teil | Was er enthält | In unserem Werkzeug |
|---|---|---|
| name | Der Name, den das Modell verwendet | preis_von |
| description | Was es tut | Gibt den Preis eines Artikels in Cent an. |
| parameters | Die Argumente, als Schema | ein Text namens artikel |
| required | Die Pflichtargumente | artikel |
Die Zellen, die Lernende ausfüllen, bleiben in dieser Vorschau leer.
Die Beschreibung eines Werkzeugs ausgeben
docker exec -w /home/node/project agent node -e "const werkzeug={type:'function',function:{name:'preis_von',description:'Gibt den Preis eines Artikels in Cent an.',parameters:{type:'object',properties:{artikel:{type:'string',description:'Der Name des Artikels, zum Beispiel apfel'}},required:['artikel']}}};console.log(JSON.stringify(werkzeug,null,2))"Hier angezeigt, nicht ausgeführt. Erstellen Sie ein kostenloses Konto, um „Ausführen“ zu drücken und ihn im Terminal Ihres eigenen Labs einzugeben.
Das Modell antwortet mit einer Bitte
Will das Modell ein Werkzeug, enthält seine Antwort statt Worten eine Liste namens tool_calls. Jeder Aufruf hat eine id, den name der Funktion und die arguments.
Die Argumente kommen als eine einzige Zeichenkette aus JSON an, nicht als Objekt. Ihr Programm muss diese Zeichenkette lesen, bevor es die Werte nutzt.
Ein Modell um einen Werkzeugaufruf bitten
docker exec -w /home/node/project agent node -e "const u=(process.env.AI_URL||'http://ai:4000')+'/v1/chat/completions';const fragen=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 werkzeug={type:'function',function:{name:'preis_von',description:'Gibt einen Preis an.',parameters:{type:'object',properties:{artikel:{type:'string'}}}}};(async()=>{let c;try{c=(await fragen([{role:'user',content:'Preis einer Birne?'}],[werkzeug])).tool_calls[0]}catch(e){console.log('Fehler ('+e.message+'). Aufgezeichnetes Beispiel:');c={function:{name:'preis_von',arguments:JSON.stringify({artikel:'birne'})}}}const f=c.function;console.log('Name: '+f.name);console.log('Argumente: '+f.arguments+' -> '+JSON.parse(f.arguments).artikel)})()"Hier angezeigt, nicht ausgeführt. Erstellen Sie ein kostenloses Konto, um „Ausführen“ zu drücken und ihn im Terminal Ihres eigenen Labs einzugeben.
Ein häufiger Fehler
Warnung
Viele glauben, das Modell führe die Funktion aus. Das tut es nicht. Es schreibt nur eine Bitte. Ihr Programm liest die Bitte, führt die Funktion aus und entscheidet, was mit dem Ergebnis geschieht.
Zum Weiterdenken: eine Beschreibung verbessern
Ändern Sie die Beschreibung im Lauf, der ein Modell fragt, zum Beispiel in Gibt einen Preis an. Führen Sie ihn dreimal aus und notieren Sie, ob sich der Aufruf ändert.
Das Werkzeug in diesem Lauf hat keine required-Liste, das Modell darf den Artikel also weglassen. Fügen Sie required:['artikel'] nach properties hinzu, führen Sie den Lauf erneut aus und schreiben Sie auf, was sich ändert.