返回市场
MCP聊天机器人服务器

MCP聊天机器人服务器

作者:arkCyber2 星标更新:2025-05-06

项目介绍

MCP-ChatBot

一个基于Rust的强大聊天机器人框架,支持多服务器和工具集成能力。

Rust License CI

特性

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

模型上下文协议(MCP)

MCP(Model Context Protocol)是一种灵活的协议,旨在通过提供结构化的上下文和工具集成能力来增强AI模型之间的互动。该协议使以下成为可能:

核心组件

  1. 上下文管理

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

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

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

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

协议流程

  1. 初始化

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

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

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

使用场景

  • 多模型协作:协调多个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的分词器库
    • 高效的文本分词
    • 支持多种分词算法
    • 使跨不同模型的一致文本处理成为可能

安装

  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  # 可选
  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. 使用/ai命令切换到OpenAI

使用RAG(检索增强生成)

  1. 使用Docker启动Qdrant向量数据库:
# 使用提供的设置脚本
./scripts/setup_qdrant.sh

# 或手动使用Docker
docker run -d \
    --name qdrant \
    -p 6333:6333 \
    -p 6334:6334 \
    -v "$(pwd)/qdrant_storage:/qdrant/storage" \
    qdrant/qdrant:latest
  1. 将文档添加到RAG数据库:
# 在聊天机器人中使用/rag-add命令
/rag-add
# 然后输入您的文档文本
  1. 搜索相似文档:
# 使用/rag-search命令
/rag-search
# 输入您的搜索查询
  1. 查看RAG数据库信息:
/rag-info
  1. Docker管理命令:
# 停止Qdrant容器
docker stop qdrant

# 启动Qdrant容器
docker start qdrant

# 查看Qdrant日志
docker logs qdrant

# 移除Qdrant容器(数据将在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           # 主应用程序入口
│   ├── llm_client.rs     # LLM客户端实现
│   ├── mcp_server.rs     # MCP服务器核心
│   ├── protocol.rs       # 协议定义
│   ├── sqlite_server.rs  # SQLite服务器实现
│   ├── stdio_server.rs   # 标准I/O服务器
│   ├── rag_server.rs     # RAG服务器实现
│   ├── whisper_server.rs # Whisper服务器实现
│   └── utils.rs          # 实用函数
├── tests/
│   ├── sqlite_test.rs    # SQLite测试
│   └── rag_server_test.rs # RAG服务器测试
├── Cargo.toml            # 项目依赖
├── mcp_prompts.yaml      # 系统提示配置
└── README.md            # 项目文档

贡献

欢迎贡献!请随意提交Pull Request。

  1. 分叉仓库
  2. 创建您的功能分支(git checkout -b feature/amazing-feature
  3. 提交更改(git commit -m '添加一些惊人的功能'
  4. 推送到分支(git push origin feature/amazing-feature
  5. 打开Pull Request

许可证

此项目采用MIT许可证 - 详情见LICENSE文件。

作者

致谢

  • Ollama 提供本地AI引擎
  • OpenAI 提供其API服务
  • Deepseek 提供其强大的AI模型和API服务
  • Rust社区提供了出色的工具和库