OpenAI-compatible LLM reverse proxy with real-time conversation analytics
Project description
LLM Proxy
OpenAI 兼容的 LLM 反向代理,支持多模型路由、请求日志记录和实时对话分析报告。
功能特性
- 多模型路由:通过
config.ini配置多个上游 LLM 客户端,统一用 OpenAI 格式调用 - 请求日志:每次请求/响应自动记录到
logs/YYYYMMDD.log - 实时分析报告:每个请求完成后自动追加到
reports/YYYYMMDD-analysis.txt,包含:- 用户输入(仅 user 角色)
- LLM 完整输出(流式响应自动合并 SSE chunk)
- 工具调用详情
- Token 用量
- 流式响应支持:边转发边收集,不改变流式行为
- 并发安全:多请求并发写入报告时自动加锁
- 独立日志分析工具:
analyze_logs.py支持对历史日志做离线分析和统计
环境要求
- Python 3.10+
- 依赖:
fastapihttpxuvicorn
快速开始
1. 安装依赖
pip install -r requirements.txt
2. 配置
编辑 config.ini,填入你的上游 LLM 信息:
[models]
my-model = YOUR_API_KEY|https://api.openai.com/v1|gpt-4o
[proxy]
host = 0.0.0.0
port = 8000
[auth]
proxy_api_key = my-secret-key # 可选,留空不校验
3. 启动
# 前台启动
python3 llm_proxy.py
# 后台启动
./start.sh
# systemd 服务
sudo cp llmproxy.service /etc/systemd/system/
sudo systemctl enable --now llmproxy
4. 调用示例
# 列出可用模型
curl -s http://localhost:8000/v1/models \
-H "Authorization: Bearer my-secret-key" | jq
# 对话
curl -s http://localhost:8000/v1/chat/completions \
-H "Authorization: Bearer my-secret-key" \
-H "Content-Type: application/json" \
-d '{"model":"my-model","messages":[{"role":"user","content":"你好"}]}'
API 端点
| 方法 | 路径 | 说明 |
|---|---|---|
| GET | /v1/version |
版本信息 |
| GET | /v1/props |
配置信息(模型列表等) |
| GET | /v1/models |
模型列表(OpenAI 格式) |
| ALL | /v1/{path} |
透传到上游(支持 POST/GET/PUT/DELETE/PATCH) |
文件结构
llmproxy/
├── llm_proxy.py # 主程序(代理 + 实时报告)
├── analyze_logs.py # 离线日志分析工具
├── daily_analyze.sh # 每日分析定时脚本
├── config.ini # 配置文件(需自行填写)
├── requirements.txt # Python 依赖
├── start.sh # 后台启动脚本
├── llmproxy.service # systemd 服务文件
├── README.md # 本文件
├── logs/ # 请求日志(自动生成)
│ └── YYYYMMDD.log
└── reports/ # 对话分析报告(自动生成)
└── YYYYMMDD-analysis.txt
日志分析工具
analyze_logs.py 支持对历史日志做离线分析:
# 分析指定文件,输出文本报告
python3 analyze_logs.py logs/20260523.log --only-user
# 输出 JSON 格式
python3 analyze_logs.py logs/20260523.log --format json -o result.json
# 仅统计信息
python3 analyze_logs.py logs/20260523.log --stats
# 分析所有日志
python3 analyze_logs.py --all --stats
报告格式示例
──────────────────────────────────────────────────────────────────────
时间: 2026-05-23 15:00:00 模型: my-model 状态: 200 finish: stop
[用户输入]
你好,请介绍一下你自己
[LLM 输出]
你好!我是一个 AI 助手,可以帮你完成各种任务...
[Token] prompt=128 completion=64 total=192
License
MIT
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
llmproxy_withlog-1.0.0.tar.gz
(12.2 kB
view details)
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file llmproxy_withlog-1.0.0.tar.gz.
File metadata
- Download URL: llmproxy_withlog-1.0.0.tar.gz
- Upload date:
- Size: 12.2 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.12.3
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
e96e4bf134091a02c28d11d305f7275073d4561107ba18d3ddfcc4b9c620278d
|
|
| MD5 |
49aa963742142c23980f4dab5e21f515
|
|
| BLAKE2b-256 |
f10916dbaf5a2911aac7875c94322e7a2605d7dab6eac87390291540b68c27dd
|
File details
Details for the file llmproxy_withlog-1.0.0-py3-none-any.whl.
File metadata
- Download URL: llmproxy_withlog-1.0.0-py3-none-any.whl
- Upload date:
- Size: 11.7 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.12.3
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
8148db905502e24430b3159b7609feb71df0a9d3c255a550c765132d8fc980c5
|
|
| MD5 |
3acc7aa01cc241a45ebe981926be8131
|
|
| BLAKE2b-256 |
cef4d41d820119baa6913fce7318a936211802b617dad883b9a462026b1be364
|