关于 MCP-ChatBot
MCP-ChatBot 是用 Rust 构建的聊天机器人框架,面向需要交互式命令行和工具集成的用户。它支持在 Ollama 与 OpenAI 间切换,并可运行多个专用 MCP 服务及 RAG、语音输入功能。
主要功能
- 01切换 Ollama 与 OpenAI
- 02运行多个专用 MCP 服务
- 03集成记忆、SQLite 和文件工具
- 04Qdrant 文档检索增强生成
- 05Whisper 语音转文字
- 06交互式命令行与可配置提示词
适用场景
- 01在本地 Ollama 与 OpenAI 之间切换聊天
- 02通过内置工具操作记忆、SQLite 和文件
- 03使用 Qdrant 搜索文档内容
- 04录入语音并将转写文本作为消息处理
MCP 相关
该框架支持多个 MCP 服务,提供工具发现、注册与执行,并通过命令列出服务、工具和资源。MCP 客户端可使用其工具集成能力。
配置
本地服务的配置在各客户端中通用,复制后粘贴到客户端的 MCP 配置文件即可。
工具
本地服务需要在你的电脑上运行后才能读取工具,维护者暂未提供工具列表。
详细介绍
MCP-ChatBot
一个功能强大的基于 Rust 的聊天机器人 MCP(Model Context Protocol)框架,支持多服务和工具集成。
功能
- 🤖 多 AI 支持:可在 Ollama(本地)和 OpenAI 之间无缝切换
- 🛠️ 工具集成:内置对记忆、SQLite 和文件操作的支持
- 🔄 多服务架构:同时运行多个专用服务
- 💬 交互式命令行界面:易于使用的命令行界面,支持历史记录
- 📝 可自定义提示词:通过 YAML 配置为不同服务设置专属系统提示词
- 🔒 安全:基于环境变量管理 API 密钥
- 📚 RAG 支持:使用 Qdrant 向量数据库实现检索增强生成
- 🎤 语音输入:使用 Whisper 实现语音转文本
- 🤖 高级 NLP:借助 rust-bert 实现文本嵌入和语言模型
- 🧠 深度学习:通过 tch 集成 PyTorch,支持高级模型操作
- 📝 文本处理:使用 Hugging Face tokenizers 高效进行分词
Model Context Protocol(MCP)
MCP(Model Context Protocol)是一种灵活的协议,旨在通过提供结构化上下文和工具集成功能,增强 AI 模型的交互能力。该协议支持:
核心组件
-
上下文管理
- 在不同 AI 模型之间动态切换上下文
- 在不同会话间持久化上下文
- 为不同服务配置专属上下文
-
工具集成
- 为 AI 模型提供标准化的工具接口
- 自动发现和注册工具
- 支持带重试机制的工具执行
- 处理并格式化工具响应
-
服务架构
- 面向专用操作的模块化服务设计
- 服务间通信协议
- 资源管理与清理
- 服务专属提示词配置
-
协议特性
- 基于 JSON 的消息格式
- 支持异步操作
- 错误处理与恢复
- 资源清理与管理
- 工具执行监控
协议流程
-
初始化
- 注册并配置服务
- 发现并注册工具
- 初始化上下文
-
运行
- 执行上下文感知型工具
- 处理并格式化响应
- 错误处理与恢复
- 资源管理
-
清理
- 释放资源
- 关闭服务
- 持久化上下文
使用场景
- 多模型协作:协调多个 AI 模型来处理复杂任务
- 工具集成:无缝集成外部工具和服务
- 上下文管理:在不同操作间保持上下文一致
- 资源管理:高效管理系统资源并执行清理
前置条件
- Rust 1.70 或更高版本
- Ollama(用于本地 AI 支持)
- OpenAI API 密钥(可选,用于支持 OpenAI)
- Qdrant 向量数据库(用于 RAG 支持)
- Whisper 模型(用于语音输入)
AI 模型和工具
本项目使用了多种强大的 AI 和 NLP 工具:
文本处理与嵌入
- rust-bert:Hugging Face transformers 库的 Rust 实现
- 提供先进的文本嵌入
- 支持多种语言模型
- 实现高效的文本处理与理解
深度学习
- tch(PyTorch):PyTorch 的 Rust 绑定
- 支持深度学习模型操作
- 支持模型推理和训练
- 在可用时提供 GPU 加速
文本分词
- tokenizers:Hugging Face 的 tokenizers 库
- 高效进行文本分词
- 支持多种分词算法
- 确保不同模型间的文本处理一致
安装
- 克隆仓库:
git clone https://github.com/arksong/mcp-chatbot.git
cd mcp-chatbot
- 构建项目:
cargo build --release
配置
- 在项目根目录中创建
.env文件:
LLM_API_KEY=your_ollama_key
OPENAI_API_KEY=your_openai_key # Optional
-
在
src/servers_config.json中配置服务 -
在
mcp_prompts.yaml中自定义提示词
使用方法
使用 Ollama(本地 AI)
- 安装 Ollama:
# macOS
brew install ollama
# Linux
curl -fsSL https://ollama.ai/install.sh | sh
- 拉取所需模型:
ollama pull llama3.2:latest
- 启动 Ollama 服务:
ollama serve
- 运行聊天机器人:
cargo run
使用 OpenAI
- 设置 OpenAI API 密钥:
export OPENAI_API_KEY=your_api_key
- 运行聊天机器人:
cargo run
- 使用
/ai命令切换到 OpenAI
使用 RAG(检索增强生成)
- 使用 Docker 启动 Qdrant 向量数据库:
# Using the provided setup script
./scripts/setup_qdrant.sh
# Or manually using Docker
docker run -d \
--name qdrant \
-p 6333:6333 \
-p 6334:6334 \
-v "$(pwd)/qdrant_storage:/qdrant/storage" \
qdrant/qdrant:latest
- 向 RAG 数据库添加文档:
# Use the /rag-add command in the chatbot
/rag-add
# Then enter your document text
- 搜索相似文档:
# Use the /rag-search command
/rag-search
# Enter your search query
- 查看 RAG 数据库信息:
/rag-info
- Docker 管理命令:
# Stop Qdrant container
docker stop qdrant
# Start Qdrant container
docker start qdrant
# View Qdrant logs
docker logs qdrant
# Remove Qdrant container (data will be preserved in qdrant_storage)
docker rm qdrant
注意:Qdrant 数据会持久化存储在 ./qdrant_storage 目录中,该目录作为卷挂载到 Docker 容器中。这样即使容器被移除,向量数据仍会保留。
使用语音输入
- 开始录音:
/voice
-
说出消息(按 Enter 停止录音)
-
转录后的文本将作为普通消息进行处理
可用命令
/help- 显示帮助菜单/clear- 清空终端屏幕/usage- 显示使用信息/exit- 退出程序/servers- 列出可用的 MCP 服务/tools- 列出可用工具/resources- 列出可用资源/debug- 切换调试日志/ai- 在 AI 提供商之间切换/rag-add- 向 RAG 数据库添加新文档/rag-search- 搜索相似文档/rag-info- 显示 RAG 数据库信息/voice- 开始语音输入(按 Enter 停止录音)
工具示例
记忆操作
{"tool": "memory_set", "arguments": {"key": "name", "value": "John"}}
{"tool": "memory_get", "arguments": {"key": "name"}}
SQLite 操作
{"tool": "sqlite_create_table", "arguments": {"name": "users", "columns": [{"name": "id", "type": "INTEGER"}]}}
{"tool": "sqlite_query", "arguments": {"query": "SELECT * FROM users"}}
文件操作
{"tool": "file_write", "arguments": {"path": "test.txt", "content": "Hello"}}
{"tool": "file_read", "arguments": {"path": "test.txt"}}
项目结构
mcp-chatbot/
├── src/
│ ├── main.rs # Main application entry
│ ├── llm_client.rs # LLM client implementation
│ ├── mcp_server.rs # MCP server core
│ ├── protocol.rs # Protocol definitions
│ ├── sqlite_server.rs # SQLite server implementation
│ ├── stdio_server.rs # Standard I/O server
│ ├── rag_server.rs # RAG server implementation
│ ├── whisper_server.rs # Whisper server implementation
│ └── utils.rs # Utility functions
├── tests/
│ ├── sqlite_test.rs # SQLite tests
│ └── rag_server_test.rs # RAG server tests
├── Cargo.toml # Project dependencies
├── mcp_prompts.yaml # System prompts configuration
└── README.md # Project documentation
贡献
欢迎贡献!欢迎提交 Pull Request。
- Fork 此仓库
- 创建功能分支(
git checkout -b feature/amazing-feature) - 提交更改(
git commit -m 'Add some amazing feature') - 推送到分支(
git push origin feature/amazing-feature) - 发起 Pull Request
许可证
本项目采用 MIT License 许可,详情请参阅 LICENSE 文件。
作者
- arkSong - 初始工作 - [email protected]
致谢
评论
一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。