Галоўная / Артыкулы / Ваш першы АІ-агент, які выкарыстоўвае інструменты, з LangChain

Ваш першы АІ-агент, які выкарыстоўвае інструменты, з LangChain

Створыце маленькага матэматычнага агента LangChain на Python: ініцыялізавайце модель для чату, зарэгіструйце інструменты, дазвольце LLM выбраць, якую функцію вызваць, і пазірце викорыстоўванне інструментаў у калькі крокаў.

1062 слоў

Короткі вправы на Python + LangChain дапамагаюць стварыць агента у стылі калькулятара, які за патрэбе можа выкарыстоўваць функцыі для адналожэння, вырачэння разліку, множэння, дзелення чыста квадратнага кораня.

Арытметыка ў гэтым прыкладзе — толькі дадатковы элемент. Асалоджуючая урок — спагляданне LLM, які прымеў можна выкарыстоўваць функцыі і выбирае каторую з іх выкарыстоўваць і на якім кроку.

Прыклады запытанняў, якія можа рашыць готавы агент:

Умножыце 25 на 4. Вырачыце квадратны корань з 144, а пасля умножыце гэты результат на 5.

Уместо таго, каб напісаць точную последовасць вырачэнняў, региструецца кальколька функцый. Модель выбірае з іх на адной з пасляўок корыстніка.

1. Аб’явіце модель

Пачніце з стварэння чат-моделі:

from langchain.chat_models import init_chat_model

model = init_chat_model("openai:gpt-4o-mini")

Ёшча не існуе нічога на кшталт агента — толькі текстовая модель, якая можа чытаць і пісаць.

2. Разыявіце можна выкарыстоўваць функцыі

Агенты становяцца корыстнымі, калі яны выходзяць за межы простага генеравання тэксту і можаць вызваць функцыі прыемленаў.

Зафіксавайце пяць мінімальных дапаможнікаў:

from langchain.tools import tool
import math

@tool
def add(a: float, b: float) -> float:
    """Add two numbers."""
    return a + b

@tool
def subtract(a: float, b: float) -> float:
    """Subtract two numbers."""
    return a - b


@tool
def multiply(a: float, b: float) -> float:
    """Multiply two numbers."""
    return a * b


@tool
def divide(a: float, b: float) -> float:
    """Divide two numbers."""
    if b == 0:
        raise ValueError("Cannot divide by zero.")
    return a / b


@tool
def square_root(a: float) -> float:
    """Calculate the square root of a number."""
    if a < 0:
        raise ValueError("Cannot calculate square root of a negative number.")
    return math.sqrt(a)

Адзначэнне функцыі замком @tool адкрывае яе у формате, зразумелым для рэальнага часу агента.

Два элементы керуюць модэлем:

  1. Анкатаваныя параметры пазначаюць типы аргументаў, якія лепш за ўсё спадзявацца.
a: float
b: float
  1. Описы функцый у відмовах даюць простыя, зрозумелыя мовай описы, якія модэль чытае пад час адліквідацыі релевантнасці.

Для інструментаў агентаў наратыўны опис функцыі ёсць часткай суперфісу керавання, а не проста дэкорацыяй.

"""Multiply two numbers."""

3. Падключыце агента

Прыўяжыце дапаможнікі да модэля:

from langchain.agents import create_agent

agent = create_agent(
    model=model,
    tools=[
        add,
        subtract,
        multiply,
        divide,
        square_root
    ],
)

З гэтага момента модэль чату можа дзеяць як агент, а не толькі як прыемнік адпаведзення на адзіны запит.

Тыповыя крокі включаюць:

  1. Аналізаванне намеру пользователя
  • Адмініструйце, чы трэба памочнік
  • Выберыце памочнік
  • Падаўце аргументы
  • Выкарыстоўце значэнне, якое вяртае памочнік
  • Адмініструйце, чы трэба наступны крок
  • Адправыце заканчоўны адказ
  • У загальных рысах:

    User
     ↓
    Agent
     ↓
    Should I use a tool?
     ↓
    Choose tool
     ↓
    Execute tool
     ↓
    Get result
     ↓
    Final response
    

    Запыткі, якія складаюцца з калькоў крокаў, можаць павтарыць гэты цыкл.

    4. Выкананне запуску

    Для керавання ім дапамагае просты абгортак:

    def run_agent(question: str):
        """Run the agent and print the execution trace."""
    
        print(f"User: {question}")
    
        result = agent.invoke({
            "message": [("user", question)],
        })
    
        print("Agent:", result)
    

    Выклікніце яго з простым запытам:

    run_agent("What is 25 multiplied by 4?")
    

    Заўважыце, што няма інструкцыі, якая кажа «званіце multiply».

    Быў паданы толькі каталог памочнікаў.

    Спынуўшыся на формулаванні запытку і апісанні кожнага памочніка, модель вырашыла, што наявнасць функціі павэльнення є дапаможным.

    5. Аўтасклейка больш чым аднаго памочніка

    Спробуйце складны запыт:

    run_agent(
        "Calculate the square root of 144 and multiply the result by 5."
    )
    

    Трэбаецца два аперацыі.

    Канцэптуальны пераказ выглядае так:

    User:
    
    Calculate √144 × 5
            ↓
    Agent chooses square_root
            ↓
    square_root(144)
            ↓
    12
            ↓
    Agent chooses multiply
            ↓
    multiply(12, 5)
            ↓
    60
            ↓
    Final answer
    

    Этот цыкл — выбір, вызов, аналіз, парадны выбір — ўсё гэта являе сабою сутнасць агентаў, якія выкарыстоўваюць інструменты.

    Код прыкладнага праграмы не павінен заздалегідь кодаваць усю последовасць дзеянняў.

    Модель можа вывести наступны крок на аднойчынку з застаўшыміся дапаможнікамі та станом размовы.

    6. Адрозненне ад звычайнага LLM

    Без інструментоў модель можа проста стварыць тэкст «Адказ — 60».

    З регистраванымі дапаможнікамі яна можа перадаць числовыя вычысленні рэальным функцыям.

    Змена кантролю

    Толькі тэкстовы пат: Карыстувач → модель → строка з адказам

    протыва:

    Tool-using agent
    
    User
      ↓
    LLM
      ↓
    Choose tool
      ↓
    Execute code
      ↓
    Observe result
      ↓
    LLM
      ↓
    Answer
    

    Модель больш не павінна сама выкананыць кожныя вычысленні.

    Яна пропануе какое дзеянне трэба выкананыць далей; прыкладнае праграма вяршыць, якія дзеянні існуюць і як яны выкананыць.

    7. Межа, яку варта захаваць

    Калькулятор — это навчальная іграшка.

    Стойкая ідея — гэта разлік между оценкай моделі і правам на выкарыстанне.

    Розумеўненне нейтральнай мовы і выбір дзеяння чырпаюцься з LLM.

    Выкананне гэтых дзеяння адбываецца ў Python пад вашым кантролем.

    Модель можа выйсці да заключэння, што ёй патрэбна такая разлік.

    Ваш процес адпавядае за рэалізацыю гэтай разлікі і яе паслядкі.

    Заменіце простыя матэматычныя адпамогачы на операціі конкретнай галіны, такія як:

    get_customer()
    search_transactions()
    create_report()
    send_email()
    query_database()
    get_weather()
    create_ticket()
    

    і тады той самы патэрн організацыі пачынае нагадваць дизайны агентаў для практычнага выкарыстання.

    Падсумак вправы

    Некалькі модуляў створылі агента, які можа:

    • Інтэрпретаваць запыты у вольным формате
    • Выбіраць адно з калькольных адпамогачаў
    • Правільна прыўязваць аргументы
    • Аб’еднаваць адпамогачы ў рамках адной сесіі
    • Працаваць з рэзультатамі адпамогачаў у наступных кроках розумовага аналізу
  • Адказаць пользователя пасля таго, як ланцюг будзе завершаны
  • Корача кажучы: LLM, які выбірае і выпалняе дзеянні, а не той, який толькі выдае прозу.