跳转至

Memory & Workspace

Agentica 提供两层记忆系统:运行时记忆(WorkingMemory)持久化记忆(Workspace)

运行时记忆:WorkingMemory

管理当前会话的消息历史,支持 token 感知的截断。

from agentica import Agent

agent = Agent(
    add_history_to_messages=True,   # 将历史加入上下文
    history_window=5,               # 保留最近 5 轮
)

会话摘要

WorkingMemory 支持自动生成会话摘要,在多轮对话后保留关键信息:

from agentica.memory import WorkingMemory

agent = Agent(
    working_memory=WorkingMemory(
        create_session_summary=True,            # 每轮结束后生成摘要
        update_session_summary_after_run=True,  # 自动更新
        max_messages=200,                       # 消息软上限(FIFO 淘汰)
    ),
)

会话摘要会注入到 System Prompt 末尾,同时被 CompressionManager.auto_compact() 直接复用——压缩时无需额外 LLM 调用。


持久化记忆:Workspace

基于文件的持久化记忆,存储跨会话的用户偏好、项目上下文和反馈记录:

workspace/
+-- AGENTS.md         # Agent 全局指令(共享)
+-- PERSONA.md       # Agent 人格设定(共享)
+-- TOOLS.md         # 工具使用说明(共享)
+-- users/
    +-- {user_id}/   # 多用户隔离
        +-- USER.md          # 用户个人信息
        +-- MEMORY.md        # 记忆索引(仅存条目链接,≤200行/25KB)
        +-- memory/          # 记忆内容文件(每条独立 .md)
            +-- feedback_python_style.md
            +-- project_deadline.md
            +-- user_background.md
        +-- conversations/   # 对话归档
            +-- 2026-04-01.md

基本用法

from agentica import Agent, Workspace

agent = Agent(
    workspace=Workspace(path="./my_workspace", user_id="alice"),
)

记忆写入:write_memory_entry()

推荐使用 write_memory_entry() 写入带类型的记忆条目。每条记忆写入独立文件,并自动更新 MEMORY.md 索引。

workspace = Workspace("./workspace")
workspace.initialize()

# 写入用户偏好
await workspace.write_memory_entry(
    title="Python Style",
    content="User prefers concise, typed Python. Avoid unnecessary comments.",
    memory_type="feedback",           # user | feedback | project | reference
    description="python coding style typed concise",  # 相关性匹配关键词
    sync_to_global_agent_md=True,     # 可选:同步到 ~/.agentica/AGENTS.md
)

# 写入项目上下文
await workspace.write_memory_entry(
    title="Release Deadline",
    content="v2.0 release is due end of April 2026.",
    memory_type="project",
    description="v2 release deadline april 2026",
)

每条记忆文件带 YAML frontmatter:

---
name: Python Style
description: python coding style typed concise
type: feedback
---

User prefers concise, typed Python. Avoid unnecessary comments.

四类型分类法

类型 存储内容 典型触发
user 用户角色、偏好、技术背景 "我是数据科学家"、"我用 Python 10 年了"
feedback 对 AI 行为的纠正和确认 "别 mock 数据库"、"这个方案很好"
project 非代码可推导的项目上下文 "合并冻结从周四开始"、"这是合规要求"
reference 外部系统指针 "pipeline bugs 在 Linear INGEST 项目"

feedback 类型同时记录失败("不要这样做")和成功("对,就这样")——只记录纠错会导致 AI 行为随时间漂移。


全局偏好同步:~/.agentica/AGENTS.md

learn-from-experience 这类学习型 workflow 的一个关键优点,是把“已经确认、值得长期保留的偏好”编译进每个新 session 都会加载的全局 steering 文件。Agentica 现在也支持这条轻量链路。

同步方式有两层:

  1. 单次写入时显式同步:
await workspace.write_memory_entry(
    title="Python Style",
    content="Prefer concise, typed Python. Avoid unnecessary getattr.",
    memory_type="feedback",
    description="python style concise typed",
    sync_to_global_agent_md=True,
)
  1. Agent 运行时默认开启同步:
from agentica import DeepAgent, Workspace
from agentica.agent.config import WorkspaceMemoryConfig

agent = DeepAgent(
    workspace=Workspace("./workspace"),
    long_term_memory_config=WorkspaceMemoryConfig(
        sync_memories_to_global_agent_md=True,
    ),
)

行为说明: - 只同步 userfeedback 类型 - 同步目标是 ~/.agentica/AGENTS.md## Learned Preferences 区块 - 这个区块是编译产物,应编辑原始 memory entry,而不是直接改同步块 - Workspace.get_context_prompt() 会自动加载全局 AGENTS.md,所以下一个 session 会自然继承这些偏好

这不是完整的 HOT/WARM/COLD 分层系统,而是一个更轻量、对现有框架更友好的落地方式。


记忆召回:get_relevant_memories()

记忆注入采用相关性召回,而非全量 dump。

# 根据当前 query 返回最相关的 ≤5 条记忆
memory = await workspace.get_relevant_memories(
    query="how should I write python code",
    limit=5,
    already_surfaced=set(),   # 去重:本 session 已展示过的文件名
)

召回机制: 1. 解析 MEMORY.md 索引,获取所有条目的 title + description hook 2. 用 混合关键词 scoring(word-level + character 2-gram)对每条打分,支持中英文 3. 只加载 top-k 个文件内容,拼接后注入 system prompt 4. 自动 strip frontmatter,追加 drift-defense 提示

MEMORY.md 的大小有硬限制(200 行 / 25KB),超出时 FIFO 淘汰最旧条目,防止无限增长。

Agent 自动召回

Agent 使用 workspace 时,每次 run() 会自动以当前 query 为输入执行记忆召回:

from agentica import Agent, Workspace
from agentica.agent.config import WorkspaceMemoryConfig

agent = Agent(
    workspace=Workspace("./workspace"),
    long_term_memory_config=WorkspaceMemoryConfig(
        load_workspace_memory=True,
        max_memory_entries=5,   # 最多注入 5 条相关记忆
    ),
)

_surfaced_memories 跨 turn 追踪已展示的记忆文件,避免同一 session 内重复注入相同条目。


记忆漂移防御

记忆注入时自动追加一条提示,防止过时引用造成幻觉:

Note: memories reflect the state at write time. If a memory references a specific
file path, function, or flag, verify it still exists before recommending it.

Git 上下文注入

Workspace 支持自动注入 Git 状态到 System Prompt:

agent = Agent(
    workspace=Workspace(path="./my_project"),
)
# System Prompt 将包含:
# - Git branch: main
# - Uncommitted changes: M file1.py, A file2.py
# - Recent commits: abc1234 feat: add new feature

Workspace.get_git_context() 获取分支名、未提交变更、最近 3 条 commit。


对话归档

使用 ConversationArchiveHooks 自动将对话归档到每日日志文件:

from agentica import Agent, Workspace
from agentica.agent.config import WorkspaceMemoryConfig

agent = Agent(
    workspace=Workspace("./workspace"),
    long_term_memory_config=WorkspaceMemoryConfig(auto_archive=True),
)

归档写入 users/{user_id}/conversations/YYYY-MM-DD.md,使用 per-file asyncio.Lock 防止并发写冲突。


Session Log(JSONL)

基于追加写 JSONL 的会话日志,支持会话恢复和 fork:

from agentica import Agent

agent = Agent(session_id="my-session-001")
# 消息自动写入 .sessions/my-session-001.jsonl
# 下次以相同 session_id 创建 Agent 时自动恢复会话

支持 compact_boundary(压缩边界):恢复时从最后一个边界之后开始加载,跳过历史数据。


WorkspaceConfig

可自定义文件布局:

from agentica.workspace import Workspace, WorkspaceConfig

config = WorkspaceConfig(
    agent_md="AGENTS.md",
    persona_md="PERSONA.md",
    tools_md="TOOLS.md",
    user_md="USER.md",
    memory_md="MEMORY.md",      # 记忆索引文件
    memory_dir="memory",         # 记忆内容文件目录
    users_dir="users",
    conversations_dir="conversations",
)

workspace = Workspace(path="./workspace", config=config)

下一步