protoprompt
Надёжная память агента в фиксированном контекстном окне. ProtoPrompt — embeddable context runtime: RAG, память диалога, профиль пользователя и объяснимый строгий token budget через единый Python API.
Документация · English · Примеры · Каталог интеграций · Roadmap · Launch v0.15 · Как добавить интеграцию · Changelog
Проект находится в alpha-стадии. Публичный API уже покрыт тестами, но до версии 1.0 возможны изменения контрактов.
Эталонный Telegram-бот сохраняет длинную память в
SQLite, работает с OpenAI или Ollama и объясняет каждый recall через /why.
Что решает protoprompt
LLM обычно нужна не просто история чата, а несколько разных видов контекста: найденные документы, важные факты из прошлых сессий, профиль пользователя и исходный system prompt. Если собирать всё вручную, логика поиска, приоритетов и обрезки быстро расползается по приложению.
protoprompt собирает эти слои в одном месте и возвращает не только готовый
промпт, но и provenance — какие RAG-чанки, блоки памяти и данные профиля были
использованы. Наша ставка до 1.0: хранить можно долго, но в активный
контекст попадёт только объяснимый набор, который действительно помещается.
| Возможность | Что входит |
|---|---|
| RAG | чанкинг, индексация, top-k поиск, фильтры, reranking и provenance |
| Память сессии | эвристическое или LLM-сжатие длинных диалогов |
| Профиль | извлечение, merge, optimistic locking и SQLite-хранилище |
| Memory Ledger (experimental) | scoped lifecycle, host admission, immutable provenance/audit, atomic source revocation и проверяемая очистка live rows; SQLite и optional fresh-v6 PostgreSQL backend |
| Bounded ledger recall (experimental) | local deterministic selection active memory в JSON data lane; opt-in admitted-only composition в exact request, sealed strict-recall resume без agent/provider state, token/byte receipt и final stale check |
| Токен-бюджет | жёсткий лимит, приоритеты слоёв, ContextPlan/receipt и объяснение обрезки |
| Хранилища | in-memory, SQLite, ChromaDB, Qdrant, pgvector, Elasticsearch/OpenSearch и Redis services |
| LLM и embeddings | OpenAI, Anthropic, Google GenAI, Bedrock, Ollama и локальные модели |
| Секреты | encrypted SQLite, AWS Secrets Manager и GCP Secret Manager |
| Connectivity | MCP, OpenAI Agents SDK, LangGraph, PydanticAI, LlamaIndex, aiogram 3 и FastAPI |
| Данные | bounded readers для text/source/HTML/PDF/DOCX и framework converters |
Ядро не имеет обязательных сторонних зависимостей. Интеграции подключаются через extras и не импортируются, пока не понадобятся.
Экспериментальный LedgerRecallPlanner — первый безопасный read-path для
текущей задачи агента: для concrete v5 origin он выбирает только active,
host-admitted записи с проверенным audit, создаёт свежий ограниченный JSON data
lane и fail-closed при изменении памяти до отправки. Standalone planner не
подмешивает записи в system prompt и не заменяет финальный request accounting.
Явный LedgerContextComposer использует этот accounting для одного bounded
request, требует strict admission policy и того же scope/counter; raw unknown
и legacy_unknown в composed request не попадают. Ни pp-ollama-chat, ни
pp-agent пока не подключают composer автоматически. См. Bounded recall из
ledger.
v0.13 добавляет experimental PostgresMemoryLedger: тот же явный sync
MemoryWriter contract и Ledger v6 в выделенной PostgreSQL schema. Backend
принимает только fresh v6 setup, сериализует записи schema-wide advisory
lock-ом с 5-секундной границей retry и fail-closed валидирует storage layout.
Он не переносит автоматически SQLite/старые PostgreSQL Ledger, не обещает
throughput и не превращает Ledger в agent state, workflow engine или
exactly-once механизм. См. руководство PostgreSQL.
v0.14 — RC-hardening без расширения public API: bounded property/state-machine gate проверяет scope, lifecycle, deletion/source revocation и exact Ledger token/byte accounting на SQLite и PostgreSQL. Он не является latency, throughput или model-quality benchmark.
v0.15 добавляет frozen dual-backend evidence protocol для strict Ledger
selection: один content-free synthetic fixture обязан дать одинаковую
семантику на SQLite и PostgreSQL. Он не делает claim о качестве модели,
general recall, latency, throughput или package 1.0.0.
Установка
pip install protoprompt
# Частые варианты
pip install "protoprompt[openai,tiktoken]"
pip install "protoprompt[ollama]"
pip install "protoprompt[chroma]"
pip install "protoprompt[qdrant]"
pip install "protoprompt[local]" # sentence-transformers
pip install "protoprompt[fastembed]"
pip install "protoprompt[secrets]"
pip install "protoprompt[mcp]"
pip install "protoprompt[agents]"
pip install "protoprompt[langgraph]"
pip install "protoprompt[telegram,ollama]"
pip install "protoprompt[anthropic]"
pip install "protoprompt[google]"
pip install "protoprompt[bedrock]"
pip install "protoprompt[pydanticai]"
pip install "protoprompt[llamaindex]"
pip install "protoprompt[postgres,redis,otel]"
pip install "protoprompt[elasticsearch]" # или opensearch
pip install "protoprompt[documents,fastapi]"
pip install "protoprompt[aws-secrets]" # или gcp-secrets
Для работы из текущей ветки:
pip install "protoprompt @ git+https://github.com/Idxeed/protoprompt.git@master"
Требуется Python 3.11 или новее.
Быстрый старт
Пример полностью локальный: сеть, API-ключ и сторонняя векторная БД не нужны.
import asyncio
from protoprompt import ContextBuilder, ContextInput, InMemStore
class DemoLLM:
async def embed(self, texts, model=""):
# В приложении замените на OpenAIClient, OllamaClient
# или локальный embedding-клиент.
return [[1.0, 0.0] for _ in texts]
async def chat(self, messages, model="", **options):
return "demo"
async def main():
llm = DemoLLM()
store = InMemStore()
chunks = [
"protoprompt объединяет RAG, память сессии и профиль пользователя.",
"Токеновый бюджет не позволяет итоговому контексту превысить лимит.",
]
store.add("guide", chunks, await llm.embed(chunks))
builder = ContextBuilder(store, llm)
messages = await builder.build_messages(
ContextInput(
query="Что умеет protoprompt?",
system_prompt="Отвечай кратко и только по контексту.",
doc_ids=["guide"],
include_session=False,
),
user_message="Что умеет protoprompt?",
)
print(messages) # готовый OpenAI-style список system + user
asyncio.run(main())
Более реалистичные рецепты находятся в examples/: Ollama RAG,
OpenAI с токен-бюджетом, локальные embeddings, сжатие сессии, профиль и
зашифрованный vault.
Как устроена сборка контекста
запрос ─┬─> RAG по документам ───────┐
├─> память текущей сессии ───┤
├─> профиль пользователя ────┼─> ContextBuilder ─> ContextOutput
└─> исходный system prompt ──┘ │
└─ provenance + budget report
Основные контракты намеренно небольшие:
StoreProtocol/AsyncStoreProtocol— синхронное или асинхронное векторное хранилище;LLMClientProtocol—chat()иembed();StrategyProtocol— стратегия сжатия диалога;TokenCounter— подсчёт токенов для конкретной модели.
Благодаря этому встроенные адаптеры можно заменить своими без переписывания сборщика контекста.
Основные точки входа
from protoprompt import (
ContextBuilder,
TokenBudgetedContextBuilder,
Pipeline,
ProfileManager,
InMemStore,
SqliteStore,
)
from protoprompt.rag import DocumentIndexer, Retriever
from protoprompt.ledger import MemoryReviewGate, MemoryWriter, SqliteMemoryLedger
from protoprompt.secrets import EncryptedSqliteSecretStore, SecretAccess
from protoprompt.integrations import OpenAIClient, OllamaClient, QdrantStore
Полный API и подробные руководства:
- быстрый старт;
- RAG;
- память и сжатие;
- экспериментальный Memory Ledger;
- профиль пользователя;
- секреты;
- интеграции.
Локальный Ollama web chat
В репозитории есть reference-интерфейс для локальной Ollama: чат, PDF RAG и
долговременный архив диалогов. Он хранит полный transcript локально, но перед
каждым ответом передаёт модели только новый ContextPlan в заданном бюджете.
ollama pull llama3.1
ollama pull nomic-embed-text
pip install -e ".[documents,fastapi,ollama]"
pip install -e "apps/ollama-chat"
pp-ollama-chat
По умолчанию UI слушает только 127.0.0.1. Подробности о хранении, удалении,
remote-Ollama opt-in и пределах token estimate — в
apps/ollama-chat/README.md.
Экспериментальный coding-agent
В монорепозитории есть CLI поверх protoprompt.agent.WorkingMemory:
pip install -e "apps/agent-cli[ollama]"
pp-agent /path/to/project
Он поддерживает сессии, hot/cold memory, план-режим и подтверждение опасных
инструментов. Каждый вызов модели собирается через immutable ContextPlan:
system context, tail, обязательный input и reserve ответа учитываются под одним
жёстким лимитом; action и его результат не разрываются при обрезке. Подробнее —
в apps/agent-cli/README.md.
Разработка
git clone https://github.com/Idxeed/protoprompt.git
cd protoprompt
python -m venv .venv
# Windows
.venv\Scripts\activate
# Linux / macOS
source .venv/bin/activate
pip install -e ".[chroma,qdrant,dev]"
pytest
python scripts/build_docs.py --clean
Офлайн-гейт памяти запускается без Ollama и сети:
python scripts/run_memory_benchmark.py --suite v0.1 --verify
python scripts/run_memory_benchmark.py --suite v0.2 --verify
python scripts/run_memory_benchmark.py --suite v0.3 --verify
Отдельный v1 evidence gate проверяет один строгий Ledger fixture сразу на
SQLite и PostgreSQL. Для него нужны локальный PostgreSQL и
protoprompt[postgres]; одиночный backend нельзя выдать за verified result:
$env:PROTOPROMPT_POSTGRES_DSN = "postgresql://protoprompt:protoprompt@localhost:5432/protoprompt_test"
python scripts/run_memory_benchmark.py --suite v1.0 --ledger-backend all --verify
v1.0 — версия протокола доказательств, а не уже вышедшая версия пакета
1.0.0. Он измеряет только зафиксированную selection semantics synthetic
fixture, не model quality, latency или throughput.
Его сценарии, фиксированные baseline и правила версионирования находятся в
benchmarks/README.md. CI проверяет Python 3.11–3.13,
интеграционные тесты, CLI, содержимое wheel, этот benchmark и обе строгие
сборки документации.
Лицензия
Metadata
Release files for protoprompt 0.15.0
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| protoprompt-0.15.0.tar.gz | 4.7 MB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| protoprompt-0.15.0-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 4.9 MB
Release files / protoprompt-0.15.0.tar.gz
| Download URL | protoprompt-0.15.0.tar.gz |
|---|---|
| Size | 4.7 MB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
4dffad6580a8d0c767d77f6e333cf3e5b5b892d7296af92118768a336595042d
|
|
BLAKE2b-256 checksum How to use checksums |
ded973b55120c9aff5e16352c5be93f4a502ecdc3eef25ec7d07ff1b56e5ae30
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Aug 30, 2026.
Transparency logRelease files / protoprompt-0.15.0-py3-none-any.whl
| Download URL | protoprompt-0.15.0-py3-none-any.whl |
|---|---|
| Size | 251.5 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
f93f32404d7111d9328d1b49b2c9f65ed4944de4bbbfcf345b7ad62d3521ce20
|
|
BLAKE2b-256 checksum How to use checksums |
9c82e0de0a1d153fca11213ead94eecda3ec1b93449a10043bff3df9465e81f3
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Aug 30, 2026.
Transparency log