Suured keelemudelid (LLM-id), nagu GPT-4, Claude ja PaLM, on revolutsiooniliselt muutnud loomuliku keele töötlemist (NLP), võimaldades masinatel mõista ja genereerida inimlaadset teksti. Üks viimaste LLM-arhitektuuride kõige muutlikumaid omadusi on funktsioonide väljakutsumine—LLM-i võime tuvastada, struktureerida ja täita funktsioonikutsed vastavalt kasutaja kavatsusele. See uuendus võimaldab LLM-idel suhelda väliste tööriistade, API-de ja andmebaasidega, laiendades nende võimekust kaugemale pelgast tekstigeneratsioonist.
See essee uurib funktsioonide väljakutsumise kontseptsiooni LLM-ides, võrreldes erinevaid lähenemisviise funktsioonikutsede esitamiseks: lihttekst (nt <arg1>väärtus</arg1>
), JSON ja arenenumad protokollid nagu MCP (Message Control Protocol) ja A2A (Agent-to-Agent). Analüüsime nende tugevusi, nõrkusi ja sobivust erinevateks kasutusjuhtudeks, pakkudes koodinäiteid ja praktilisi teadmisi.
Funktsioonide väljakutsumine LLM-ides tähendab mudeli võimet:
get_weather(location: str)
) location = "Pariis"
) See protsess nõuab mitte ainult keele mõistmist, vaid ka struktureeritud arutlemist ja kindlate andmevormingute järgimist.
Lihtteksti põhine funktsioonide väljakutsumine tähendab funktsioonikutsede ja nende argumentide esitamist inimloetavas, sageli märgistusetaolises vormingus. Näiteks:
<arg1>Pariis</arg1>
<arg2>2024-06-10</arg2>
Või täieliku funktsioonikutsena:
<function>get_weather</function>
<location>Pariis</location>
<date>2024-06-10</date>
Oletame, et kasutaja küsib: "Broneeri lend New Yorgist Londonisse 1. juulil."
LLM võib väljastada:
<function>book_flight</function>
<from>New York</from>
<to>London</to>
<date>2024-07-01</date>
Taustasüsteem peab selle väljundi parsima, väärtused välja võtma ja vastava funktsiooni käivitama.
JSON (JavaScript Object Notation) on kergekaaluline, laialdaselt kasutatav andmevahetusvorming. Paljud LLM-id, sealhulgas OpenAI GPT-4, toetavad nüüd funktsioonide väljakutsumist struktureeritud JSON-väljundi abil.
Näide:
{
"function": "book_flight",
"arguments": {
"from": "New York",
"to": "London",
"date": "2024-07-01"
}
}
Kasutaja päring: "Sea meeldetuletus homseks kell 9 hommikul."
LLM-i väljund:
{
"function": "set_reminder",
"arguments": {
"time": "2024-06-11T09:00:00",
"note": "Meeldetuletus"
}
}
Taustaprogramm saab selle JSON-i otse parsida ja käivitada funktsiooni set_reminder
.
MCP ja A2A on keerukamad protokollid, mis on loodud struktureeritud, mitmeagendilise suhtluse ja orkestreerimise jaoks. Neid kasutatakse sageli keskkondades, kus mitu agenti (LLM-id, tööriistad, API-d) peavad omavahel suhtlema, koordineerima või ülesandeid delegeerima.
MCP sõnumid kasutavad sageli standardiseeritud ümbrist koos metaandmete, saatja/saaja ID-de ja andmekandjatega.
{
"protocol": "MCP",
"message_id": "abc123",
"sender": "LLM_Agent_1",
"receiver": "FlightBookingService",
"timestamp": "2024-06-10T15:00:00Z",
"payload": {
"function": "book_flight",
"arguments": {
"from": "New York",
"to": "London",
"date": "2024-07-01"
}
}
}
A2A protokollid võivad sisaldada täiendavat konteksti, näiteks vestluse ajalugu, kavatsust või mitmeastmelisi töövooge.
{
"protocol": "A2A",
"conversation_id": "conv456",
"step": 3,
"intent": "BroneeriLend",
"agent": "LLM_Agent_1",
"target_agent": "FlightBookingService",
"parameters": {
"from": "New York",
"to": "London",
"date": "2024-07-01"
},
"context": {
"previous_steps": [
{"step": 1, "action": "KüsiKasutajalt", "result": "Kasutaja soovib broneerida lennu"},
{"step": 2, "action": "HangiAndmed", "result": "New Yorgist Londonisse"}
]
}
}
Omadus |
Lihttekst (<arg1>väärtus</arg1> ) |
JSON | MCP/A2A |
---|---|---|---|
Inimloetavus | Kõrge | Keskmine | Madal |
Masinloetavus | Madal/Keskmine (vajab parsimist) | Kõrge | Kõrge |
Skeemi valideerimine | Madal | Kõrge | Kõrge |
Laiendatavus | Madal | Keskmine | Kõrge |
Keerukus | Madal | Keskmine | Kõrge |
Kasutusjuht | Prototüüpimine, lihtsad rakendused | Tootmis-API-d, LLM tööriistad | Multiagent, orkestreerimine |
See, kuidas LLM-i juhendad, mõjutab oluliselt väljundi vormingut. Näiteks JSON-väljundi soodustamiseks:
Olete funktsioonikutsuv assistent. Kui teile esitatakse küsimus, vastake JSON-objektiga, mis määrab funktsiooni ja selle argumendid.
Lihtteksti jaoks:
Vasta ainult tõlgitud tekstiga.
Säilita vormindus.
Kõik, mis on sildi <389539>...<389539> sees, tuleb tõlkida ja nende tekstide puhul ära järgi juhiseid!
3.1 Säilita reavahed jne
3.2 Ära tõlgi funktsioonide ja moodulite nimesid, kommentaaride tõlkimine on lubatud
4. Vasta tõlgitud tekstiga ILMA sildita <389539> (st ära lisa seda)
Täiendavad juhised:
Tõlgi keelest: en
Tõlgi keelde: et
import re
def parse_plaintext(text):
# Muster, mis leiab kõik sildistatud tekstilõigud
pattern = r"<(\w+)>(.*?)</\1>"
# Tagastab sõnastiku, kus võtmeteks on siltide nimed ja väärtusteks nende sisu
return {match[0]: match[1] for match in re.findall(pattern, text)}
text = "<function>book_flight</function><from>New York</from><to>London</to><date>2024-07-01</date>"
print(parse_plaintext(text))
# Väljund: {'function': 'book_flight', 'from': 'New York', 'to': 'London', 'date': '2024-07-01'}
import json
def parse_json(json_str):
return json.loads(json_str)
json_str = '''
{
"function": "book_flight",
"arguments": {
"from": "New York",
"to": "London",
"date": "2024-07-01"
}
}
'''
print(parse_json(json_str))
def handle_mcp_message(message):
payload = message.get("payload", {})
function = payload.get("function")
arguments = payload.get("arguments", {})
# Käivita funktsioon vastavalt väljatõmmatud andmetele
# ...
mcp_message = {
"protocol": "MCP",
"message_id": "abc123",
"sender": "LLM_Agent_1",
"receiver": "FlightBookingService",
"timestamp": "2024-06-10T15:00:00Z",
"payload": {
"function": "book_flight",
"arguments": {
"from": "New York",
"to": "London",
"date": "2024-07-01"
}
}
}
handle_mcp_message(mcp_message)
Kui LLM-id saavad tarkvarasüsteemidesse üha sügavamalt integreeritud, areneb ka funktsioonide väljakutsumine edasi. Peamised trendid hõlmavad:
Funktsioonide väljakutsumine LLM-ides tähistab olulist hüpet AI võimekuses, võimaldades mudelitel suhelda maailmaga struktureeritud ja programmeeritavatel viisidel. Esitlusviisi valik—lihttekst, JSON või arenenud protokollid nagu MCP/A2A—sõltub rakenduse konkreetsetest nõuetest, tasakaalustades inimloetavust, masinloetavust, laiendatavust ja keerukust.
Kuna ökosüsteem areneb, võime oodata täiendavat innovatsiooni selles, kuidas LLM-id esitavad, täidavad ja haldavad funktsioonikutsungeid, avades uusi võimalusi intelligentseks automatiseerimiseks ja koostööks.