项目内存
一个持久的项目知识库,为AI助手提供跨会话的内存。作为MCP(模型上下文协议)服务器交付。
它的作用
ProjectMemory维护着一个SQLite数据库,其中包含项目特定的知识——惯例、决策、已知问题、经验教训。人工智能助手在会话开始时阅读它,并在学习新东西时给它写信。随着时间的推移,数据库会使您对项目的理解不断加深。
工具
| 工具 | 目的 |
|---|---|
get_context | 获取当前工作环境的相关知识 |
project_query | 用SQL查询知识库 |
project_store | 存储知识条目(惯例、决定、已知问题等) |
project_forget | 删除错误或过时的知识 |
record_lesson | 记录会议期间学到的东西 |
mark_useful | 关于注入知识是否有帮助的反馈 |
consolidate | 合并几乎重复的课程,推广高重复率的课程,修剪陈旧的条目。还运行信心衰减、自动存档和自动毕业。当计数超过30时,每5节课自动调用一次。 |
graduate | 将高置信度知识推广到copilot-instructions.md。在整合过程中也会自动运行。 |
export_knowledge | 将所有知识和经验导出为JSON |
import_knowledge | 从JSON导入知识(自动消除重复) |
设置
选项1:从GitHub版本下载(推荐)
从以下网址下载适用于您平台的最新版本 发布:
ProjectMemory-win-x64.zip--窗户ProjectMemory-linux-x64.tar.gz--LinuxProjectMemory-osx-arm64.tar.gz--macOS(苹果硅)
在中提取和配置 ~/.copilot/mcp-config.json (用户级别)或 .github/mcp.json (回购级别):
{
"mcpServers": {
"project-memory": {
"command": "/path/to/ProjectMemory.Server",
"args": []
}
}
}选项2:从源代码构建(需要.NET 10 SDK)
发布单个可执行文件:
git clone https://github.com/micsh/ProjectMemory.git
cd ProjectMemory
dotnet publish src/ProjectMemory.Server -c Release -r win-x64 -o publish/win-x64
# Also available: linux-x64, osx-arm64在中配置 ~/.copilot/mcp-config.json (用户级别)或 .github/mcp.json (回购级别):
{
"mcpServers": {
"project-memory": {
"command": "C:/path/to/ProjectMemory.Server.exe",
"args": []
}
}
}选项3:NuGet工具(需要.NET 10运行时)
打包并安装为全局.NET工具:
dotnet pack src/ProjectMemory.Server -c Release -o nupkg
dotnet tool install -g --add-source ./nupkg ProjectMemory然后配置:
{
"mcpServers": {
"project-memory": {
"command": "project-memory",
"args": []
}
}
}稍后更新:
dotnet tool update -g --add-source ./nupkg ProjectMemory选项4:来源(需要.NET 10 SDK)
{
"mcpServers": {
"project-memory": {
"command": "dotnet",
"args": ["run", "--no-build", "-c", "Release", "--project", "/path/to/ProjectMemory/src/ProjectMemory.Server"]
}
}
}首先发布版本: dotnet build -c Release
数据库位置
数据库创建于 .project-memory/memory.db 在工作目录中。覆盖 PROJECT_MEMORY_DB 环境变量。
系统提示添加
为了获得最佳效果,请将以下内容添加到副驾驶说明中:
You have access to a project memory database via the project-memory MCP server.
- At the start of work, call get_context() to load project-specific knowledge.
- When the user corrects you, call record_lesson() with what you learned.
- When you discover a project-specific pattern, call project_store() to remember it.
- When you find stored knowledge is wrong, call project_forget() to remove it.知识类别
| 类别 | 用途 |
|---|---|
convention | 事情是如何完成的(构建命令、命名模式、代码风格) |
decision | 为什么选择某些内容(JWT而不是会议,特定的图书馆选择) |
known_issue | 错误、不稳定的测试、解决方法 |
file_note | 文件特定上下文(目的、怪癖、依赖关系) |
preference | 用户偏好(代码风格、方法偏好) |
范围筛选
使用glob模式可以将知识和经验教训限定在特定文件中:
*--项目范围(默认)src/Auth/*--Auth目录中的所有内容tests/**/*Integration*--集成测试文件*.fsproj--所有F#项目文件
当 get_context(scope: "src/Auth/Login.fs") 被调用时,它最多返回10个项目,按以下顺序排列:
- 范围精度——范围匹配模式的项目排名高于项目范围(
*)项目 - 信心——信心越高,排名第一
- 最近-最近更新的项目打破了联系
知识生命周期
- 课程记录 --助理在纠正错误后记录课程。模糊重复数据删除(Jaccard相似度>70%)可防止近乎重复的条目。当活动课程数超过30时,合并将每5次添加自动运行一次。
- 整合 --合并类似的课程(通过FTS5预过滤>80%的Jaccard),将高重复率(≥5)和置信度(≥0.7)的课程提升为知识,修剪过时的条目(>30天,单次出现)。
- 信心追踪 --每次
get_context当一个项目出现时,它的置信度会增加0.05(每个会话上限)。过去5个交易日未出现的项目每合并一次就会衰减0.03。置信度低于0.2的项目将自动存档。 - 毕业 --达到置信度≥0.75并在≥5个不同会话中出现的知识条目会自动附加到
.github/copilot-instructions.md在自动管理的部分下。可通过以下方式配置PROJECT_MEMORY_INSTRUCTIONS_FILE有人是。 - 未毕业 --如果毕业项目的置信度后来下降到存档阈值以下,则其指令将自动从指令文件中删除。
构建与测试
dotnet build
dotnet test
dotnet build -c Release # For MCP / distribution建筑
ProjectMemory.Server/
├── Schema.fs # DDL, migrations (v1→v5), schema versioning
├── Similarity.fs # Jaccard text similarity (pure function)
├── Formatting.fs # Context output formatting with token budgeting (pure function)
├── InstructionsFile.fs # Graduation file I/O (pure function)
├── Database.fs # ProjectMemoryDb class — persistence layer (read/write, no domain logic)
├── DomainService.fs # Domain orchestration — Consolidate, Graduate, Ungraduate, auto-triggers
├── Tools.fs # MCP tool adapter layer with input validation
├── Resources.fs # MCP resource endpoints (memory://context)
└── Program.fs # Host setup, DI, STDIO transport服务器使用STDIO传输——MCP客户端(Copilot CLI,VS Code)将其作为子进程启动,并通过stdin/stdout进行通信。所有日志记录都会进入stderr。
