Создание инструментов через декоратор @tool, конфигурация агента с create_agent, структурированный вывод, контекст выполнения.
Инструменты позволяют языковой модели взаимодействовать с внешним миром. Без них модель может только генерировать текст.
Самый простой способ создать инструмент — декоратор @tool из langchain.tools. Декоратор автоматически извлекает имя функции как имя инструмента, использует docstring как описание и определяет параметры из аннотаций типов.
from langchain.tools import tool
@tool
def get_weather(city: str) -> str:
"""Получить прогноз погоды для указанного города."""
return f"В городе {city} сегодня солнечно, +25°C"Любая Python-функция может быть инструментом — достаточно передать её в create_agent:
def search_database(query: str, limit: int = 10) -> str:
"""Поиск в базе данных по запросу."""
return f"Найдено {limit} результатов для: {query}"
agent = create_agent(
model="openai:gpt-4o-mini",
tools=[search_database],
)Инструмент — это интерфейс для модели. Имя, описание и имена параметров становятся частью промпта. Плохая документация приводит к некорректным вызовам. Всегда указывайте типы параметров — модель использует их для генерации правильных аргументов.
Инструменты могут получать контекст выполнения через параметр ToolRuntime, что позволяет обращаться к данным сессии изнутри инструмента.
Для возврата структурированных данных используйте Pydantic-модели — модель сможет заполнить все поля по схеме.
create_agentАгент создаётся через фабрику create_agent с тремя основными параметрами: модель, инструменты и системный промпт. Модель указывается строкой в формате "провайдер:модель".
from langchain.agents import create_agent
from langchain.tools import tool
@tool
def calculate(expression: str) -> str:
"""Вычислить математическое выражение."""
return str(eval(expression))
@tool
def get_current_time() -> str:
"""Получить текущее время."""
from datetime import datetime
return datetime.now().strftime("%Y-%m-%d %H:%M:%S")
agent = create_agent(
model="openai:gpt-4o-mini",
tools=[calculate, get_current_time],
system_prompt="Ты помощник. Используй инструменты для выполнения задач.",
)
result = agent.invoke(
{"messages": [{"role": "user", "content": "Сколько будет 15 * 37?"}]}
)
print(result["messages"][-1].content_blocks)Агент анализирует запрос, понимает, какой инструмент нужен, вызывает его с правильными аргументами и формирует ответ на основе результата.
Через параметр response_format можно указать Pydantic-схему для ответа агента. В этом случае result["structured_response"] будет содержать валидированный объект.
При встраивании агента в мультиагентную систему полезно задать имя через параметр name. Для передачи данных сессии (идентификатор пользователя, роль, ключи API) используется context с определённой схемой context_schema.
Для сохранения контекста между вызовами используется чекпоинтер. При повторном использовании того же thread_id агент загружает историю диалога:
from langgraph.checkpoint.memory import InMemorySaver
from langchain_core.utils.uuid import uuid7
agent = create_agent(
model="openai:gpt-4o-mini",
tools=[get_weather],
checkpointer=InMemorySaver(),
)
config = {"configurable": {"thread_id": str(uuid7())}}
# Первый и второй вызов с одним config — агент помнит контекстДалее: Основы LangGraph: состояние, узлы, рёбра