Ваш першы АІ-агент, які выкарыстоўвае інструменты, з LangChain
Створыце маленькага матэматычнага агента LangChain на Python: ініцыялізавайце модель для чату, зарэгіструйце інструменты, дазвольце LLM выбраць, якую функцію вызваць, і пазірце викорыстоўванне інструментаў у калькі крокаў.
Короткі вправы на 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 адкрывае яе у формате, зразумелым для рэальнага часу агента.
Два элементы керуюць модэлем:
- Анкатаваныя параметры пазначаюць типы аргументаў, якія лепш за ўсё спадзявацца.
a: float
b: float
- Описы функцый у відмовах даюць простыя, зрозумелыя мовай описы, якія модэль чытае пад час адліквідацыі релевантнасці.
Для інструментаў агентаў наратыўны опис функцыі ёсць часткай суперфісу керавання, а не проста дэкорацыяй.
"""Multiply two numbers."""
3. Падключыце агента
Прыўяжыце дапаможнікі да модэля:
from langchain.agents import create_agent
agent = create_agent(
model=model,
tools=[
add,
subtract,
multiply,
divide,
square_root
],
)
З гэтага момента модэль чату можа дзеяць як агент, а не толькі як прыемнік адпаведзення на адзіны запит.
Тыповыя крокі включаюць:
- Аналізаванне намеру пользователя
У загальных рысах:
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, які выбірае і выпалняе дзеянні, а не той, який толькі выдае прозу.