Вы хотите, чтобы нейросеть знала о вашем продукте, отвечала в стиле вашей компании или работала с внутренней документацией? Для этого существует три подхода: prompt engineering, RAG и fine-tuning. В этом руководстве — практическое объяснение каждого метода, сравнение стоимости и реальные примеры.
Три уровня кастомизации
| Метод | Сложность | Стоимость | Когда использовать |
|---|---|---|---|
| Prompt Engineering | Низкая | Минимальная | Простые задачи, быстрый старт |
| RAG | Средняя | Средняя | Работа с собственными данными |
| Fine-tuning | Высокая | Высокая | Изменение стиля, специализация |
Уровень 1: Prompt Engineering
Самый простой подход — правильно составить промпт (инструкцию) для модели. Никакого обучения, никакой инфраструктуры — только текст.
Когда достаточно промпт-инженерии
- Модель уже умеет делать то, что вам нужно, просто надо объяснить формат
- Задача стандартная: суммирование, перевод, генерация текста
- Нет больших объёмов специфических данных
- Нужен быстрый результат без разработки
Техники
- System prompt — задайте роль и правила поведения модели
- Few-shot — дайте несколько примеров правильного ответа
- Chain-of-Thought — попросите рассуждать пошагово
- Структурированный вывод — попросите отвечать в JSON/XML
Пример system prompt для службы поддержки
Ты — ассистент техподдержки компании «ТехноМир».
Правила:
1. Отвечай вежливо, на «вы»
2. Если не знаешь ответ — предложи связаться с оператором
3. Не обсуждай конкурентов
4. Ответ — не более 3 предложений
5. В конце спроси, помог ли ответ
Ограничения промпт-инженерии
- Модель не знает вашу внутреннюю документацию
- Длинный system prompt занимает контекстное окно
- Нельзя кардинально изменить стиль модели
- Невозможно добавить новые знания после обучения
Уровень 2: RAG (Retrieval-Augmented Generation)
RAG — это архитектурный паттерн, при котором модель сначала ищет релевантную информацию в вашей базе данных, а затем генерирует ответ на основе найденного.
Как работает RAG
- Индексация — ваши документы разбиваются на фрагменты (chunks) и преобразуются в векторы (embeddings)
- Запрос — вопрос пользователя тоже преобразуется в вектор
- Поиск — находятся фрагменты документов, наиболее похожие на вопрос по смыслу
- Генерация — найденные фрагменты подставляются в промпт, и LLM генерирует ответ
Когда использовать RAG
- Нужно работать с собственной документацией, FAQ, базой знаний
- Данные часто обновляются (новые продукты, изменения политик)
- Важна точность — модель должна ссылаться на конкретные документы
- Нет ресурсов или данных для fine-tuning
Пример архитектуры RAG на Python
from langchain.document_loaders import DirectoryLoader
from langchain.text_splitter import RecursiveCharacterTextSplitter
from langchain.embeddings import OpenAIEmbeddings
from langchain.vectorstores import Chroma
from langchain.chat_models import ChatOpenAI
from langchain.chains import RetrievalQA
# 1. Загрузка документов
loader = DirectoryLoader("./docs", glob="**/*.md")
documents = loader.load()
# 2. Разбивка на чанки
splitter = RecursiveCharacterTextSplitter(
chunk_size=1000,
chunk_overlap=200
)
chunks = splitter.split_documents(documents)
# 3. Создание векторного хранилища
embeddings = OpenAIEmbeddings()
vectorstore = Chroma.from_documents(chunks, embeddings)
# 4. Создание цепочки RAG
llm = ChatOpenAI(model="gpt-4o")
qa_chain = RetrievalQA.from_chain_type(
llm=llm,
retriever=vectorstore.as_retriever(
search_kwargs={"k": 5}
)
)
# 5. Запрос
answer = qa_chain.run("Как оформить возврат товара?")
print(answer)
Стоимость RAG
| Компонент | Стоимость |
|---|---|
| Embeddings (OpenAI) | $0.02 / 1M токенов |
| Векторная БД (Pinecone) | от $70/мес |
| Векторная БД (self-hosted Chroma) | Бесплатно + сервер |
| LLM API (GPT-4o) | $2.50–10 / 1M токенов |
Инструменты для RAG
- LangChain — фреймворк для построения RAG-цепочек (Python, JS)
- LlamaIndex — специализированный фреймворк для RAG
- Chroma / Qdrant / Pinecone — векторные базы данных
- Meilisearch — гибридный поиск (текстовый + семантический)
Уровень 3: Fine-tuning
Fine-tuning — это дополнительное обучение модели на ваших данных. Модель корректирует свои веса (или надстройку — LoRA), чтобы лучше решать вашу конкретную задачу.
Когда нужен fine-tuning
- Нужно кардинально изменить стиль ответов (медицинский, юридический, технический)
- Задача очень специфическая и стандартные модели не справляются
- Нужно уменьшить размер модели без потери качества на конкретной задаче
- Хотите заменить дорогую большую модель дешёвой дообученной маленькой
Данные для fine-tuning
Вам нужен датасет в формате «вход → выход»:
[
{
"messages": [
{"role": "system", "content": "Ты медицинский ассистент"},
{"role": "user", "content": "Что принимать при головной боли?"},
{"role": "assistant", "content": "При головной боли..."}
]
},
...
]
Минимально рекомендуемый объём: 50–100 примеров для простых задач, 500–1000 для сложных.
Fine-tuning через OpenAI API
# Загрузка датасета
openai api files.create -f training_data.jsonl -p fine-tune
# Запуск fine-tuning
openai api fine_tuning.jobs.create \
-m gpt-4o-mini \
-f file-abc123 \
--suffix "medical-assistant"
# Использование дообученной модели
response = openai.ChatCompletion.create(
model="ft:gpt-4o-mini:org:medical-assistant:abc123",
messages=[{"role": "user", "content": "Симптомы гриппа"}]
)
LoRA — эффективный fine-tuning
Для open source моделей (Llama, Mistral) доступен метод LoRA, который обучает только небольшую надстройку (~1–5% параметров). Это в 10–100 раз дешевле полного fine-tuning.
# Пример с Hugging Face + PEFT
from peft import LoraConfig, get_peft_model
from transformers import AutoModelForCausalLM
model = AutoModelForCausalLM.from_pretrained("meta-llama/Llama-3-8B")
lora_config = LoraConfig(
r=16,
lora_alpha=32,
target_modules=["q_proj", "v_proj"],
lora_dropout=0.05,
)
model = get_peft_model(model, lora_config)
# Обучаемых параметров: ~0.1% от общего числа
Стоимость fine-tuning
| Метод | Стоимость | Время |
|---|---|---|
| OpenAI fine-tuning (GPT-4o-mini) | $3 / 1M токенов обучения | Часы |
| LoRA (Llama 8B, 1x A100) | $2–5/час GPU | 2–8 часов |
| Full fine-tuning (Llama 70B) | $50–200/час (8x A100) | Дни |
Сравнение подходов
| Критерий | Prompt Engineering | RAG | Fine-tuning |
|---|---|---|---|
| Сложность внедрения | Минуты | Дни | Недели |
| Стоимость старта | $0 | $100–500 | $500–5000 |
| Работа с новыми данными | Нет | Да (обновление индекса) | Нет (нужно переобучение) |
| Изменение стиля | Ограниченно | Ограниченно | Полностью |
| Точность на специфических задачах | Средняя | Высокая | Максимальная |
| Обновление знаний | Нет | Быстро (минуты) | Долго (часы/дни) |
| Требует ML-экспертизы | Нет | Базовой | Да |
Когда что выбрать: дерево решений
- Нужно просто изменить формат/стиль ответа? → Prompt Engineering
- Нужно отвечать на вопросы по своим данным? → RAG
- Данные часто обновляются? → RAG
- Нужен специфический стиль/тон/экспертиза? → Fine-tuning (или RAG + prompt)
- Хотите заменить дорогую модель дешёвой? → Fine-tuning маленькой модели
- Не знаете, что выбрать? → Начните с RAG, это самый универсальный подход
Комбинированный подход
В реальных проектах часто комбинируют все три метода:
- Fine-tuning — задаёт стиль и формат ответов
- RAG — подключает актуальные данные
- Prompt Engineering — тонкая настройка поведения
Пример: дообученная модель для медицины (fine-tuning) + поиск по актуальным протоколам лечения (RAG) + system prompt с правилами общения (prompt engineering).
Итог
Начинайте с самого простого подхода и усложняйте по необходимости. В 80% случаев достаточно RAG + хороший промпт. Fine-tuning — для тех 20%, где действительно нужна глубокая специализация модели.