多模型聊天机器人框架

基于Rust的多服务器架构聊天机器人框架,支持多种AI模型切换、工具集成和上下文管理,适用于复杂任务协作和资源管理。

  • by arkCyber
  • Rust
  • 本地部署
  • 3 星标
  • 更新于
在 GitHub 查看 arkCyber/MCP-ChatBot

使用说明

MCP聊天机器人

一个强大的基于Rust的聊天机器人MCP(模型上下文协议)框架,具有多服务器支持和工具集成功能。

特性

  • 🤖 多AI支持:在Ollama(本地)和OpenAI之间无缝切换
  • 🛠️ 工具集成:内置对内存、SQLite和文件操作的支持
  • 🔄 多服务器架构:同时运行多个专用服务器
  • 💬 交互式CLI:具有历史记录的用户友好命令行界面
  • 📝 可定制的提示:通过YAML配置显示特定于服务器的系统提示
  • 🔒 安全:基于环境的API密钥管理
  • 📚 RAG支持:使用Qdrant矢量数据库进行检索增强生成
  • 🎤 语音输入:使用Whisper的语音转文本功能
  • 🤖 高级NLP:由rust-bert为文本嵌入和语言模型提供支持
  • 🧠 深度学习:通过tch集成PyTorch,实现高级模型操作
  • 📝 文本处理:使用Hugging Face标记器进行高效标记

模型上下文协议(MCP)

MCP(模型上下文协议)是一种灵活的协议,旨在通过提供结构化上下文和工具集成功能来增强AI模型交互。该协议允许:

核心组件

  1. 上下文管理

    • 不同AI模型之间的动态上下文切换
    • 跨会话的上下文持久性
    • 特定于服务器的上下文配置
  2. 工具集成

    • AI模型的标准化工具界面
    • 自动工具发现和注册
    • 使用重试机制执行工具
    • 工具响应处理和格式化
  3. 服务器架构

    • 模块化服务器设计,适用于专业操作
    • 服务器间通信协议
    • 资源管理和清理
    • 服务器特定的提示配置
  4. 协议特性

    • 基于JSON的消息格式
    • 异步操作支持
    • 错误处理和恢复
    • 资源清理和管理
    • 工具执行监控

协议流

  1. 初始化

    • 服务器注册和配置
    • 工具发现和注册
    • 上下文初始化
  2. 行动

    • 上下文感知工具执行
    • 响应处理和格式化
    • 错误处理和恢复
    • 资源管理
  3. 清理

    • 资源释放
    • 服务器关闭
    • 上下文持久性

用例

  • 多模型协作:为复杂任务协调多个AI模型
  • 工具集成:无缝集成外部工具和服务
  • 上下文管理:在不同的操作中保持一致的上下文
  • 资源管理:高效管理系统资源和清理

先决条件

  • 锈蚀1.70或更高
  • Ollama(用于本地AI支持)
  • OpenAI API密钥(可选,用于支持OpenAI)
  • Qdrant矢量数据库(用于RAG支持)
  • Whisper型号(用于语音输入)

AI模型和工具

该项目利用了几个强大的AI和NLP工具:

文本处理和嵌入

  • 拉斯特·伯特:Hugging Face变压器库的Rust实现
    • 提供最先进的文本嵌入
    • 支持多种语言模型
    • 实现高效的文本处理和理解

深度学习

  • tch(PyTorch):PyTorch的Rust绑定
    • 支持深度学习模型操作
    • 支持模型推理和训练
    • 提供GPU加速(如果可用)

文本标记化

  • 标记器:拥抱脸的标记库
    • 高效的文本标记化
    • 支持多种标记化算法
    • 跨不同模型实现一致的文本处理

安装

  1. 克隆存储库:
git clone https://github.com/arksong/mcp-chatbot.git
cd mcp-chatbot
  1. 构建项目:
cargo build --release

配置

  1. 创建一个 .env 项目根目录中的文件:
LLM_API_KEY=your_ollama_key
OPENAI_API_KEY=your_openai_key  # Optional
  1. 在中配置服务器 src/servers_config.json

  2. 在中自定义提示 mcp_prompts.yaml

用法

使用Ollama(本地AI)

  1. 安装Ollama:
# macOS
brew install ollama

# Linux
curl -fsSL https://ollama.ai/install.sh | sh
  1. 拉动所需的模型:
ollama pull llama3.2:latest
  1. 启动Ollama服务:
ollama serve
  1. 运行聊天机器人:
cargo run

使用OpenAI

  1. 设置您的OpenAI API密钥:
export OPENAI_API_KEY=your_api_key
  1. 运行聊天机器人:
cargo run
  1. 使用以下命令切换到OpenAI /ai 命令

使用RAG(检索增强生成)

  1. 使用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
  1. 将文档添加到RAG数据库:
# Use the /rag-add command in the chatbot
/rag-add
# Then enter your document text
  1. 搜索类似文档:
# Use the /rag-search command
/rag-search
# Enter your search query
  1. 查看RAG数据库信息:
/rag-info
  1. 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容器中。这确保了即使容器被移除,矢量数据也保持完整。

使用语音输入

  1. 开始录音:
/voice
  1. 说出您的信息(按Enter停止录制)

  2. 转录的文本将作为正常消息进行处理

可用命令

  • /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

贡献

欢迎投稿!请随时提交拉取请求。

  1. 分叉存储库
  2. 创建功能分支(git checkout -b feature/amazing-feature)
  3. 提交您的更改(git commit -m 'Add some amazing feature')
  4. 推到分支(git push origin feature/amazing-feature)
  5. 打开拉取请求

许可证

此项目根据MIT许可证获得许可-请参阅 许可证 文件以获取详细信息。

作者

致谢

  • 奥拉马 用于提供本地AI引擎
  • OpenAI 为其API服务
  • 深度求索 他们强大的人工智能模型和API服务
  • Rust社区的优秀工具和库