DBeaver Proxy to Mistral
一个小型 FastAPI 代理,使 DBeaver CE(及其他兼容 OpenAI 的客户端)能够与 Mistral API 配合使用。

关于 DBeaver 代理到 Mistral
DBeaver 代理到 Mistral 是一个小型的 FastAPI 代理,使 DBeaver CE(及其他与 OpenAI 兼容的客户端)能够与 Mistral API 一起使用。
DBeaver 的 AI 助手使用类似 OpenAI 的 API,但它需要一些非常特定的 JSON 字段和 SSE 事件类型。此代理:
- 提供 OpenAI 兼容的端点(
/responses、/models、旧版/chat/completions) - 将
POST /responses(DBeaver 使用的 OpenAI Responses API 格式)转换为 Mistral 的POST /chat/completions - 将 Mistral 的响应转换回 DBeaver 可以解析且不会产生
NullPointerException的有效负载 - 支持流式传输(Server-Sent Events)和非流式传输
- 可通过环境变量配置,并可作为 systemd 服务运行

支持的端点
代理公开了以下端点(根路径和 /v1/* 别名,适用时):
模型端点
GET /modelsGET /v1/models
返回广告模型列表(通过 MISTRAL_MODELS 配置)。
响应端点
POST /responsesPOST /v1/responses
接受 DBeaver/OpenAI Responses API 请求并将其转发到 Mistral chat/completions。
旧版端点
POST /chat/completionsPOST /v1/chat/completions
直接传递到 Mistral chat/completions(无格式转换)。
配置
配置通过环境变量完成。您可以使用本地 .env 文件(通过 python-dotenv 加载)或在 shell/systemd 环境中设置变量。
环境变量
必需
MISTRAL_API_KEY
可选
MISTRAL_BASE_URL- 默认:https://api.mistral.ai/v1MISTRAL_MODEL- 默认:mistral-large-latest(请求未指定模型时使用)MISTRAL_MODELS- 代理将通过GET /models公告的模型 ID 列表,以逗号分隔HOST- 默认:0.0.0.0PORT- 默认:60916REQUEST_TIMEOUT_SECONDS- 默认:60
配置说明
- 即使未设置
MISTRAL_API_KEY,GET /models仍可正常工作 - 调用 Mistral API 的任何路由(
/responses、/chat/completions)在缺少MISTRAL_API_KEY时将返回 401
本地开发
要求
- Python 3.12+
设置
配置
运行
服务器默认监听 http://0.0.0.0:60916。
代码检查与测试
与 DBeaver 一起使用
在 DBeaver CE 中:
- 将 OpenAI 端点/基本 URL 设置为:
http://<your-server>:60916/v1/ - 设置任意令牌值(DBeaver 需要一个),但代理使用服务器环境中的
MISTRAL_API_KEY
DBeaver 使用:
GET /v1/modelsPOST /v1/responses
Systemd 服务
此仓库包含一个示例 unit 文件和 env 文件模板:
deploy/systemd/dbeaver-mistral-proxy.servicedeploy/systemd/dbeaver-mistral-proxy.env.example
安装
- 创建虚拟环境并安装依赖(见本地开发部分)
- 创建服务使用的环境文件:
- 安装 unit 文件:
日志
Docker
此项目可以作为轻量级容器运行。
构建
运行(Docker)
Docker Compose
版本控制和发布
此项目使用语义化版本控制(SemVer) 和 约定式提交。发布通过 GitHub Actions 中的 python-semantic-release 自动化。
工作原理- 推送到 main 分支会触发发布工作流
python-semantic-release分析提交消息并确定下一个版本- 如果创建了发布,它会:
- 创建一个格式为
vX.Y.Z的 Git 标签 - 更新
pyproject.toml中的project.version - 从模板生成
CHANGELOG.md - 发布带有
latest和vX.Y.Z标签的 Docker 镜像
- 创建一个格式为
规范化提交示例
feat(proxy): 添加 tool_choice 转发-> 次要版本更新fix(api): 处理 gzip 数据体-> 补丁版本更新perf(proxy): 减少内存分配-> 补丁版本更新docs: 更新自述文件-> 无版本更新
重大变更
在提交正文中包含 BREAKING CHANGE: 以触发主要版本更新。
GitHub Actions 密钥
GITHUB_TOKEN- 由 GitHub 自动提供RELEASE_TOKEN(可选) - 具有推送提交/标签权限的 PAT(个人访问令牌)DOCKERHUB_USERNAME(可选)DOCKERHUB_TOKEN(可选)
发布说明
- GHCR 发布使用
github.token,并在创建发布时运行 - Docker Hub 发布仅在设置了
DOCKERHUB_USERNAME和DOCKERHUB_TOKEN时运行
故障排除
DBeaver 错误:"HTTP/1.1 头解析器未接收到字节" / "连接重置"
这通常表示代理在写入响应之前失败。
已实施的缓解措施:
- 对
/responses和/chat/completions的健壮请求解析 - 处理空数据体和
Content-Encoding: gzip - 强制 Uvicorn 使用
h11HTTP 实现以提高兼容性
调试:
日志中出现 "Unsupported upgrade request"
当客户端尝试升级(例如 h2c/WebSocket 风格的升级)时可能会发生这种情况。对于正常的 DBeaver 使用来说,这是预期且无害的。
技术栈
- Python 3.12+ 和 FastAPI 用于代理服务器
- Mistral AI API 集成用于 AI 补全
- DBeaver CE 兼容层
- Docker 用于容器化部署
- Systemd 用于 Linux 服务管理
- 语义化版本控制 与 规范化提交 用于自动化发布
DBeaver Proxy to Mistral 在 DBeaver 的 OpenAI 兼容 API 期望与 Mistral API 之间提供无缝桥接,使开发人员能够在 DBeaver CE 中直接使用 Mistral 的 AI 功能。