(Napsauta yllä olevaa kuvaa nähdäksesi tämän oppitunnin videon)
Työkalut ovat kiinnostavia, koska niiden avulla tekoälyagentit voivat saada laajemman valikoiman kykyjä. Sen sijaan, että agentilla olisi rajattu joukko toimintoja, joita se voi suorittaa, työkalun lisäämisen avulla agentti voi nyt suorittaa monenlaisia toimintoja. Tässä luvussa tarkastelemme työkalun käyttö -suunnittelumallia, joka kuvaa, miten tekoälyagentit voivat käyttää tiettyjä työkaluja saavuttaakseen tavoitteensa.
Tässä oppitunnissa pyrimme vastaamaan seuraaviin kysymyksiin:
Oppitunnin suorittamisen jälkeen osaat:
Työkalun käyttö -suunnittelumalli keskittyy antamaan suurille kielimalleille (LLM) kyvyn olla vuorovaikutuksessa ulkoisten työkalujen kanssa tiettyjen tavoitteiden saavuttamiseksi. Työkalut ovat koodia, jota agentti voi suorittaa suorittaakseen toimintoja. Työkalu voi olla yksinkertainen funktio, kuten laskin, tai kolmannen osapuolen palveluun tehtävä API-kutsu, kuten osakekurssin haku tai sääennuste. Tekoälyagenttien kontekstissa työkalut on suunniteltu suoritettaviksi agenttien toimesta mallin generoimien toimintokutsujen perusteella.
Tekoälyagentit voivat hyödyntää työkaluja monimutkaisten tehtävien suorittamiseen, tiedon hakemiseen tai päätösten tekemiseen. Työkalun käyttö -suunnittelumallia käytetään usein tilanteissa, joissa tarvitaan dynaamista vuorovaikutusta ulkoisten järjestelmien, kuten tietokantojen, verkkopalveluiden tai koodin tulkintaohjelmien, kanssa. Tämä kyky hyödyttää monenlaisissa käyttötapauksissa, kuten:
Nämä rakennuspalikat mahdollistavat tekoälyagentin suorittaa monenlaisia tehtäviä. Tarkastellaan keskeisiä elementtejä työkalun käyttö -suunnittelumallin toteuttamiseksi:
Funktio-/työkalu-kaaviot: Yksityiskohtaiset määritelmät saatavilla olevista työkaluista, mukaan lukien funktion nimi, tarkoitus, vaaditut parametrit ja odotetut tulokset. Nämä kaaviot auttavat LLM:ää ymmärtämään, mitä työkaluja on saatavilla ja miten muodostaa kelvollisia pyyntöjä.
Funktion suorituslogiikka: Määrittää, miten ja milloin työkaluja kutsutaan käyttäjän aikomuksen ja keskustelukontekstin perusteella. Tämä voi sisältää suunnittelumoduuleita, reititysmekanismeja tai ehdollisia virtauksia, jotka määrittävät työkalujen käytön dynaamisesti.
Viestinkäsittelyjärjestelmä: Komponentit, jotka hallinnoivat keskustelun kulkua käyttäjän syötteiden, LLM:n vastausten, työkalukutsujen ja työkalujen vastausten välillä.
Työkalujen integraatiokehys: Infrastruktuuri, joka yhdistää agentin erilaisiin työkaluihin, olivatpa ne sitten yksinkertaisia funktioita tai monimutkaisia ulkoisia palveluita.
Virheenkäsittely ja validointi: Mekanismit virheiden käsittelemiseksi työkalujen suorituksessa, parametrien validoimiseksi ja odottamattomien vastausten hallitsemiseksi.
Tilan hallinta: Seuraa keskustelukontekstia, aiempia työkalujen vuorovaikutuksia ja pysyvää dataa varmistamaan johdonmukaisuuden usean vuoron aikana.
Seuraavaksi tarkastellaan funktioiden/työkalujen kutsumista tarkemmin.
Funktion kutsuminen on ensisijainen tapa, jolla suurten kielimallien (LLM) annetaan olla vuorovaikutuksessa työkalujen kanssa. Usein termit ‘funktio’ ja ‘työkalu’ käytetään synonyymeinä, koska ‘funktiot’ (uudelleenkäytettävän koodin lohkot) ovat ne ‘työkalut’, joita agentit käyttävät tehtävien suorittamiseen. Jotta funktion koodi voidaan kutsua, LLM:n täytyy vertailla käyttäjän pyyntöä funktion kuvaukseen. Tätä varten LLM:lle lähetetään kaavio, joka sisältää kaikkien käytettävissä olevien funktioiden kuvaukset. LLM valitsee sitten tehtävään parhaiten sopivan funktion ja palauttaa sen nimen ja argumentit. Valittu funktio suoritetaan, sen vastaus lähetetään takaisin LLM:lle, joka käyttää tietoja vastatakseen käyttäjän pyyntöön.
Kehittäjien, jotka haluavat toteuttaa funktiokutsun agenteille, tulee hankkia:
Käytetään esimerkkinä ajan hakemista tietystä kaupungista:
Alusta LLM, joka tukee funktiokutsua:
Kaikki mallit eivät tue funktiokutsua, joten on tärkeää varmistaa, että käyttämäsi LLM tukee sitä. Azure OpenAI tukee funktiokutsua. Voimme aloittaa käynnistämällä OpenAI-asiakkaan Azure OpenAI Responses APIa vastaan (vakaa /openai/v1/ päätepiste — api_version ei tarvita).
# Alusta OpenAI-asiakas Azure OpenAI:ta varten (Responses API, v1-päätepiste)
client = OpenAI(
base_url=f"{os.environ['AZURE_OPENAI_ENDPOINT'].rstrip('/')}/openai/v1/",
api_key=os.environ["AZURE_OPENAI_API_KEY"],
)
deployment_name = os.environ["AZURE_OPENAI_DEPLOYMENT"]
Luo funktiokaavio:
Määrittelemme seuraavaksi JSON-kaavion, joka sisältää funktion nimen, kuvauksen siitä, mitä funktio tekee, sekä funktioparametrien nimet ja kuvaukset. Lähetämme tämän kaavion aiemmin luodulle asiakkaalle yhdessä käyttäjän pyynnön kanssa San Franciscon ajankohdan löytämiseksi. On tärkeää huomata, että työkalukutsu on se, mitä palautetaan, ei lopullinen vastaus kysymykseen. Kuten aiemmin mainittiin, LLM palauttaa valitun funktion nimen ja sille välitettävät argumentit.
# Mallin luettavaksi tarkoitettu funktiokuvailu (Responses API:n litteä työkalumuoto)
tools = [
{
"type": "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"],
},
}
]
# Alkuperäinen käyttäjän viesti
messages = [{"role": "user", "content": "What's the current time in San Francisco"}]
# Ensimmäinen API-kutsu: Pyydä mallia käyttämään toimintoa
response = client.responses.create(
model=deployment_name,
input=messages,
tools=tools,
tool_choice="auto",
store=False,
)
# Responses API palauttaa työkalukutsut function_call-kohteina response.outputissa.
# Lisää ne keskusteluun, jotta mallilla on täydellinen konteksti seuraavassa vuorossa.
messages += response.output
print("Model's response:")
print(response.output)
Model's response:
[ResponseFunctionToolCall(arguments='{"location":"San Francisco"}', call_id='call_pOsKdUlqvdyttYB67MOj434b', name='get_current_time', type='function_call')]
Tehtävän suorittamiseen tarvittava funktion koodi:
Nyt kun LLM on valinnut suoritettavan funktion, tehtävän suorittava koodi tulee toteuttaa ja suorittaa. Voimme toteuttaa ajan hakemiseen tarvittavan koodin Pythonilla. Meidän tulee myös kirjoittaa koodi, joka purkaa nimen ja argumentit response_message-viestistä saadaksemme lopputuloksen.
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"})
# Käsittele funktiokutsut
tool_calls = [item for item in response.output if item.type == "function_call"]
if tool_calls:
for tool_call in tool_calls:
if tool_call.name == "get_current_time":
function_args = json.loads(tool_call.arguments)
time_response = get_current_time(
location=function_args.get("location")
)
# Palauta työkalun tulos function_call_output-kohteena
messages.append({
"type": "function_call_output",
"call_id": tool_call.call_id,
"output": time_response,
})
else:
print("No tool calls were made by the model.")
# Toinen API-kutsu: Hae lopullinen vastaus mallilta
final_response = client.responses.create(
model=deployment_name,
input=messages,
tools=tools,
store=False,
)
return final_response.output_text
get_current_time called with location: San Francisco
Timezone found for san francisco
The current time in San Francisco is 09:24 AM.
Funktiokutsut ovat monien, elleivät kaikkien, agenttien työkalukäytön suunnittelun ytimessä, mutta niiden toteutus alusta alkaen voi joskus olla haastavaa. Kuten opimme Oppitunti 2:ssa, agenttikehykset tarjoavat meille valmiita rakennuspalikoita työkalun käyttöön.
Tässä muutamia esimerkkejä siitä, kuinka voit toteuttaa työkalun käyttö -suunnittelumallin käyttämällä erilaisia agenttikehyksiä:
Microsoft Agent Framework on avoimen lähdekoodin tekoälykehys tekoälyagenttien rakentamiseen. Se yksinkertaistaa funktiokutsujen käyttöä antamalla sinun määritellä työkalut Python-funktioina @tool-koristelijan avulla. Kehys hoitaa mallin ja koodisi välisen vuorovaikutuksen. Se tarjoaa myös pääsyn valmiiksi rakennettuihin työkaluihin, kuten Tiedoston haku ja Koodin tulkitseminen, FoundryChatClientin kautta.
Seuraava kaavio havainnollistaa funktiokutsujen prosessia Microsoft Agent Frameworkissa:

Microsoft Agent Frameworkissa työkalut määritellään korotettuina funktioina. Voimme muuntaa aiemmin näkemämme get_current_time-funktion työkaluksi käyttämällä @tool-koristelijaa. Kehys serialisoi automaattisesti funktion ja sen parametrit luodakseen kaavion, joka lähetetään LLM:lle.
import os
from agent_framework import tool
from agent_framework.foundry import FoundryChatClient
from azure.identity import AzureCliCredential
@tool(approval_mode="never_require")
def get_current_time(location: str) -> str:
"""Get the current time for a given location"""
...
# Luo asiakas
provider = FoundryChatClient(
project_endpoint=os.environ["AZURE_AI_PROJECT_ENDPOINT"],
model=os.environ["AZURE_AI_MODEL_DEPLOYMENT_NAME"],
credential=AzureCliCredential(),
)
# Luo agentti ja suorita työkalulla
agent = provider.as_agent(name="TimeAgent", instructions="Use available tools to answer questions.", tools=get_current_time)
response = await agent.run("What time is it?")
Microsoft Foundry Agent Service on uudempi agenttikehys, joka on suunniteltu auttamaan kehittäjiä rakentamaan, käyttöönottoa ja skaalaamaan korkealaatuisia ja laajennettavia tekoälyagentteja turvallisesti ilman, että heidän tarvitsee hallita taustalla olevaa laskenta- ja tallennusresursseja. Se on erityisen hyödyllinen yrityssovelluksissa, koska se on täysin hallinnoitu palvelu, jossa on yritystason tietoturva.
Verrattuna suoraan LLM-rajapinnan käyttöön Microsoft Foundry Agent Service tarjoaa joitakin etuja, mukaan lukien:
Microsoft Foundry Agent Servicen työkalut voidaan jakaa kahteen kategoriaan:
Agent Service mahdollistaa näiden työkalujen käytön yhdessä työkalusetin (toolset) muodossa. Se käyttää myös threads-ketjuja, jotka seuraavat tietyn keskustelun viestihistoriaa.
Kuvittele, että olet myyntiedustaja yrityksessä nimeltä Contoso. Haluat kehittää keskustelurobotin, joka pystyy vastaamaan myyntitietoihisi liittyviin kysymyksiin.
Seuraava kuva havainnollistaa, miten voisit käyttää Microsoft Foundry Agent Serviceä myyntitietojen analysointiin:

Käyttääksesi mitä tahansa näistä työkaluista palvelun kanssa, voimme luoda asiakkaan ja määritellä työkalun tai työkalusetin. Toteuttaaksemme tämän käytännössä voimme käyttää seuraavaa Python-koodia. LLM pystyy tarkastelemaan työkalusettiä ja päättämään, käytetäänkö käyttäjän luomaa funktiota fetch_sales_data_using_sqlite_query vai valmista Koodin tulkitseminä, käyttäjän pyynnön mukaan.
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 # fetch_sales_data_using_sqlite_query -funktio, joka löytyy fetch_sales_data_functions.py-tiedostosta.
from azure.ai.projects.models import ToolSet, FunctionTool, CodeInterpreterTool
project_client = AIProjectClient.from_connection_string(
credential=DefaultAzureCredential(),
conn_str=os.environ["PROJECT_CONNECTION_STRING"],
)
# Työkalupaketin alustus
toolset = ToolSet()
# Funktiokutsujen agentin alustus fetch_sales_data_using_sqlite_query-funktiolla ja sen lisääminen työkalupakettiin
fetch_data_function = FunctionTool(fetch_sales_data_using_sqlite_query)
toolset.add(fetch_data_function)
# Kooditulkki-työkalun alustus ja lisääminen työkalupakettiin.
code_interpreter = CodeInterpreterTool()toolset.add(code_interpreter)
agent = project_client.agents.create_agent(
model="gpt-5-mini", name="my-agent", instructions="You are helpful agent",
toolset=toolset
)
Yleinen huoli LLM:ien dynaamisesti generoiman SQL:n kanssa on tietoturva, erityisesti SQL-injektio tai haitalliset toimet, kuten tietokannan poistaminen tai manipulointi. Vaikka nämä huolet ovat perusteltuja, ne voidaan tehokkaasti estää konfiguroimalla tietokantakäyttöoikeudet oikein. Useimmissa tietokannoissa tämä tarkoittaa tietokannan asettamista vain luku -tilaan. PostgreSQL:n tai Azure SQL:n kaltaisissa tietokantapalveluissa sovellukselle tulisi antaa vain lukuoikeus (SELECT-rooli).
Sovelluksen suorittaminen turvallisessa ympäristössä lisää suojautumista entisestään. Yritysskenaarioissa data yleensä haetaan ja muunnetaan operatiivisista järjestelmistä vain luku -tietokantaan tai tietovarastoon, jossa on käyttäjäystävällinen kaavio. Tämä varmistaa, että data on turvallista, optimoitu suorituskyvyn ja saatavuuden kannalta, ja sovelluksella on rajoitettu, vain luku -pääsy.
Liity Microsoft Foundry Discordiin tavata muita oppijoita, osallistua toimistoaikoihin ja saada vastauksia tekoälyagentteihin liittyviin kysymyksiisi.
Kun olet oppinut ottamaan agenteja käyttöön Luvussa 16, voit pikakokeilla tämän luvun TravelToolAgent-agenttia (kutsutaanko se edelleen työkalunsa ja vastaatko?) tiedostolla tests/lesson-04-smoke-tests.json. Katso ohjeet suoritukseen tiedostosta tests/README.md.
Agenttimaisten suunnittelumallien ymmärtäminen
Vastuuvapauslauseke: Tämä asiakirja on käännetty käyttämällä tekoälypohjaista käännöspalvelua Co-op Translator. Vaikka pyrimme tarkkuuteen, otathan huomioon, että automaattiset käännökset saattavat sisältää virheitä tai epätarkkuuksia. Alkuperäinen asiakirja sen alkuperäiskielellä on virallinen lähde. Tärkeissä asioissa suositellaan ammattimaista ihmiskäännöstä. Emme ole vastuussa tämän käännöksen käytöstä aiheutuvista väärinymmärryksistä tai tulkinnoista.