muscle-mem

GitHub
756 41 非常简单 1 次阅读 昨天Apache-2.0Agent开发框架
AI 解读 由 AI 自动生成,仅供参考

muscle-mem 是一款专为 AI 智能体设计的 Python SDK,旨在通过“行为缓存”机制让智能体学会并复现复杂的任务操作。它核心解决了大语言模型在处理重复性任务时响应慢、输出不稳定以及 Token 成本高昂的痛点。当智能体首次成功解决某个任务后,muscle-mem 会记录其工具调用的完整轨迹;再次遇到相同任务时,系统将直接回放已验证的操作序列,仅在检测到环境变化或边缘情况时才重新调用大模型进行推理。

这款工具特别适合正在构建自动化工作流或 AI 智能体的开发者使用。其独特之处在于并非替代现有的智能体框架,而是作为一个轻量级引擎无缝嵌入现有架构中。开发者只需通过简单的装饰器(如 @engine.function)对工具函数进行标注,即可实现自动记录与回放。此外,muscle-mem 提供了灵活的标签系统和环境检查机制,确保缓存复用的安全性与准确性。通过将“本可以用脚本解决”的场景从大模型调用路径中剥离,muscle-mem 能显著提升系统执行速度,降低运行成本,同时保持处理复杂新任务时的灵活性。

使用场景

某电商公司的自动化运维团队利用 AI Agent 每日处理数百起“用户订单状态异常”的客诉,需调用数据库查询、日志检索及退款接口进行标准化修复。

没有 muscle-mem 时

  • 响应延迟高:每个重复案例都需完整经过大模型推理链路,平均处理耗时从秒级拉长至分钟级,无法应对突发流量。
  • 运行成本昂贵:大量本可脚本化解决的简单任务反复消耗昂贵的 Token 额度,造成不必要的算力浪费。
  • 执行结果不稳定:大模型在面对相同报错时,偶尔会产生幻觉或生成非标准化的工具调用参数,导致修复失败率波动。
  • 调试困难:由于每次执行路径由模型动态生成,难以复现特定的错误现场,排查问题如同“开盲盒”。

使用 muscle-mem 后

  • 极速响应:muscle-mem 首次学习成功后,后续相同场景直接回放缓存的执行轨迹,将处理时间压缩回毫秒级脚本速度。
  • 大幅降本:对于命中缓存的常规任务,完全绕过 LLM 推理环节,消除了绝大部分重复性任务的 Token 开销。
  • 确定性执行:通过严格回放已验证的工具调用序列,确保每次操作参数精准一致,彻底消除了模型行为变异带来的风险。
  • 智能降级机制:遇到未见过的新颖边缘案例时,系统自动切换回 Agent 模式让大模型介入处理,并自动记录新轨迹入库,兼顾灵活性与稳定性。

muscle-mem 的核心价值在于将 AI 代理从重复劳动中解放出来,让大模型仅专注于真正的未知难题,而将成熟流程转化为确定性的低成本脚本。

运行环境要求

GPU

未说明

内存

未说明

依赖
notes该工具是一个纯 Python SDK,用于缓存 AI 代理的工具调用模式,不涉及大型模型推理,因此对 GPU 和内存无特殊高要求。安装方式为 pip install muscle-mem。API 处于 v0 阶段,建议在生产环境中锁定具体版本。工具通过装饰器(@engine.function, @engine.method)进行插桩,支持通过 Check 机制进行缓存验证以及通过 params 参数处理动态变量。
python未说明
muscle-mem
muscle-mem hero image

快速开始

肌肉记忆

muscle-mem 是一个用于 AI 代理的行为缓存。

它是一个 Python SDK,能够在代理解决任务的过程中记录其工具调用模式,并在再次遇到相同任务时确定性地重放这些已学习的轨迹;如果检测到边缘情况,则会回退到代理模式。

muscle-mem 的目标是让大型语言模型从重复性任务的热路径中脱离出来,从而提高速度、减少波动性,并为那些“本来只需一段脚本就能完成”的场景节省 token 成本。

这仍是一个尚未被充分探索的领域,因此我们非常欢迎任何反馈!

开发日志

  • 2025年5月7日 - 首次可用演示
  • 2025年5月8日 - 开源发布
  • 2025年6月1日 - 参数化与标签功能合并


工作原理

muscle-mem 并非另一个代理框架。

您可以按照自己习惯的方式实现代理,然后将其接入 muscle-mem 的引擎。

当接收到一项任务时,引擎将执行以下步骤:

  1. 使用检查机制判断当前环境是否曾出现过(缓存命中),或是否为新环境(缓存未命中);
  2. 执行任务,具体方式如下:
    • 缓存命中时,使用检索到的轨迹;
    • 缓存未命中时,将任务交由您的代理处理。
  3. 收集工具调用事件,作为新的轨迹添加到缓存中。

关键在于缓存验证

要为您的代理引入安全的工具复用功能,最关键的问题就是缓存验证。您需要自问:

对于我们赋予代理的每一种工具,在当前环境中有哪些特征可以用来判断执行该操作是否安全?

如果您能够回答这个问题,那么您的代理就可以具备肌肉记忆功能。

API 说明

安装

pip install muscle-mem

Muscle Mem 的 API 当前处于 v0 版本,且会在小版本更新时发生破坏性变更,因此我们强烈建议在生产环境中固定使用某一特定版本。

引擎

引擎包装您的代理,充当任务的主要执行者。

它管理着自己的历史轨迹缓存,并决定何时调用您的代理。

from muscle_mem import Engine

engine = Engine()
engine.set_agent(your_agent).finalize()

# 您的代理可以直接调用
your_agent("do some task")

# 引擎提供相同的接口,但具备肌肉记忆功能
engine("do some task")
engine("do some task") # 缓存命中

假设您的代理可以通过函数形式或 __call__ 方法进行调用。传递给 engine() 的所有位置参数和关键字参数都会直接传递给您的代理。我们的示例中使用了字符串,但也可以是 ChatCompletion 消息列表,或者您的代理可调用方法所期望的任何内容。

默认情况下,轨迹会被存储在一个统一的缓存中。您可以通过为轨迹添加描述性的标签来创建不同的存储桶。

engine("do some task", tags=["some task"]) # 缓存未命中
engine("do some task", tags=["some task"]) # 缓存命中

engine("do some task", tags=["different task"]) # 缓存未命中
engine("do some task", tags=["different task"]) # 缓存命中

工具插桩

通过装饰器对执行动作的工具进行插桩,以便引擎能够在代理执行操作时记录这些动作。

函数

使用 @engine.function 装饰器为简单的函数工具进行插桩:

from muscle_mem import Engine

engine = Engine()

@engine.function()
def hello(name: str):
    print(f"hello {name}!")
    
hello("world") # 调用 hello 被记录下来,参数 name="world"

方法

使用 @engine.method 装饰器为对象上的方法进行插桩。

这允许通过 self 参数注入有状态的 API 客户端,例如 self.db.get_user(id)self.model.generate(prompt)

from muscle_mem import Engine

engine = Engine()

class SomeClient:
   @engine.method()
   def hello(self, name: str):
       print(f"hello {name}!")

client = SomeClient()

client.hello("world") # 调用 SomeClient.hello 被记录下来,参数 name="world"

需要注意的是,由于运行时对象(self)无法序列化,因此 self 不会包含在轨迹中。

为了使引擎能够重放基于方法的工具调用,必须显式地向引擎传递一个实例对象,以重新注入 self

使用 engine.set_context() 来为引擎提供运行时对象。

engine = (
    engine
    .set_agent(your_agent)
    .set_context(client) # 您的 client 对象会被注入为 self,用于调用 SomeClient.hello
    .finalize()
)
engine("say hello world!")

engine.finalize() 是一个可选检查,用于确保您在使用引擎之前已提供了所有依赖项。

检查机制

检查机制是缓存验证的基本构建模块。它们决定了执行某项操作是否安全。

每个检查机制封装了:

  • 一个 capture 回调函数,用于从当前环境中提取相关特征;
  • 一个 compare 回调函数,用于判断当前环境是否与缓存中的环境匹配。
Check(
    capture: Callable[P, T],
    compare: Callable[[T, T], Union[bool, float]],
):

您可以将检查机制附加到每个工具上(使用 @engine.function@engine.method),以强制执行缓存验证。这些检查可以在工具调用之前作为预检(也可用于查询时验证),或在工具调用之后作为后检。

下面是一个示例,它捕捉了 hello 工具的使用情况,并利用时间戳和一秒钟的过期机制作为缓存验证的检查逻辑。

# 我们的捕获实现,接收参数并返回 T
def capture(name: str) -> T:
    now = time.time()
    return T(name=name, time=now)

# 我们的比较实现,接收当前和候选的 T
def compare(current: T, candidate: T) -> bool:
    # 如果发生在最近一秒钟内,则缓存有效
    diff = current.time - candidate.time
    passed = diff <= 1
    return passed

# 为我们的工具添加预检
@engine.function(pre_check=Check(capture, compare))
def hello(name: str):
    time.sleep(0.1)
    print(f"hello {name}")

顶层参数

默认情况下,Muscle Mem 会将工具调用的所有参数存储为静态值。

但这并不总是理想的,因为某些参数可能需要根据每次运行动态变化。例如,一个填写表单的机器人可能会调用 type("John") 工具来填充“名字”字段,但在后续运行中,我们希望使用不同的名字。

为此,Muscle Mem 提供了一个顶层 params 系统,允许您指定那些需要根据每次运行动态变化的参数。

如果某个值在调用代理之前就已经在运行时确定(例如您已经将其模板化到提示词中),则可以通过 engine() 的可选 params 参数将其标记为顶层参数。

@engine.function()
def type(text: str):
    print(text)

# 第一次运行会存储对 type("John") 的调用,其中动态参数 `text` 被映射到顶级参数 `name`
engine("用名字:John 填写表单", params={"name": "John"})

# 第二次运行命中缓存,使用 Jane 代替 John
engine("用名字:Jane 填写表单", params={"name": "Jane"})

在记录轨迹时,如果任何底层工具调用中的参数与顶级参数直接匹配,引擎会将其标记为动态,并按键名将其映射到顶级参数。

当前的实现通过工具参数的精确字符串匹配来判断其是否源自顶级参数。假设所有工具参数都来自 LLM,因此都可以被序列化为字符串。

整体整合

以下是上述所有代码片段的合并脚本。

from dataclasses import dataclass
from muscle_mem import Check, Engine
import time

engine = Engine()

# 我们的“环境”特征,存储在数据库中
@dataclass
class T:
    name: str
    time: float

# 我们的捕获实现,接收参数并返回 T
def capture(name: str) -> T:
    now = time.time()
    return T(name=name, time=now)

# 我们的比较实现,接收当前和候选的 T
def compare(current: T, candidate: T) -> bool:
    # 如果发生时间在最近1秒内,则缓存有效
    diff = current.time - candidate.time
    passed = diff <= 1
    return passed

# 使用预检查装饰我们的工具
@engine.function(pre_check=Check(capture, compare))
def hello(name: str):
    time.sleep(0.1)
    print(f"hello {name}")
    
# 假设这是你的智能体
def agent(name: str):
   for i in range(9):
        hello(name + " + " + str(i))

engine.set_agent(agent).finalize()

# 第一次运行
cache_hit = engine("erik")
assert not cache_hit

# 再次运行
cache_hit = engine("erik")
assert cache_hit

# 通过睡眠打破缓存,然后再次运行
time.sleep(3)
cache_hit = engine("erik")
assert not cache_hit

如需更真实的示例,请参阅计算机使用代理的实现:

https://github.com/pig-dot-dev/muscle-mem/blob/main/examples/cua.py


行动号召

随着该系统的不断发展,诚邀大家提出反馈!

请考虑:

  1. 加入 Muscle Mem Discord 社区
  2. 测试 muscle-mem 仓库,并给它点个赞

常见问题

相似工具推荐

openclaw

OpenClaw 是一款专为个人打造的本地化 AI 助手,旨在让你在自己的设备上拥有完全可控的智能伙伴。它打破了传统 AI 助手局限于特定网页或应用的束缚,能够直接接入你日常使用的各类通讯渠道,包括微信、WhatsApp、Telegram、Discord、iMessage 等数十种平台。无论你在哪个聊天软件中发送消息,OpenClaw 都能即时响应,甚至支持在 macOS、iOS 和 Android 设备上进行语音交互,并提供实时的画布渲染功能供你操控。 这款工具主要解决了用户对数据隐私、响应速度以及“始终在线”体验的需求。通过将 AI 部署在本地,用户无需依赖云端服务即可享受快速、私密的智能辅助,真正实现了“你的数据,你做主”。其独特的技术亮点在于强大的网关架构,将控制平面与核心助手分离,确保跨平台通信的流畅性与扩展性。 OpenClaw 非常适合希望构建个性化工作流的技术爱好者、开发者,以及注重隐私保护且不愿被单一生态绑定的普通用户。只要具备基础的终端操作能力(支持 macOS、Linux 及 Windows WSL2),即可通过简单的命令行引导完成部署。如果你渴望拥有一个懂你

349.3k|★★★☆☆|4天前
Agent开发框架图像

stable-diffusion-webui

stable-diffusion-webui 是一个基于 Gradio 构建的网页版操作界面,旨在让用户能够轻松地在本地运行和使用强大的 Stable Diffusion 图像生成模型。它解决了原始模型依赖命令行、操作门槛高且功能分散的痛点,将复杂的 AI 绘图流程整合进一个直观易用的图形化平台。 无论是希望快速上手的普通创作者、需要精细控制画面细节的设计师,还是想要深入探索模型潜力的开发者与研究人员,都能从中获益。其核心亮点在于极高的功能丰富度:不仅支持文生图、图生图、局部重绘(Inpainting)和外绘(Outpainting)等基础模式,还独创了注意力机制调整、提示词矩阵、负向提示词以及“高清修复”等高级功能。此外,它内置了 GFPGAN 和 CodeFormer 等人脸修复工具,支持多种神经网络放大算法,并允许用户通过插件系统无限扩展能力。即使是显存有限的设备,stable-diffusion-webui 也提供了相应的优化选项,让高质量的 AI 艺术创作变得触手可及。

162.1k|★★★☆☆|5天前
开发框架图像Agent

everything-claude-code

everything-claude-code 是一套专为 AI 编程助手(如 Claude Code、Codex、Cursor 等)打造的高性能优化系统。它不仅仅是一组配置文件,而是一个经过长期实战打磨的完整框架,旨在解决 AI 代理在实际开发中面临的效率低下、记忆丢失、安全隐患及缺乏持续学习能力等核心痛点。 通过引入技能模块化、直觉增强、记忆持久化机制以及内置的安全扫描功能,everything-claude-code 能显著提升 AI 在复杂任务中的表现,帮助开发者构建更稳定、更智能的生产级 AI 代理。其独特的“研究优先”开发理念和针对 Token 消耗的优化策略,使得模型响应更快、成本更低,同时有效防御潜在的攻击向量。 这套工具特别适合软件开发者、AI 研究人员以及希望深度定制 AI 工作流的技术团队使用。无论您是在构建大型代码库,还是需要 AI 协助进行安全审计与自动化测试,everything-claude-code 都能提供强大的底层支持。作为一个曾荣获 Anthropic 黑客大奖的开源项目,它融合了多语言支持与丰富的实战钩子(hooks),让 AI 真正成长为懂上

148.6k|★★☆☆☆|今天
开发框架Agent语言模型

ComfyUI

ComfyUI 是一款功能强大且高度模块化的视觉 AI 引擎,专为设计和执行复杂的 Stable Diffusion 图像生成流程而打造。它摒弃了传统的代码编写模式,采用直观的节点式流程图界面,让用户通过连接不同的功能模块即可构建个性化的生成管线。 这一设计巧妙解决了高级 AI 绘图工作流配置复杂、灵活性不足的痛点。用户无需具备编程背景,也能自由组合模型、调整参数并实时预览效果,轻松实现从基础文生图到多步骤高清修复等各类复杂任务。ComfyUI 拥有极佳的兼容性,不仅支持 Windows、macOS 和 Linux 全平台,还广泛适配 NVIDIA、AMD、Intel 及苹果 Silicon 等多种硬件架构,并率先支持 SDXL、Flux、SD3 等前沿模型。 无论是希望深入探索算法潜力的研究人员和开发者,还是追求极致创作自由度的设计师与资深 AI 绘画爱好者,ComfyUI 都能提供强大的支持。其独特的模块化架构允许社区不断扩展新功能,使其成为当前最灵活、生态最丰富的开源扩散模型工具之一,帮助用户将创意高效转化为现实。

108.1k|★★☆☆☆|2天前
开发框架图像Agent

gemini-cli

gemini-cli 是一款由谷歌推出的开源 AI 命令行工具,它将强大的 Gemini 大模型能力直接集成到用户的终端环境中。对于习惯在命令行工作的开发者而言,它提供了一条从输入提示词到获取模型响应的最短路径,无需切换窗口即可享受智能辅助。 这款工具主要解决了开发过程中频繁上下文切换的痛点,让用户能在熟悉的终端界面内直接完成代码理解、生成、调试以及自动化运维任务。无论是查询大型代码库、根据草图生成应用,还是执行复杂的 Git 操作,gemini-cli 都能通过自然语言指令高效处理。 它特别适合广大软件工程师、DevOps 人员及技术研究人员使用。其核心亮点包括支持高达 100 万 token 的超长上下文窗口,具备出色的逻辑推理能力;内置 Google 搜索、文件操作及 Shell 命令执行等实用工具;更独特的是,它支持 MCP(模型上下文协议),允许用户灵活扩展自定义集成,连接如图像生成等外部能力。此外,个人谷歌账号即可享受免费的额度支持,且项目基于 Apache 2.0 协议完全开源,是提升终端工作效率的理想助手。

100.8k|★★☆☆☆|今天
插件Agent图像

markitdown

MarkItDown 是一款由微软 AutoGen 团队打造的轻量级 Python 工具,专为将各类文件高效转换为 Markdown 格式而设计。它支持 PDF、Word、Excel、PPT、图片(含 OCR)、音频(含语音转录)、HTML 乃至 YouTube 链接等多种格式的解析,能够精准提取文档中的标题、列表、表格和链接等关键结构信息。 在人工智能应用日益普及的今天,大语言模型(LLM)虽擅长处理文本,却难以直接读取复杂的二进制办公文档。MarkItDown 恰好解决了这一痛点,它将非结构化或半结构化的文件转化为模型“原生理解”且 Token 效率极高的 Markdown 格式,成为连接本地文件与 AI 分析 pipeline 的理想桥梁。此外,它还提供了 MCP(模型上下文协议)服务器,可无缝集成到 Claude Desktop 等 LLM 应用中。 这款工具特别适合开发者、数据科学家及 AI 研究人员使用,尤其是那些需要构建文档检索增强生成(RAG)系统、进行批量文本分析或希望让 AI 助手直接“阅读”本地文件的用户。虽然生成的内容也具备一定可读性,但其核心优势在于为机器

93.4k|★★☆☆☆|3天前
插件开发框架