带有MCP支持的RAG原型
这是使用Microsoft.Extensions.AI框架实现的RAG(检索增强生成)原型。它也可以作为模型上下文协议(MCP)服务器运行,并且可以被Claude Desktop等AI助手使用。
📋 概述
此项目是基于2025年推荐的Microsoft.Extensions.AI框架的RAG系统原型:
- 简单的实现核心逻辑约120行
- 多种存储选项:
- 内存内使用System.Numerics.Tensors进行快速余弦相似度搜索 - Neo4j(注:这是一个专有名词,通常不翻译,直接保留原名,若需解释性翻译,可译为“Neo4j图数据库”或“Neo4j图形数据库软件”)图表增强RAG(混合搜索:向量+图表遍历)
- 与OpenAI兼容支持OpenAI API和LM Studio
- MCP服务器可直接从 Claude Desktop 使用
- .NET 9.0最新的.NET平台
🚀 快速入门
前提条件
- .NET 9.0 SDK
- OpenAI API密钥(或LM Studio)
构建
cd src_dotnet
dotnet build执行方法
1. 控制台应用程序(内存版)
cd src_dotnet/RagPrototype.Console
# 環境変数を設定
export OPENAI_API_KEY="your-api-key-here"
# 実行
dotnet run可用命令:
add- 添加文档ask- 提问count- 显示文档数量clear- 清除所有文档exit- 结束
1-B. 控制台应用程序(Neo4j版)
# Neo4j起動(Docker推奨)
docker run --name neo4j \
-p 7474:7474 -p 7687:7687 \
-e NEO4J_AUTH=neo4j/password \
neo4j:latest
# 環境変数を設定
export NEO4J_URI=neo4j://localhost:7687
export NEO4J_PASSWORD=password
export OPENAI_API_KEY="your-api-key-here"
# 実行
cd src_dotnet/RagPrototype.Console.Neo4j
dotnet runNeo4j版的附加命令:
relate [type]- 在文档之间创建关系- (其他命令与内存版相同)
Neo4j版的特点:
- 📊 表格、数据图表 混合搜索向量相似度+图遍历
- 🔗(这个符号在中文里通常没有直接对应的翻译,它是一个链接或超链接的符号,可以表示“链接”或“点击这里”等意思,具体翻译需根据上下文确定。) 关系建模明确定义文档间的关系
- 💾 代表“软盘”或“存储设备”的符号。 持久化数据被保存在磁盘上
- 📈 表示“上升趋势”或“上升的图表”,在中文中常用来描述数据、价格等呈上升状态。 可扩展性支持数百万节点/关系
2. MCP服务器(与Claude Desktop联动)
简单设置示例(内存版):
Claude Desktop 配置文件(%APPDATA%\Claude\claude_desktop_config.json):
{
"mcpServers": {
"rag-prototype": {
"command": "dotnet",
"args": [
"run",
"--project",
"C:\\git\\git-ai\\my-own-little-rag-mcp\\src_dotnet\\RagPrototype.McpServer\\RagPrototype.McpServer.csproj"
],
"env": {
"OPENAI_API_KEY": "your-api-key-here"
}
}
}
}Neo4j版本的设置:
{
"mcpServers": {
"rag-neo4j": {
"command": "dotnet",
"args": [
"run",
"--project",
"C:\\git\\git-ai\\my-own-little-rag-mcp\\src_dotnet\\RagPrototype.McpServer.Neo4j\\RagPrototype.McpServer.Neo4j.csproj"
],
"env": {
"OPENAI_API_KEY": "your-api-key-here",
"NEO4J_URI": "neo4j://localhost:7687",
"NEO4J_PASSWORD": "password"
}
}
}
}Neo4j MCP服务器的附加工具:
add_relationship- 在文档间建立关系- 其他工具将自动适配混合搜索
📁 项目结构
my-own-little-rag-mcp/
├── src_dotnet/
│ ├── RagPrototype.sln # ソリューションファイル
│ ├── RagPrototype.Core/ # コアライブラリ
│ │ ├── Models/ # データモデル
│ │ ├── Services/ # RAG サービス実装
│ │ │ ├── SimpleRagService.cs # インメモリRAG
│ │ │ └── Neo4jRagService.cs # Neo4jグラフRAG
│ │ └── Configuration/ # 設定クラス
│ │ ├── RagOptions.cs
│ │ └── Neo4jOptions.cs
│ ├── RagPrototype.Console/ # CLI(インメモリ)
│ ├── RagPrototype.Console.Neo4j/ # CLI(Neo4j)
│ ├── RagPrototype.McpServer/ # MCPサーバー(インメモリ)
│ └── RagPrototype.McpServer.Neo4j/ # MCPサーバー(Neo4j)
├── doc/ # リサーチドキュメント
│ ├── compass_artifact_*.md # グラフDB/RAG/MCPリサーチ
├── MCP_SETUP.md # MCP セットアップガイド
├── CLAUDE.md # 開発者向けガイド
└── README.md # このファイル🔧 设置
环境变量
共同设置:
| 变量名 | 说明 | 默认值 | ||
|---|---|---|---|---|
| (无) | (无) | (无) | OPENAI_API_KEY | |
| OpenAI API密钥 | (必填) | RAG_CHAT_MODEL | gpt-4o-mini | 聊天模特 |
RAG_EMBEDDING_MODEL | text-embedding-3-small | 嵌入式模型 | ||
RAG_TOP_K | 3 | 搜索结果数 | ||
LM_STUDIO_ENDPOINT |
| LM Studio 端点 | (可选) |Neo4j配置(仅限Neo4j版)
: | 变量名 | 说明 | 默认值 | |--------|------|-------------| NEO4J_URI | neo4j://localhost:7687 | Neo4j连接URI | | NEO4J_USERNAME | neo4j | Neo4j用户名 | | NEO4J_PASSWORD | password | Neo4j密码 | | NEO4J_DATABASE | neo4j | 数据库名 |
|
export LM_STUDIO_ENDPOINT="http://localhost:1234/v1"
export RAG_CHAT_MODEL="local-model"
export RAG_EMBEDDING_MODEL="nomic-embed-text"使用LM Studio时
🏗️ 建筑
核心组件 SimpleRagService 翻译为中文是“简易RAG服务”
- \- 主要RAG服务
- 文档管理(添加、删除、搜索)
- 向量嵌入生成(OpenAI 嵌入API)
- 余弦相似度搜索(System.Numerics.Tensors)
上下文相关回答生成(OpenAI Chat API) 文件
public class Document
{
public required string Id { get; init; }
public required string Text { get; init; }
public DateTime CreatedAt { get; init; }
}- 文档模型 RagOptions(注:此词可能为特定上下文或软件中的专有名词,直接翻译为“RAG选项”或根据具体语境可能有更贴切的译法,但在此提供一个通用翻译)
public class RagOptions
{
public string OpenAiApiKey { get; set; }
public string ChatModel { get; set; }
public string EmbeddingModel { get; set; }
public int TopK { get; set; }
public string? LmStudioEndpoint { get; set; }
}- 配置类
ユーザー入力
↓
[質問の埋め込み生成]
↓
[ベクトル類似度検索] → Top K ドキュメント取得
↓
[コンテキスト構築] → 関連ドキュメント + 質問
↓
[LLM 生成] → OpenAI Chat API
↓
回答数据流
🧪 使用示例
$ dotnet run
Available commands: add | ask | count | clear | exit
> add RAGはRetrieval-Augmented Generationの略です
Document added: doc-001
> ask RAGとは何ですか?
RAGはRetrieval-Augmented Generationの略で、検索拡張生成と呼ばれる技術です...
> count
Total documents: 1控制台应用程序
あなた: 次のドキュメントを知識ベースに追加して:
「Microsoft.Extensions.AIは2025年推奨のRAGフレームワークです」
Claude: [add_document ツールを使用]
✅ Document added (ID: abc123)
あなた: おすすめのRAGフレームワークは?
Claude: [ask_question ツールを使用]
Microsoft.Extensions.AIが2025年推奨のRAGフレームワークです。在 Claude Desktop 上的使用
- 📚 技术栈 .NET 9.0
- - 最新的.NET平台 OpenAI SDK 2.5.0
- - OpenAI API 客户端 System.Numerics.Tensors(在中文中可表述为)“系统数值计算张量库”或简化为“数值张量库(System)”,但具体翻译可能根据上下文和专业术语习惯有所调整。在编程或技术文档中,通常直接保留原英文命名,以体现其专业性和准确性。因此,直接使用“System.Numerics.Tensors”作为表述也是合适的
- - 向量运算 Neo4j.Driver 5.28.3
- - Neo4j官方驱动程序(完全支持.NET 8.0/9.0) Microsoft.Extensions.DependencyInjection 翻译为中文是“Microsoft 扩展依赖注入服务”。这个命名反映了它在 .NET 生态系统中提供依赖注入功能的扩展性角色
- - DI容器 System.Text.Json(在中文语境中通常直接保留原名,不进行翻译,因为它是一个特定的命名空间或库名)
- - JSON序列化 模型上下文协议
- AI助手协作
🔍 主要特点
- 1\. 简单的实现
- 核心逻辑大约有120行(内存版)
- 最低限度的依赖关系
易于理解的代码结构
2. 多种存储选项内存版
- :
- 使用System.Numerics.Tensors优化的余弦相似度计算
- Top-K搜索支持
最适合用于原型开发Neo4j版
- :混合搜索
- 向量相似度+图遍历(精度提升5-10%)HNSW索引
- O(log n)的快速向量搜索关系建模
- 明确保存文件间的关系图表扩展
- 自动获取相关文档并增强语境持久化
- 数据保存在磁盘上可扩展性
支持数百万节点/关系
- 3\. 灵活的设定
- 通过环境变量进行设置
- 兼容OpenAI和LM Studio
模型切换容易
- 4\. MCP服务器整合
- 可直接从Claude Desktop使用
- JSON-RPC 2.0协议实现
- 内存版:4个工具
Neo4j版:5个工具(添加关系)
🛠️ 开发
代码质量工具
cd src_dotnet
# 全自動修正(推奨)
.\_fix-all.ps1
# 高速チェック(dotnetツールのみ)
.\_fix-all.ps1 -Fast
# CI/PRゲート(検証のみ)
.\_fix-all.ps1 -CheckOnly该项目包含自动化代码质量管理脚本:
- 所含工具:
- dotnet format(自动格式化)
- ReSharper CLI(高级分析 - 选项)
SonarQube(技术债务分析 - 可选) 详情:
src_dotnet/README_SCRIPTS.md(可译为):src_dotnet/脚本说明文件README_SCRIPTS.md
cd src_dotnet
dotnet test执行测试
# コンソールアプリのデバッグ
cd src_dotnet/RagPrototype.Console
dotnet run
# MCP サーバーのデバッグ
cd src_dotnet/RagPrototype.McpServer
dotnet run
# 手動でJSON-RPCメッセージを送信してテスト
{"jsonrpc":"2.0","id":1,"method":"initialize","params":{}}
{"jsonrpc":"2.0","id":2,"method":"tools/list","params":{}}调试
# デバッグビルド
dotnet build
# リリースビルド
dotnet build -c Release
# リリースビルド(自動化スクリプト)
.\_build-release.ps1
# 発行
dotnet publish -c Release构建配置
- 📖 文档 MCP_SETUP.md 翻译为中文是:“MCP设置说明文件(或:MCP配置指南)”。这里,“MCP”可能代表某个特定的系统、软件或项目名称,而“SETUP.md”通常指的是一个用于设置或配置的Markdown格式文档文件
- - 与 Claude Desktop 的协作详细指南 CLAUDE.md(文件名,可译为“克劳德文档”或保持原样,根据上下文决定是否需要具体翻译文件名)
- - 面向开发者的技术文档 src_dotnet/README.md(文件名,可翻译为“源代码.NET/README.md”或保持原样,因为文件名通常不翻译)
- - 项目结构详情 src_dotnet/README_SCRIPTS.md(翻译为中文可保持原文件名不变,或解释为“DotNet源代码目录下的脚本说明文件README_SCRIPTS.md”)
- 开发脚本使用指南
⚠️ 限制事项和建议事项
- 内存版的限制不持久
- 数据将在重启时丢失可扩展性
- 不适合大规模数据集(超过10万条)关系性
无法对文档间的关系进行建模 →解决方案 如需正式环境或数据持久化时 Neo4j版
请使用
- Neo4j版本的前提条件Neo4j服务器
- 需要Docker或原生安装内存
- 建议最低4GB(建议8-16GB)设置
比内存版更复杂的初始设置 →推荐
原型开发为内存版,正式部署为Neo4j版
- 建议的改进(未来版本) ✅ ~~持久化~~ →
- 已在Neo4j版本中实现分块处理
- 长文档的自动分割元数据
- 文档的标签、类别和日期筛选其他向量数据库
- Qdrant、Pinecone、Weaviate集成流媒体
- 支持MCP协议的流式响应监视
日志、指标、追踪
🤝 贡献
此原型为研究目的而制作。欢迎通过 Issue 提出改进建议或报告漏洞。
📄 许可证
麻省理工学院许可证
- 文件夹内的研究资料: - 图数据库综合对比调查(2024-2025年最新版) - RAG MCP构建最佳实践完全指南 - 使用C# .NET的MCP RAG系统编码最佳实践指南
DeepResearch与RAG实现对比(2025年版)
👤 制作者
______________________________________________________________________
RAG原型实施项目-2025下一步 : MCP_SETUP.md 翻译为中文是:“MCP设置说明文件”或“MCP配置指南(Markdown格式)”。这里,“MCP”可能代表某个特定的系统、项目或模块的名称,而“SETUP”通常指的是设置或配置,“.md”表示这是一个Markdown格式的文件
