Полное руководство по началу работы с LangChain
Вы видели, как в последнее время вокруг ИИ всё чаще появляются эмодзи попугая + цепочки? Это фирменные эмодзи LangChain. LangChain — это инструмент AI Agent, который добавляет функциональность к большим языковым моделям (LLMs), таким как GPT. Кроме того, он включает такие функции, как управление токенами, управление контекстом и шаблоны промптов. В этом вводном руководстве мы рассмотрим два основных примера LangChain с реальными вариантами использования. Во-первых, как выполнять запросы к GPT. Во-вторых, как выполнять запросы к документу с помощью Colab notebook доступен здесь. Это руководство по LangChain проведет вас через процесс выполнения запросов к GPT и документам с использованием LangChain.
В этом руководстве мы рассмотрим:
- Что такое LangChain?
- Как запускать запросы LangChain?
- Запрос к GPT
- Запрос к документу
- Краткое введение в LangChain
Что такое LangChain?
LangChain — это фреймворк для создания приложений, использующих большие языковые модели. Он позволяет быстро создавать решения с помощью CVP Framework. Две ключевые функциональности LangChain для использования больших языковых моделей: 1) осведомленность о данных и 2) агентность. Осведомленность о данных — это способность включать внешние источники данных в приложение на базе LLM. Агентность — это способность использовать другие инструменты.
Как и во многих инструментах LLM, LLM по умолчанию в LangChain — это GPT от OpenAI, и вам нужен API key from OpenAI, чтобы его использовать. Кроме того, LangChain предлагает LangChain Expression Language (LCEL) для составления сложных цепочек обработки языка, упрощая переход от прототипирования к продакшену. Кроме того, LangChain работает как с Python, так и с JavaScript. В этом руководстве вы узнаете, как это работает, на примерах Python. Вы можете установить библиотеку Python через pip, выполнив pip install langchain.
Как работает LangChain?
Поток ответов на вопросы в LangChain состоит из строительных блоков, которые можно легко заменять, чтобы создать пользовательский шаблон в соответствии с индивидуальными потребностями. Эти блоки включают вопрос, эмбеддинг, документы, используемые для обучения модели, сформированный промпт и ответ. LangChain также использует парсеры вывода для управления и уточнения ответов, генерируемых языковыми моделями, обеспечивая структурированные и релевантные результаты. Поэтому, если компании нужен чат, обученный на конкретных документах, LangChain может заменять различные компоненты, чтобы достичь этой цели.
Как использовать LangChain с GPT и векторной базой данных Milvus?
Один из основных вариантов использования LangChain — выполнять запросы к текстовым данным. Вы можете использовать его для запросов к документам, векторным хранилищам или для упрощения взаимодействия с GPT, во многом как LlamaIndex. В этом руководстве мы рассмотрим простой пример того, как взаимодействовать с GPT с помощью LangChain и выполнять запрос к документу по семантическому смыслу с использованием LangChain with a vector store. Этот процесс, известный как Retrieval Augmented Generation (RAG), расширяет возможности языковых моделей за счет включения внешних данных в процессе генерации.
Запрос к GPT
Большинство людей знакомы с GPT благодаря общению с ChatGPT. ChatGPT — это флагманский интерфейс OpenAI для взаимодействия с GPT. Однако, если вы хотите взаимодействовать с GPT программно, вам нужен интерфейс запросов, такой как LangChain. LangChain предоставляет ряд интерфейсов запросов для GPT — от простых промптов с одним вопросом до few shot learning через контекст.
В этом примере мы рассмотрим, как использовать LangChain для объединения вопросов в цепочку с помощью шаблона промпта. Сначала нужно установить несколько библиотек Python. Мы можем установить их с помощью # pip install langchain openai python-dotenv tiktoken. Я использую python-dotenv, потому что управляю своими переменными окружения в файле .env, но вы можете использовать любой удобный вам способ загрузки ключа OpenAI API.
Когда наш ключ OpenAI API готов, мы должны загрузить наши инструменты LangChain. Нам нужны импорты PromptTemplate и LLMChain из langchain и импорт OpenAI из langchain.llms. В этом примере мы используем текстовую модель OpenAI, text-davinci-003. Затем мы создаем шаблон для запроса к GPT. Шаблон, который мы создаем ниже, сообщает GPT, что нужно отвечать на заданные вопросы по одному. Сначала мы создаем строку, представляющую входные переменные в скобках, аналогично тому, как работают f-strings.
import os
from dotenv import load_dotenv
import openai
load_dotenv()
openai.api_key = os.getenv("OPENAI_API_KEY")
from langchain import PromptTemplate, LLMChain
from langchain.llms import OpenAI
davinci = OpenAI(model_name="text-davinci-003")
multi_template = """Answer the following questions one at a time.
Questions:
{questions}
Answers:
"""
Далее мы используем объект PromptTemplate, чтобы создать шаблон из строки с указанными входными переменными. Когда наш шаблон промпта готов, мы можем создать “цепочку” LLM, передав промпт и выбранные крупные языковые модели. Теперь пора создать вопросы. Как только у нас есть вопросы, которые мы хотим задать, мы run цепочку LLM с переданными вопросами, чтобы получить наши ответы.
long_prompt = PromptTemplate(template=multi_template, input_variables=["questions"])
llm_chain = LLMChain(
prompt=long_prompt,
llm=davinci
)
qs_str = (
"Which NFL team won the Super Bowl in the 2010 season?\n" +
"If I am 6 ft 4 inches, how tall am I in centimeters?\n" +
"Who was the 12th person on the moon?" +
"How many eyes does a blade of grass have?"
)
print(llm_chain.run(qs_str))
Изображение ниже показывает ожидаемые результаты для наших примерных вопросов.
Результаты примерных вопросов.
Запрос релевантных документов
Одна из областей для улучшения GPT и крупных языковых моделей в целом заключается в том, что они обучаются только на данных, доступных на момент их обучения. Это означает, что со временем они теряют контекст и точность. Подобно фреймворку CVP, LangChain предоставляет способ устранить эту проблему с помощью векторных баз данных. Доступно множество векторных баз данных; в этом примере мы используем Milvus, потому что хорошо с ним знакомы.
LangChain отлично справляется с обработкой документных данных, преобразуя отсканированные документы в пригодные к использованию данные с помощью автоматизации рабочих процессов.
Чтобы продемонстрировать способность LangChain внедрять актуальные знания в ваше LLM-приложение и возможность выполнять семантический поиск, мы рассмотрим, как запросить документ. В этом примере мы используем стенограмму обращения «О положении страны». Вы можете скачать стенограмму и найти Colab-ноутбук здесь. Чтобы получить библиотеки, необходимые для этой части руководства, выполните pip install langchain openai milvus [pymilvus](https://zilliz.com/blog/get-started-with-pymilvus) python-dotenv tiktoken.
Возможность динамически получать релевантные документы на основе пользовательских запросов значительно повышает точность сгенерированных ответов.
Как и в примере с объединением вопросов в цепочку, мы начинаем с загрузки нашего ключа OpenAI API и использования больших языковых моделей. Затем мы запускаем векторную базу данных с помощью Milvus Lite, что позволяет нам запускать Milvus непосредственно в нашем notebook.
import os
from dotenv import load_dotenv
import openai
load_dotenv()
openai.api_key = os.getenv("OPENAI_API_KEY")
from langchain.llms import OpenAI
davinci = OpenAI(model_name="text-davinci-003")
from milvus import default_server
default_server.start()
Теперь мы готовы перейти к деталям запросов к документу. На этот раз из LangChain импортируется много компонентов. Нам нужны Open AI Embeddings, character text splitter, интеграция с Milvus, text loader и цепочка retrieval Q/A.
Первое, что мы делаем, — настраиваем загрузчик и загружаем текстовый файл. В этом случае он хранится у меня в той же папке, что и этот notebook, под именем state_of_the_union.txt. Затем мы разбиваем текст и сохраняем его как набор документов LangChain. После этого мы можем настроить нашу векторную базу данных. В этом случае мы создаем коллекцию Milvus из документов, которые только что загрузили через TextLoader и CharacterTextSplitter. Мы также передаем эмбеддинги OpenAI в качестве набора векторных эмбеддингов текста.
Когда наша векторная база данных загружена, мы можем использовать объект RetrievalQA для запросов к документам через векторную базу данных. Мы используем тип цепочки stuff " и передаем OpenAI в качестве нашей LLM, а векторную базу данных Milvus — в качестве retriever. Затем мы можем создать запрос, например “What did the president say about Ketanji Brown Jackson?”, иrun` этот запрос. Наконец, нам следует остановить нашу векторную базу данных для корректного завершения.
from langchain.embeddings.openai import OpenAIEmbeddings
from langchain.text_splitter import CharacterTextSplitter
from langchain.vectorstores import Milvus
from langchain.document_loaders import TextLoader
from langchain.chains import RetrievalQA
loader = TextLoader('./state_of_the_union.txt')
documents = loader.load()
text_splitter = CharacterTextSplitter(chunk_size=1000, chunk_overlap=0)
docs = text_splitter.split_documents(documents)
embeddings = OpenAIEmbeddings()
vector_db = Milvus.from_documents(
docs,
embeddings,
connection_args={"host": "127.0.0.1", "port": default_server.listen_port},
)
qa = RetrievalQA.from_chain_type(llm=OpenAI(), chain_type="stuff", retriever=vector_db.as_retriever())
query = "What did the president say about Ketanji Brown Jackson?"
qa.run(query)
default_server.stop()
На изображении ниже показано, как может выглядеть ожидаемый ответ. Мы должны получить ответ вроде “The president said that Ketanji Brown Jackson is one of the nation's top legal minds, a former top litigator in private practice, a former federal public defender, …”
Результаты запроса
Альтернатива LangChain
Существует несколько чат-инструментов, которые можно рассматривать как альтернативы LangChain, и люди часто спорят о том, какие из них лучшие. Многие из этих альтернатив также используют специализированные чат-модели, предназначенные для интерактивных чат-приложений. Среди часто упоминаемых:
- AgentGPT
- TensorFlow
- Auto-GPT
- BabyAGI
- Semantic UI
- LlamaIndex
Краткое содержание руководства по LangChain
В этой статье мы рассмотрели основы использования LangChain. Мы узнали, что LangChain — это фреймворк для создания LLM-приложений, который опирается на два ключевых фактора. Первый фактор — использование внешних данных, таких как текстовый документ. Способность LangChain интегрировать внешние данные повышает эффективность языковых моделей за счет включения информации, специфичной для пользователя. Второй фактор — использование других инструментов, таких как векторная база данных.
Мы рассмотрели два примера. Сначала мы изучили один из классических примеров LangChain — как объединять несколько вопросов в цепочку. LangChain безупречно работает с различными поставщиками моделей, включая OpenAI и Hugging Face, чтобы расширить свою функциональность. Затем мы рассмотрели практический способ использования LangChain для внедрения предметных знаний, объединив его с векторной базой данных, такой как Milvus, для запроса документов.
Парсеры вывода играют ключевую роль в уточнении ответов языковой модели, обеспечивая структурированные и релевантные результаты.
Читать далее

VDBBench Adds Cost-Aware Benchmarking for Vector Databases
Compare Zilliz Cloud, Pinecone, and turbopuffer with VDBBench cost-aware vector database benchmarks across latency, freshness, multitenancy, and cold starts.

Zilliz Cloud Update: Tiered Storage, Business Critical Plan, Cross-Region Backup, and Pricing Changes
This release offers a rebuilt tiered storage with lower costs, a new Business Critical plan for enhanced security, and pricing updates, among other features.

DeepSeek-VL2: Mixture-of-Experts Vision-Language Models for Advanced Multimodal Understanding
Explore DeepSeek-VL2, the open-source MoE vision-language model. Discover its architecture, efficient training pipeline, and top-tier performance.



