Skip to main content

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+
  • 依赖:fastapi httpx uvicorn

快速开始

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


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)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

llmproxy_withlog-1.0.0-py3-none-any.whl (11.7 kB view details)

Uploaded Python 3

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

Hashes for llmproxy_withlog-1.0.0.tar.gz
Algorithm Hash digest
SHA256 e96e4bf134091a02c28d11d305f7275073d4561107ba18d3ddfcc4b9c620278d
MD5 49aa963742142c23980f4dab5e21f515
BLAKE2b-256 f10916dbaf5a2911aac7875c94322e7a2605d7dab6eac87390291540b68c27dd

See more details on using hashes here.

File details

Details for the file llmproxy_withlog-1.0.0-py3-none-any.whl.

File metadata

File hashes

Hashes for llmproxy_withlog-1.0.0-py3-none-any.whl
Algorithm Hash digest
SHA256 8148db905502e24430b3159b7609feb71df0a9d3c255a550c765132d8fc980c5
MD5 3acc7aa01cc241a45ebe981926be8131
BLAKE2b-256 cef4d41d820119baa6913fce7318a936211802b617dad883b9a462026b1be364

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page