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 测试
- 回归测试:验证模型更新后的效果变化
- 量化分析:科学评估不同模型的效果表现
- 数据驱动:基于真实请求数据进行模型选择决策
- 多类型支持:支持 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(可选,用于容器部署)
- 克隆项目
git clone https://github.com/xuzeyu91/MME
cd MME- 配置数据库连接
编辑 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
}
}- 配置管理员账户
{
"Admin": {
"Username": "admin",
"Password": "your_secure_password"
}
}- 配置 OpenAI 设置(可选)
{
"OpenAI": {
"Key": "your_openai_api_key",
"EndPoint": "https://api.openai.com",
"ChatModel": "gpt-4o",
"EmbeddingModel": "text-embedding-ada-002"
}
}- 启动应用
cd src/MME
dotnet restore
dotnet run- 访问系统
- 打开浏览器访问:
http://localhost:5000 - 使用配置的管理员账户登录系统
使用 Docker Compose 可以自动部署 MME 系统,支持 PostgreSQL 和 SQLite 两种数据库:
- 下载配置文件
# 如果已克隆项目
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- 启动服务
docker-compose up -d- 查看服务状态
docker-compose ps- 访问系统
- 打开浏览器访问:
http://localhost:5000 - 默认用户名:
admin,密码:123456
💡 选择不同的部署版本:
- 默认版本:PostgreSQL 数据库,适合生产环境
- 快速体验版:SQLite 数据库,适合开发和测试
- 配置文件版:通过 appsettings.json 配置,更易管理
- 停止服务
docker-compose down- 完全清理(包括数据卷)
docker-compose down -v有两种方式可以自定义 MME 系统配置:
方式一:配置文件挂载(推荐)
- 修改项目根目录下的
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"
}
}- 启动服务(配置文件会自动挂载到容器内):
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 容器:
- 拉取镜像
docker pull registry.cn-hangzhou.aliyuncs.com/xuzeyu91/mme:v0.1.0- 运行容器
使用 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如果您需要修改代码或自定义构建:
- 构建镜像
docker build -t mme:latest .- 运行容器
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:latestMME 系统支持通过环境变量进行配置,主要配置项如下:
| 环境变量 | 说明 | 默认值 | 示例 |
|---|---|---|---|
DBConnection__DbType |
数据库类型 | PostgreSQL |
PostgreSQL 或 Sqlite |
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 |
Development 或 Production |
-
安全配置:
- 修改默认管理员密码
- 使用强密码保护数据库
- 配置 HTTPS 证书
- 限制网络访问权限
-
性能优化:
- 调整 PostgreSQL 配置参数
- 配置适当的内存和 CPU 资源
- 启用数据库连接池
- 定期清理历史日志数据
-
监控告警:
- 监控容器运行状态
- 监控数据库性能指标
- 配置日志收集和分析
- 设置存储空间告警
- 使用配置的管理员账户登录系统
- 默认账户:用户名
admin,密码123456 - 重要:首次登录后请立即修改默认密码
- 导航到「代理配置管理」页面
- 点击「添加配置」按钮
- 填写代理配置信息:
- 配置名称:便于识别的名称(如:OpenAI-GPT4)
- 目标地址:API 服务商地址(如:
https://api.openai.com) - API 密钥:目标服务的 API Key
- 超时设置:请求超时时间(默认300秒)
- 重试次数:失败重试次数(默认3次)
- 支持接口:选择需要代理的接口类型
- 保存后系统自动生成专用的 Bearer Token
配置完成后,使用生成的 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管理平台"
}'- 进入「数据集管理」页面
- 点击「创建数据集」
- 填写数据集信息:
- 数据集名称:唯一标识名称
- 描述信息:数据集用途和说明
- 数据类型:QA(问答)、Chat(对话)、Completion(文本完成)
- 标签分类:便于后续筛选和管理
支持多种方式添加数据:
- 手动添加:逐条添加高质量数据
- 批量导入:支持 Excel、CSV、JSON 格式
- 日志回放:从历史请求日志中筛选和转换
- Excel 格式:包含完整数据项信息,便于离线查看编辑
- Log 格式:适合程序处理和模型训练的格式
- 进入「请求日志」页面查看所有 API 调用记录
- 使用筛选功能:
- 时间范围:查看特定时间段的请求
- 状态码:筛选成功/失败的请求
- 代理配置:按不同配置分组查看
- 模型名称:按使用的模型分类
- 查看详细信息:
- 点击日志条目查看完整的请求响应详情
- 流式响应自动合并显示最终内容
- Token 使用统计和成本分析
- 导出分析:
- 支持导出筛选结果为 Excel 或 Log 文件
- 便于进行离线分析和报告生成
- 从历史日志中选择测试数据集
- 配置多个模型的代理
- 使用相同输入测试不同模型
- 对比分析响应质量和性能指标
- 基于结果数据做出模型选择决策
| 配置项 | 说明 | 默认值 | 备注 |
|---|---|---|---|
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 |
注意存储空间占用 |
-
数据库优化:
- 生产环境使用 PostgreSQL
- 定期清理过期日志数据
- 适当建立索引提升查询性能
-
内存管理:
- 大文件导出时注意内存使用
- 流式响应缓存适当限制大小
- 定期重启应用释放内存
-
网络配置:
- 配置适当的超时时间
- 启用 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 应用提供统一的模型接入和管理平台
- 支持多团队、多项目的模型资源共享
- 提供完整的 API 调用链路追踪和监控
- 对不同 LLM 模型进行科学的 A/B 测试
- 基于真实业务数据评估模型效果
- 支持模型更新后的回归测试验证
- 实时监控 Token 使用情况和 API 调用成本
- 分析不同模型的性价比
- 优化模型选择策略降低运营成本
- 从生产环境的真实请求中构建高质量测试数据集
- 支持数据集版本管理和质量评估
- 便于进行模型fine-tuning和效果验证
- AI 模型效果自动评测平台
- 智能化的模型推荐和切换
- 与 MLOps 平台深度集成
- 支持自定义模型接入和管理
欢迎提交 Issue 和 Pull Request 来改进项目!
- 安装 .NET 8.0 SDK
- 安装 PostgreSQL 数据库
- 克隆项目并还原依赖包
- 配置开发环境数据库连接
- 运行项目进行开发和调试
- 遵循 C# 和 Blazor 最佳实践
- 使用有意义的变量和方法命名
- 添加必要的代码注释和文档
- 提交前确保代码通过编译和基本测试
- 使用清晰的标题描述问题
- 提供详细的问题复现步骤
- 包含相关的错误日志和截图
- 标明使用的操作系统和 .NET 版本
本项目采用 MIT 开源协议,详情请参阅 LICENSE 文件。
系统内置了详细的使用手册,帮助用户快速上手:
如果您在使用过程中遇到问题:
- 📖 查看本文档的详细说明
- 🔍 搜索已有的 Issue 和解决方案
- 💬 提交新的 Issue 描述问题
- 📧 联系开发团队获取技术支持
MME - 让 LLM 模型管理和评测更智能、更高效!
🌟 Star 项目以支持我们的工作
🔄 Fork 项目开始您的贡献
📢 Share 将 MME 推荐给更多开发者




