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 用量
  • 流式响应支持:边转发边收集,不改变流式行为
  • 并发安全:多请求并发写入报告时自动加锁
  • 独立日志分析工具llmproxy-analyze 命令行工具,支持对历史日志做离线分析和统计

安装

方式一:从 PyPI 安装(推荐)

pip install llmproxy-withlog

安装后可直接使用 llmproxy 命令启动服务:

# 查看帮助
llmproxy --help

# 启动服务(需提前准备好 config.ini)
llmproxy --config /path/to/config.ini

方式二:从源码安装

git clone https://github.com/hkjgvugkjh/llmproxy.git
cd llmproxy
pip install -r requirements.txt
python -m llmproxy

环境要求

  • Python 3.10+
  • 依赖:fastapi httpx uvicorn

快速开始

1. 配置

编辑 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   # 可选,留空不校验

2. 启动

# PyPI 安装后直接运行
llmproxy --config config.ini

# 或前台启动(源码方式)
python -m llmproxy --config config.ini

# 后台启动
./start.sh

# systemd 服务
sudo cp llmproxy.service /etc/systemd/system/
sudo systemctl enable --now llmproxy

3. 调用示例

# 列出可用模型
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/
├── llmproxy/             # 核心包
│   ├── __init__.py
│   ├── __main__.py       # python -m llmproxy 入口
│   ├── server.py         # FastAPI 代理服务器
│   ├── analyzer.py       # 日志分析模块
│   └── cli.py            # 命令行入口
├── config.ini            # 配置文件(需自行填写)
├── pyproject.toml        # 包构建配置
├── requirements.txt      # Python 依赖
├── start.sh              # 后台启动脚本
├── llmproxy.service      # systemd 服务文件
├── README.md             # 本文件
├── logs/                 # 请求日志(自动生成)
│   └── YYYYMMDD.log
└── reports/              # 对话分析报告(自动生成)
    └── YYYYMMDD-analysis.txt

日志分析工具

安装后可使用 llmproxy-analyze 命令行工具,或直接运行 llmproxy.analyzer 模块:

# PyPI 安装后
llmproxy-analyze logs/20260523.log --only-user

# 源码方式
python -m llmproxy.analyzer logs/20260523.log --only-user

# 输出 JSON 格式
llmproxy-analyze logs/20260523.log --format json -o result.json

# 仅统计信息
llmproxy-analyze logs/20260523.log --stats

# 分析所有日志
llmproxy-analyze --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.1.tar.gz (12.7 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.1-py3-none-any.whl (11.9 kB view details)

Uploaded Python 3

File details

Details for the file llmproxy_withlog-1.0.1.tar.gz.

File metadata

  • Download URL: llmproxy_withlog-1.0.1.tar.gz
  • Upload date:
  • Size: 12.7 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.1.tar.gz
Algorithm Hash digest
SHA256 7f5a8606c82494d1506a8be591ee1817d953f1fb80789ad8ad62c3e5a0cfa181
MD5 2616016907c216b813a1d55e2003c5b3
BLAKE2b-256 c7336448c8f4f768d72a84e2e6bd85cd6366cc6e2011681a09200481e50203c8

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for llmproxy_withlog-1.0.1-py3-none-any.whl
Algorithm Hash digest
SHA256 23409d076aa8e951f1f35767bc01879a2858cdf8c6ebfd6aba23d272ac2065e9
MD5 2db85795477fa61f746a243f13b0ef73
BLAKE2b-256 9f8396ec5a7132a60df267cc2f1641291519747a7b73158205fff53549c93bff

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