(Kliknite na gornju sliku za pregled videa ove lekcije)
Alati su zanimljivi jer omogućuju AI agentima da imaju širi spektar sposobnosti. Umjesto da agent ima ograničeni skup radnji koje može izvršiti, dodavanjem alata agent sada može izvršavati širok raspon radnji. U ovom poglavlju razmotrit ćemo Dizajnerski obrazac korištenja alata, koji opisuje kako AI agenti mogu koristiti određene alate za postizanje svojih ciljeva.
U ovoj lekciji nastojimo odgovoriti na sljedeća pitanja:
Nakon završetka ove lekcije moći ćete:
Dizajnerski obrazac korištenja alata fokusira se na omogućavanje LLM-ovima sposobnosti interakcije s vanjskim alatima radi postizanja specifičnih ciljeva. Alati su kod koji agent može izvršavati kako bi obavljao radnje. Alat može biti jednostavna funkcija poput kalkulatora ili poziv API-ja treće strane za usluge poput provjere cijena dionica ili vremenske prognoze. U kontekstu AI agenata, alati su dizajnirani da budu izvršavani od strane agenata kao odgovor na funkcijske pozive koje generira model.
AI agenti mogu koristiti alate kako bi dovršili složene zadatke, dohvatili informacije ili donijeli odluke. Dizajnerski obrazac korištenja alata često se koristi u scenarijima koji zahtijevaju dinamičku interakciju s vanjskim sustavima, kao što su baze podataka, web servisi ili interpretatori koda. Ova sposobnost je korisna za mnoge različite slučajeve upotrebe, uključujući:
Ovi gradivni blokovi omogućuju AI agentu izvođenje širokog spektra zadataka. Pogledajmo ključne elemente potrebne za implementaciju Dizajnerskog obrasca korištenja alata:
Sheme funkcija/alata: Detaljni opisi dostupnih alata, uključujući naziv funkcije, svrhu, potrebne parametre i očekivane izlaze. Ove sheme omogućavaju LLM-u razumijevanje dostupnih alata i kako sastaviti valjane zahtjeve.
Logika izvršavanja funkcija: Upravljanja kada i kako se alati pozivaju na temelju korisnikove namjere i konteksta razgovora. Ovo može uključivati module za planiranje, mehanizme usmjeravanja ili uvjetne tokove koji dinamički odlučuju o korištenju alata.
Sustav rukovanja porukama: Komponente koje upravljaju komunikacijskim tokom između korisničkih unosa, LLM odgovora, poziva alata i izlaza alata.
Okvir za integraciju alata: Infrastruktura koja povezuje agenta s različitim alatima, bilo da su jednostavne funkcije ili složene vanjske usluge.
Rukovanje pogreškama i validacija: Mehanizmi za upravljanje neuspjesima u izvršavanju alata, validaciju parametara i upravljanje neočekivanim odgovorima.
Upravljanje stanjima: Praćenje konteksta razgovora, prethodnih interakcija s alatima i trajnih podataka kako bi se osigurala dosljednost kroz višekratne okretaje.
Sljedeće, pogledajmo detaljnije pozivanje funkcija/alata.
Pozivanje funkcija je primarni način na koji omogućavamo Velikim Jezičnim Modelima (LLM-ovima) interakciju s alatima. Često ćete vidjeti da se pojmovi ‘funkcija’ i ‘alat’ koriste naizmjenično jer su ‘funkcije’ (blokovi višekratno upotrebljivog koda) alati koje agenti koriste za izvršavanje zadataka. Da bi se kod funkcije pozvao, LLM mora usporediti korisnički zahtjev s opisom funkcije. Za to se šalje shema koja sadrži opise svih dostupnih funkcija LLM-u. LLM zatim odabire najprikladniju funkciju za zadatak i vraća jej naziv i argumente. Odabrana funkcija se poziva, njezin odgovor se šalje natrag LLM-u, koji koristi informacije za odgovor korisniku.
Da bi developeri implementirali pozivanje funkcija za agente, potrebni su vam:
Iskoristit ćemo primjer dobivanja trenutnog vremena u gradu za ilustraciju:
Inicijalizirajte LLM koji podržava pozivanje funkcija:
Nisu svi modeli podržavaju pozivanje funkcija, stoga je važno provjeriti da li model koji koristite podržava tu značajku. Azure OpenAI podržava pozivanje funkcija. Možemo započeti iniciranjem Azure OpenAI klijenta.
# Inicijalizirajte Azure OpenAI klijenta
client = AzureOpenAI(
azure_endpoint = os.getenv("AZURE_AI_PROJECT_ENDPOINT"),
api_key=os.getenv("AZURE_OPENAI_API_KEY"),
api_version="2024-05-01-preview"
)
Kreirajte shemu funkcije:
Zatim ćemo definirati JSON shemu koja sadrži naziv funkcije, opis što funkcija radi i nazive te opise parametara funkcije. Ovu shemu ćemo proslijediti ranije kreiranom klijentu zajedno sa zahtjevom korisnika za pronalaženjem vremena u San Franciscu. Važno je istaknuti da je poziv alata ono što se vraća, a ne konačni odgovor na pitanje. Kao što je ranije spomenuto, LLM vraća naziv funkcije koju je odabrao za zadatak i argumente koji će joj biti proslijeđeni.
# Opis funkcije za model da pročita
tools = [
{
"type": "function",
"function": {
"name": "get_current_time",
"description": "Get the current time in a given location",
"parameters": {
"type": "object",
"properties": {
"location": {
"type": "string",
"description": "The city name, e.g. San Francisco",
},
},
"required": ["location"],
},
}
}
]
# Početna korisnička poruka
messages = [{"role": "user", "content": "What's the current time in San Francisco"}]
# Prvi API poziv: Zatraži od modela da koristi funkciju
response = client.chat.completions.create(
model=deployment_name,
messages=messages,
tools=tools,
tool_choice="auto",
)
# Obradi odgovor modela
response_message = response.choices[0].message
messages.append(response_message)
print("Model's response:")
print(response_message)
Model's response:
ChatCompletionMessage(content=None, role='assistant', function_call=None, tool_calls=[ChatCompletionMessageToolCall(id='call_pOsKdUlqvdyttYB67MOj434b', function=Function(arguments='{"location":"San Francisco"}', name='get_current_time'), type='function')])
Kod funkcije potreban za izvršenje zadatka:
Sada kada je LLM odabrao koju funkciju treba pokrenuti, potrebno je implementirati i izvršiti kod koji izvršava zadatak. Možemo napisati kod za dobivanje trenutnog vremena u Pythonu. Također ćemo pisati kod za izvlačenje naziva i argumenata iz response_message kako bismo dobili konačni rezultat.
def get_current_time(location):
"""Get the current time for a given location"""
print(f"get_current_time called with location: {location}")
location_lower = location.lower()
for key, timezone in TIMEZONE_DATA.items():
if key in location_lower:
print(f"Timezone found for {key}")
current_time = datetime.now(ZoneInfo(timezone)).strftime("%I:%M %p")
return json.dumps({
"location": location,
"current_time": current_time
})
print(f"No timezone data found for {location_lower}")
return json.dumps({"location": location, "current_time": "unknown"})
# Obrada poziva funkcija
if response_message.tool_calls:
for tool_call in response_message.tool_calls:
if tool_call.function.name == "get_current_time":
function_args = json.loads(tool_call.function.arguments)
time_response = get_current_time(
location=function_args.get("location")
)
messages.append({
"tool_call_id": tool_call.id,
"role": "tool",
"name": "get_current_time",
"content": time_response,
})
else:
print("No tool calls were made by the model.")
# Drugi poziv API-ja: Dobivanje konačnog odgovora od modela
final_response = client.chat.completions.create(
model=deployment_name,
messages=messages,
)
return final_response.choices[0].message.content
get_current_time called with location: San Francisco
Timezone found for san francisco
The current time in San Francisco is 09:24 AM.
Pozivanje funkcija je u srcu većine, ako ne i svih dizajnerskih obrazaca korištenja alata za agente, međutim implementacija od nule može ponekad biti izazovna. Kao što smo naučili u Lekcija 2, agentni okviri nam pružaju unaprijed izrađene gradivne blokove za implementaciju korištenja alata.
Evo nekoliko primjera kako možete implementirati Dizajnerski obrazac korištenja alata koristeći različite agentne okvire:
Microsoft Agent Framework je open-source AI okvir za izgradnju AI agenata. Pojednostavljuje proces korištenja poziva funkcija dozvoljavajući vam da definirate alate kao Python funkcije s dekoratorom @tool. Okvir rukuje dvosmjernom komunikacijom između modela i vašeg koda. Također pruža pristup unaprijed izrađenim alatima poput Pretrage datoteka i Interpretatora koda putem AzureAIProjectAgentProvider.
Sljedeća dijagrama ilustrira proces pozivanja funkcija s Microsoft Agent Frameworkom:

U Microsoft Agent Frameworku alati su definirani kao dekorirane funkcije. Možemo pretvoriti funkciju get_current_time koju smo ranije vidjeli u alat koristeći dekorator @tool. Okvir će automatski serijalizirati funkciju i njene parametre, stvarajući shemu za slanje LLM-u.
from agent_framework import tool
from agent_framework.azure import AzureAIProjectAgentProvider
from azure.identity import AzureCliCredential
@tool
def get_current_time(location: str) -> str:
"""Get the current time for a given location"""
...
# Kreirajte klijenta
provider = AzureAIProjectAgentProvider(credential=AzureCliCredential())
# Kreirajte agenta i pokrenite alat
agent = await provider.create_agent(name="TimeAgent", instructions="Use available tools to answer questions.", tools=get_current_time)
response = await agent.run("What time is it?")
Azure AI Agent Service je noviji agentni okvir dizajniran da osnaži developere za sigurno izgradnju, implementaciju i skaliranje visokokvalitetnih i proširivih AI agenata bez potrebe za upravljanjem osnovnim računskim i skladišnim resursima. Posebno je koristan za enterprise aplikacije jer je potpuno upravljana usluga s enterprise razinom sigurnosti.
U usporedbi s razvojem direktno s LLM API-jem, Azure AI Agent Service pruža neke prednosti, uključujući:
Alati dostupni u Azure AI Agent Service mogu se podijeliti u dvije kategorije:
Agent Service nam omogućuje da koristimo ove alate zajedno kao skup alata (toolset). Također koristi teme (threads) koje prate povijest poruka iz određenog razgovora.
Zamislite da ste prodajni agent u tvrtki Contoso. Želite razviti konverzacijski agent koji može odgovarati na pitanja o vašim prodajnim podacima.
Sljedeća slika ilustrira kako biste mogli koristiti Azure AI Agent Service za analizu vaših prodajnih podataka:

Za korištenje bilo kojeg od ovih alata s uslugom možemo kreirati klijenta i definirati alat ili skup alata. Za praktičnu implementaciju možemo koristiti sljedeći Python kod. LLM će moći pregledati skup alata i odlučiti hoće li koristiti korisnički definiranu funkciju fetch_sales_data_using_sqlite_query ili unaprijed izrađeni Interpretator koda ovisno o korisničkom zahtjevu.
import os
from azure.ai.projects import AIProjectClient
from azure.identity import DefaultAzureCredential
from fetch_sales_data_functions import fetch_sales_data_using_sqlite_query # funkcija fetch_sales_data_using_sqlite_query koja se može pronaći u datoteci fetch_sales_data_functions.py.
from azure.ai.projects.models import ToolSet, FunctionTool, CodeInterpreterTool
project_client = AIProjectClient.from_connection_string(
credential=DefaultAzureCredential(),
conn_str=os.environ["PROJECT_CONNECTION_STRING"],
)
# Inicijaliziraj skup alata
toolset = ToolSet()
# Inicijaliziraj agenta za pozivanje funkcija s funkcijom fetch_sales_data_using_sqlite_query i dodaj je u skup alata
fetch_data_function = FunctionTool(fetch_sales_data_using_sqlite_query)
toolset.add(fetch_data_function)
# Inicijaliziraj alat Code Interpreter i dodaj ga u skup alata.
code_interpreter = CodeInterpreterTool()toolset.add(code_interpreter)
agent = project_client.agents.create_agent(
model="gpt-4o-mini", name="my-agent", instructions="You are helpful agent",
toolset=toolset
)
Česta zabrinutost kod dinamički generiranog SQL-a od strane LLM-ova je sigurnost, osobito rizik od SQL injekcija ili zlonamjernih radnji poput brisanja ili manipulacije bazom podataka. Iako su ove zabrinutosti opravdane, mogu se učinkovito ublažiti pravilnim konfiguriranjem dopuštenja pristupa bazi podataka. Za većinu baza podataka to znači konfiguriranje baze kao samo za čitanje. Za usluge baza podataka poput PostgreSQL ili Azure SQL, aplikaciji treba biti dodijeljena uloga samo za čitanje (SELECT).
Pokretanje aplikacije u sigurnom okruženju dodatno pojačava zaštitu. U enterprise scenarijima podaci se obično izvlače i transformiraju iz operativnih sustava u bazu podataka samo za čitanje ili skladište podataka s korisnički prilagođenom shemom. Ovaj pristup osigurava da su podaci sigurni, optimizirani za performanse i pristupačnost, te da aplikacija ima ograničen pristup samo za čitanje.
Pridružite se Microsoft Foundry Discord zajednici kako biste upoznali druge učenike, sudjelovali u radnim satima i dobili odgovore na svoja pitanja o AI agentima.
Razumijevanje agenstkih dizajnerskih obrazaca
Napomena: Ovaj dokument je preveden korištenjem AI prevoditeljskog servisa Co-op Translator. Iako težimo točnosti, imajte na umu da automatski prijevodi mogu sadržavati greške ili netočnosti. Izvorni dokument na izvornom jeziku treba smatrati autoritativnim izvorom. Za važne informacije preporuča se profesionalni ljudski prijevod. Nismo odgovorni za bilo kakva nesporazumevanja ili pogrešne interpretacije koje proizlaze iz korištenja ovog prijevoda.