多模态AI聊天机器人

一款基于Jac语言和MCP协议的多模态AI聊天机器人,支持文档、图像和视频的交互与智能搜索。

  • by NeemaMwende
  • 本地部署
  • 更新于
在 GitHub 查看 NeemaMwende/mcp-chatbot

使用说明

🤖 基于人工智能的多模态MCP聊天机器人

一个能够理解和互动的高级AI聊天机器人 文件;文书, 图像,以及 视频 使用 Jac的对象空间编程(OSP) 并且 模型上下文协议(MCP)。


🚀 特点

  • 多模态人工智能能力 — 与PDF、文本文件、图片和视频进行聊天
  • 智能文档搜索 — 由(某技术/系统)驱动的基于向量的语义搜索 ChromaDB(注:ChromaDB可能是一个特定数据库或系统的名称,根据上下文,这里直接音译,实际翻译可能需根据具体含义调整)
  • 网络搜索集成 — 使用实时信息检索 Serper API
  • 视觉人工智能 — 理解并讨论图像和视频 OpenAI的视觉模型
  • 智能查询路由 — 使用自动分类和路由功能 均值类型化编程(MTP)
  • 模块化架构 — 清晰分离关注点,实现可重用性 MCP工具
  • 用户友好的界面 — 用……构建 Streamlit(注:这是一个专有名词,通常不进行翻译,直接保留原样,表示一个用于创建数据应用的开源框架) 便于互动

使用的工具/技术

  • Jac 语言 — 主要应用逻辑和对象空间编程
  • Jac Cloud(人名,可译为“雅克·克劳德”或根据具体语境保留原名) — 后端服务器基础设施
  • Streamlit(流式处理框架/应用) — 网页界面
  • ChromaDB(可译为“色度数据库”或根据具体上下文意译为更贴切的名称,如“色彩数据库”等,但“ChromaDB”本身作为专有名词,直接使用原名在技术或专业语境下也是可接受的) — 用于文档搜索的向量数据库
  • OpenAI GPT — 人工智能聊天和视觉能力
  • Serper API — 实时网页搜索
  • LangChain — 文档处理与人工智能协同

🧱 架构概述

该应用程序使用 Jac的对象空间编程(OSP) 包含以下组成部分的范式:

  • 节点 — 代表系统的不同部分(路由器、聊天类型、会话)
  • 步行者(或:漫步者) — 在节点网络中移动,携带信息并执行逻辑
  • MTP(Mean Typed Programming)可翻译为“平均类型化编程”或根据上下文简化为“类型化编程(均值导向)”,但具体翻译可能需根据该术语在特定领域或语境中的含义进行调整。如果这是一个特定技术或概念的名称,建议查找官方或权威的中文译名。在缺乏具体上下文的情况下,“平均类型化编程”是一个较为通用的翻译 — 基于人工智能的自动分类和路由

🗂️ 项目结构

.
├── client.jac           # Web interface for chat and file uploads
├── server.jac           # Main application using Object Spatial Programming
├── server.impl.jac      # Implementation details and function bodies
├── mcp_server.jac       # Tool server for document and web search
├── mcp_client.jac       # Interface to communicate with tools
└── tools.jac            # Document processing and search logic

⚙️ 前提条件

  • Python 3.12 或更新版本
  • OpenAI API密钥
  • Serper API密钥 (提供免费层级)

🧩 安装

1️⃣ 克隆仓库

git clone <repository-url>
cd jac-mcp-chatbot

2️⃣ 安装依赖项

pip install jaclang jac-cloud jac-streamlit byllm langchain langchain-community langchain-openai langchain-chroma chromadb openai pypdf tiktoken requests mcp[cli] anyio

3️⃣ 设置环境变量

export OPENAI_API_KEY=<your-openai-key>
export SERPER_API_KEY=<your-serper-key>

🏃 运行应用程序

该应用程序需要 三个终端窗口 同时运行:

航站楼1:启动MCP工具服务器

jac run mcp_server.jac

2号航站楼:启动主应用程序

jac serve server.jac

第三航站楼:启动网页界面

jac streamlit client.jac

一旦所有三项服务都运行起来,请打开您的浏览器并导航至:

http://localhost:8501

💡 使用方法

第一步:注册或登录

通过网页界面创建账户或登录。

步骤2:上传文件

上传 PDFs 翻译成中文是“PDF文件”, 文本文件, 图像,或 视频 给聊天机器人。

步骤3:开始聊天

对您上传的内容提出问题或进行一般性咨询。

步骤4:智能路由

该系统会自动将您的问题路由到相应处理

  • 📄(文件/纸张的象征符号,可直接翻译为“文件”或根据上下文译为“纸张”等) 与文档相关的问题 → RAG(检索增强生成)系统
  • 🌍(地球) 常见问题 → 网络搜索
  • 🖼️(图片) 图像问题 → 视觉人工智能
  • 🎥 视频问题 → 视频内容分析

🔗 API 端点

终端(或端点) 描述
POST /user/register 创建一个新用户账户
POST /user/login 登录并获取访问令牌
POST /walker/upload_file 上传文件(需要认证)
POST /walker/interact 与AI聊天(需要认证)

完整API文档可在以下地址获取:

👉 http://localhost:8000/docs 翻译为中文是:“本地主机8000端口的文档页面”。不过,通常我们不会直接翻译网址,而是描述其功能或用途,比如“访问本地开发服务器上的API文档”。但按照您的要求,直接翻译网址的话,就是上述表述


⚙️ 工作原理

  1. 文档处理 — 上传的文档被处理并存储为向量嵌入 ChromaDB(可译为“色彩数据库”或根据具体上下文保留为专有名词)。
  2. 查询分类 — 用户查询会自动进行分类,使用 平均打字编程(MTP)。
  3. 智能路由 — 问题被路由到相应的处理程序(RAG、网络搜索或视觉AI)。
  4. 情境感知响应 — 这个聊天机器人会根据您的数据或实时来源提供基于上下文的答案。
  5. 多模态理解 — 图像和视频通过 OpenAI的视觉模型。

🔧 扩展聊天机器人功能

模块化架构使其易于扩展:

  • 新的文件类型 — 添加对音频、电子表格或演示文稿的支持
  • 附加工具 — 集成天气API、数据库或自定义业务逻辑
  • 增强型人工智能模型 — 为特定任务使用不同的大型语言模型(LLM)
  • 高级搜索 — 实施结合关键词搜索和语义搜索的混合搜索
  • 自定义聊天节点 — 为特定领域的疑问创建专门的处理程序

🛠️ 故障排除

依赖问题

确保所有包都已安装且与您的Python版本兼容:

pip install --upgrade pip

服务器启动问题

始终先启动MCP服务器(终端1),再启动主服务器(终端2)

文件上传问题

  • 检查服务器日志中的错误
  • 验证文件类型是否受支持(PDF、TXT、PNG、JPG、MP4)
  • 确保文件未损坏

API密钥错误

验证您的环境变量是否设置正确:

echo $OPENAI_API_KEY
echo $SERPER_API_KEY

端口冲突

确保端口8000、8501以及MCP服务器端口可用


📚 关键概念

对象空间编程(OSP)

将你的应用程序组织成一个由相互连接的节点组成的网络,这些节点由遍历它们的“行者”(或“导航者”)来连接,从而使复杂的逻辑变得直观且易于维护。

均值类型化编程(MTP)

无需编写复杂的基于规则的逻辑,即可让AI自动对数据进行分类和路由。只需定义类型,系统即可自动完成分类。

模型上下文协议(MCP)

构建模块化、可重用的人工智能工具,以便在不同应用程序之间共享,从而促进代码的重用和可维护性。


🤝 贡献(或“参与贡献”)

欢迎贡献!请随时提交拉取请求。


🙏 致谢

使用(以下材料/技术)建造 Jac 语言 并由OpenAI的GPT模型提供支持。


💬 支持

对于问题和疑问: