Body

**GitHub:** https://github.com/kajaha06251020/Engram-AI
**PyPI:** https://pypi.org/project/engram-forge/

什么它做

Engram-AI 给 AI 代理记忆,捕捉到 原因性,而不仅仅是事实。

# 替代的形式
Experience(
    action  = "Used list comprehension for 10k-row CSV transform",
    context = "Data processing pipeline",
    outcome = "Fast and readable — user approved",
    valence = 0.9,
)

# 从积累的经验中形成模式:
forge.crystallize()
# → Skill("Prefer list comprehensions for data transforms", confidence=0.87)

然后将这些模式 崛起 到可复用的技能:

# 反映到代理配置文件(例如 CLAUDE.md 和 AGENTS.md)
forge.evolve("./CLAUDE.md")
# 生成一个 <span style="background-color: #ffff00;"> !-- engram-forge:start --></span> 块

安装

pip install engram-forge                  # 核心,不需要API密钥
pip install "engram-forge[claude]"         # + Anthropic LLM
pip install "engram-forge[mcp]"            # + MCP服务器为Claude代码
pip install "engram-forge[full]"           #everything

快速示例

from engram_ai import Forge

forge = Forge(storage_path="./agent-memory")

# 记录经验
forge.record(
    action="Used f-strings for formatting",
    context="Writing Python utility script",
    outcome="Reviewer approved — clean and readable",
    valence=0.9,
)
forge.record(
    action="Used % formatting",
    context="Writing Python utility script",
    outcome="Reviewer asked to rewrite with f-strings",
    valence=-0.6,
)

# 查询,返回分区结果
result = forge.query("string formatting in Python")
print(result["best"]   # → 正面经验
print(result["avoid"]  # → 负面经验

# 直接教导一个规则(无需经验)
forge.teach(
    rule="Always use parameterized queries for SQL",
    context_pattern="database operations",
    skill_type="anti",
    confidence=1.0,
)

# 对于一个风险行为发出警告
warnings = forge.warn("Run DELETE query", "database maintenance")

# 形成模式,产生可复用的技能
skills = forge.crystallize(min_experiences=3, min_confidence=0.7)

# 写入代理配置文件
forge.evolve("./CLAUDE.md")

多项目支持

from engram_ai import ProjectManager
from pathlib import Path

pm = ProjectManager(base_path=Path("~/.engram-ai/data"))
frontend = pm.get_forge("myapp/frontend")
backend  = pm.get_forge("myapp/backend")

扩展点

from engram_ai.llm.base import BaseLLM
from engram_ai.storage import BaseStorage

class MyLLM(BaseLLM):
    def generate(self, prompt: str) -> str:
        return my_model.complete(prompt)

forge = Forge(llm=MyLLM())

技术: Python 3.10+,ChromaDB,Pydantic v2,Click,pytest,ruff

许可: Apache 2.0

我正在寻找对 API 设计的反馈,特别是对 crystallize()/evolve() 的拆分以及关于 valence 模型是否适合不同的用例的反馈。


Flair

Intermediate Showcase