/MME

One-stop, plug-and-play platform for logging, replaying and benchmarking large-language-model calls.

Primary LanguageCSSMIT LicenseMIT

MME - 模型管理评测系统

MME(Model Management & Evaluation)是一个基于 Blazor Server Side 构建的现代化 LLM 日志追踪、回放、评测一体化平台,为企业级 AI 应用提供全方位的模型管理和效果评估解决方案。

✨ 核心功能特性

🔀 智能代理切换

  • 多配置管理:支持管理多个不同 LLM 服务商(OpenAI、Azure、Bedrock、私有模型)
  • 智能路由:自动代理转发请求到目标 API 服务,统一接口管理
  • Bearer Token 管理:为每个配置自动生成独立的访问令牌
  • 流式支持:完整支持 SSE 流式响应,实时记录和转发
  • 接口覆盖:支持 /v1/chat/completions/v1/embeddings/v1/rerank/v1/models 等接口
  • 高可用性:支持请求重试、超时配置、自动故障转移

📊 A/B 测试评估

  • 对比测试:对同一批请求进行不同模型间的 A/B 测试
  • 回归测试:验证模型更新后的效果变化
  • 量化分析:科学评估不同模型的效果表现
  • 数据驱动:基于真实请求数据进行模型选择决策

🗂️ 智能数据集管理

  • 多类型支持:支持 QA(问答)、Chat(对话)、Completion(文本完成)等数据集类型
  • 来源多样化:支持从请求日志、手动添加、批量导入等多种方式创建数据集
  • 批量操作:支持 Excel、CSV、JSON 格式的批量导入导出
  • 智能标签:灵活的标签分类和质量评分机制(难度1-5级,质量1-5星)
  • 统计分析:提供详细的数据集统计信息和分布图表
  • 版本管理:支持数据集的状态管理(活跃、归档、删除)

📈 全链路日志追踪

  • 实时记录:自动记录所有 API 请求和响应的完整信息
  • 流式处理:专门优化的流式响应记录和合并机制
  • 详细分析:包含请求体、响应体、耗时、状态码、Token 使用等信息
  • 智能筛选:支持按时间范围、状态码、代理配置、模型名称等多维度筛选
  • 数据导出:支持导出为 Excel 和 Log 文件格式,便于后续分析
  • 性能监控:监控 API 调用性能和成本使用情况

🔄 日志回放功能

  • 一键回放:将历史请求日志快速转换为测试数据集
  • 智能去重:自动检测和跳过已存在的重复数据
  • 批量添加:支持批量选择日志条目添加到数据集
  • 元数据保留:保留原始请求的模型名称、代理信息等元数据
  • 质量标注:支持为回放数据添加难度和质量评分

🛠️ 技术架构

前端技术栈

  • Blazor Server Side:.NET 8.0 原生 Web 框架
  • Ant Design Blazor:企业级 UI 组件库
  • 响应式设计:适配多种设备和屏幕尺寸

后端技术栈

  • ASP.NET Core 8.0:高性能 Web API 框架
  • Yarp 反向代理:微软官方反向代理解决方案
  • 中间件架构:自定义代理日志中间件

数据存储

  • 主数据库:PostgreSQL / SQLite 双模式支持
  • ORM 框架:SqlSugar,支持 Code First
  • 向量存储:预留向量数据库支持接口

第三方集成

  • Microsoft.SemanticKernel.Core:AI 应用开发框架
  • AutoMapper:对象映射框架
  • NPOI:Excel 文件处理
  • Polly:重试和熔断策略

🚀 快速开始

环境要求

  • .NET 8.0 SDK 或更高版本
  • PostgreSQL 12+SQLite(开发环境)
  • Docker(可选,用于容器部署)

本地开发部署

  1. 克隆项目
git clone https://github.com/xuzeyu91/MME
cd MME
  1. 配置数据库连接

编辑 src/MME/appsettings.json 文件:

PostgreSQL 配置(生产推荐):

{
  "DBConnection": {
    "DbType": "PostgreSQL",
    "DBConnection": "Host=localhost;Port=5432;Database=mme;User ID=your_user;Password=your_password;",
    "VectorConnection": "Host=localhost;Port=5432;Database=mme;User ID=your_user;Password=your_password;",
    "VectorSize": 1536
  }
}

SQLite 配置(开发环境):

{
  "DBConnection": {
    "DbType": "Sqlite",
    "DBConnection": "Data Source=mme.db",
    "VectorConnection": "mmevector.db",
    "VectorSize": 1536
  }
}
  1. 配置管理员账户
{
  "Admin": {
    "Username": "admin",
    "Password": "your_secure_password"
  }
}
  1. 配置 OpenAI 设置(可选)
{
  "OpenAI": {
    "Key": "your_openai_api_key",
    "EndPoint": "https://api.openai.com",
    "ChatModel": "gpt-4o",
    "EmbeddingModel": "text-embedding-ada-002"
  }
}
  1. 启动应用
cd src/MME
dotnet restore
dotnet run
  1. 访问系统
  • 打开浏览器访问:http://localhost:5000
  • 使用配置的管理员账户登录系统

Docker 容器部署

方法一:Docker Compose 一键部署(推荐)

使用 Docker Compose 可以自动部署 MME 系统,支持 PostgreSQL 和 SQLite 两种数据库:

  1. 下载配置文件
# 如果已克隆项目
cd MME

# 或直接下载必需文件
wget https://raw.githubusercontent.com/xuzeyu91/MME/main/docker-compose.yaml
wget https://raw.githubusercontent.com/xuzeyu91/MME/main/appsettings.Production.json

# 如果只想使用配置文件方式(不使用环境变量)
wget https://raw.githubusercontent.com/xuzeyu91/MME/main/docker-compose.config.yaml
mv docker-compose.config.yaml docker-compose.yaml

# 如果想使用 SQLite 快速体验(无需 PostgreSQL 数据库)
wget https://raw.githubusercontent.com/xuzeyu91/MME/main/docker-compose.sqlite.yaml
mv docker-compose.sqlite.yaml docker-compose.yaml
  1. 启动服务
docker-compose up -d
  1. 查看服务状态
docker-compose ps
  1. 访问系统
  • 打开浏览器访问:http://localhost:5000
  • 默认用户名:admin,密码:123456

💡 选择不同的部署版本:

  • 默认版本:PostgreSQL 数据库,适合生产环境
  • 快速体验版:SQLite 数据库,适合开发和测试
  • 配置文件版:通过 appsettings.json 配置,更易管理
  1. 停止服务
docker-compose down
  1. 完全清理(包括数据卷)
docker-compose down -v

自定义配置

有两种方式可以自定义 MME 系统配置:

方式一:配置文件挂载(推荐)

  1. 修改项目根目录下的 appsettings.Production.json 文件:
{
  "DBConnection": {
    "DbType": "PostgreSQL",
    "DBConnection": "Host=postgres;Port=5432;Database=mme;User ID=mme_user;Password=mme_password;",
    "VectorConnection": "Host=postgres;Port=5432;Database=mme;User ID=mme_user;Password=mme_password;",
    "VectorSize": 1536
  },
  "Admin": {
    "Username": "your_admin",
    "Password": "your_secure_password"
  },
  "OpenAI": {
    "Key": "your_openai_api_key",
    "EndPoint": "https://api.openai.com",
    "ChatModel": "gpt-4o",
    "EmbeddingModel": "text-embedding-ada-002"
  }
}
  1. 启动服务(配置文件会自动挂载到容器内):
docker-compose up -d

方式二:环境变量配置

如果您更喜欢使用环境变量,可以注释掉配置文件挂载,并取消注释 docker-compose.yaml 中的环境变量:

environment:
  # 取消注释以下配置
  DBConnection__DbType: "PostgreSQL"
  DBConnection__DBConnection: "Host=postgres;Port=5432;Database=mme;User ID=mme_user;Password=mme_password;"
  Admin__Username: "your_admin"
  Admin__Password: "your_secure_password"
  OpenAI__Key: "your_openai_api_key"
  
# 注释掉配置文件挂载
# volumes:
#   - ./appsettings.Production.json:/app/appsettings.Production.json:ro

方法二:单独运行容器

如果您已有 PostgreSQL 数据库,可以单独运行 MME 容器:

  1. 拉取镜像
docker pull registry.cn-hangzhou.aliyuncs.com/xuzeyu91/mme:v0.1.0
  1. 运行容器

使用 PostgreSQL(生产推荐):

docker run -d \
  --name mme \
  -p 5000:5000 \
  -e DBConnection__DbType="PostgreSQL" \
  -e DBConnection__DBConnection="Host=your_db_host;Port=5432;Database=mme;User ID=your_user;Password=your_password;" \
  -e Admin__Username="admin" \
  -e Admin__Password="your_secure_password" \
  registry.cn-hangzhou.aliyuncs.com/xuzeyu91/mme:v0.1.0

使用 SQLite(快速体验):

docker run -d \
  --name mme \
  -p 5000:5000 \
  -v mme_data:/app \
  -e DBConnection__DbType="Sqlite" \
  -e DBConnection__DBConnection="Data Source=mme.db" \
  -e DBConnection__VectorConnection="mmevector.db" \
  -e Admin__Username="admin" \
  -e Admin__Password="your_secure_password" \
  registry.cn-hangzhou.aliyuncs.com/xuzeyu91/mme:v0.1.0

方法三:自行构建镜像

如果您需要修改代码或自定义构建:

  1. 构建镜像
docker build -t mme:latest .
  1. 运行容器
docker run -d \
  --name mme \
  -p 5000:5000 \
  -e DBConnection__DbType="SQLite" \
  -e DBConnection__DBConnection="Data Source=mme.db" \
  -e Admin__Username="admin" \
  -e Admin__Password="your_secure_password" \
  mme:latest

环境变量配置说明

MME 系统支持通过环境变量进行配置,主要配置项如下:

环境变量 说明 默认值 示例
DBConnection__DbType 数据库类型 PostgreSQL PostgreSQLSqlite
DBConnection__DBConnection 数据库连接字符串 - Host=postgres;Port=5432;Database=mme;User ID=mme_user;Password=mme_password;
DBConnection__VectorConnection 向量数据库连接字符串 - 同数据库连接字符串
DBConnection__VectorSize 向量维度大小 1536 1536
Admin__Username 管理员用户名 admin admin
Admin__Password 管理员密码 123456 请修改为强密码
OpenAI__Key OpenAI API 密钥 - sk-xxx...
OpenAI__EndPoint OpenAI API 端点 https://api.openai.com 自定义端点地址
OpenAI__ChatModel 默认聊天模型 gpt-4o 模型名称
OpenAI__EmbeddingModel 默认嵌入模型 text-embedding-ada-002 模型名称
ASPNETCORE_URLS 应用监听地址 http://0.0.0.0:5000 绑定地址和端口
ASPNETCORE_ENVIRONMENT 应用环境 Production DevelopmentProduction

生产环境部署建议

  1. 安全配置

    • 修改默认管理员密码
    • 使用强密码保护数据库
    • 配置 HTTPS 证书
    • 限制网络访问权限
  2. 性能优化

    • 调整 PostgreSQL 配置参数
    • 配置适当的内存和 CPU 资源
    • 启用数据库连接池
    • 定期清理历史日志数据
  3. 监控告警

    • 监控容器运行状态
    • 监控数据库性能指标
    • 配置日志收集和分析
    • 设置存储空间告警

📖 使用指南

1. 系统登录

  • 使用配置的管理员账户登录系统
  • 默认账户:用户名 admin,密码 123456
  • 重要:首次登录后请立即修改默认密码

登录界面

2. 配置 API 代理

  1. 导航到「代理配置管理」页面
  2. 点击「添加配置」按钮
  3. 填写代理配置信息:
    • 配置名称:便于识别的名称(如:OpenAI-GPT4)
    • 目标地址:API 服务商地址(如:https://api.openai.com
    • API 密钥:目标服务的 API Key
    • 超时设置:请求超时时间(默认300秒)
    • 重试次数:失败重试次数(默认3次)
    • 支持接口:选择需要代理的接口类型
  4. 保存后系统自动生成专用的 Bearer Token

代理配置界面

3. 使用代理 API

配置完成后,使用生成的 Bearer Token 调用代理接口:

# Chat Completions 示例
curl -X POST http://localhost:5000/v1/chat/completions \
  -H "Authorization: Bearer your_generated_bearer_token" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "gpt-4",
    "messages": [
      {"role": "user", "content": "你好,请介绍一下MME系统"}
    ],
    "stream": true
  }'

# Embeddings 示例
curl -X POST http://localhost:5000/v1/embeddings \
  -H "Authorization: Bearer your_generated_bearer_token" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "text-embedding-ada-002",
    "input": "MME是一个LLM管理平台"
  }'

4. 数据集管理操作

创建数据集

  1. 进入「数据集管理」页面
  2. 点击「创建数据集」
  3. 填写数据集信息:
    • 数据集名称:唯一标识名称
    • 描述信息:数据集用途和说明
    • 数据类型:QA(问答)、Chat(对话)、Completion(文本完成)
    • 标签分类:便于后续筛选和管理

添加数据项

支持多种方式添加数据:

  • 手动添加:逐条添加高质量数据
  • 批量导入:支持 Excel、CSV、JSON 格式
  • 日志回放:从历史请求日志中筛选和转换

数据集导出

  • Excel 格式:包含完整数据项信息,便于离线查看编辑
  • Log 格式:适合程序处理和模型训练的格式

数据集管理界面

5. 请求日志分析

  1. 进入「请求日志」页面查看所有 API 调用记录
  2. 使用筛选功能:
    • 时间范围:查看特定时间段的请求
    • 状态码:筛选成功/失败的请求
    • 代理配置:按不同配置分组查看
    • 模型名称:按使用的模型分类
  3. 查看详细信息:
    • 点击日志条目查看完整的请求响应详情
    • 流式响应自动合并显示最终内容
    • Token 使用统计和成本分析
  4. 导出分析:
    • 支持导出筛选结果为 Excel 或 Log 文件
    • 便于进行离线分析和报告生成

请求日志界面

6. A/B 测试和效果评估

  1. 从历史日志中选择测试数据集
  2. 配置多个模型的代理
  3. 使用相同输入测试不同模型
  4. 对比分析响应质量和性能指标
  5. 基于结果数据做出模型选择决策

🔧 系统配置

主要配置参数

配置项 说明 默认值 备注
urls 应用监听地址 http://*:5000 生产环境建议使用 HTTPS
ProSettings.Title 应用标题 MME 可自定义品牌名称
DBConnection.DbType 数据库类型 PostgreSQL 支持 PostgreSQL/SQLite
Admin.Username 管理员用户名 admin 建议使用强用户名
Admin.Password 管理员密码 123456 必须修改默认密码

代理配置参数

参数 说明 默认值 调优建议
TimeoutSeconds 请求超时时间(秒) 3000 根据模型响应时间调整
MaxRetries 最大重试次数 3 平衡可用性和性能
LogRequestBody 是否记录请求体 true 开发环境建议开启
LogResponseBody 是否记录响应体 true 注意存储空间占用

性能优化建议

  1. 数据库优化

    • 生产环境使用 PostgreSQL
    • 定期清理过期日志数据
    • 适当建立索引提升查询性能
  2. 内存管理

    • 大文件导出时注意内存使用
    • 流式响应缓存适当限制大小
    • 定期重启应用释放内存
  3. 网络配置

    • 配置适当的超时时间
    • 启用 HTTP/2 支持
    • 使用 CDN 加速静态资源

📁 项目架构

MME/
├── src/
│   ├── MME/                          # 主应用程序
│   │   ├── Controllers/              # API 控制器
│   │   │   ├── OpenAIProxyController.cs  # OpenAI 代理控制器
│   │   │   └── ProxyController.cs    # 代理配置 API
│   │   ├── Pages/                    # Blazor 页面组件
│   │   │   ├── Index.razor           # 系统首页
│   │   │   ├── DatasetManagement.razor  # 数据集管理
│   │   │   ├── DatasetDetail.razor   # 数据集详情
│   │   │   ├── ProxyConfig.razor     # 代理配置管理
│   │   │   ├── RequestLogs.razor     # 请求日志查看
│   │   │   ├── UserGuide.razor       # 使用手册
│   │   │   └── User/                 # 用户认证页面
│   │   ├── Components/               # 可复用组件
│   │   │   ├── GlobalHeader/         # 全局头部组件
│   │   │   └── RequestLogDetailModal.razor  # 日志详情弹窗
│   │   ├── Layouts/                  # 页面布局模板
│   │   ├── Services/Auth/            # 认证服务
│   │   └── wwwroot/                  # 静态资源
│   └── MME.Domain/                   # 领域层
│       ├── Repositories/             # 数据仓储层
│       │   ├── ApiRequestLog/        # API 日志仓储
│       │   ├── Dataset/              # 数据集仓储
│       │   ├── ProxyConfig/          # 代理配置仓储
│       │   └── Base/                 # 基础仓储
│       ├── Services/                 # 领域服务层
│       ├── Middlewares/              # 中间件
│       │   └── ProxyLoggingMiddleware.cs  # 代理日志中间件
│       ├── Common/                   # 公共组件
│       │   ├── Extensions/           # 扩展方法
│       │   ├── Options/              # 配置选项
│       │   └── Excel/                # Excel 处理
│       └── Utils/                    # 工具类
├── Dockerfile                        # Docker 容器配置
├── docker-compose.yaml               # Docker Compose 配置文件(PostgreSQL + 支持环境变量和配置文件)
├── docker-compose.config.yaml        # Docker Compose 配置文件(PostgreSQL + 纯配置文件方式)
├── docker-compose.sqlite.yaml        # Docker Compose 配置文件(SQLite + 快速体验版)
├── appsettings.Production.json       # 生产环境配置文件模板
└── README.md                         # 项目文档

🎯 应用场景

企业 AI 应用开发

  • 为企业内部 AI 应用提供统一的模型接入和管理平台
  • 支持多团队、多项目的模型资源共享
  • 提供完整的 API 调用链路追踪和监控

模型效果评估

  • 对不同 LLM 模型进行科学的 A/B 测试
  • 基于真实业务数据评估模型效果
  • 支持模型更新后的回归测试验证

成本优化分析

  • 实时监控 Token 使用情况和 API 调用成本
  • 分析不同模型的性价比
  • 优化模型选择策略降低运营成本

数据集构建和管理

  • 从生产环境的真实请求中构建高质量测试数据集
  • 支持数据集版本管理和质量评估
  • 便于进行模型fine-tuning和效果验证

🔮 后续规划

  • AI 模型效果自动评测平台
  • 智能化的模型推荐和切换
  • 与 MLOps 平台深度集成
  • 支持自定义模型接入和管理

🤝 贡献指南

欢迎提交 Issue 和 Pull Request 来改进项目!

开发环境搭建

  1. 安装 .NET 8.0 SDK
  2. 安装 PostgreSQL 数据库
  3. 克隆项目并还原依赖包
  4. 配置开发环境数据库连接
  5. 运行项目进行开发和调试

代码贡献规范

  • 遵循 C# 和 Blazor 最佳实践
  • 使用有意义的变量和方法命名
  • 添加必要的代码注释和文档
  • 提交前确保代码通过编译和基本测试

Issue 提交指南

  • 使用清晰的标题描述问题
  • 提供详细的问题复现步骤
  • 包含相关的错误日志和截图
  • 标明使用的操作系统和 .NET 版本

📄 开源协议

本项目采用 MIT 开源协议,详情请参阅 LICENSE 文件。

📚 系统使用手册

系统内置了详细的使用手册,帮助用户快速上手:

使用手册界面

🆘 技术支持

如果您在使用过程中遇到问题:

  1. 📖 查看本文档的详细说明
  2. 🔍 搜索已有的 Issue 和解决方案
  3. 💬 提交新的 Issue 描述问题
  4. 📧 联系开发团队获取技术支持

MME - 让 LLM 模型管理和评测更智能、更高效!

🌟 Star 项目以支持我们的工作
🔄 Fork 项目开始您的贡献
📢 Share 将 MME 推荐给更多开发者