jahwag/zestmem

GitHub: jahwag/zestmem

ZestMem 是一个自托管的分布式记忆服务,为 AI 编程代理团队提供持久化、可语义检索的上下文知识存储,解决代理跨会话丢失决策信息的问题。

Stars: 1 | Forks: 0

ZestMem

[![CI](https://static.pigsec.cn/wp-content/uploads/repos/cas/ad/ad5834178f7599af9fdda11629d49cae07f2997beec49821b2920eff5bfd50e7.svg)](https://github.com/jahwag/zestmem/actions/workflows/ci.yml) [![安全](https://static.pigsec.cn/wp-content/uploads/repos/cas/31/3182eccd67715b6b1bf46236ece7b7252dafc1e332af959acd19e63f1f3698a5.svg)](https://github.com/jahwag/zestmem/actions/workflows/security.yml) [![发布](https://img.shields.io/github/v/release/jahwag/zestmem)](https://github.com/jahwag/zestmem/releases/latest) [![MIT License](https://img.shields.io/badge/license-MIT-blue.svg)](LICENSE) [![Discord](https://img.shields.io/badge/Discord-The%20Orchard-5865F2?logo=discord&logoColor=white)](https://discord.gg/pR4qeMH4u4) 编程代理在会话结束时会丢失有用的决策。ZestMem 为团队提供了一个持久且可搜索的记忆服务,而无需存储他们的对话记录,也无需将其操作知识交给托管平台。 [![ZestMem 可在服务重启后保留数据](https://raw.githubusercontent.com/jahwag/zestmem/main/docs/images/zestmem-demo.gif)](docs/images/zestmem-demo.mp4) 代理使用两个核心 MCP 工具: ``` agent-a → remember("Production deploys require signed images") ↓ PostgreSQL + vector search ↓ agent-b → recall("What constrains production deploys?") "Production deploys require signed images" ``` ZestMem 是自托管的、经过身份验证的,专为使用 Codex、Claude Code、OpenCode 或任何 Streamable HTTP MCP 客户端的持久化团队而设计。 ## 为什么选择 ZestMem? | 替代方案 | 优势 | ZestMem 的增值 | | --- | --- | --- | | Markdown 和 JSON 文件 | 简单的本地笔记 | 排序召回、并发代理、所有权以及修订历史 | | Redis 或 NATS | 快速协调和队列 | 具有来源追溯和语义检索的持久化知识 | | 向量数据库 | 相似性搜索 | MCP 语义、访问控制、生命周期、归属以及可审计性 | | 托管的代理记忆 | 快速入门 | 自托管以及对凭据、数据保留策略和数据存储位置的控制 | ZestMem 不是对话记录器,也不能替代 [AgentBus](https://github.com/jahwag/agentbus)。AgentBus 负责在代理之间传递持久化消息;而 ZestMem 则用于保存他们日后应重用的知识。 ## 五分钟入门 ZestMem 在设计上贴合生产环境:使用带有 pgvector 的 PostgreSQL 17、本地嵌入服务以及 OIDC 身份验证。系统不提供关闭身份验证的生产模式。 环境要求: - Docker Compose 或 Podman - OIDC 签发者和受众 - 本地主机上可用的 `8080` 和 `15432` 端口 ``` git clone https://github.com/jahwag/zestmem.git cd zestmem cp .env.example .env chmod 600 .env ``` 编辑 `.env` 并至少设置以下内容: ``` POSTGRES_PASSWORD=replace-with-a-long-random-value OIDC_ISSUER=https://login.microsoftonline.com/YOUR_TENANT_ID/v2.0 OIDC_AUDIENCE=api://YOUR_MEMORY_API_APP_ID ``` 然后启动整个技术栈: ``` docker compose up -d curl --fail http://127.0.0.1:8080/readyz ``` MCP 端点为 `http://127.0.0.1:8080/mcp`。内存浏览器位于 `http://127.0.0.1:8080/console/`。 预构建的二进制文件、校验和、签名、来源证明以及 SBOM 可从 [GitHub Releases](https://github.com/jahwag/zestmem/releases/latest) 获取。 ## 代理所见 一旦操作员创建了主体和空间,经过身份验证的 MCP 客户端就可以存储聚焦的记忆: ``` { "name": "remember", "arguments": { "target_space_id": "team-space-id", "title": "Production image policy", "body": "Production deploys require signed container images.", "use_when": "Planning or reviewing a production deployment", "kind": "decision", "topics": ["deployment", "security"], "idempotency_key": "deploy-image-policy-v1" } } ``` 其他代理可以在不知道标题或确切措辞的情况下检索它: ``` { "name": "recall", "arguments": { "query": "What constrains production deploys?", "space_ids": ["team-space-id"], "limit": 5 } } ``` 召回功能会返回排序后的候选结果和精简的元数据。仅当客户端明确读取选定的记忆时,才会获取完整正文。 ## 架构 ``` Codex / Claude Code / OpenCode │ Streamable HTTP MCP │ ┌──────▼──────┐ OIDC ─►│ memoryd │◄─ memoryctl (operator) └───┬─────┬───┘ │ │ PostgreSQL local embeddings + pgvector (TEI) ``` - PostgreSQL 是事实来源。 - Embeddings 提供候选检索;词法证据和元数据对客户端保持可见。 - 记忆具有版本控制、归因机制,并限定在特定空间范围内。 - 工作区声明可以限制哪些代理可以访问特定空间。 - 变更响应不会回显已存储的记忆正文。 ## 运维方式 请将公共端点置于 TLS 保护之下,并保持 PostgreSQL、嵌入服务、健康检查和指标端口的私有性。当配置了 `MEMORY_DOMAIN` 时,包含的 Caddy 配置将通过 HTTPS 提供 MCP 端点服务。 对于远程部署,建议通过隧道访问控制台,而不是将其直接暴露: ``` ssh -N -L 18080:127.0.0.1:8080 user@memory-host ``` 然后打开 `http://127.0.0.1:18080/console/`。 运维参考: - [安全策略](SECURITY.md) - [支持与 Orchard Discord](SUPPORT.md) - [GitHub 备份与恢复](docs/github-backups.md) - [版本验证](docs/verifying-releases.md) - [发布流程](docs/releasing.md) - [贡献指南](CONTRIBUTING.md) 健康检查端点(`/healthz`、`/readyz` 和 `/metrics`)属于运维接口,而非公开的产品 API。 ## 项目状态 ZestMem 正处于积极开发阶段,并已发布签名的多平台二进制文件和容器镜像。随着越来越多的代理团队应用该模型,相关接口可能会进一步完善。 采用 [MIT License](LICENSE) 授权。
标签:AI智能体, EVTX分析, MCP, PostgreSQL, 人工智能, 向量检索, 测试用例, 用户模式Hook绕过, 记忆系统, 请求拦截