Создание цепочки RAG от начала до конца
Соедините всё вместе: загрузчик -> разделитель -> эмбеддинги -> векторное хранилище -> поисковый модуль -> промпт -> модель.
«Создание цепочки RAG от начала до конца» — бесплатный урок AI Agents на CoddyKit. Это урок 4 из 4. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения AI Agents, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс AI Agents содержит 4 уроков всего.
Части этого урока еще не переведены и отображаются на английском.
Цель проекта
Объедините загрузчики, разделители, векторные хранилища и LCEL в полноценную цепочку RAG, подготовленную по образцу производственной системы.
Step 1: Load and Chunk
from langchain_community.document_loaders import PyPDFLoader
from langchain.text_splitter import RecursiveCharacterTextSplitter
loader = PyPDFLoader('handbook.pdf')
docs = loader.load()
splitter = RecursiveCharacterTextSplitter(chunk_size=800, chunk_overlap=100)
chunks = splitter.split_documents(docs)
print(f'{len(chunks)} chunks loaded')Step 2: Embed and Store
from langchain_openai import OpenAIEmbeddings
from langchain_community.vectorstores import Chroma
embeddings = OpenAIEmbeddings(model='text-embedding-3-small')
store = Chroma.from_documents(
chunks,
embeddings,
persist_directory='./handbook_db'
)Step 3: Set Up Retriever
retriever = store.as_retriever(
search_type='similarity',
search_kwargs={'k': 4}
)Step 4: Define the Prompt
from langchain.prompts import ChatPromptTemplate
rag_prompt = ChatPromptTemplate.from_template('''
You are a helpful assistant. Use the context below to answer.
If the answer is not in the context, say you do not know.
Cite sources like [1], [2].
Context:
{context}
Question: {question}
Answer:
''')Step 5: Format Documents Helper
def format_docs(docs):
return '\n\n'.join(
f'[{i+1}] (source: {d.metadata.get("source", "?")}, page {d.metadata.get("page", "?")})\n{d.page_content}'
for i, d in enumerate(docs)
)
from types import SimpleNamespace
docs = [
SimpleNamespace(metadata={'source': 'handbook.pdf', 'page': 3}, page_content='Vacation policy details.'),
SimpleNamespace(metadata={'source': 'handbook.pdf', 'page': 5}, page_content='Sick leave details.'),
]
print(format_docs(docs))
Step 6: Assemble the LCEL Chain
from langchain_core.runnables import RunnablePassthrough
from langchain.schema.output_parser import StrOutputParser
from langchain_openai import ChatOpenAI
model = ChatOpenAI(model='gpt-4o-mini', temperature=0)
rag_chain = (
{'context': retriever | format_docs, 'question': RunnablePassthrough()}
| rag_prompt
| model
| StrOutputParser()
)Step 7: Invoke
answer = rag_chain.invoke('What is our refund policy?')
print(answer)Step 8: Stream the Answer
for chunk in rag_chain.stream('What is our refund policy?'):
print(chunk, end='', flush=True)Шаг 9: отдельный возврат источников
Иногда в выводе нужно получить и ответ, И извлечённые документы:
from langchain_core.runnables import RunnableParallel
rag_with_sources = RunnableParallel(
context=retriever,
answer=rag_chain
)
result = rag_with_sources.invoke('What is our refund policy?')
print(result['answer'])
for doc in result['context']:
print(doc.metadata)Шаг 10: диалоговый RAG
Добавьте извлечение с учётом истории — перед извлечением переписывайте уточняющие вопросы в самостоятельную форму:
from langchain.chains import create_history_aware_retriever
# 'And what about XL sizes?' -> 'What is the refund policy for XL sizes?'Шаг 11: оценка цепочки
Интеграция с LangSmith фиксирует каждый вызов цепочки. Вы можете создавать наборы данных на основе реального использования и запускать оценки.
Особенности производственной эксплуатации
- Фиксируйте версии моделей
- Задавайте max_tokens
- Добавляйте отслеживание использования токенов
- Реализуйте повторные попытки с резервной моделью
- Кэшируйте векторные представления (в OpenAI они уже детерминированы)
- Добавляйте Langfuse/LangSmith для трассировки
Назначение format_docs
Зачем нужна вспомогательная функция format_docs между ретривером и промптом?
Итоги
Вы создали полноценную цепочку RAG с помощью LCEL. Благодаря указанным выше дополнениям этот каркас можно масштабировать для производственной эксплуатации.
Изучай AI Agents с ИИ-репетитором — бесплатно
Пиши и запускай код прямо в браузере, получай мгновенную помощь от ИИ-репетитора 24/7 и продолжи учиться на сайте или в приложении.
- Курсы
- 60
- Уроки
- 239
Часто задаваемые вопросы
Урок «Создание цепочки RAG от начала до конца» бесплатный?
Да — полный текст урока «Создание цепочки RAG от начала до конца» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс AI Agents, подпишись на CoddyKit PRO. Курс AI Agents содержит 4 уроков всего.
Чему я научусь в уроке «Создание цепочки RAG от начала до конца»?
Соедините всё вместе: загрузчик -> разделитель -> эмбеддинги -> векторное хранилище -> поисковый модуль -> промпт -> модель. Ты практикуешь AI Agents с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.
Нужен ли мне опыт, чтобы начать AI Agents?
Предыдущий опыт не требуется. AI Agents на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 4 из 4.
Сколько времени занимает урок «Создание цепочки RAG от начала до конца»?
Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.
Можно ли писать и запускать код в этом уроке AI Agents?
Да. Каждый урок AI Agents включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.
Все уроки этого курса
- Архитектура LangChain: модели, промпты, цепочки
- Загрузчики, разделители и векторные хранилища
- LCEL (язык выражений LangChain)
- Создание цепочки RAG от начала до конца