MemoryLake
返回全部文章
Pain Point2026 年 5 月 22 日7 分钟阅读

为什么 Devin 会忘记我的编码风格?

你在上周的会话中告诉 Devin 使用函数组件、结果类型和 TanStack Query。这周的会话又回到了一个 PR 中的类组件和另一个 PR 中的 `useEffect` 数据获取。你的风格指南似乎根本不存在。

这并不是 Devin 的疏忽。这是它的持久层的作用范围所致,而有办法让风格超越任何单一会话的限制。

简短答案

Devin 忘记你的编码风格是因为每个 Devin 会话都是一个自主运行,不会自动继承之前会话的推理,而知识条目是账户范围的,而不是项目特定的。在会话中输入的风格规则只在该会话中有效。解决方案是附加一个每个项目的记忆层,Devin 在会话开始时读取该层。

Devin 为什么会忘记编码风格

Devin 是 Cognition 的自主工程代理,负责在受管理的沙箱中进行计划、编码和运行测试。三个设计选择使你的风格规则在下次运行中失效:

1. 会话重置工作上下文。 每个 Devin 运行都会启动一个新的沙箱和新的对话。你在会话中给出的风格指示——“使用命名导出,而不是默认导出;使用 cn(),而不是 clsx”——仅在该会话中有效,并不会加载到下一个会话中。

2. 知识条目是全局指导,而不是项目规则。 Devin 的知识功能在会话之间持久化事实,但它们适用于整个账户。对于“在提交之前始终运行 lint”是有用的,但当同一账户中的两个仓库有不同的约定时就不太有用了。

3. 代理从仓库重新推导风格。 Devin 读取文件以推断约定,当约定一致时这是合理的。在正在积极迁移的仓库中——一半转换为新模式——Devin 会选择错误的一半并将其编码。官方的 Devin 文档在 docs.devin.ai 中详细描述了会话和知识模型。

结果是:风格在会话持续期间保持有效,但在新会话开始时会漂移。

当 Devin 忘记编码风格时你会失去什么

成本不仅仅是美观——它会在审查和交付速度上显现出来:

  • 一个 PR 中的混合约定。 三个新文件使用命名导出,两个使用默认导出。两个使用 Result<T, E>,一个抛出。审查者花时间在风格上,而不是逻辑上。
  • 重新审议的决定。 “我们同意放弃桶文件”是 Devin 在下一个会话中再次愉快地提出的内容,因为这个决定从未持久化。
  • 与人类团队成员的分歧。 你的团队就风格达成了一致。代理偏离了这个一致。PR 变成了人类和代理之间的拉锯战。

解决方案不是“每个会话写一个更严格的简报”——而是给 Devin 提供一个项目风格规则的记忆,让它自动加载。

Devin 的内置解决方法

Cognition 为你提供了三种持久化工具。没有一种能够将风格干净地固定到项目上。

知识 是最接近持久规则的东西。它是全局的,手动维护的,并且不局限于某个仓库,因此多项目团队要么用条件语句(“在仓库 X 中做 Y”)来膨胀知识,要么接受风格执行是每个会话的。

仓库设置脚本 可以安装 linter 和格式化工具,这些工具在事后捕获一些风格违规行为。它们并不会改变 Devin 编写代码的方式。

链接的 PR 和之前的会话 让你在新的简报中引用早期的工作。你仍然需要将 Devin 指向正确的会话,并信任它从文本中提取正确的风格线索。

Devin 的内置记忆不足之处

更深层次的问题是编码风格是项目资产。它应该与项目一起存在,随着项目版本更新,并随项目迁移到任何工具——Devin、Cursor、Claude Code、ChatGPT——你的团队使用的工具。

知识条目处理全局偏好。多项目、多工具的风格执行需要在代理之上增加一层。

MemoryLake 如何修复 Devin 忘记编码风格

MemoryLake 是一个跨模型的记忆层,Devin 在会话开始时通过 REST 读取。你将风格规则存储为与项目关联的记忆,而不是将其复制到全局知识中,让每个会话仅检索相关内容。

  • 作为项目范围的记忆的风格。 “命名导出、结果类型、TanStack Query”作为结构化的记忆存在于项目内部。不同的仓库可以有不同的规则,而不会污染全局知识。
  • 人类和代理之间相同的规则。 你的开发人员在 Cursor 或 Claude Code 中使用的相同风格记忆是 Devin 在会话开始时提取的内容。人类和代理代码之间没有漂移。
  • 比原始提示高出 10,000 倍的检索范围。 MemoryLake 的引擎从数十亿个项目记忆中读取,并仅返回与 Devin 正在编辑的文件相关的风格规则。

MemoryLake 在 LoCoMo 长上下文基准测试中得分 94.03%,是截至 2026 年的最高已发布结果,检索时间为毫秒,并且采用 AES-256 端到端加密。

将 MemoryLake 连接到 Devin 的 3 个步骤

  1. 创建项目并加载上下文。 登录 MemoryLake,打开项目管理,点击创建项目,并命名为“Devin — Acme 网页风格”。通过文档驱动上传你的风格指南、ESLint 配置、ADR 和约定文档。将明确的规则——“仅命名导出”、“不使用默认导出”、“对可失败代码使用结果类型”——作为记忆添加到记忆标签中。
  2. 生成 MCP 服务器端点。 在项目内打开 MCP 服务器标签,点击添加 MCP 服务器,命名为“Devin 风格记忆”,然后点击生成。MemoryLake 返回一个 API 密钥 ID、密钥和端点 URL。立即复制 Bearer 令牌——它只显示一次。
  3. 通过 REST 连接 Devin。 在你的 Devin 工作流中添加一个设置或会话前钩子,调用 MemoryLake 的 REST 端点,使用 Bearer 令牌提取项目的风格记忆,并在运行开始之前将其写入任务简报或知识中。现在每个会话都以项目的风格规则在代理面前打开。

常见问题

Devin 会在会话之间记住编码约定吗?

Devin 的知识功能在全局范围内持久化事实,但它不局限于特定项目。在单个会话中告知的约定不会自动持久化到下一个会话中。

我如何让 Devin 一致地遵循我的编码风格?

通过 REST 将 Devin 连接到像 MemoryLake 这样的记忆层。将项目的风格规则存储为记忆,并让 Devin 在会话开始时将其提取到任务简报中。

为什么 Devin 在一个 PR 中不断混合编码风格?

因为 Devin 从它读取的文件中推断风格。在具有混合约定或正在进行迁移的仓库中,它可能会选择错误的模式并重现它。项目记忆为代理提供了明确的规则,而不是让它猜测。

我可以使用知识条目来处理项目特定的风格规则吗?

可以,但知识是账户范围的。你最终会写出条件语句,比如“在仓库 X 中做 Y,在仓库 Z 中做 W”。项目范围的记忆层更干净,并随项目一起迁移。

MemoryLake 能否在 Devin 和我的开发人员编辑器之间共享风格规则?

是的。MemoryLake 以工具中立的格式存储风格记忆。Devin 在会话开始时读取的相同规则是你的开发人员在 Cursor 和 Claude Code 会话中看到的规则。