Skip to content

nemori-ai/nemori-reason-over-memory-tool

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

1 Commit
 
 

Repository files navigation

Nemori Reason-Over-Memory-Tool

From facts to meaning, in context.
Part of Nemori-AI, exploring memory as the foundation of agent cognition.


引言:事实不会自己说话

在传统 Memory Injection 模式下,工具只把“原始事实”交给模型:

  • 用户是四川人
  • 用户上周胃疼

然而,事实本身并不包含答案
同一个事实,在不同场景中会指向不同的含义:

  • “四川人” → 在饮食问题里可能意味着偏好重辣; 在文化活动里,可能意味着节日习俗、地域方言; 在会议安排时,则可能不代表任何信息
  • “胃疼” → 在饮食场景中意味着需要清淡; 在日程安排里,则可能意味着避免早起或高强度活动。

ReasonOverMemory 的目标,就是把这种“事实在语境中的意义”提前推理出来:

  • 不仅记住事实,还要在当前语境下解释它们;
  • 输出的不是片段,而是行动就绪的指导
  • 让 Agent 拿到的是“事实在此刻意味着什么”,而不是一堆死信息。

哲学上的差别在于:

  • Memory Injection:事实是死的,语境推理是隐性的。
  • ReasonOverMemory:事实在场景中被点亮,含义被外显为可执行的指导。

换句话说,我们要交给 Agent 的,不是事实的静态快照,而是事实在此时此地的意义

对比图

Memory Injection

flowchart TD
  A[User Request<br/>教我如何做辛拉面] --> B[Agent]
  B --> C[[ToolCall: SearchMemory<br/>inputs: query, context]]
  subgraph Tool: Memory Store
    C --> D[(Retrieve facts)]
    D --> E{{ToolResponse:<br/>用户是四川人<br/>上周胃疼}}
  end
  E --> F[[LLM Reasoning inside Agent<br/>组合记忆 + 语境推理]]
  F --> G[Agent Output<br/>先确认身体情况,再给做法]
  classDef tool fill:#f7f7f7,stroke:#bbb,stroke-width:1px,color:#333
  class C,D,E tool
Loading

ReasonOverMemory

flowchart TD
  A[User Request<br/>教我如何做辛拉面] --> B[Agent]
  B --> C[[ToolCall: ReasonOverMemory<br/>inputs: conversation_context, user_request]]
  subgraph Tool: ReasonOverMemory
    note1[Memory is internal/implicit]:::note
    C --> D[(Access internal user memory)]
    D --> E[[Reasoning over memory<br/>归纳 + 约束 + 优先级]]
    E --> F{{ToolResponse:<br/>偏好重辣,但上周胃疼<br/>应先确认恢复再定做法}}
  end
  F --> G[Agent Output<br/>先确认身体情况,再给做法(重辣/温和两版)]
  classDef tool fill:#f7f7f7,stroke:#bbb,stroke-width:1px,color:#333
  classDef note fill:#fff5e6,stroke:#f0c36d,color:#7a5b00,stroke-dasharray:3 3
  class C,D,E,F tool
  class note1 note
Loading

API 设计

记忆(用户画像、长期事实等)不作为参数传入,而是系统内部隐式注入。 外部调用只需要两类输入:

  • conversation_context:总结过的对话上下文
  • user_request:当前用户请求

函数签名

ReasonOverMemory({
  conversation_context: string,
  user_request: string
}) => {
  reasoning: string,   // 面向 Agent 的思考文字
  guidance: {
    ask_user_first?: boolean,
    cautions?: string[],
    personalization?: string[],
    next_steps?: string[]
  },
  trace?: {
    memory_keys?: string[],
    confidence?: number
  }
}

示例

输入

{
  "conversation_context": "用户前几轮对话未涉及饮食",
  "user_request": "教我如何做辛拉面"
}

(系统内部注入记忆:四川人,偏好重辣;上周胃疼)

ToolResponse

{
  "reasoning": "用户平常偏好重辣,但上周胃疼。应先确认身体恢复,再决定做法。",
  "guidance": {
    "ask_user_first": true,
    "cautions": ["避免空腹重辣", "减少辣油"],
    "personalization": ["提供重辣/温和两版"],
    "next_steps": ["询问用户恢复情况"]
  },
  "trace": {
    "memory_keys": ["profile.region=四川", "health.last_week=胃不适"],
    "confidence": 0.78
  }
}

Agent 最终回复

辛拉面的辣度可以调整。
不过您上周提过胃部不太舒服,现在恢复得怎么样?
如果好了,我给您重辣版;如果还在恢复中,我提供温和版做法。

总结

  • Memory Injection:提供的是静态事实,推理隐含在模型内部
  • ReasonOverMemory:提供的是在场景中被解释过的含义,推理结果外显 这带来几个直接价值:
    • 更短链路:减少误差叠加
    • 可审计性:推理链路清晰可见
    • 可复用性:不同任务可以共享“推理后的指导信息”
    • 可对齐性:合规与策略可以在工具层直接控制

About

Reason over memory to produce contextual guidance — a Nemori-AI subproject on memory.

Topics

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published