AI记忆增强工具

DevFlow MCP是一款为AI代理提供持久化、可搜索记忆的知识图谱系统,适用于软件开发场景中的上下文维护和语义搜索。

  • by Takin-Profit
  • TypeScript
  • 本地部署
  • 更新于
在 GitHub 查看 Takin-Profit/devflow-mcp

使用说明

DevFlow MCP:AI代理的智能内存

是否曾希望你的AI能在对话之间记住事情?DevFlow MCP为任何支持模型上下文协议(如Claude Desktop)的AI提供了一个持久且可搜索的记忆功能,使其真正变得有意义。

可以把它想象成给你的AI装了一个大脑,这个大脑不会在每次开始新对话时重置。

这有什么不同之处?

大多数人工智能内存系统要么设置过于复杂,要么过于简单而无法发挥作用。DevFlow MCP恰好找到了那个完美的平衡点:

实际上开箱即用无需Docker容器,无需配置外部数据库。只需安装并运行。

为实际开发而构建由那些厌倦了反复向AI助手解释相同上下文的开发者们创建,该系统能够理解软件项目实际的工作原理。

对其功能坦诚相告这里记录的每一个功能都是真实存在且可运行的。不承诺提供“即将推出”的功能或半实现的API。

全程类型安全零 any 在整个代码库中定义的类型。如果 TypeScript 没有报错,代码就是有效的。

这个项目背后的故事

这个问题最初很简单:人工智能助手在会话之间总是忘记重要的项目背景信息。现有的解决方案要么过于复杂,属于企业级过度设计,要么只是玩具项目,无法处理实际的工作负载。

因此,我们构建了一个真正能够解决问题的工具。DevFlow MCP已在实际项目中经过实战检验,能够处理从快速原型开发到复杂企业级应用的各种需求。


核心概念

实体

实体是知识图谱中的主要节点。每个实体具有:

  • 一个唯一的名称(标识符)
  • 一个实体类型(例如,“人”,“组织”,“事件”)
  • 一份观察记录列表
  • 向量嵌入(用于语义搜索)
  • 完整版本历史

示例:

{
  "name": "John_Smith",
  "entityType": "person",
  "observations": ["Speaks fluent Spanish"]
}

关系

关系定义了具有增强属性的实体之间的有向连接:

  • 强度指标(0.0-1.0)
  • 置信度级别(0.0-1.0)
  • 丰富的元数据(来源、时间戳、标签)
  • 带有版本历史的时间感知
  • 基于时间的置信度衰减

示例:

{
  "from": "John_Smith",
  "to": "Anthropic",
  "relationType": "works_at",
  "strength": 0.9,
  "confidence": 0.95,
  "metadata": {
    "source": "linkedin_profile",
    "last_verified": "2025-03-21"
  }
}

提示(工作流程指导)

DevFlow MCP 包括 工作流感知提示 该系统教导AI代理如何在一个级联式开发工作流程(规划者→任务创建者→编码者→评审者)中有效利用知识图谱。

什么是提示? 提示是指导性信息,用于指导人工智能代理何时调用哪些工具。它们在Claude桌面版中以斜杠命令的形式出现(例如。, /init-project并提供情境感知的文档。

重要提示: 提示本身并不保存数据——它们返回的是指导文本,告诉AI应该调用哪些工具。然后AI调用这些工具(如 create_entities, semantic_search) 这些实际上与数据库进行交互。

可用提示

1. /init-project - 开始新项目

指导规划人员创建初始特征实体并构建规划信息结构。

参数:

  • projectName (必填):项目或功能的名称
  • description (必填):高级别描述
  • goals (可选):具体目标或要求

它所教授的内容:

  • 如何为高级项目创建“特性”实体
  • 如何早期记录决策
  • 如何规划任务并将其与功能相联系
  • 项目信息结构化最佳实践

在Claude桌面版中的示例用法:

/init-project projectName="UserAuthentication" description="Implement secure user login system" goals="Support OAuth, 2FA, and password reset"
2. /get-context - 提取相关信息

帮助任何代理在开始工作前,在知识图谱中搜索相关的历史记录、依赖关系和上下文信息。

参数:

  • query (必填):你正在做什么?(用于语义搜索)
  • entityTypes (可选):按类型过滤(功能、任务、决策、组件、测试)
  • includeHistory (可选):包含版本历史(默认:否)

它所教授的内容:

  • 如何使用语义搜索查找相关工作
  • 如何通过关系检查依赖项
  • 如何审查设计决策
  • 如何理解实体版本历史

示例用法:

/get-context query="authentication implementation" entityTypes=["component","decision"] includeHistory=true
3. /remember-work - 存储已完成的工作

指导代理使用适当的实体类型和关系来保存他们的工作。

参数:

  • workType (必填):工作类型(特性、任务、决策、组件、测试)
  • name (必填):作品名称/标题
  • description (必填):你做了什么?(存储为观测数据)
  • implementsTask (可选):此任务实现的工作(建立“实现”关系)
  • partOfFeature (可选):此功能所属的部分(创建“部分_为”关系)
  • dependsOn (可选):此组件所依赖的组件(创建“依赖关系”)
  • keyDecisions (可选):已做出重要决策

它所教授的内容:

  • 如何创建具有正确类型的实体
  • 如何在实体之间建立关系
  • 如何单独记录决策
  • 如何维护知识图谱结构

示例用法:

/remember-work workType="component" name="AuthService" description="Implemented OAuth login flow with JWT tokens" implementsTask="UserAuth" partOfFeature="Authentication" dependsOn=["TokenManager","UserDB"]
4. /review-context - 获取完整的评论上下文

帮助评审者在提供反馈前收集有关某项工作的所有相关信息。

参数:

  • entityName (必填):待审核实体的名称
  • includeRelated (可选):包含相关实体(默认:true)
  • includeDecisions (可选):包含决策历史(默认:true)

它所教授的内容:

  • 如何获取正在被审核的实体
  • 如何找到相关工作(依赖项、实现)
  • 如何审查设计决策
  • 如何检查测试覆盖率
  • 如何将评审反馈作为观察结果添加

示例用法:

/review-context entityName="AuthService" includeRelated=true includeDecisions=true

级联工作流示例

以下是提示如何引导一个完整的开发工作流程:

1. 规划代理:

/init-project projectName="UserDashboard" description="Create user analytics dashboard"
# AI learns to create feature entity, plan tasks

2. 任务创建者代理:

/get-context query="dashboard features"
# AI learns to search for related work, then creates task entities

3. 开发者代理:

/get-context query="dashboard UI components"
# AI learns to find relevant components and decisions
/remember-work workType="component" name="DashboardWidget" description="Created widget framework"
# AI learns to store work with proper relations

4. 评审代理:

/review-context entityName="DashboardWidget"
# AI learns to get full context, check tests, add feedback

为什么提示很重要

  • 一致性所有代理都采用相同的结构化方法
  • 上下文保持工作与适当的元数据和关系一起存储
  • 可发现性未来的智能代理可以通过语义搜索找到相关历史信息
  • 工作流程意识每个提示在开发周期中都有其特定的位置
  • 自我文档化提示语向代理传授最佳实践

其内部工作机制如何

DevFlow MCP 将所有内容存储在一个单独的 SQLite 数据库文件中。没错,真的——只需在您的电脑上保存一个文件。

为何选择 SQLite 而不是更“高级”的选项?

我们首先尝试了那些复杂的东西。外部数据库、Docker容器、云服务——它们都能用,但对于大多数开发者实际的需求来说,这些都太过复杂了。

SQLite为您提供:

  • 一个文件,统管一切您的整个知识图谱都存在于一个单一的(系统/数据库中) .db 文件,您可以复制、备份或进行版本控制
  • 无需安装烦恼无需配置服务器,无需管理容器,无需创建云账户
  • 出乎意料地快SQLite 轻松处理数百万条记录,毫无压力
  • 内置向量搜索功能sqlite-vec 扩展原生支持语义搜索
  • 处处适用从您的笔记本电脑到生产服务器,SQLite 都能轻松运行

入门指南(极其简单)

# Install globally
npm install -g devflow-mcp

# Run it (creates database automatically)
dfm mcp

# Want to use a specific file? Set the location
DFM_SQLITE_LOCATION=./my-project-memory.db dfm mcp

没有配置文件。无需环境设置。没有需要3小时的“入门”教程。即开即用。

要求Node.js 23+(用于获取最新的 SQLite 功能)

高级功能

语义搜索

基于语义而非仅关键词来查找相关实体:

  • 向量嵌入使用OpenAI的嵌入模型,实体会自动编码到高维向量空间中
  • 余弦相似度即使使用不同的术语,也能找到相关概念
  • 可配置的阈值设置最小相似度分数以控制结果的相关性
  • 跨模态搜索使用文本查询来查找相关实体,无论它们是如何被描述的
  • 多模型支持兼容多种嵌入模型(OpenAI text-embedding-3-small/large)
  • 上下文检索根据语义含义而非精确的关键词匹配来检索信息
  • 优化后的默认设置调整参数以平衡精确率和召回率(相似度阈值设为0.6,启用混合搜索)
  • 混合搜索结合语义搜索和关键词搜索,以获取更全面的结果
  • 自适应搜索系统根据查询特征和可用数据,智能地在仅向量搜索、仅关键词搜索或混合搜索之间进行选择
  • 性能优化在优先考虑用于语义理解的向量搜索的同时,保持回退机制以确保系统的鲁棒性
  • 查询感知处理根据查询复杂度和可用的实体嵌入调整搜索策略

时间意识

通过时间点图检索追踪实体和关系的完整历史:

  • 完整版本历史对实体或关系的每一次更改都会保留时间戳
  • 即时查询检索过去任意时刻知识图的准确状态
  • 变更跟踪自动记录创建时间(createdAt)、更新时间(updatedAt)、有效开始时间(validFrom)和有效结束时间(validTo)的时间戳
  • 时间一致性保持对知识演变历史的准确看法
  • 非破坏性更新更新会创建新版本,而不是覆盖现有数据
  • 基于时间的过滤根据时间标准过滤图形元素
  • 历史探索调查特定信息随时间的变化情况

信心衰退

关系会根据可配置的半衰期随时间自动降低信任度:

  • 基于时间的衰减如果关系得不到加强,随着时间的推移,信任自然会下降
  • 可配置的半衰期定义信息变得不那么确定的速度(默认:30天)
  • 最低置信度下限设置阈值以防止重要信息过度衰减
  • 元数据衰减每个关系都包含了详细的衰变计算信息
  • 非破坏性的原始置信度值与衰减后的值一同保留
  • 强化学习当关系因新观察结果而得到加强时,会重拾信心
  • 参考时间灵活性基于任意参考时间进行衰减计算,以用于历史分析

高级元数据

支持实体和关系的丰富元数据,包括自定义字段:

  • 源追踪记录信息的来源(用户输入、分析、外部来源)
  • 置信水平根据确定性为关系分配置信度评分(0.0-1.0)
  • 关系强度表示关系的重要性或强度(0.0-1.0)
  • 时间元数据跟踪信息的添加、修改或验证时间
  • 自定义标签添加任意标签以进行分类和过滤
  • 结构化数据在元数据字段中存储复杂结构化数据
  • 查询支持基于元数据属性进行搜索和筛选
  • **可扩展架构(或模式)**根据需要添加自定义字段,而无需修改核心数据模型

MCP API 工具

以下工具可通过模型上下文协议提供给大型语言模型(LLM)客户端主机使用:

实体管理

  • 创建实体

    • 在知识图谱中创建多个新实体
    • 输入: entities (对象数组)
      • 每个对象包含:
        • name (字符串):实体标识符
        • entityType (字符串):类型分类
        • observations (string[]): 相关的观测值
  • 添加观测数据

    • 向现有实体添加新观测数据
    • 输入: observations (对象数组)
      • 每个对象包含:
        • entityName (字符串):目标实体
        • contents (string[]): 要添加的新观测数据
    • 注:与关系不同,观测数据不支持强度、置信度或元数据字段。观测数据是关于实体的原子事实。
  • 删除实体

    • 移除实体及其关系
    • 输入: entityNames (字符串数组)
  • 删除观测数据

    • 从实体中移除特定观测值
    • 输入: deletions (对象数组)
      • 每个对象包含:
        • entityName (字符串):目标实体
        • observations (字符串数组):要移除的观察值

关系管理

  • 创建关系

    • 在实体之间创建具有增强属性的多个新关系
    • 输入: relations (对象数组)
      • 每个对象包含:
        • from (字符串):源实体名称
        • to (字符串):目标实体名称
        • relationType (字符串):关系类型
        • strength (数字,可选):关系强度(0.0-1.0)
        • confidence (数字,可选):置信水平(0.0-1.0)
        • metadata (对象,可选):自定义元数据字段
  • 获取关系

    • 获得具有增强属性的特定关系
    • 输入:
      • from (字符串):源实体名称
      • to (字符串):目标实体名称
      • relationType (字符串):关系类型
  • 更新关系

    • 更新现有关系并增强其属性
    • 输入: relation (对象):
      • 包含:
        • from (字符串):源实体名称
        • to (字符串):目标实体名称
        • relationType (字符串):关系类型
        • strength (数字,可选):关系强度(0.0-1.0)
        • confidence (数字,可选):置信水平(0.0-1.0)
        • metadata (对象,可选):自定义元数据字段
  • 删除关系

    • 从图中移除特定关系
    • 输入: relations (对象数组)
      • 每个对象包含:
        • from (字符串):源实体名称
        • to (字符串):目标实体名称
        • relationType (字符串):关系类型

图操作

  • 读取图表

    • 阅读整个知识图谱
    • 无需输入
  • 搜索节点

    • 根据查询搜索节点
    • 输入: query (字符串)
  • open_nodes 翻译为中文是“开放节点”

    • 通过名称检索特定节点
    • 输入: names (字符串数组)

语义搜索

  • 语义搜索

    • 使用向量嵌入和相似性进行语义实体搜索
    • 输入:
      • query (字符串):用于语义搜索的文本查询
      • limit (数字,可选):要返回的最大结果数(默认:10)
      • min_similarity (数字,可选):最小相似度阈值(0.0-1.0,默认值:0.6)
      • entity_types (`string[]`, 可选):按实体类型过滤结果
      • hybrid_search (布尔值,可选):结合关键词搜索和语义搜索(默认:true)
      • semantic_weight (数字,可选):混合搜索中语义结果的权重(0.0-1.0,默认:0.6)
    • 特点:
      • 根据查询上下文智能选择最优搜索方法(向量、关键词或混合)
      • 通过回退机制优雅地处理无语义匹配的查询
      • 通过自动优化决策保持高性能
  • 获取实体嵌入

    • 获取特定实体的向量嵌入
    • 输入:
      • entity_name (字符串):要获取嵌入表示的实体名称

时间特征

  • 获取实体历史记录

    • 获取实体的完整版本历史记录
    • 输入: entityName (字符串)
  • 获取关系历史

    • 获取关系的完整版本历史
    • 输入:
      • from (字符串):源实体名称
      • to (字符串):目标实体名称
      • relationType (字符串):关系类型
  • 获取特定时间点的图表

    • 获取特定时间戳时的图表状态
    • 输入: timestamp (数字):Unix时间戳(自纪元以来的毫秒数)
  • 获取衰减图

    • 获取带有时间衰减置信度的图表
    • 输入: options (对象,可选):
      • reference_time (数字):用于衰减计算的参考时间戳(自纪元以来的毫秒数)
      • decay_factor (数字):可选的衰减因子覆盖值

配置

环境变量

使用这些环境变量配置DevFlow MCP:

# SQLite Configuration
DFM_SQLITE_LOCATION=./knowledge.db

# Embedding Service Configuration
OPENAI_API_KEY=your-openai-api-key
OPENAI_EMBEDDING_MODEL=text-embedding-3-small

# Debug Settings
DEBUG=true

嵌入模型

可用的OpenAI嵌入模型:

  • text-embedding-3-small高效且成本效益高(1536维)
  • text-embedding-3-large更高的精度,更昂贵(3072维)
  • text-embedding-ada-002传统模型(1536维)

OpenAI API配置

要使用语义搜索,您需要配置OpenAI API凭据:

  1. 从(某处)获取API密钥 OpenAI(开放人工智能研究所)
  2. 使用以下命令配置您的环境:
# OpenAI API Key for embeddings
OPENAI_API_KEY=your-openai-api-key
# Default embedding model
OPENAI_EMBEDDING_MODEL=text-embedding-3-small

注对于测试环境,如果未提供API密钥,系统将模拟嵌入生成。然而,建议在集成测试中使用真实的嵌入。

与Claude桌面版的集成

配置

对于本地开发,请将此添加到您的 claude_desktop_config.json:

{
  "mcpServers": {
    "devflow": {
      "command": "dfm",
      "args": ["mcp"],
      "env": {
        "DFM_SQLITE_LOCATION": "./knowledge.db",
        "OPENAI_API_KEY": "your-openai-api-key",
        "OPENAI_EMBEDDING_MODEL": "text-embedding-3-small",
        "DEBUG": "true"
      }
    }
  }
}

重要在您的Claude Desktop配置中,始终明确指定嵌入模型,以确保行为的一致性。

推荐的系统提示

为了与Claude实现最佳集成,请在您的系统提示中添加以下语句:

You have access to the DevFlow MCP knowledge graph memory system, which provides you with persistent memory capabilities.
Your memory tools are provided by DevFlow MCP, a sophisticated knowledge graph implementation.
When asked about past conversations or user information, always check the DevFlow MCP knowledge graph first.
You should use semantic_search to find relevant information in your memory when answering questions.

测试语义搜索

一旦配置完成,Claude便能通过自然语言访问语义搜索功能:

  1. 创建带有语义嵌入的实体:

    User: "Remember that Python is a high-level programming language known for its readability and JavaScript is primarily used for web development."
    
  2. 进行语义搜索:

    User: "What programming languages do you know about that are good for web development?"
    
  3. 检索特定信息:

    User: "Tell me everything you know about Python."
    

这种方法的强大之处在于,用户可以进行自然交互,而大型语言模型(LLM)则负责处理选择和使用合适记忆工具的复杂性。

实际应用

DevFlow MCP的自适应搜索功能带来了实际效益:

  1. 查询多功能性用户无需担心如何措辞提问——系统会自动适应不同类型的查询

  2. **抗失败韧性(或称为“抗挫韧性”、“逆境适应能力”)**即使在无法进行语义匹配的情况下,系统也可以在无需用户干预的情况下转而采用其他方法

  3. 性能效率通过智能选择最佳搜索方法,系统为每个查询平衡了性能和相关性

  4. 改进的上下文检索大型语言模型(LLM)的对话得益于更佳的上下文检索能力,因为系统能够在复杂的知识图谱中找到相关信息

例如,当用户询问“你对机器学习了解多少?”时,系统即使没有明确提到“机器学习”,也能检索到概念上相关的实体,比如关于神经网络、数据科学或特定算法的实体。但如果语义搜索的结果不足,系统会自动调整其方法,以确保仍然返回有用的信息。

故障排除

向量搜索诊断

DevFlow MCP 包含内置的诊断功能,以帮助排查向量搜索问题:

  • 嵌入验证该系统检查实体是否具有有效的嵌入表示,如果缺失则自动生成
  • 向量索引状态验证向量索引是否存在且处于ONLINE状态
  • 备用搜索如果向量搜索失败,系统将回退到基于文本的搜索
  • 详细日志记录为故障排除全面记录向量搜索操作

调试工具(当 DEBUG=true 时)

当启用调试模式时,将提供更多诊断工具:

  • 诊断向量搜索关于SQLite向量索引、嵌入计数和搜索功能的信息
  • **强制生成嵌入(或向量表示)**强制为特定实体生成嵌入表示
  • 调试嵌入配置当前嵌入服务配置的相关信息

开发者重置

在开发过程中彻底重置您的 SQLite 数据库:

# Remove the database file
rm -f ./knowledge.db

# Or if using a custom location
rm -f $DFM_SQLITE_LOCATION

# Restart your application - schema will be recreated automatically
dfm mcp

建设与发展

# Clone the repository
git clone https://github.com/takinprofit/dev-flow-mcp.git
cd dev-flow-mcp

# Install dependencies (uses pnpm, not npm)
pnpm install

# Build the project
pnpm run build

# Run tests
pnpm test

# Check test coverage
pnpm run test:coverage

# Type checking
npx tsc --noEmit

# Linting
npx ultracite check src/
npx ultracite fix src/

安装

本地开发

对于项目开发或贡献:

# Clone the repository
git clone https://github.com/takinprofit/dev-flow-mcp.git
cd dev-flow-mcp

# Install dependencies
pnpm install

# Build the CLI
pnpm run build

# The CLI will be available as 'dfm' command

许可证

麻省理工学院(MIT)