Adeiladu Asiant AI sy'n Gweithio: Rhestr Derfynegol Ymarferol
Beth yn union yw asiant AI, sut mae'n wahanol i sgwrsbot, a'r cydrannau sydd eu hangen arnoch i adeiladu un sy'n gweithio.
Asiant AI yw rhaglen sy'n cymryd nod, yn penderfynu ar ddilyniant o gamau, ac yn cyflawni'r camau hynny gan ddefnyddio offer nes cyflawni'r nod neu ildio. Mae hynny'n wahanol i sgwrsbot, sy'n unig yn ymateb i negeseuon. Mae asiant yn cynllunio, yn galw ffwythiannau, yn gwirio canlyniadau, ac yn addasu. Os ydych chi wedi defnyddio ChatGPT drwy borwr yn unig, adeiladu eich asiant cyntaf yw lle mae'r model yn stopio bod yn gynhyrchydd testun ac yn dechrau bod yn gydran mewn system fwy.
Y ddolen graidd
Pob asiant, ni waeth sut mae'n cael ei farchnata, yn rhedeg rhyw fersiwn o'r un ddolen: arsylwi, meddwl, gweithredu, ailadrodd. Yn bendant:
- Mae'r asiant yn derbyn tasg ("darganfod y hedfan rhataaf i Lisbon y mis nesaf ac ysgrifennu crynodeb e-bost").
- Mae'n galw'r LLM gyda'r dasg ynghyd â disgrifiad o'r offer sydd ar gael.
- Mae'r model yn dychwelyd naill ai ateb terfynol neu alwad offer, fel
search_flights(destination="Lisbon", month="2025-06"). - Mae eich cod yn cyflawni'r ffwythiant hwnnw, yn cael canlyniad go iawn, ac yn ei fwydo yn ôl i gyd-destun y model.
- Mae'r model yn penderfynu beth i'w wneud nesaf: galw offer arall, gofyn am egluriad, neu orffen.
Air y patrwm hwn yn aml ei alw'n ddolen ReAct (rhesymu ynghyd â gweithredu), ac mae'n asgwrn cefn fframweithiau fel asiant-lychwyr LangChain, asiantau LlamaIndex, ac API galw-ffwythiant OpenAI. Gallwch chi weithredu'r peth cyfan eich hun mewn llai na 100 llinell o Python gyda dim ond API LLM a while ddolen — mae'r fframweithiau yn ychwanegu hwylustod, nid hud.
Mae offer yn yr hyn sy'n ei wneud yn asiant
Model heb offer yn gallu siarad yn unig. Rhowch ffwythiannau iddo a gallai weithredu. Offer yw nodweddiadol ffwythiannau Python plaen wedi'u lapio gyda schema sy'n disgrifio eu henw, paramedrau, a diben, fel bod y model yn gwybod pryd a sut i'w galw. Enghraifft:
def get_weather(city: str) -> str:
"""Return current weather for a given city."""
resp = requests.get(f"https://api.weather.example/v1/{city}")
return resp.json()["summary"]
Gyda galw-ffwythiant OpenAI, rydych chi'n pasio schema JSON ochr yn ochr â'r ffwythiant hwn, ac mae'r model yn allbynnu galwad strwythuredig fel {"name": "get_weather", "arguments": {"city": "Lisbon"}} yn lle testun rhydd. Mae eich cod yn codi hynny, yn rhedeg y ffwythiant go iawn, ac yn dychwelyd y canlyniad fel neges newydd yn y sgwrs. Ailadrodd nes bod gan y model ddigon o wybodaeth i ateb.
Cof a thalp
Nid oes gan alwad API sengl gof y tu hwnt i'w ffenestr cyd-destun. Mae asiantau angen talp penodol: rhestr rhedeg o negeseuon (yr hanes sgwrs), ac yn aml siop ar wahân am ffeithiau hwy-dymor. Ar gyfer tasgau byr, mae rhestr Python o dicts sy'n cynrychioli'r sgwrs yn ddigon. Ar gyfer asiantau sydd angen cofio pethau ar draws sesiynau, byddwch yn cyrraedd at gronfa ddata fector (Chroma, Pinecone, Qdrant) i storio ac adalw gwybodaeth relevans yng ngeisiau trwy embeddings.
Na dros-beiriannwch hyn yn gynnar. Mae nifer sy'n synnu o brojectau "asiant" yn methu nid am fod yr LLM yn wan ond am fod rheolaeth talp yn drwgl: negeseuon dyblyg, twf cyd-destun heb rwymo, neu golli golwg o ba alwad offer sy'n perthyn i ba ganlyniad.
Enghraifft weithio isel
Dyma siâp asiant moël-asgwrn gan ddefnyddio API OpenAI, dim fframwaith:
messages = [{"role": "user", "content": "What's the weather in Lisbon?"}]
while True:
response = client.chat.completions.create(
model="gpt-4o",
messages=messages,
tools=[weather_tool_schema],
)
msg = response.choices[0].message
if msg.tool_calls:
for call in msg.tool_calls:
result = get_weather(**json.loads(call.function.arguments))
messages.append(msg)
messages.append({
"role": "tool",
"tool_call_id": call.id,
"content": result,
})
else:
print(msg.content)
break
Dyna asiant go iawn, sy'n gweithio. Mae popeth arall — strategaethau cynllunio, cydgordio aml-asiant, pibellau adennill — yn adeiladu ar y ddolen hon.
Lle mae'n torri
Mae asiantau'n methu mewn ffyrdd rhagfynegol: hyliau call-offer anfeidrol pan na all y model ddweud iddo lwyddo, dadleuon ffwythiant wedi'u llunio, a chostau rhedeg o alw offer drud eto. Amddiffyn yn erbyn hyliau gyda chap iteriad caled (dywedwch, 10 cam) ac yn cofnodi pob galwad offer yn ystod datblygu. Dilysu dadleuon cyn cyflawni dim byd sy'n cyffwrdd â system go iawn — mae asiant sy'n gallu anfon e-byst neu redeg gorchmynion cregyn angen yr un dulliau sanadu mewnbwn a fyddai'n berthnasol i god wynebu defnyddwr, oherwydd mae'r LLM, mewn effaith, yn ddefnyddiwr heb ei ymddiried yn cynhyrchu'r mewnbwn hwnnw.
Ble i fynd nesaf
Un mae'r ddolen yn gweithio, mae'r problemau diddorol yn dechrau: dewis rhwng dyluniadau asiant-sengl ac aml-asiant, penderfynu faint o hunanreolaeth i'w roi, a thestio asiantau'n ddibynadwy pan nad yw eu allbwn yn bendant. Mae traciau AI a Python Korra Studio yn ymdrin â chenhedlaeth wedi'i hyrwyddo trwy adennill, cynllunio anogaeth, a phatrymau galw-offer yn ddyfnach os ydych chi eisiau parhau i adeiladu o fan hyn.
Ysgrifennwyd yr erthygl hon gyda chymorth AI, a'i hadolygu a'i chyhoeddi gan Michal Pilch (CISSP), Korra Studio.
Dyma un nodyn o'r gronfa wybodaeth Korra Studio — mae'r platfform yn paru pob pwnc ag 1-i-1 mentora.
Dechrau am ddimarrow_forward