Definiera verktyg för er agent
Skapa anpassade verktyg med dekoratorn @tool, skriv tydliga beskrivningar som LLM:en använder för att avgöra när varje verktyg ska anropas och lägg till indatavalidering med Pydantic.
Definiera verktyg för er agent är en gratis lektion i AI Engineering Academy på CoddyKit. Detta är lektion 2 av 4. Ni kan läsa hela lektionen gratis nedan och sedan öva praktiskt i webbläsaren med en inbyggd kodredigerare och en AI-handledare som är tillgänglig dygnet runt. Den ingår i lärvägen för AI Engineering Academy, och Era framsteg synkroniseras mellan webben och CoddyKit-appen. Kursen i AI Engineering Academy innehåller totalt 4 lektioner.
Verktyg ger agenter superkrafter
En agent utan verktyg kan bara resonera kring det den redan vet – den kan inte söka på webben, fråga en databas eller skicka e-post. Verktyg är Python-funktioner som utökar agentens funktioner genom att låta den utföra åtgärder i den verkliga världen och hämta aktuell information. Att definiera verktyg tydligt är ett av de viktigaste stegen när Ni bygger en tillförlitlig agent.
Dekoratorn @tool i LangChain
LangChains @tool-dekorator omvandlar valfri Python-funktion till ett verktyg som agenten kan anropa. Funktionens docstring blir verktygsbeskrivningen som LLM:en använder för att avgöra när den ska anropa verktyget. En tydlig och specifik beskrivning förbättrar agentens träffsäkerhet vid verktygsval avsevärt.
from langchain_core.tools import tool
@tool
def get_weather(city: str) -> str:
'''Get the current weather conditions for a given city.
Use this tool when the user asks about weather in a specific location.
Input should be just the city name, e.g. 'London' or 'New York'.
'''
# Real implementation would call a weather API
return f'The weather in {city} is 18 degrees Celsius and partly cloudy.'
print(get_weather.name) # 'get_weather'
print(get_weather.description) # The docstring aboveTypannoteringar och generering av schema
LangChain genererar automatiskt ett JSON Schema för varje verktyg utifrån dess Python-typannoteringar. Agenten får detta schema i systemprompten, så att den vet vilka argument som krävs, deras typer och eventuella begränsningar. Annotera alltid Era verktygsfunktioner med precisa typer.
from langchain_core.tools import tool
@tool
def calculate_compound_interest(
principal: float,
annual_rate: float,
years: int
) -> float:
'''Calculate compound interest earned over a number of years.
Args:
principal: Initial investment amount in dollars.
annual_rate: Annual interest rate as a decimal (e.g. 0.05 for 5%).
years: Number of years to compound.
Returns:
Final amount after compounding.
'''
return principal * (1 + annual_rate) ** years
# Inspect the auto-generated schema
print(calculate_compound_interest.args_schema.schema())Indatavalidering med Pydantic
För verktyg med komplex indata definierar Ni en Pydantic-modell som args_schema. Detta ger automatisk validering, typkonvertering och beskrivande dokumentation på fältnivå som LLM:en ser när den avgör hur verktyget ska anropas.
from langchain_core.tools import tool
from pydantic import BaseModel, Field
class SearchInput(BaseModel):
query: str = Field(description='The search query to look up.')
num_results: int = Field(default=5, ge=1, le=20, description='Number of results to return (1-20).')
@tool(args_schema=SearchInput)
def web_search(query: str, num_results: int = 5) -> str:
'''Search the web for current information on any topic.
Use this for facts that may have changed after the model training cutoff.
'''
return f'Searching for "{query}", returning {num_results} results...'Skriva effektiva verktygsbeskrivningar
Verktygsbeskrivningen är den viktigaste delen av Er verktygsdefinition – LLM:en läser den för att avgöra när och hur verktyget ska anropas. En bra beskrivning besvarar följande frågor: Vad gör verktyget? När ska det användas? Hur ska indata se ut? Vad blir resultatet?
- Dåligt: ”Sökverktyg.”
- Bra: ”Sök på webben efter aktuella nyheter, fakta eller data. Använd verktyget när användaren frågar om nyliga händelser eller fakta som inte finns i träningsdata. Indata: en kortfattad sökfråga.”
Verktygens returtyper
Verktyg kan returnera strängar, ordlistor eller strukturerade Pydantic-objekt. Agenten behöver dock i slutändan resultatet som text för att kunna ta med det i konversationen. Om Ni returnerar en ordlista serialiserar LangChain den till en sträng. För komplexa nästlade data bör Ni formatera resultatet som en lättläst sammanfattning i stället för rå JSON, så att modellen lättare kan resonera kring det.
from langchain_core.tools import tool
import json
@tool
def get_stock_price(ticker: str) -> str:
'''Look up the current stock price for a given ticker symbol.
Input should be the stock ticker symbol in uppercase, e.g. AAPL or MSFT.
'''
# Stub — real implementation calls a financial API
data = {'ticker': ticker, 'price': 182.50, 'currency': 'USD', 'change': '+1.2%'}
return f'{ticker}: ${data["price"]} ({data["change"]})'Hantera verktygsfel på ett smidigt sätt
Verktyg kan misslyckas. API:er kan ligga nere, nätverkstidsgränser kan inträffa och användare kan ange ogiltig indata. I stället för att låta undantag krascha Er agentloop omsluter Ni verktygslogiken med try/except och returnerar en beskrivande felsträng. Agenten kan då resonera kring felet och avgöra om den ska försöka igen eller använda en annan metod.
from langchain_core.tools import tool
import requests
@tool
def fetch_url(url: str) -> str:
'''Fetch the text content of a web page given its URL.
Use for accessing specific documents or web pages the user references.
'''
try:
resp = requests.get(url, timeout=10)
resp.raise_for_status()
return resp.text[:2000] # Return first 2000 chars
except requests.Timeout:
return 'Error: Request timed out after 10 seconds.'
except requests.HTTPError as e:
return f'Error: HTTP {e.response.status_code}'
except Exception as e:
return f'Error fetching URL: {str(e)}'Asynkrona verktyg
När Er agent kör många verktygsanrop eller Era verktyg gör I/O-bundna nätverksanrop bör Ni definiera asynkrona verktygsfunktioner för att undvika att händelseloopen blockeras. LangChains agentkörning har inbyggt stöd för asynkrona verktyg – använd bara async def i verktygsfunktionen.
from langchain_core.tools import tool
import httpx
@tool
async def async_fetch(url: str) -> str:
'''Asynchronously fetch content from a URL.
Preferred over fetch_url when making multiple concurrent requests.
'''
async with httpx.AsyncClient(timeout=10) as client:
try:
resp = await client.get(url)
resp.raise_for_status()
return resp.text[:2000]
except Exception as e:
return f'Error: {str(e)}'Organisera verktyg i en verktygslåda
När Ni har många relaterade verktyg grupperar Ni dem i en verktygslåda – en klass som returnerar en lista med verktyg. LangChains verktygslådor följer ett gemensamt mönster: de tar emot konfiguration, till exempel API-nycklar, i konstruktorn och exponerar en get_tools()-metod. Detta gör verktygshanteringen ren och återanvändbar i olika agenter.
from langchain_core.tools import BaseTool
from typing import List
class WeatherToolkit:
def __init__(self, api_key: str):
self.api_key = api_key
def get_tools(self) -> List[BaseTool]:
return [
get_weather, # defined earlier with @tool
get_weather_forecast, # another tool
get_weather_alert # another tool
]
# Usage
toolkit = WeatherToolkit(api_key='your_weather_api_key')
tools = toolkit.get_tools()
print(f'Loaded {len(tools)} weather tools')Begränsa verktygsåtkomst utifrån användarroll
Alla användare bör inte ha åtkomst till alla verktyg. En skrivskyddad användare ska inte kunna utlösa verktyget send_email eller delete_record. Implementera rollbaserad åtkomst till verktyg genom att välja vilka verktyg som skickas till agenten baserat på den autentiserade användarens behörigheter.
def get_tools_for_user(user_role: str) -> list:
read_tools = [web_search, get_weather, calculate_compound_interest]
write_tools = [send_email, create_calendar_event, update_record]
if user_role == 'admin':
return read_tools + write_tools
elif user_role == 'member':
return read_tools
else:
return [web_search] # Guest: only public searchBästa praxis för verktygsdokumentation
Väldokumenterade verktyg minskar antalet agentfel avsevärt. Följ dessa rekommendationer: använd ett tydligt verb-först-namn (search_web, inte websearch), beskriv förväntat indataformat tydligt, ange när verktyget INTE ska användas för att undvika falska träffar och beskriv hur utdata ser ut så att modellen kan tolka den korrekt.
Snabb kontroll
Testa din förståelse av hur man definierar verktyg för LangChain-agenter.
Sammanfattning av lektionen
I den här lektionen lärde du dig att: dekoratorn @tool omvandlar Python-funktioner till verktyg som agenten kan anropa och använder deras docstrings som beskrivningar, Pydantic-scheman lägger till validerade, typade indata och verktyg bör hantera fel på ett robust sätt genom att returnera beskrivande felsträngar. Härnäst bygger vi en fullständig ReAct-agent med LangChain och spårar dess resonemangssteg.
Lär dig Python med en AI-lärare – gratis
Skriv och kör riktig kod i webbläsaren, få omedelbar hjälp av en AI-lärare dygnet runt och fortsätt där du slutade – på webben eller i appen.
- Kurser
- 30
- Lektioner
- 120
Vanliga frågor
Är lektionen ”Definiera verktyg för er agent” gratis?
Ja – hela texten till ”Definiera verktyg för er agent” kan läsas gratis här på webben. Om Ni vill öva interaktivt med en inbyggd kodredigerare och en AI-handledare som är tillgänglig dygnet runt och låsa upp resten av kursen i AI Engineering Academy, kan Ni uppgradera till CoddyKit PRO. Kursen i AI Engineering Academy innehåller totalt 4 lektioner.
Vad lär jag mig i ”Definiera verktyg för er agent”?
Skapa anpassade verktyg med dekoratorn @tool, skriv tydliga beskrivningar som LLM:en använder för att avgöra när varje verktyg ska anropas och lägg till indatavalidering med Pydantic. Ni övar på AI Engineering Academy med praktisk kod som körs direkt i webbläsaren, medan en AI-handledare som är tillgänglig dygnet runt svarar på Era frågor under lektionen.
Behöver jag någon erfarenhet för att börja lära mig AI Engineering Academy?
Du behöver inga förkunskaper. Utbildningen i AI Engineering Academy på CoddyKit är upplagd för allt från nybörjare till avancerade elever, så att du kan börja här eller från början och gå fram i din egen takt. Detta är lektion 2 av 4.
Hur lång tid tar lektionen ”Definiera verktyg för er agent”?
De flesta CoddyKit-lektioner tar cirka 5–10 minuter. Varje lektion är kort och interaktiv, så att du gör stadiga framsteg och kan fortsätta precis där du slutade – på webben eller i appen.
Kan jag skriva och köra kod i den här AI Engineering Academy-lektionen?
Ja. Varje AI Engineering Academy-lektion innehåller en inbyggd kodredigerare, så att du kan skriva och köra riktig kod direkt i webbläsaren och få omedelbar AI-feedback – utan lokal installation.
Alla lektioner i den här kursen
- ReAct-ramverket: tänk, agera, observera
- Definiera verktyg för er agent
- Bygg en ReAct-agent med LangChain
- Hantera agentfel och loopar