HarmoniAI-多智能体聊天机器人系统
概述
HarmoniAI是一个复杂的多代理聊天机器人系统,旨在通过智能地将用户提示路由到专门的代理来处理各种任务。它利用多个大型语言模型(LLM)和向量数据库,为问答、内容创建、购物辅助、媒体推荐等功能提供准确、上下文感知的响应。
该系统采用FastAPI后端构建,并利用 模型上下文协议(MCP) 规范与LLM客户的沟通和上下文共享。
主要特点
- 多代理架构: 对用户意图进行动态分类,并将任务委托给专门的代理(例如购物、问答、内容创建)。
- 多LLM支持: 与各种LLM提供商集成,包括OpenAI、Groq和Google Gemini,实现灵活性和优化。
- 矢量数据库集成: 使用Weaviate对产品和媒体等上下文数据进行高效的相似性搜索和检索。
- 实时数据索引: 从外部源异步获取和更新其知识库。
- 符合MCP标准: 实现模型上下文协议(通过包含的
python-sdk)用于与LLM应用程序进行标准化交互。 - 安全API: 端点使用基于JWT的身份验证进行保护。
- 富媒体处理: 能够处理文本、图像和URL,用于图像字幕和内容生成等任务。
系统架构
- FastAPI服务器: 应用程序的核心,为RESTful API提供服务。
- 身份验证: 基于JWT的身份验证层保护API端点。
- 连锁代理: 中央编排器(
chaining_agent.py)接收用户提示。 - 分类器代理: 该代理首先确定用户的意图(例如,“购物”、“聊天”)。
- 专业代理: 该请求被路由到适当的代理(例如。,
shopping_agent,qa_agent)用于加工。 - LLM提供者: 所选代理使用
LLMProvider与外部LLM(如GPT-4、Llama或Gemini)通信的服务。 - 编织数据库: 代理查询Weaviate矢量数据库以检索相关上下文(例如产品信息、文章),从而丰富提示。
- 响应生成: 代理生成最终响应,其中可能包括文本、数据或对其他模型的建议(例如,建议文本到图像模型)。
EachLabs模型注册表的作用
EachLabs服务是充当 动态模型注册表 HarmoniAI系统。它允许应用程序高度灵活和可扩展,而不需要更改代码来支持新的AI模型。
其工作原理如下:
- 模型发现: 在任务开始时
chaining_agent查询EachLabs API以获得所有可用人工智能模型的完整、最新目录,包括它们的能力、类别(例如。,text-to-image)以及定价。 - 意图分类: 此目录由
classify_prompt_agent了解可能的用户意图的范围。 - 动态模型推荐: 一旦知道意图,系统就可以过滤目录,并向用户推荐合适的型号列表。例如,如果意图是生成图像,则向用户呈现可用文本到图像模型的列表。
- 执行: 用户选择一个模型,然后应用程序使用该特定模型执行任务。
这种方法将应用程序的核心逻辑与其支持的特定模型解耦,只需更新EachLabs注册表,就可以轻松地在系统中添加或删除模型。
使用的技术
- 后端: Uvicorn快速API
- LLM集成: OpenAI、Groq、谷歌双子座
- 数据库: Weaviate(矢量数据库)
- LLM通信: 模型上下文协议(MCP)
- 行程安排: APScheduler
- 身份验证: PyJWT
- 依赖关系: 看
requirements.txt查看完整列表。
设置和安装
1.克隆存储库
git clone
cd HarmoniAI2.创建虚拟环境
建议使用虚拟环境来管理依赖关系。
python -m venv venv
source venv/bin/activate # On Windows, use `venv\Scripts\activate`3.安装依赖项
安装所有必需的Python包。
pip install -r requirements.txt4.设置环境变量
应用程序需要API密钥和其他机密。创建一个 .env 通过复制示例文件,将文件复制到根目录中:
cp .env.example .env现在,编辑 .env 归档并添加您的凭据。以下是对每个变量的描述:
LLM和AI服务密钥
OPENAI_API_KEY:用于访问OpenAI服务(例如,GPT模型)的API密钥。GROQ_API_KEY:Groq LLM提供商的API密钥。GEMINI_API_KEY:你的API密钥为谷歌的双子星模型。EACHLABS_API_KEY:EachLabs服务的API密钥,用于获取有关可用人工智能模型的信息。SERPAPI_KEY:SerpApi等服务的API密钥,允许代理执行实时网络搜索以获取最新信息。
Cloudflare R2对象存储
这些变量将应用程序连接到Cloudflare R2存储桶进行文件存储。
R2_ENDPOINT_URL:R2存储桶的API端点URL。R2_ACCESS_KEY:R2帐户的访问密钥ID。R2_SECRET_KEY:您R2帐户的秘密访问密钥。R2_REGION:R2 bucket的区域(例如“auto”)。R2_BUCKET_NAME:要使用的R2 bucket的名称。R2_PUBLIC_BASE_URL:访问存储桶中文件的面向公众的基本URL。
应用程序安全和数据库
JWT_ACCESS_SECRET:用于签名和验证JSON Web令牌(JWT)以保护API安全的长、随机和秘密字符串。WEAVIATE_HOST:Weaviate数据库HTTP端点的主机名。WEAVIATE_GRPC_HOST:Weaviate数据库的gRPC端点的主机名。WEAVIATE_API_KEY:Weaviate数据库实例的身份验证密钥。
运行应用程序
设置完成后,您可以使用Uvicorn运行FastAPI服务器:
uvicorn app.main:app --host 0.0.0.0 --port 10000 --reload这 --reload flag允许热重载,这对开发很有用。该应用程序将在 http://localhost:10000.
API 文档
随着服务器的运行,交互式API文档(Swagger UI)可在以下位置获得:
http://localhost:10000/docs
您可以使用此接口来探索和测试API端点。记住在“授权”部分添加JWT令牌以访问受保护的路由。
项目结构
HarmoniAI/
├── app/ # Main application source code
│ ├── agents/ # Specialized agents for different tasks
│ ├── routes/ # API endpoint definitions
│ ├── services/ # Business logic and external service integrations
│ ├── schemas/ # Pydantic models for data validation
│ ├── main.py # FastAPI application entry point
│ └── ...
├── python-sdk/ # Model Context Protocol (MCP) SDK
├── requirements.txt # Project dependencies
├── .env # Environment variables (you need to create this)
└── README.md # This file