Основы LangChain
Прежде чем углубляться в выбор инструментов и оркестрацию, полезно понять некоторые основные концепции LangChain. В основе LangChain лежат базовые модели и чат-модели, которые обрабатывают промпты и генерируют ответы. Например, ChatOpenAI — это класс-обертка, который предоставляет простой интерфейс для взаимодействия с чат-моделями OpenAI, такими как GPT-4o. Вы инициализируете его с параметрами, такими как имя модели, чтобы указать, какую модель использовать:
from langchain_openai import ChatOpenAI
llm = ChatOpenAI(model_name="gpt-4o")
LangChain структурирует взаимодействия как сообщения для поддержания контекста разговора. Два основных типа сообщений — это HumanMessage, которое представляет пользовательские вводы, и AIMessage, которое представляет ответы модели:
from langchain_core.messages import HumanMessage
messages = [HumanMessage("What is the weather today?")]
Инструменты, тем временем, являются внешними функциями, которые ваша модель может вызывать для расширения своих возможностей за пределы генерации текста — например, вызов API, получение записей из базы данных или выполнение вычислений. Вы определяете инструмент в LangChain, используя декоратор @tool, который регистрирует функцию и автоматически генерирует схему, описывающую её входы и выходы:
from langchain_core.tools import tool
@tool
def add_numbers(x: int, y: int) -> int:
"""Adds two numbers and returns the sum."""
return x + y
После того, как вы определили свои инструменты, вы привязываете их к модели, используя .bind_tools(), что позволяет модели выбирать и вызывать эти инструменты в ответ на пользовательские вводы.
Для взаимодействия с моделью вы используете метод .invoke(), предоставляя ему список сообщений, представляющих текущий разговор. Если модель решает вызвать инструмент, она выведет вызов инструмента, который вы затем выполняете, вызывая соответствующую функцию и добавляя её результат обратно в разговор перед генерацией окончательного ответа:
llm_with_tools = llm.bind_tools([add_numbers])
ai_msg = llm_with_tools.invoke(messages)
for tool_call in ai_msg.tool_calls:
tool_response = add_numbers.invoke(tool_call)
Эти строительные блоки — чат-модели, сообщения, инструменты и вызов инструментов — формируют основу систем на базе LangChain. Понимание того, как они сочетаются друг с другом, поможет вам следовать примерам в этой главе и создавать собственных агентов, которые могут бесшовно интегрировать понимание языка с действиями в реальном мире.