Ollama Embeddings API: индексация и проверка локального поиска
На странице · 5 разделов
Ollama создаёт текстовые векторы через локальный POST /api/embed: передайте embedding-модель и строку либо массив строк. Индексируйте фрагменты и запрос одной моделью, затем сравните нормализованные векторы и вручную проверьте найденный фрагмент. Ответ API не доказывает качества поиска или отсутствия сетевых запросов других компонентов; Modelium не запускал этот стек.
Документация проверена 4 октября 2026 года на Git-ревизии Ollama
42e911bc3d05. Это инструкция по первоисточникам, не отчёт о собственном запуске: Modelium не скачивал веса, не получал векторы и не измерял качество поиска s1s2.
Что именно возвращает Ollama Embeddings API?
Embedding — числовое представление фрагмента текста. Его используют, чтобы искать похожие фрагменты, а затем отдельно передавать найденный текст в языковую модель для ответа. Локальный POST http://localhost:11434/api/embed принимает model и input, где входом служит строка или массив строк; ответ содержит embeddings — массив векторов. Это не готовая векторная база и не ответ на вопрос по документу s1s2s3.
Официальная документация указывает, что /api/embed выдаёт L2-нормализованные векторы и советует использовать одну embedding-модель при индексации документов и запросе. Если модель или её вариант изменится, нельзя оставлять старый индекс и считать оценки сопоставимыми: перестройте его и запишите тег/локальный digest в журнал пилота s1s2.
Проверяемый маршрут: три обезличенных фрагмента документа → embeddinggemma:300m → железо вашего устройства без обещания универсального минимума → локальный Ollama → /api/embed → ранжирование двух фрагментов по запросу → ручная сверка с оригиналом. В этом примере нет отдельного векторного сервера, чтобы сначала проверить контракт API и смысловую выдачу; для рабочего корпуса понадобится постоянное хранение фрагментов, векторов и метаданных. Указанный тег присутствует в официальной библиотеке, но его качество на ваших русских документах здесь не заявлено s1s6.
Что установить и как выбрать тег без выдуманных требований к памяти?
Установите Ollama по инструкции для вашей ОС и убедитесь, что локальный API отвечает. В учебном варианте используйте конкретный тег embeddinggemma:300m: команда ollama pull embeddinggemma:300m скачивает модель; ollama ls и GET /api/tags позволяют сверить её фактическое имя, а ответ /api/tags содержит локальный digest. До загрузки модели нужна сеть; локальная работа после загрузки — отдельная проверка. Инструкция не выводит минимальную RAM/VRAM из размера весов или суффикса 300m s4s2s6s5.
Если у вас уже есть qwen3-embedding, можно выбрать его вместо EmbeddingGemma, но индекс и запрос должны строиться одной и той же выбранной моделью. Размеры и назначение конкретных вариантов смотрите в официальной библиотеке и в разборе Qwen3 Embedding; это альтернатива для собственных тестов, не объявление победителя s1s7.
Откройте проверку Ollama API, если локальный сервис не отвечает. Ollama по умолчанию привязана к 127.0.0.1:11434; не переносите демонстрационный локальный endpoint на 0.0.0.0 без отдельного контроля доступа. Для собственного хранения индекса заранее исключите реальные договоры, персональные данные и секреты из учебного набора s5s3.
Как получить векторы и убедиться, что вход не обрезан?
Для пилота придумайте два коротких фрагмента: Фрагмент 1: договор содержит срок поставки, Фрагмент 2: инструкция описывает обновление сервера. Третий текст — запрос Где указан срок поставки?. Сначала отправьте все три в одном порядке через JSON-массив: curl -sS http://localhost:11434/api/embed -H 'Content-Type: application/json' -d '{"model":"embeddinggemma:300m","input":["договор содержит срок поставки","инструкция описывает обновление сервера","где указан срок поставки"],"truncate":false}'. Сохраните полученный JSON как учебный результат и сверьте поле model, число элементов embeddings и одинаковую ненулевую длину каждого вектора. Документация допускает массив строк и возвращает массив векторов, но этот ответ нами не получен s1s2s6.
По умолчанию truncate равно true; для индекса документов мы намеренно ставим false, чтобы слишком длинный фрагмент дал ошибку, а не тихую обрезку. При такой ошибке разбейте документ на фрагменты с известными границами и повторите индексацию; не меняйте модель только для запроса. Фиксируйте id фрагмента и исходное место в документе отдельно от вектора: числовой массив не является проверяемой цитатой s2s1.
Для автоматической проверки формы ответа при сохранении JSON в локальном файле используйте jq '{model, count:(.embeddings|length), dimensions:(.embeddings[0]|length)}' с подачей сохранённого ответа на stdin. Здесь ожидаются три вектора одинаковой длины если ваш запрос выполнился; конкретную размерность мы не подставляем без фактического ответа модели. При ошибке 404 сначала проверьте точный тег в ollama ls, статус локального сервера и путь /api/embed; /api/embeddings из старых примеров не заменяет проверку текущего контракта s2s4.
Как проверить, найден ли подходящий фрагмент?
Пусть в embeddings идут сначала два фрагмента, затем вопрос. Рассчитайте для каждого фрагмента скалярное произведение с вектором вопроса: score(d,q) = Σ_i d_i × q_i; при документированной L2-нормализации это косинусная близость. Сортируйте только эти два фрагмента, затем откройте исходный текст наиболее близкого и вручную проверьте, отвечает ли он на вопрос. Оценка близости сама по себе не подтверждает истинности факта и не заменяет сравнения с первоисточником s1s2.
Если установлен jq, сохранённый JSON с тремя векторами можно ранжировать так: jq '.embeddings | .[2] as $q | .[0:2] | to_entries | map(.value as $v | {fragment:(.key+1),score:([range(0;($v|length)) as $i | $q[$i]*$v[$i]]|add)}) | sort_by(-.score)'. fragment: 1 или 2 здесь соответствует порядку двух исходных строк; не копируйте численный score из чужого компьютера как метрику качества. Формула и выражение проверены на синтетическом fixture для арифметики jq, но реальный embedding-ответ Modelium не получал s1s2.
Для реальной проверки составьте несколько вопросов с ручной разметкой релевантного фрагмента, включая запрос, на который в документах нет ответа. Отдельно сохраните точные тексты/версии фрагментов, тег и digest модели, процедуру разбиения, ожидаемый фрагмент и ранжирование. Если нужный фрагмент не попал в первые результаты, ищите проблему в разбиении, языке/формулировке запроса, модели или данных; не выдавайте один удачный пример за измерение качества. Следующий шаг — методика оценки локального RAG s1s2.
Почему клиент может получить ошибку или обратиться не туда?
- Несовпадающий endpoint. Нативный локальный Ollama API —
http://localhost:11434/api/embed. Отдельный OpenAI-совместимый маршрут —http://localhost:11434/v1/embeddings; документация перечисляет поддерживаемые поля, но не делает эти пути одним и тем же. Прямой облачныйhttps://ollama.com/apiтребует ключа, тогда как локальный запрос к установленному серверу — нет. Проверьте URL в клиенте прежде, чем добавлять токен или менять модель s2s3s8. - Разные модели на входе и при поиске. Если индекс записан одной моделью, а вопрос отправлен в другую, сравнение векторов теряет смысл. Повторите индексацию и запрос одним тегом и сохраните digest. Не смешивайте векторы даже тогда, когда их длина случайно совпала s1s2.
- Память и сеть.
ollama psсообщает о загруженной модели и колонкеPROCESSOR, но это наблюдение на вашем устройстве, не минимальные требования модели. Локальный API не доказывает, что другие программы не обращаются к облаку: Ollama позволяет отдельно отключить cloud-функции черезOLLAMA_NO_CLOUD=1илиdisable_ollama_cloudв серверной конфигурации с перезапуском. Для строгого сценария проведите сетевую проверку всего контура s4s5.
Основной следующий шаг: сохраните ранжирование на нескольких своих обезличенных вопросах, сопоставьте найденные фрагменты с исходным документом и переходите к проверке качества RAG. Этот материал описывает документированный API и протокол читателя; ни запуск модели, ни успешное нахождение фрагмента на стенде Modelium не заявлены s1s2.
Источники
- Ollama — Embeddings, закреплённый Git-документ — revision 42e911bc3d05798cad729cb474bf62f378cb2e26. Получено 04.10.2026.
- Ollama — OpenAPI schema, закреплённая ревизия — revision 42e911bc3d05798cad729cb474bf62f378cb2e26. Получено 04.10.2026.
- Ollama — API introduction, закреплённая ревизия — revision 42e911bc3d05798cad729cb474bf62f378cb2e26. Получено 04.10.2026.
- Ollama — CLI reference, закреплённая ревизия — revision 42e911bc3d05798cad729cb474bf62f378cb2e26. Получено 04.10.2026.
- Ollama — FAQ: локальный сервер и облако, закреплённая ревизия — revision 42e911bc3d05798cad729cb474bf62f378cb2e26. Получено 04.10.2026.
- Ollama Library — embeddinggemma:300m. Получено 04.10.2026.
- Ollama Library — qwen3-embedding. Получено 04.10.2026.
- Ollama — OpenAI-compatible embeddings, закреплённая ревизия — revision 42e911bc3d05798cad729cb474bf62f378cb2e26. Получено 04.10.2026.