Вопрос проверяет знание архитектуры LangChain и понимание назначения каждого компонента для построения цепочек LLM.
LangChain — это фреймворк для создания приложений на основе языковых моделей. Он разбивает процесс взаимодействия с LLM на модульные компоненты, каждый из которых отвечает за определённую функцию. Это позволяет гибко комбинировать их для решения разных задач — от простого чат-бота до сложного агента с доступом к базам данных.
Компонент Models предоставляет унифицированный интерфейс для работы с различными LLM (OpenAI, Anthropic, Hugging Face и др.). Он абстрагирует детали API и позволяет легко переключаться между моделями. Пример:
from langchain.llms import OpenAI
llm = OpenAI(model="gpt-3.5-turbo")
response = llm("Расскажи шутку")Prompts управляют шаблонами запросов. Они позволяют динамически подставлять переменные и форматировать текст перед отправкой в модель. Это важно для единообразия и повторного использования запросов.
from langchain.prompts import PromptTemplate
template = PromptTemplate(
input_variables=["topic"],
template="Расскажи интересный факт о {topic}."
)
prompt = template.format(topic="космосе")Chains объединяют несколько шагов в последовательность. Например, сначала сгенерировать идею, затем проверить её на корректность. Это основа для построения многошаговых сценариев.
from langchain.chains import LLMChain
chain = LLMChain(llm=llm, prompt=template)
result = chain.run("истории")Agents — это автономные сущности, которые сами решают, какие действия выполнить и в каком порядке. Они используют инструменты (Tools) — функции для поиска в интернете, вычислений, работы с API. Агент анализирует запрос, выбирает подходящий инструмент и возвращает результат.
from langchain.agents import Tool, AgentExecutor, ZeroShotAgent
tools = [Tool(name="Search", func=search_function, description="Поиск в интернете")]
agent = ZeroShotAgent(llm_chain=chain, tools=tools, verbose=True)Memory сохраняет историю диалога, чтобы модель могла учитывать предыдущие сообщения. Это критично для чат-ботов и ассистентов. LangChain поддерживает разные типы памяти: буферную, оконную, на основе базы данных.
from langchain.memory import ConversationBufferMemory
memory = ConversationBufferMemory()
memory.chat_memory.add_user_message("Привет")
memory.chat_memory.add_ai_message("Здравствуйте!")Indexes позволяют подключать внешние источники данных (документы, базы знаний) через векторизацию и поиск. Это даёт модели доступ к актуальной информации, не входящей в её обучение. Используется в RAG-системах.
from langchain.vectorstores import FAISS
from langchain.embeddings import OpenAIEmbeddings
embeddings = OpenAIEmbeddings()
vectorstore = FAISS.from_texts(["Текст документа"], embeddings)Вывод: LangChain упрощает разработку сложных LLM-приложений, предоставляя готовые модули для типовых задач. Его стоит применять, когда нужно быстро собрать прототип с интеграцией внешних данных, памятью или автономными агентами.