使用说明
MCP聊天机器人
一个强大的基于Rust的聊天机器人MCP(模型上下文协议)框架,具有多服务器支持和工具集成功能。
特性
- 🤖 多AI支持:在Ollama(本地)和OpenAI之间无缝切换
- 🛠️ 工具集成:内置对内存、SQLite和文件操作的支持
- 🔄 多服务器架构:同时运行多个专用服务器
- 💬 交互式CLI:具有历史记录的用户友好命令行界面
- 📝 可定制的提示:通过YAML配置显示特定于服务器的系统提示
- 🔒 安全:基于环境的API密钥管理
- 📚 RAG支持:使用Qdrant矢量数据库进行检索增强生成
- 🎤 语音输入:使用Whisper的语音转文本功能
- 🤖 高级NLP:由rust-bert为文本嵌入和语言模型提供支持
- 🧠 深度学习:通过tch集成PyTorch,实现高级模型操作
- 📝 文本处理:使用Hugging Face标记器进行高效标记
模型上下文协议(MCP)
MCP(模型上下文协议)是一种灵活的协议,旨在通过提供结构化上下文和工具集成功能来增强AI模型交互。该协议允许:
核心组件
-
上下文管理
- 不同AI模型之间的动态上下文切换
- 跨会话的上下文持久性
- 特定于服务器的上下文配置
-
工具集成
- AI模型的标准化工具界面
- 自动工具发现和注册
- 使用重试机制执行工具
- 工具响应处理和格式化
-
服务器架构
- 模块化服务器设计,适用于专业操作
- 服务器间通信协议
- 资源管理和清理
- 服务器特定的提示配置
-
协议特性
- 基于JSON的消息格式
- 异步操作支持
- 错误处理和恢复
- 资源清理和管理
- 工具执行监控
协议流
-
初始化
- 服务器注册和配置
- 工具发现和注册
- 上下文初始化
-
行动
- 上下文感知工具执行
- 响应处理和格式化
- 错误处理和恢复
- 资源管理
-
清理
- 资源释放
- 服务器关闭
- 上下文持久性
用例
- 多模型协作:为复杂任务协调多个AI模型
- 工具集成:无缝集成外部工具和服务
- 上下文管理:在不同的操作中保持一致的上下文
- 资源管理:高效管理系统资源和清理
先决条件
- 锈蚀1.70或更高
- Ollama(用于本地AI支持)
- OpenAI API密钥(可选,用于支持OpenAI)
- Qdrant矢量数据库(用于RAG支持)
- Whisper型号(用于语音输入)
AI模型和工具
该项目利用了几个强大的AI和NLP工具:
文本处理和嵌入
- 拉斯特·伯特:Hugging Face变压器库的Rust实现
- 提供最先进的文本嵌入
- 支持多种语言模型
- 实现高效的文本处理和理解
深度学习
- tch(PyTorch):PyTorch的Rust绑定
- 支持深度学习模型操作
- 支持模型推理和训练
- 提供GPU加速(如果可用)
文本标记化
- 标记器:拥抱脸的标记库
- 高效的文本标记化
- 支持多种标记化算法
- 跨不同模型实现一致的文本处理
安装
- 克隆存储库:
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
- 使用以下命令切换到OpenAI
/ai命令
使用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
贡献
欢迎投稿!请随时提交拉取请求。
- 分叉存储库
- 创建功能分支(
git checkout -b feature/amazing-feature) - 提交您的更改(
git commit -m 'Add some amazing feature') - 推到分支(
git push origin feature/amazing-feature) - 打开拉取请求
许可证
此项目根据MIT许可证获得许可-请参阅 许可证 文件以获取详细信息。
作者
- arkSong - 初期工作 - arksong2018@gmail.com