LLM (Large Language Model) – это **последний этап RAG-цепочки**, который: - получает **вопрос пользователя**; - получает **контекст**, отобранный retriever’ом и отформатированный (`format_docs`); - **формулирует ответ**, опираясь на системный промпт и переданный контекст. Важно: В RAG **LLM не ищет информацию** и не принимает решений о том, _что_ подать в контекст. Она только отвечает на основе того, **что ей дали**. Поэтому в RAG LLM – это: > не "умная база знаний", а интерпретатор и генератор ответа. ## Какие бывают LLM в LangChain LangChain отделяет **тип модели** от **провайдера**, поэтому один и тот же код может работать с локальной моделью, OpenAI, Anthropic и т.д. ### Основные типы моделей |Тип модели|Что это|Когда использовать| |---|---|---| |**Chat models**|Модели, работающие с сообщениями (`system`, `human`, `assistant`)|RAG, чат-боты, ассистенты| |**LLM (completion)**|Старый формат "один текст → один текст"|Редко используется в новых RAG| В RAG почти всегда используются **chat-модели**. ### Провайдеры chat-моделей |Провайдер|Пример|Особенности| |---|---|---| |OpenAI|GPT-4, GPT-4o|Качество, но платно| |Ollama|Mistral, Gemma, Llama|Локально, контроль данных| |Anthropic|Claude|Хорош с длинным контекстом| |HuggingFace|Inference API|Гибкость, много моделей| LangChain даёт **единый интерфейс**, поэтому смена модели – это замена 2–3 строк кода. ```python # Будем использовать модль с поддержкой Русского языка: # <https://huggingface.co/bartowski/Mistral-Nemo-Instruct-2407-GGUF> # ollama pull hf.co/bartowski/Mistral-Nemo-Instruct-2407-GGUF:Q4_K_M # если железо начинает лагать, возьмите модель попроще. Например: gemma3:4b # ollama pull gemma3:4b from langchain_openai import ChatOpenAI OLLAMA_BASE_URL = '<http://127.0.0.1:11434/v1>' # LLM_MODEL = 'hf.co/bartowski/Mistral-Nemo-Instruct-2407-GGUF:Q4_K_M' LLM_MODEL = 'gemma3:4b' llm = ChatOpenAI( api_key='None', base_url=OLLAMA_BASE_URL, model=LLM_MODEL ) ``` Чтобы протестировать модель, используем метод `invoke()`: ```python llm.invoke('Привет! Ты кто?') ```