AI编程助手记忆引擎

Codemem是一个独立的Rust内存引擎,为AI编程助手提供持久化、可查询的知识图谱,帮助助手在跨会话时保持上下文记忆。

  • by cogniplex
  • Rust
  • 本地部署
  • 18 星标
  • 更新于
在 GitHub 查看 cogniplex/codemem

使用说明

Codemem

用于AI编码助手的独立Rust内存引擎。单二进制,零运行时间依赖。

Codemem存储您的AI助手发现的内容——读取的文件、搜索的符号、进行的编辑——因此存储库不需要在会话之间重新探索。可选择通过以下方式用编译器级交叉引用丰富图形 竞争情报从业者协会 索引器。


问题

你的人工智能助手探索50个文件,跟踪调用链,做出架构决策——然后会话结束。下次会议?一切从头开始。每一个。单身。时间。

更糟糕的是:它编辑 UserService.validate() 而不知道47个下游函数依赖于该返回类型。它重构了一个模块,但不知道为什么选择了之前的方法。

助理需要的是知识图谱,而不是更多的文本。

Codemem做什么

Codemem构建了一个持久的、可查询的代码库知识图,以及你的助手与它的交互。提交成为节点。符号具有键入的边。决策留下痕迹。你的助手会在它停止的地方继续。

# One command. That's it.
cd your-project && codemem init

从那时起,Codemem会默默地捕获上下文,在会话开始时注入先验知识,并为您的助手提供32个MCP工具,包括时间查询、差异审查和爆炸半径分析。


快速开始

安装

# Shell (macOS/Linux)
curl -fsSL https://raw.githubusercontent.com/cogniplex/codemem/main/install.sh | sh

# Homebrew
brew install cogniplex/tap/codemem

# Cargo
cargo install codemem

或者从以下网址下载预构建的二进制文件 发布.

平台 架构 二进制
macOS ARM64(苹果硅) codemem-macos-arm64.tar.gz
Linux x86_64 codemem-linux-amd64.tar.gz
Linux ARM64 codemem-linux-arm64.tar.gz

初始化

cd your-project
codemem init

下载本地嵌入模型(约440MB,一次性),注册生命周期挂钩,并为您的AI助手配置MCP服务器。自动检测克劳德代码、光标和风帆。

就这样

Codemem现在可以自动捕获上下文,在会话开始时注入先验知识,并为您的助手提供32个MCP工具。

映射您的代码库(可选)

运行完整的分析管道——使用树形图对代码库进行索引,使用SCIP交叉引用(如果安装了索引器)丰富图形,计算PageRank,并检测架构集群:

codemem analyze

然后启动代码映射器代理进行深入的、代理驱动的分析——它产生了一个专门的代理团队,可以遍历知识图、发现模式并存储架构见解:

claude --agent code-mapper

看 索引和丰富管道 对于引擎盖下发生的事情。

SCIP浓缩(可选,推荐)

竞争情报从业者协会 (源代码智能协议)提供codemem编译器级的交叉引用——代码库中的每个调用、导入、类型引用和重写,都没有误报。 codemem analyze 自动检测已安装的索引器并自动运行它们。

为您的语言安装索引器:

语言 索引器 安装
锈蚀 锈蚀分析仪 rustup component add rust-analyzer
TypeScript/JavaScript scip类型脚本 npm install -g @sourcegraph/scip-typescript
Python scip-Python npm install -g @sourcegraph/scip-python
去吧 go install github.com/sourcegraph/scip-go/cmd/scip-go@latest
Java/Kotlin scip-Java scip java发布
C# scip dotnet tool install --global scip-dotnet
红宝石 scip-Ruby gem install scip-ruby

Codemem从清单文件中检测语言(Cargo.toml, package.json, pyproject.toml, go.mod等等)并检查相应索引器的PATH。如果找到,SCIP边将与ast-grep模式边融合——当两个源在同一条边上一致时,它们的置信度得分相加(0.10+0.15=0.25),产生更高保真的图连接。

通过配置 ~/.codemem/config.toml:

[scip]
enabled = true                    # Master switch (default: true)
auto_detect_indexers = true       # Check PATH for available indexers
cache_index = true                # Cache .scip files between runs
cache_ttl_hours = 24              # Re-index if cache older than this
create_external_nodes = true      # Create ext: nodes for dependency symbols
store_docs_as_memories = true     # Attach hover docs as memories
hierarchical_containment = true   # Build nested containment tree
collapse_intra_class_edges = true # Fold intra-class calls into parent metadata

[scip.fan_out_limits]
module = 200     # Modules can be widely imported
class = 50       # Classes referenced moderately
function = 30    # Functions and methods less so
method = 30

# Override auto-detected indexer commands per language:
# [scip.indexers]
# rust = "rust-analyzer scip ."
# typescript = "scip-typescript index --infer-tsconfig"

没有安装SCIP索引器?没问题,codemem没有它也能正常工作。你只会得到ast-grep模式边(置信度0.10),而不是编译器级边。


所得

在你改变之前知道什么会破裂

用管子穿过差速器 codemem review 在合并之前,进行完整的爆炸半径分析——将更改的符号映射到直接和传递的依赖项、风险评分以及可能遗漏的更改。

git diff main..HEAD | codemem review --format text
Risk Score: 7.2 (high)
Changed Symbols: 3
  sym:AuthService::validate  (PageRank: 0.032)
  sym:AuthService::refresh   (PageRank: 0.018)
  sym:TokenStore::revoke     (PageRank: 0.011)
Direct Dependents: 12
Transitive Dependents: 47
Potentially Missing Changes:
  sym:SessionMiddleware::check — calls validate(), may need update

也可作为 review_diff MCP工具,供助手使用。

穿越时空

每个提交都会成为图中的一个节点。询问发生了什么变化,何时发生,以及发生了什么漂移:

# "What changed in the last two weeks?"
# → MCP tool: what_changed(from, to)

# "Show me the graph as it was on March 1st"
# → MCP tool: graph_at_time(at)

# "Which high-centrality files haven't been touched in 90 days?"
# → MCP tool: find_stale_files(stale_days=90)

# "Detect architectural drift between Q1 and Q2"
# → MCP tool: detect_drift(from, to)

# "What's the commit history for this function?"
# → MCP tool: symbol_history(node_id)

5个临时MCP工具为您的助手提供了跨代码库的全时旅行能力,包括图形快照、过时文件检测和架构漂移分析。

跨会话智能

你的助手会从中断的地方继续。决策、模式和见解在9个组成部分混合评分的会话中持续存在:

组件 重量 测量内容
向量相似度 25% 与查询的语义接近度
图强度 20% PageRank+介数+度+聚类加成
BM25标记重叠 15% 与代码感知标记器进行关键字匹配
范围上下文 10% 分行/回购/用户意识
时态 10% 与查询上下文的时态对齐
重要性 10% 存储的重要性得分
置信度 10% 边缘置信度和来源可靠性
标签匹配 5% 查询派生标签与内存标签
时效性 5% 最近访问的内存提升

重量可通过以下方式配置 codemem config set scoring.<key> <value>.

跨服务API检测

Codemem解析OpenAPI/Swagger规范、AsyncAPI规范,并检测事件驱动模式(Kafka、RabbitMQ、Redis、SQS、SNS、NATS)以构建跨服务边缘:

  • HttpCalls --服务之间的REST调用
  • PublishesTo --事件发布关系
  • SubscribesTo --事件订阅关系

过期的记忆

会话范围的内存和过时的富集会自动过期。在任何内存上设置TTL:

{
  "name": "store_memory",
  "arguments": {
    "content": "Temporary note: API key rotates Friday",
    "ttl_hours": 72
  }
}

在中配置默认值 ~/.codemem/config.toml:

[memory]
default_session_ttl_hours = 168          # 7 days for session memories
expire_enrichments_on_reindex = true     # Auto-expire stale analysis

可插拔的一切

嵌入提供者 --完全离线运行或使用任何API:

# Local (default, no API key needed)
export CODEMEM_EMBED_PROVIDER=candle

# Ollama (local server)
export CODEMEM_EMBED_PROVIDER=ollama

# OpenAI-compatible (Voyage AI, Together, Azure, etc.)
export CODEMEM_EMBED_PROVIDER=openai
export CODEMEM_EMBED_URL=https://api.voyageai.com/v1
export CODEMEM_EMBED_MODEL=voyage-3
export CODEMEM_EMBED_API_KEY=pa-...

# Google Gemini
export CODEMEM_EMBED_PROVIDER=gemini
export CODEMEM_EMBED_API_KEY=AIza...

与Ollama一起跑步(例如。 nomic-embed-text 或 mxbai-embed-large)比内置的Candle模型快得多,同时仍然保持一切本地化。

可配置的模型、精度和批量:

[embedding]
provider = "candle"
model = "BAAI/bge-base-en-v1.5"    # Any HuggingFace BERT model
dtype = "f16"                       # f32, f16, bf16 — half precision halves memory
batch_size = 16                     # Tune for GPU memory / throughput
dimensions = 768                    # Auto-detected for Candle
cache_capacity = 10000              # LRU embedding cache

存储后端 --当前为SQLite(本地),具备Postgres+pgvector和远程图后端的trait对象抽象:

[storage]
backend = "sqlite"       # or "postgres" (future)

[vector]
backend = "hnsw"         # or "pgvector", "qdrant" (future)

[graph]
backend = "inmemory"     # or "neo4j", "postgres" (future)

主要特点

  • 图向量混合架构 --HNSW向量搜索(768 dim)+图谱知识图(PageRank、Louvain社区检测、介数中心性、BFS/DFS、SCC、拓扑排序等)
  • 时间图层 --将提交和PR作为图节点、Modified By边、, valid_from/valid_to 所有节点上的时间戳。5个时态查询工具:what_changed、graph_at_time、find_stale_files、detect_drift、symbol_history
  • 差异感知代码审查 --将更改后的线条映射为图形符号,使用风险评分、表面相关记忆和潜在的缺失变化计算多跳爆炸半径。可用作CLI(codemem review)MCP工具(review_diff)
  • 范围上下文 --Repo/branch/用户感知内存作用域。特征分支与基础分支的叠加分辨率。标记为的内存和图形数据 repo 和 git_ref 用于团队就绪过滤
  • SCIP集成 --编译器级交叉引用 竞争情报从业者协会 索引器(锈分析器、scip typescript、scip-python、scip-go、scip-java等)。使用ast-grep进行多层边缘融合:当两个来源一致时,置信度得分相加。自动检测已安装的索引器,缓存结果,并在重新索引时清理过时的节点
  • 跨服务API检测 --解析OpenAPI/Swagger、AsyncAPI规范和事件框架(Kafka、RabbitMQ、Redis、SQS、SNS、NATS)。在服务之间创建HttpCalls、PublishesTo、SubscribeTo边
  • 32个MCP工具 --内存CRUD、自编辑(精化/拆分/合并)、图遍历、代码搜索、时态查询、差异审查、整合、影响分析、会话上下文、JSON-RPC上的模式检测
  • 9个生命周期挂钩 --自动上下文注入(SessionStart)、提示捕获(UserPromptSubmit)、观察捕获(PostToolUse)、错误跟踪(PostToolUseFailure)、会话摘要(Stop)、子代理捕获(SubagentStart/Stop)、清除关闭(SessionEnd)和预压缩检查点(PreCompact)
  • 9组分混合评分 --向量相似性、图强度、BM25标记重叠、范围上下文、时间对齐、标签匹配、重要性、置信度和新近度
  • 内存过期 --可选TTL内存,具有机会清理功能。会话记忆自动过期(可配置)。文件重新索引时过期的内容丰富
  • 代码感知索引 --使用清单解析(Cargo.toml、package.json、Go.mod、pyproject.toml)对14种语言(Rust、Types/JS/JSX、Python、Go、C/C++、Java、Ruby、C#、Kotlin、Swift、PHP、Scala、HCL/Terraform)进行树型结构提取
  • 上下文嵌入 --嵌入前丰富元数据和图形上下文,以提高召回率
  • 可插拔嵌入件 --Candle(本地BERT,默认)、Ollama、OpenAI兼容API或Google Gemini。可配置的模型、数据类型(f32/f16/bf16)和批量
  • 跨会话情报 --模式检测、文件热点跟踪、决策链和会话连续性
  • 记忆巩固 --5个受神经科学启发的循环:衰变(幂律)、创造性/REM(语义KNN)、聚类(余弦+联合发现)、总结(LLM驱动)、遗忘
  • 自编辑存储器 --通过时间图边缘进行完全来源跟踪,优化、分割和合并内存
  • 可插拔存储后端 --向量(VectorBackend)、图(GraphBackend)和存储(StorageBackend)的特征对象抽象。SQLite+usearch+petgraph今天,准备好用于Postgres+pgvector+Neo4j
  • 运营指标 --每个工具的延迟百分比(p50/p95/p99)、调用计数器和仪表 codemem_status 工具
  • 实时文件查看 --基于通知的监视器,具有<50ms的去抖动和.gitignore支持
  • 持久配置 --基于TOML的配置 ~/.codemem/config.toml
  • 生产硬化 --零 .unwrap() 在生产代码中,安全并发,版本化模式迁移

基准测试

尽管codemem是为代码探索内存(不是通用的会话回忆)而设计的,但它在标准内存基准测试中具有竞争力:

基准 得分 备注
机车移动 (ACL 2024) 91.64% 与90.53%的已发布SOTA相比——更严格的条件:召回限制10,无证据预言,无嵌入回退
长记忆评估 (ICLR 2025) 70% vs 71.2%的Zep,82.4%的oracle——召回限制10,GPT-4o判断

这两个基准都使用比已发布的基准更严格的条件:召回限制为10(vs 50-100),没有证据预言,没有嵌入回退。两者都是用OpenAI text-embedding-3-small运行的。使用内置的局部BERT模型(BAAI/bge-base-en-v1.5),LoCoMo的得分为89.58%——这是一个约2%的差距,图扩展完全闭合(在codemem图模式下,两种模型的得分均为91.49%)。在不进行任何架构更改的情况下,通过更好的嵌入模型可以获得更高的分数。

看 长凳/机车/ 和 长凳/长帐篷/ 方法论、复制步骤和详细分解。

运作原理

graph LR
    A[AI Assistant] -->|SessionStart hook| B[codemem mcp context]
    A -->|PostToolUse hooks| C[codemem mcp ingest]
    A -->|Stop hook| E[codemem mcp summarize]
    A -->|MCP tools| D[codemem mcp serve]
    B -->|Inject context| A
    C --> F[Storage + Vector + Graph]
    D --> F
    F -->|Recall| A
  1. 被动捕捉 你的人工智能通过9个生命周期钩子读取、搜索和编辑什么
  2. 积极回忆 通过9分量混合评分的MCP工具获取相关上下文
  3. 注入上下文 在会话开始时,让你的助手从中断的地方继续
  4. 评论差异 用于合并前的爆炸半径,具有风险评分和缺失变化检测功能
  5. 追踪时间 --每个提交都变成了一个图节点,实现了时间查询和漂移检测

MCP工具

按类别组织的32种工具。看 MCP工具参考 获取完整的API文档。

类别 工具
内存CRUD(7) store_memory, recall, delete_memory, associate_memories, refine_memory, split_memory, merge_memories
图形与结构(9) graph_traverse, summary_tree, codemem_status, search_code, get_symbol_info, get_symbol_graph, find_important_nodes, find_related_groups, get_cross_repo
节点分析(2) get_node_memories, node_coverage
整合与模式(3) consolidate, detect_patterns, get_decision_chain
命名空间(3) list_namespaces, namespace_stats, delete_namespace
会话和上下文(2) session_checkpoint, session_context
代码审查(1) review_diff
时态查询(5) what_changed, graph_at_time, find_stale_files, detect_drift, symbol_history

命令行界面

codemem init          # Initialize project (model + hooks + MCP)
codemem search        # Search memories
codemem stats         # Database statistics
codemem ui            # Open control plane UI (REST API + embedded React frontend)
codemem analyze       # Full pipeline: index + SCIP + enrich + PageRank + clusters
codemem review        # Diff-aware blast radius analysis (reads diff from stdin)
codemem consolidate   # Run consolidation cycles
codemem export/import # Backup and restore (JSONL, JSON, CSV, Markdown)
codemem sessions      # Session management (list, start, end)
codemem doctor        # Health checks on installation
codemem config        # Get/set configuration values
codemem migrate       # Run pending schema migrations
codemem mcp serve     # Start MCP server (JSON-RPC stdio, or --http for HTTP)
codemem mcp ingest    # Process hook payload from stdin
codemem mcp context   # SessionStart hook (+ 7 more lifecycle hooks)

看 CLI 参考 完全使用。

配置

观察压迫

在存储之前,可以选择通过LLM压缩原始工具观测值:

export CODEMEM_COMPRESS_PROVIDER=ollama   # or openai, anthropic

持久配置

评分权重、向量/图调整、嵌入提供程序、内存过期和存储设置将保留在 ~/.codemem/config.toml部分配置与默认值合并。

演出

操作 目标
HNSW搜索k=10(100K向量) <2ms
嵌入(单句) <50ms
嵌入(缓存命中) <0.01ms
图形BFS深度=2 <1ms
钩摄取(读取) <200ms

文档

  • 建筑 --系统设计、数据流图、存储模式
  • 索引和丰富管道 --从源文件到带注释图形的逐步数据流
  • MCP工具参考 --所有32个带有参数和示例的工具
  • CLI 参考 --所有带有标志和示例的CLI命令
  • 比较 --vs Mem0、Zep/Graphiti、Letta、claude mem等

从源头构建

git clone https://github.com/cogniplex/codemem.git
cd codemem
cargo build --release          # Optimized binary at target/release/codemem
cargo test --workspace         # Run all tests
cargo bench                    # Criterion benchmarks

6箱货物工作区。看 贡献.md 发展指南。

研究与启示

Codemem基于几篇研究论文、博客文章和开源项目的想法。

Papers
论文 地点 主要贡献
HippoRAG NeurIPS 2024 使用LLMs+知识图+个性化PageRank的神经生物学启发的长期记忆。多跳QA提高了20%
从RAG到记忆 ICML 2025 LLM的非参数连续学习(HippoRAG 2)。联想记忆任务提高7%。
A-MEM 2025 Zettelkasten通过动态索引、链接和记忆进化激发了主体记忆。
MemGPT ICLR 2024 受操作系统启发的LLM分层内存层——通过函数调用的自编辑内存。
旋律 谷歌DeepMind 2024 分层短期+长期记忆压缩。内存占用减少8倍。
ReadAgent 谷歌DeepMind 2024 人类启发的阅读代理,具有20倍上下文扩展的情节要点记忆。
机车移动 ACL 2024 评估非常长期会话记忆(300回合,9K令牌会话)的基准。
Mem0 2025 具有可扩展长期内存的生产就绪AI代理。与OpenAI Memory相比,准确率提高了26%。
泽普 2025 基于双时态数据模型的代理内存时态知识图架构。
人工智能时代的记忆 2024年调查 智能体记忆的综合分类:事实记忆、经验记忆、工作记忆。
AriGraph 2024 LLM代理探索知识图中的情景+语义记忆。
Blog posts and techniques
  • 上下文检索 (Anthropic,2024)-在嵌入之前预先挂起特定于块的上下文,可以将失败的检索减少49%。Codemem将其作为基于模板的上下文丰富,使用元数据+图关系。
  • 上下文嵌入食谱 (Anthropic)——带有提示缓存的上下文嵌入实现指南。
Open-source projects
  • 自动Mem --图向量混合存储器在LoCoMo上实现了90.53%。直接启发Codemem的混合评分和整合周期。
  • 克劳德·梅 --通过Claude Agent SDK实现持久内存压缩。灵感来自生命周期挂钩和观察压缩。
  • Mem0 --AI的生产存储层(47K+星)。知情存储器类型设计。
  • Zep/Graphiti --时态知识图引擎。启发图持久性模型。
  • 莱塔 (MemGPT)——具有自编辑记忆的有状态AI代理。
  • 标志 --通过三元组提取实现知识图记忆。
  • 克劳德语境 --通过MCP进行AST感知代码搜索(由Zilliz提供)。

看 docs/comparison.md 以进行详细的功能比较。

许可证

Apache 2.0