LLM自上而下建筑项目
概述
该项目实现了 自上而下的LLM架构 它结合了大型语言模型推理、模型上下文协议(MCP)通信和Azure表存储集成。该系统被设计为分布式架构,由三个主要组件协同工作,提供人工智能驱动的数据查询功能。
建筑
┌─────────────────┐ ┌─────────────────┐ ┌─────────────────┐
│ LM-Server │ │ MCP-Client │ │ MCP-Server │
│ │ │ │ │ │
│ • Llama.cpp │◄──►│ • Tool Calling │◄──►│ • Azure Tables │
│ • OpenAI API │ │ • JSON Parsing │ │ • Query Engine │
│ • FastAPI │ │ • LLM Interface │ │ • FastAPI │
└─────────────────┘ └─────────────────┘ └─────────────────┘组件
🧠 LM服务器
使用Llama.cpp提供与OpenAI兼容的API端点的本地语言模型服务器。
- 目的:文本生成和聊天完成
- 技术:fastapi+calla.cpp+gguf模型
- 特性:流媒体响应、聊天完成、温度控制
🔗 MCP客户端
协调LLM和外部工具之间通信的中间件客户端。
- 目的:工具调用协调和响应解析
- 技术:Python+Pydantic+JSON解析
- 特性:系统提示管理、工具调用验证、错误处理
🗄️ MCP服务器
提供Azure表存储集成的模型上下文协议服务器。
- 目的:从Azure表中查询和检索数据
- 技术:快速API+Azure SDK+异步操作
- 特性:实体计数、过滤查询、JSON响应
主要特点
- 🎯 用户友好的聊天界面:简单
/chat带有web UI的端点,便于交互 - 🔄 分布式体系结构:模块化设计,明确分离关注点
- 📡 OpenAI兼容的API:用于OpenAI API调用的插入式替换
- ⚡ 流媒体支持:服务器发送事件的实时响应流
- 🛠️ 工具集成:通过MCP协议无缝调用工具
- ☁️ 云存储:用于持久数据的Azure表存储
- 🔍 高级查询:筛选和分页数据检索
- 📝 类型安全:完整的Pydantic验证和类型提示
🌟 快速演示-聊天界面
该项目包括 用户友好的网络界面 这使得无需任何设置即可轻松与LLM和工具交互:
✨ 最简单的开始方式:
- 启动LM服务器和MCP服务器(请参阅 运行系统)
- 打开web UI并提出以下问题:
- “Azure表中有多少个实体?” - “给我看亚特兰大所在城市的前5条记录” - “返回行国家为爱尔兰的条目的关键值”
该界面自动处理整个管道: 用户问题→ LLM → 工具选择→ 数据检索→ 格式化响应
快速开始
先决条件
- Python 3.8+
- 康达环境
- Azure存储帐户(用于MCP服务器)
- GGUF模型文件(用于LM服务器)
安装
- 克隆仓库
git clone
cd LLM-Top-Down- 激活conda环境
conda activate llama-http- 为每个组件安装依赖项
# Install LM-Server dependencies
pip install fastapi llama-cpp-python uvicorn
# Install MCP-Client dependencies
pip install pydantic requests
# Install MCP-Server dependencies
pip install fastapi azure-data-tables uvicorn运行系统
- 启动LM服务器 (1号航站楼)
cd LM-Server
uvicorn app.main:app --reload --port 8000- 启动MCP服务器 (2号航站楼)
cd MCP-Server
uvicorn app.main:app --reload --port 8001- \[推荐\]使用Web界面 (最简单的选择)
- LM服务器包括一个内置 /chat 处理所有事务的端点 - 打开您的网络浏览器,使用附带的UI进行即时交互 - 无需额外的客户端设置!
备选方案: 单独运行MCP客户端(终端3)
cd MCP-Client
python client.py🎯 使用示例
选项1:Web界面(推荐)
LM服务器和MCP服务器运行后:
- 打开web UI
http://localhost:5173 - 键入自然语言问题:
- “Azure表中有多少个实体?” - “给我看亚特兰大所在城市的前5条记录” - “返回行国家为爱尔兰的条目的关键值”
选项2:直接API调用
# Use the user-friendly /chat endpoint
curl -X POST "http://localhost:8000/chat" \
-H "Content-Type: application/json" \
-d '{"input": "How many entities are in the Azure table?"}'选项3:MCP客户端(高级)
# Example using the standalone client
question = "How many entities are in the Azure table?"
# The system will:
# 1. Send question to LM-Server
# 2. LLM determines tool needed
# 3. MCP-Client calls MCP-Server
# 4. Returns formatted response配置
- LM服务器:更新
MODEL_PATH在LM-Server/app/main.py - MCP服务器:在中配置Azure连接字符串
MCP-Server/utils/azure_table.py - MCP客户端:修改中的系统提示
MCP-Client/client.py
发展
每个组件包括:
- 📁 详细组件README
- 🧪 测试文件和示例
- 📝 开发说明和文件
- 🔧 实用函数和助手
贡献
贡献时:
- 遵循现有的代码结构
- 更新相关的README文件
- 一起测试所有三个组件
- 确保类型提示和验证
______________________________________________________________________
备注:此项目演示了具有工具调用功能的分布式LLM架构的实际实现。每个组件都可以独立开发和部署,同时保持系统的凝聚力。
