Практические советы: Создание простого приложения RAG в Google Colab с использованием LlamaIndex
Пошаговое руководство по Practical notes: Создание простого приложения RAG в Google Colab с использованием LlamaIndex: контракты, проверки и готовые блоки кода для команд, внедряющих эту схему.
В этом руководстве пошагово описывается процесс создания рабочей системы от сырьевых материалов: создание простого приложения типа RAG в Google Colab с использованием LlamaIndex и open-source модели языка. Основное внимание уделяется практическим шагам, четким проверкам и коду, который можно просто скопировать в репозиторий без необходимости догадываться о намерениях автора. На этапе обзора необходимо определить входные данные, ответственного за выполнение шага и критерии завершения перед внесением изменений в код. Операторы должны иметь возможность перезапустить шаг с известной точки контроля, не догадываясь о скрытом состоянии системы. Необходимо одновременно задокументировать успешный сценарий выполнения и сценарий восстановления. Повторные попытки, проверки человеком и обработка ошибок являются неотъемлемой частью продукта, а не элементами последующей доработки.
1. Установите необходимые библиотеки
При выполнении этапа «Установка необходимых компонентов» сначала запишите условия работы: требуемые входные данные, сигнал о успешном выполнении и действия при частичной неудаче. Такой чек-лист поможет сохранять честность при последующих изменениях кода. Предпочитайте небольшие, тестируемые модули большим скриптам. Если какой-то шаг не сработает, причина должна быть связана с конкретной функцией, а не с запутанной цепочкой операций. Храните в кэше стабильные инструкции системы и схемы инструментов. Повторная отправка одинаковых данных — распространенная причина избыточных ресурсов.
!pip install -q llama-index llama-index-readers-web html2text llama-index-llms-groq llama-index-embeddings-huggingface
2. Импортируйте необходимые пакеты
При работе над этапом «Импорт необходимых данных» сначала запишите условия контракта: требуемые входные данные, сигнал о успешном выполнении и действия при частичной неудаче. Такой чек-лист поможет избежать ошибок при последующих изменениях кода. Рассматривайте этот этап как контракт между входными данными и проверенными выходными результатами. Укажите названия элементов, определите критерии успешности и не допускайте молчаливого частичного выполнения задачи. Храните в кэше стабильные инструкции системы и схемы инструментов. Повторная отправка одинаковых данных является распространенной причиной избыточных ресурсов.
from llama_index.core import VectorStoreIndex, Settings
from llama_index.readers.web
import SimpleWebPageReader
from llama_index.llms.groq import Groq
from llama_index.embeddings.huggingface import HuggingFaceEmbedding
from google.colab import userdata
3. Настройка ключа API Groq
При работе над третьим этапом «Настройка Groq» сначала запишите условия работы системы: необходимые входные данные, сигнал о успешном выполнении и действия при частичной неудаче. Такой список поможет сохранять честность при последующих изменениях кода. Запишите также время выполнения и стоимость токенов или запросов рядом с функциональными результатами. Отслеживание затрат на раннем этапе предотвращает неожиданные счета при переходе с демо-среды в общедоступные среды. Храните в кэше стабильные инструкции системы и схемы инструментов. Повторная отправка одинаковых данных — частая причина избыточных затрат. При работе над третьим этапом «Настройка Groq» сначала запишите условия работы системы: необходимые входные данные, сигнал о успешном выполнении и действия при частичной неудаче. Такой список поможет сохранять честность при последующих изменениях кода. Одновременно задокументируйте успешный и восстановительный сценарии работы. Повторные попытки, проверки со стороны оператора и обработка некорректных сообщений являются частью продукта, а не элементами последующей доработки.
# Groq API Key
os.environ["GROQ_API_KEY"] = userdata.get("GROQ_APIKEY")
4. Настройка модели LLM и модели встраивания
Этап 4 «Настройка LLM» работает наилучшим образом, если рассматривать его как измеримую поверхность. Соберите один идеальный пример вывода, один случай сбоя и записку о возврате к предыдущему состоянию перед расширением объема работ. Предпочитайте небольшие, тестируемые единицы кода вместо обширных скриптов. Когда происходит сбой, он должен указывать на конкретную ответственность, а не на запутанную цепочку операций. Установите лимит токенов на один ход и на всю сессию. Инструменты агентов активно расширяют объем контекста; жесткие ограничения предотвращают появление неожиданных счетов при демонстрациях.
# Set up the open-source LLM and embedding model
Settings.llm = Groq( model="openai/gpt-oss-120b", temperature=0.1 )
Settings.embed_model = HuggingFaceEmbedding(model_name="BAAI/bge-small-en-v1.5" )
5. Загрузка веб-страницы
Этап 5 «Загрузка веб-сцены» работает наилучшим образом, если рассматривать его как измеримую поверхность. Соберите один идеальный пример работы, один случай сбоя и записку о возврате к предыдущему состоянию перед расширением объема работ. Рассматривайте этот этап как контракт между входными данными и проверенными результатами. Дайте названия создаваемым элементам, определите критерии успеха и не соглашайтесь на молчаливое частичное выполнение задач. Установите лимит токенов на каждый ход и на каждую сессию. Инструменты агентов активно расширяют контекст; строгие ограничения предотвращают превращение демонстраций в неожиданные счета.
# Passing a URL which we want to load to our vector store
url = "https://mlds.analyticsindiamag.com/"
# Using SimpleWebPageReader to load the URL content
# html_to_text=True converts HTML into plain text
d1 = SimpleWebPageReader( html_to_text=True ).load_data([url])
6. Создание векторного индекса
Этап «6. Создание вектора» работает наилучшим образом, когда его рассматривают как измеримую поверхность. Соберите один идеальный пример работы, один случай сбоя и запись о возврате к предыдущему состоянию перед расширением объёма работ. Записывайте временные показатели, а также стоимость токенов или запросов рядом с функциональными результатами. Отслеживание затрат на раннем этапе предотвращает неожиданные счёты при переходе от демо-версии к общедоступным средам. Установите лимиты на количество токенов за один ход и за сессию. Инструменты агентного типа активно расширяют контекст; жёсткие ограничения не позволяют демо-версиям превращаться в неожиданные счёты. Этап «6. Создание вектора» работает наилучшим образом, когда его рассматривают как измеримую поверхность. Соберите один идеальный пример работы, один случай сбоя и запись о возврате к предыдущему состоянию перед расширением объёма работ. Документируйте одновременно успешный путь выполнения и путь восстановления. Повторные попытки, проверки человеком и обработка неработающих сообщений являются частью продукта, а не элементами последующей доработки.
# Create a searchable index from the loaded document
index = VectorStoreIndex.from_documents(d1)
7. Создание движка запросов
Для этапа 7 «Создание запроса» необходимо заранее определить входные данные, ответственного за выполнение шага и критерии завершения перед изменением кода. Операторы должны иметь возможность перезапустить шаг, исходя из известной точки контроля, без необходимости угадывать скрытое состояние. Лучше использовать небольшие, тестируемые единицы кода вместо обширных скриптов. При сбое шага причина должна быть связана с конкретной функцией, а не с запутанной структурой всего процесса. При следующем шаге, представляющем собой код или вызов инструмента, целесообразнее использовать структурированные выходные данные с проверкой соответствия шаблону вместо свободного текста.
# Creating query engine
query_engine = index.as_query_engine()
8. Задайте вопрос
На этапе «Задайте вопрос» необходимо определить входные данные, ответственного за выполнение шага и критерии завершения перед внесением изменений в код. Операторы должны иметь возможность перезапустить шаг с известной точки контроля, не догадываясь о скрытом состоянии. Рассматривайте этот этап как контракт между входными данными и проверенными результатами. Дайте названия результатам работы, определите критерии успеха и не допускайте молчаливого частичного выполнения задачи. При следующем шаге, представляющем собой код или вызов инструмента, предпочтительнее использовать структурированные результаты с проверкой по шаблону вместо свободного текста.
# Running a query against the loaded URL data
r1 = query_engine.query("What is MLDS?")
print(r1)
Полный процесс RAG
На этапе «Полный процесс RAG» необходимо определить входные данные, ответственного за выполнение шага и критерии завершения перед внесением изменений в код. Операторы должны иметь возможность перезапустить шаг с известной точки контроля, не догадываясь о скрытом состоянии.
Web Page
↓
SimpleWebPageReader
↓
Extract Text
↓
Hugging Face Embeddings
↓
VectorStoreIndex
↓
User Question
↓
Relevant Context
↓
Groq LLM
↓
Answer