ГлавнаяБлогДобавляем память Ollama с Sieve: пошаговое руководство
AI / Нейросети

Добавляем память Ollama с Sieve: пошаговое руководство

Узнайте, как добавить постоянную шифрованную память в Ollama с помощью Sieve. Никаких SDK, только смена URL. Попробуйте прямо сейчас!

Al
Редакция Algolitalgolit.ru
8 мин чтения27 июня 2026 г.

Зачем нужна память для Ollama?

Ollama даёт локальный LLM-эндпоинт, который быстр, приватен и полностью не имеет состояния. Закрыл чат — модель забыла всё, что ты ей сказал. Держишь чат открытым — каждый новый запрос отправляет растущую историю, пока контекст не переполнится. Спроси локальную модель о том, чего ей никогда не говорили, и она может просто выдумать ответ. В этом руководстве мы добавим постоянную шифрованную память к любой установке Ollama с помощью Sieve — без изменения клиентского кода, кроме одного URL.

Проблема: сессионность и выдумки

Когда ты запускаешь агентов или долгоживущие чаты с локальной моделью, возникают три раздражающих проблемы, и у них общий корень.

Ничто не переживает сессию

Скажи ассистенту в понедельник, что предпочитаешь Python, а цель развёртывания — Raspberry Pi. Во вторник он ничего не помнит. У модели нет состояния; приложение должно тащить всё каждый раз.

Полезная нагрузка только растёт

Стандартный обходной путь — пересылать историю: системный промпт, схемы инструментов, все предыдущие сообщения — каждый запрос. Я измерил последствия этого паттерна в статье «Скрытая стоимость контекста». Краткая версия: затраты на один запрос растут с длиной разговора, а на локальном железе этот рост съедает ваши токены в секунду.

Отсутствие превращается в выдумку

Когда вопрос выходит за пределы отправленного контекста, особенно маленькие модели склонны отвечать, выдумывая факты. Модель, которой никогда не говорили имя коллеги, часто его придумает.

Общий корень: эндпоинт не имеет состояния, и бремя памяти ложится на то, что перед ним. Большинство фреймворков памяти просят вас принять SDK и вызывать add()/search() самостоятельно. Наш подход другой — поместить память в трафик, чтобы клиент оставался неизменным.

Что вы получите

ваш клиент ──► Sieve (127.0.0.1:11435) ──► Ollama (127.0.0.1:11434)
                 │
                 └── шифрованное хранилище ~/.sieve/memory.db

Sieve понимает нативный /api/chat Ollama и совместимый с OpenAI /v1/chat/completions, так что всё, что умеет говорить с Ollama, умеет говорить и с Sieve. На каждом шаге Sieve удаляет из исходящего запроса повторяющиеся инструкции, схемы инструментов и устаревшую историю; извлекает долговременные факты из разговора; и вставляет релевантные факты, когда они действительно нужны. Ответ возвращается клиенту без изменений.

Шаг 1 — установка Sieve

Вам понадобятся Python 3.11+ и работающий Ollama. Рекомендуемый установщик — pipx:

pipx install llm-sieve
sieve --version
# sieve, version 1.0.0 или новее

Затем запустите интерактивную установку:

sieve-install

Если Ollama работает на 127.0.0.1:11434, установщик автоматически это обнаружит, покажет ваши уже загруженные модели, скачает эмбеддинг-модель (~50 МБ, один раз), создаст шифрованное хранилище и предложит запустить прокси — с опцией автозапуска при перезагрузке. Для автоматической установки без запросов:

sieve-install --no-input \
  --provider http://127.0.0.1:11434 \
  --model qwen3.5:9b

Шаг 2 — меняем один URL

Sieve слушает на порту 11435 — на один порт выше стандартного порта Ollama 11434. Там, где ваш клиент указывает на Ollama, укажите на Sieve.

Клиенты, использующие нативный API Ollama:

export OLLAMA_HOST=http://127.0.0.1:11435

Клиенты, совместимые с OpenAI:

client = OpenAI(
    base_url="http://127.0.0.1:11435/v1",  # было: http://127.0.0.1:11434/v1
    api_key="not-used-by-sieve",  # всё ещё передаётся наверх
)

Или просто через curl:

curl http://127.0.0.1:11435/api/chat \
  -H 'Content-Type: application/json' \
  -d '{
    "model": "qwen3.5:9b",
    "messages": [{"role": "user", "content": "Привет, меня зовут Алекс, я работаю над встроенным ПО."}],
    "stream": false
  }'

Имена моделей, форматы запросов, форматы ответов, стриминг — всё без изменений. Клиент вообще не знает о существовании Sieve.

Шаг 3 — проверяем, что работает

Две встроенные команды, обе в песочнице (они никогда не трогают ваше реальное хранилище):

sieve demo

запускает короткий скриптовый диалог: личность представляется, делится фактами, просит их вспомнить и завершается вопросом о человеке, которого никогда не упоминали. Ожидаемый результат: успешное вспоминание внесённых фактов и отказ (не выдумка) на ловушку.

sieve benchmark

отправляет те же 15 сообщений напрямую модели и через Sieve, затем выводит таблицу дельт: токены на входе и выходе, изученные факты, время ответа и вердикт по ловушке. Займёт 5–10 минут в зависимости от вашего железа, и цифры будут ваши, а не мои.

Наблюдение за работой

Каждый ответ, через который прошёл Sieve, содержит диагностические заголовки, так что не нужно верить прокси на слово:

  • X-Sieve-Inbound-Tokens — размер запроса до обрезки
  • X-Sieve-Outbound-Tokens — размер запроса, реально отправленного в Ollama
  • X-Sieve-Phase — OBSERVE / ACCUMULATE / ACTIVATE
  • X-Sieve-Fact-Count — количество фактов в хранилище сейчас
  • X-Sieve-Proxy-Us — собственные накладные расходы Sieve в микросекундах

Пара Inbound/Outbound — первая, на которую стоит смотреть: это ответ на вопрос «действительно ли это что-то делает?» Полный список — в документации по диагностическим заголовкам.

Ожидайте, что первые несколько шагов будут похожи на пассивное пропускание. Sieve активируется постепенно: сначала наблюдает, потом накапливает, и только потом активно обрезает и вставляет. X-Sieve-Phase покажет, на каком этапе вы находитесь, а sieve status — как растёт количество фактов.

Где живут ваши данные

Всё остаётся на вашей машине. Факты, сущности и эпизоды попадают в шифрованную SQLCipher базу данных SQLite по пути ~/.sieve/memory.db, а ключ лежит рядом. Нет облачной составляющей, нет аккаунта, нет телеметрии — прокси общается только с одним удалённым участником, и это настроенный LLM-эндпоинт. Если это Ollama на localhost, ничего не покидает вашу машину.

Хранилище принадлежит вам, а не пакету: обновления через pipx upgrade llm-sieve никогда не трогают ~/.sieve/, и единственная команда, удаляющая пользовательские данные — sieve uninstall --hard, при которой нужно ввести DELETE.

Честные предостережения

Маленькие модели всё ещё имеют проблемы маленьких моделей

Sieve может подложить нужные факты модели и отказаться превращать отсутствие в выдумку на тех шагах, которые он контролирует, но модель на 1–3 млрд параметров в условиях неопределённости остаётся моделью на 1–3 млрд. Ловушка демо — честная проверка: запустите её на той модели, которую планируете использовать. Модели класса 8B+ показывают наилучшие результаты в обработке отсутствия.

Холодный старт реален

Слой памяти, в котором ничего нет, пока не сэкономит вам токены. Запланируйте несколько шагов, прежде чем дельты станут интересными.

Коллизии портов случаются

Если порт 11435 уже занят, запустите sieve start --port 11436 и укажите клиенту этот порт.

Практический вывод: что делать прямо сейчас

Выполните всего три команды:

pipx install llm-sieve
sieve-install  # автообнаружение Ollama, интерактивно
export OLLAMA_HOST=http://127.0.0.1:11435
sieve demo  # наблюдайте за вспоминанием и отказом на ловушку

Один изменённый URL, никакого SDK, никакого переписывания клиентского кода — и ваши модели Ollama перестанут забывать, кто вы, между сессиями.

Sieve — открытый исходный код под лицензией Apache 2.0: github.com/llmsieve/llm-sieve

#ollama#память llm#sieve#локальные модели
Al
Редакция Algolit

Пишем про алгоритмы, подготовку к собеседованиям и карьеру в IT — так, чтобы было понятно и полезно.

Хочешь закрепить знания на практике?

Решай задачи на Algolit — интерактивная платформа для обучения

Начать бесплатно →