Skip to content

IInaho/ai-chat-bot

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

3 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

ai智能对话系统

一个基于 MCP(Model Control Protocol)协议的智能对话系统,作为 LLM 与外部服务之间的中介,实现动态工具调用和知识检索增强生成(RAG)功能。

📋 目录

📚 详细文档

🎯 项目简介

本项目是一个 MCP Client,核心功能是作为 LLM 与外部服务之间的中介,根据 LLM 输出决定是否调用 MCP Server。系统支持动态工具集成、知识库检索和流式对话等功能。

核心流程

  1. 工具列表获取:从用户预配置的 MCP Server 获取可用工具元数据(如 get_weather),并通过 tools/list 接口动态拉取描述信息
  2. 调用决策判断
    • 方案一(OpenAI 规范):将工具列表传入支持 tools 字段的 LLM(如 Qwen-Plus),由模型返回 tool_calls 指令
    • 方案二(XML 包裹):对不支持原生工具调用的模型,通过 System Prompt 注入 XML 格式规则,引导模型输出 <function_calls> 标签
  3. 执行调用并返回结果:解析模型输出后,调用对应 Server 的 tools/call 接口,获取结果并交还给 LLM 生成最终回答

架构特点

  • 解耦设计:Host 负责交互,Client 负责通信,LLM 负责决策
  • 安全控制:通过环境变量或配置限制仅访问授权 Server
  • 扩展性强:支持多Server、多工具动态集成
  • RAG 增强:集成向量检索和知识库管理功能

✨ 核心功能

1. 智能对话

  • 支持流式和非流式对话模式
  • 集成多种 LLM 提供商(OpenAI、DeepSeek、豆包等)
  • 上下文管理和多轮对话

2. MCP 工具调用

  • 动态工具发现和注册
  • 支持计算器、时间查询、快快窝等工具
  • 自动工具调用决策

3. 知识检索(RAG)

  • 文档向量化存储
  • 基于 Redis 的向量检索
  • 知识库管理(添加、删除、搜索)

4. 前端界面

  • React + TypeScript 单页应用
  • 实时消息流式展示
  • 对话历史管理
  • 响应式设计

🛠 技术栈

后端

  • 语言:Go 1.24.0
  • Web 框架:Gin
  • AI 组件:CloudWeGo Eino 系列
  • 存储:Redis(向量存储 + 缓存)
  • 协议:MCP (Model Control Protocol)
  • 配置管理:godotenv

前端

  • 框架:React 18.2
  • 语言:TypeScript 5.9
  • 构建工具:Vite 4.4
  • UI:原生 CSS

核心依赖

github.com/gin-gonic/gin                              # Web 框架
github.com/cloudwego/eino                             # AI 编排引擎
github.com/cloudwego/eino-ext/components/model/openai # OpenAI 模型组件
github.com/cloudwego/eino-ext/components/tool/mcp     # MCP 工具组件
github.com/redis/go-redis/v9                          # Redis 客户端
github.com/mark3labs/mcp-go                           # MCP 协议实现

🏗 系统架构

┌──────────────────────────────────────────────────────────┐
│                      前端(Web)                          │
│                  React + TypeScript                      │
└──────────────────────┬───────────────────────────────────┘
                       │ HTTP/SSE
┌──────────────────────▼──────────────────────────────────┐
│                   后端服务(Go)                          │
│  ┌──────────────┐  ┌──────────────┐  ┌──────────────┐  │
│  │   Handler    │  │   Service    │  │    Agent     │  │
│  │  (路由层)   │  │  (业务层)   │  │  (AI编排)   │  │
│  └──────────────┘  └──────────────┘  └──────────────┘  │
│  ┌──────────────┐  ┌──────────────┐  ┌──────────────┐  │
│  │    Store     │  │   Embedder   │  │  MCP Client  │  │
│  │  (存储层)   │  │  (向量化)   │  │  (工具调用) │  │
│  └──────────────┘  └──────────────┘  └──────────────┘  │
└──────────────────────┬────────────┬────────────────────┘
                       │            │
          ┌────────────▼────┐    ┌───▼────────────┐
          │  Redis        │    │  MCP Server  │
          │ (向量存储)   │    │ (工具服务)  │
          └───────────────┘    └──────────────┘

🚀 快速开始

前置要求

  • Go 1.24+
  • Node.js 16+
  • Redis 6+
  • Git

1. 克隆项目

git clone <repository-url>
cd chat_message

2. 配置环境变量

复制并编辑 .env 文件:

# OpenAI 配置(选择一个提供商)
OPENAI_API_KEY=your-api-key
OPENAI_BASE_URL=https://api.openai.com/v1
OPENAI_MODEL=gpt-3.5-turbo

# MCP 配置
MCP_SERVER_PATH=/path/to/your/mcp/server
MCP_TIMEOUT=30
MCP_ENABLED=true

# 服务器配置
SERVER_PORT=8080
SERVER_HOST=0.0.0.0

# Redis 配置
REDIS_HOST=localhost
REDIS_PORT=6379
REDIS_PASSWORD=your-redis-password
REDIS_DB=0
REDIS_KEY_PREFIX=rag_demo

3. 启动 Redis

# 使用 Docker
docker run -d --name redis -p 6379:6379 redis:latest

# 或使用系统服务
sudo systemctl start redis

4. 安装后端依赖

go mod download

5. 构建并运行后端

# 开发模式
go run main.go

# 或构建后运行
go build -o rag_demo
./rag_demo

后端服务将在 http://localhost:8080 启动。

6. 安装并启动前端

cd web
npm install
npm run dev

前端服务将在 http://localhost:5173 启动。

7. 访问应用

在浏览器中打开 http://localhost:5173,即可开始使用!

📦 部署教程

详细部署教程请参考 DEPLOYMENT.md 文件。

快速部署(Docker)

# 使用 docker-compose 一键部署
docker-compose up -d

# 查看日志
docker-compose logs -f

# 停止服务
docker-compose down

⚙️ 配置说明

环境变量完整列表

变量名 说明 默认值 必填
OPENAI_API_KEY OpenAI API 密钥 -
OPENAI_BASE_URL OpenAI API 地址 https://api.openai.com/v1
OPENAI_MODEL 使用的模型 gpt-3.5-turbo
SERVER_HOST 服务器监听地址 0.0.0.0
SERVER_PORT 服务器端口 8080
REDIS_HOST Redis 地址 localhost
REDIS_PORT Redis 端口 6379
REDIS_PASSWORD Redis 密码 -
REDIS_DB Redis 数据库 0
REDIS_KEY_PREFIX Redis 键前缀 rag_demo
MCP_SERVER_PATH MCP Server 路径 ./mcp_server
MCP_TIMEOUT MCP 超时时间(秒) 30
MCP_ENABLED 是否启用 MCP false

支持的 LLM 提供商

OpenAI

OPENAI_API_KEY=sk-xxx
OPENAI_BASE_URL=https://api.openai.com/v1
OPENAI_MODEL=gpt-4

DeepSeek

OPENAI_API_KEY=sk-xxx
OPENAI_BASE_URL=https://api.deepseek.com
OPENAI_MODEL=deepseek-chat

豆包(字节跳动)

OPENAI_API_KEY=your-key
OPENAI_BASE_URL=https://ark.cn-beijing.volces.com/api/v3
OPENAI_MODEL=doubao-seed-1-6-250615

📚 API 文档

对话接口

非流式对话

POST /api/chat

请求体:

{
  "question": "你好,介绍一下你自己",
  "conversation_id": "optional-uuid",
  "stream": false
}

响应:

{
  "code": 0,
  "message": "success",
  "data": {
    "answer": "你好!我是一个智能助手...",
    "conversation_id": "uuid",
    "message_id": "uuid"
  }
}

流式对话

POST /api/chat/stream

请求体同上,响应为 SSE 流:

data: {"type":"content","content":"你"}
data: {"type":"content","content":"好"}
data: {"type":"done","conversation_id":"uuid"}

更多 API 文档请参考 ARCHITECTURE.md

🔧 开发指南

添加新的 MCP 工具

详细开发指南请参考 CONTRIBUTING.md

运行测试

# 运行所有测试
go test ./...

# 运行特定包的测试
go test ./internal/store

# 运行测试并显示覆盖率
go test -cover ./...

❓ 常见问题

Redis 连接失败

问题:启动时报错 Failed to connect to Redis

解决方案

  • 确认 Redis 服务已启动:systemctl status redis
  • 检查 Redis 配置是否正确
  • 验证防火墙设置

MCP 工具调用失败

问题:工具调用返回错误

解决方案

  • 检查 MCP_SERVER_PATH 配置是否正确
  • 确认 MCP Server 可执行权限
  • 查看日志了解详细错误信息

📝 更新日志

v1.0.0 (2025-10-27)

  • ✨ 初始版本发布
  • ✅ 支持多 LLM 提供商
  • ✅ 实现 MCP 工具调用
  • ✅ 集成 RAG 知识检索
  • ✅ 提供 Web 交互界面

📄 许可证

MIT License

🤝 贡献

欢迎提交 Issue 和 Pull Request!

About

用于ai应用的学习

Resources

Contributing

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors