AI Engineering Academy · Pelajaran

Menentukan Alat untuk Ejen Anda

Cipta alat tersuai dengan penghias @tool, tulis perihalan jelas yang digunakan oleh LLM untuk menentukan masa memanggil setiap alat, dan tambahkan pengesahan masukan dengan Pydantic.

Pelajaran 2 daripada 413 langkah

Menentukan Alat untuk Ejen Anda ialah pelajaran AI Engineering Academy percuma di CoddyKit. Ini ialah pelajaran 2 daripada 4. Anda boleh membaca keseluruhan pelajaran di bawah secara percuma — kemudian berlatih secara praktikal dalam pelayar menggunakan penyunting kod terbina dalam dan tutor kecerdasan buatan 24/7. Pelajaran ini merupakan sebahagian daripada laluan pembelajaran AI Engineering Academy, dan kemajuan anda disegerakkan merentas web serta aplikasi CoddyKit. Kursus AI Engineering Academy merangkumi sejumlah 4 pelajaran.

Alat Memberikan Kuasa Luar Biasa kepada Ejen

Ejen tanpa alat hanya boleh menaakul tentang perkara yang sudah diketahuinya — ejen itu tidak dapat mencari di web, membuat pertanyaan pada pangkalan data atau menghantar e-mel. Alat ialah fungsi Python yang meluaskan keupayaan ejen dengan membolehkannya melakukan tindakan dunia sebenar dan mendapatkan maklumat terkini. Mentakrifkan alat dengan jelas ialah salah satu langkah terpenting dalam membina ejen yang boleh dipercayai.

Penghias @tool dalam LangChain

Penghias @tool LangChain menukar mana-mana fungsi Python menjadi alat yang boleh dipanggil oleh ejen. Docstring fungsi tersebut menjadi penerangan alat yang digunakan oleh LLM untuk menentukan masa alat itu perlu dipanggil. Penerangan yang jelas dan khusus meningkatkan ketepatan pemilihan alat oleh ejen dengan ketara.

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 above

Anotasi Jenis dan Penjanaan Skema

LangChain menjana Skema JSON secara automatik untuk setiap alat daripada anotasi jenis Pythonnya. Ejen menerima skema ini dalam gesaan sistem supaya mengetahui argumen yang diperlukan, jenisnya dan sebarang kekangan. Sentiasa berikan anotasi jenis yang tepat pada fungsi alat anda.

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())

Pengesahan Input dengan Pydantic

Untuk alat dengan input yang kompleks, takrifkan model Pydantic sebagai args_schema. Ini memberi anda pengesahan automatik, penukaran jenis dan dokumentasi peringkat medan yang deskriptif untuk dilihat oleh LLM ketika menentukan cara memanggil alat tersebut.

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...'

Menulis Penerangan Alat yang Berkesan

Penerangan alat ialah bahagian terpenting dalam takrifan alat anda — LLM membacanya untuk menentukan bila dan cara memanggil alat tersebut. Penerangan yang baik menjawab soalan berikut: Apakah fungsi alat ini? Bilakah alat ini patut digunakan? Apakah bentuk inputnya? Apakah outputnya?

  • Buruk: 'Alat carian.'
  • Baik: 'Cari berita, fakta atau data terkini di web. Gunakan apabila pengguna bertanya tentang peristiwa semasa atau fakta yang tiada dalam data latihan. Input: pertanyaan carian yang ringkas.'

Jenis Pulangan Alat

Alat boleh mengembalikan rentetan, kamus atau objek Pydantic berstruktur. Walau bagaimanapun, ejen akhirnya memerlukan hasil tersebut dalam bentuk teks untuk dimasukkan ke dalam perbualan. Jika anda mengembalikan kamus, LangChain mensirinya menjadi rentetan. Untuk data bersarang yang kompleks, formatkan data itu sebagai ringkasan yang mudah dibaca dan bukannya JSON mentah supaya model lebih mudah menaakul tentangnya.

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"]})'

Mengendalikan Ralat Alat dengan Baik

Alat boleh gagal. API mungkin tidak tersedia, tamat masa rangkaian boleh berlaku dan pengguna mungkin memberikan input yang tidak sah. Daripada membiarkan pengecualian merosakkan gelung ejen, bungkus logik alat dalam try/except dan kembalikan rentetan ralat yang deskriptif. Ejen kemudiannya boleh menaakul tentang kegagalan itu dan menentukan sama ada hendak mencuba semula atau menggunakan pendekatan lain.

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)}'

Alat Tak Segerak

Apabila ejen anda menjalankan banyak panggilan alat atau alat anda membuat permintaan rangkaian yang terikat I/O, takrifkan fungsi alat tak segerak untuk mengelakkan gelung peristiwa tersekat. Pelaksana ejen LangChain menyokong alat tak segerak secara asli — gunakan sahaja async def dalam fungsi alat anda.

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)}'

Menyusun Alat ke dalam Kit Alat

Apabila anda mempunyai banyak alat yang berkaitan, kumpulkannya ke dalam kit alat — kelas yang mengembalikan senarai alat. Kit alat LangChain mengikut corak umum: kit tersebut menerima konfigurasi seperti kunci API dalam pembina dan mendedahkan kaedah get_tools(). Ini menjadikan pengurusan alat kemas dan boleh digunakan semula merentas ejen yang berbeza.

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')

Mengehadkan Akses Alat Mengikut Peranan Pengguna

Tidak setiap pengguna sepatutnya mempunyai akses kepada setiap alat. Pengguna baca sahaja tidak sepatutnya mencetuskan alat send_email atau delete_record. Laksanakan akses alat berasaskan peranan dengan memilih alat yang hendak dihantar kepada ejen berdasarkan keizinan pengguna yang telah disahkan.

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 search

Amalan Terbaik Mendokumentasikan Alat

Alat yang didokumentasikan dengan baik dapat mengurangkan ralat ejen dengan ketara. Ikuti amalan terbaik ini: gunakan nama yang bermula dengan kata kerja (search_web, bukannya websearch), terangkan format input yang dijangkakan dengan jelas, nyatakan bila alat TIDAK patut digunakan untuk mengelakkan positif palsu, dan terangkan rupa output supaya model dapat menghuraikannya dengan betul.

Semakan Pantas

Uji pemahaman anda tentang mentakrifkan alat untuk ejen LangChain.

Imbas Kembali Pelajaran

Dalam pelajaran ini, anda mempelajari bahawa: , skema Pydantic menambahkan input bertip yang disahkan, dan alat hendaklah mengendalikan ralat dengan baik dengan mengembalikan rentetan ralat yang deskriptif. Seterusnya, kita akan membina ejen ReAct lengkap dengan LangChain dan menjejak langkah penaakulannya.

Percuma untuk bermula

Pelajari Python dengan tutor kecerdasan buatan — percuma

Tulis dan jalankan kod sebenar dalam pelayar anda, dapatkan bantuan segera daripada tutor kecerdasan buatan yang tersedia 24/7, dan sambung semula dari tempat anda berhenti di web atau dalam aplikasi.

Kursus
30
Pelajaran
120

Soalan Lazim

Adakah pelajaran “Menentukan Alat untuk Ejen Anda” percuma?

Ya — teks penuh “Menentukan Alat untuk Ejen Anda” boleh dibaca secara percuma di web ini. Untuk berlatih secara interaktif menggunakan penyunting kod terbina dalam dan tutor kecerdasan buatan 24/7, serta membuka kunci baki kursus AI Engineering Academy, tingkat taraf kepada CoddyKit PRO. Kursus AI Engineering Academy merangkumi sejumlah 4 pelajaran.

Apakah yang akan saya pelajari dalam “Menentukan Alat untuk Ejen Anda”?

Cipta alat tersuai dengan penghias @tool, tulis perihalan jelas yang digunakan oleh LLM untuk menentukan masa memanggil setiap alat, dan tambahkan pengesahan masukan dengan Pydantic. Anda berlatih AI Engineering Academy menggunakan kod praktikal yang dijalankan terus dalam pelayar, manakala tutor kecerdasan buatan 24/7 menjawab soalan anda semasa anda mengikuti pelajaran.

Adakah saya memerlukan pengalaman untuk memulakan AI Engineering Academy?

Tiada pengalaman terdahulu diperlukan. Pembelajaran AI Engineering Academy di CoddyKit disusun untuk pelajar daripada peringkat pemula hingga lanjutan, jadi anda boleh bermula di sini atau dari awal dan belajar mengikut kadar anda sendiri. Ini ialah pelajaran 2 daripada 4.

Berapa lamakah pelajaran “Menentukan Alat untuk Ejen Anda” diambil?

Kebanyakan pelajaran CoddyKit mengambil masa kira-kira 5–10 minit. Setiap pelajaran ringkas dan interaktif, jadi anda boleh membuat kemajuan secara berterusan dan menyambung tepat dari tempat anda berhenti di web atau aplikasi.

Bolehkah saya menulis dan menjalankan kod dalam pelajaran AI Engineering Academy ini?

Ya. Setiap pelajaran AI Engineering Academy menyertakan penyunting kod terbina dalam, jadi anda boleh menulis dan menjalankan kod sebenar terus dalam pelayar serta menerima maklum balas kecerdasan buatan serta-merta — tanpa memerlukan persediaan setempat.

Semua pelajaran dalam kursus ini

  1. Rangka Kerja ReAct: Fikir, Bertindak, Perhati
  2. Menentukan Alat untuk Ejen Anda
  3. Membina Ejen ReAct dengan LangChain
  4. Mengendalikan Kegagalan dan Gelung Ejen
← Kembali ke AI Engineering Academy