name: azure-proxy
description: 通过轻量级本地代理,实现 Azure OpenAI 与 OpenClaw 的集成。适用于以下场景:将 Azure OpenAI 配置为模型提供者时;在 OpenClaw 中使用 Azure OpenAI 遇到 404 错误时;或需要在 OpenClaw 子代理中使用 Azure 额度(例如 Visual Studio 订阅)。该代理解决了因 api-version 查询参数问题导致的 Azure OpenAI 无法直接集成的问题。
一个轻量级的 Node.js 代理,用于桥接 Azure OpenAI 与 OpenClaw。
OpenClaw 构建 API URL 的方式如下:
const endpoint = `${baseUrl}/chat/completions`;
而 Azure OpenAI 要求的 URL 格式为:
https://{resource}.openai.azure.com/openai/deployments/{model}/chat/completions?api-version=2025-01-01-preview
当 api-version 参数存在于 baseUrl 中时,OpenClaw 追加路径的操作会破坏 URL 结构。
# 设置您的 Azure 信息
export AZURE_OPENAI_ENDPOINT="your-resource.openai.azure.com"
export AZURE_OPENAI_DEPLOYMENT="gpt-4o"
export AZURE_OPENAI_API_VERSION="2025-01-01-preview"
# 运行代理
node scripts/server.js
在 ~/.openclaw/openclaw.json 中添加:
{
"models": {
"providers": {
"azure-gpt4o": {
"baseUrl": "http://127.0.0.1:18790",
"apiKey": "YOUR_AZURE_API_KEY",
"api": "openai-completions",
"authHeader": false,
"headers": {
"api-key": "YOUR_AZURE_API_KEY"
},
"models": [
{ "id": "gpt-4o", "name": "GPT-4o (Azure)" }
]
}
}
},
"agents": {
"defaults": {
"models": {
"azure-gpt4o/gpt-4o": {}
}
}
}
}
重要提示: 设置 authHeader: false —— Azure 使用 api-key 请求头,而非 Bearer 令牌。
通过将自动化任务路由至 Azure,以节省 Azure 额度:
{
"agents": {
"defaults": {
"subagents": {
"model": "azure-gpt4o/gpt-4o"
}
}
}
}
复制模板并进行配置:
mkdir -p ~/.config/systemd/user
cp scripts/azure-proxy.service ~/.config/systemd/user/
# 使用您的 Azure 信息编辑服务文件
nano ~/.config/systemd/user/azure-proxy.service
# 启用并启动服务
systemctl --user daemon-reload
systemctl --user enable azure-proxy
systemctl --user start azure-proxy
| 变量名 | 默认值 | 描述 |
|---|---|---|
AZURE_PROXY_PORT |
18790 |
本地代理端口 |
AZURE_PROXY_BIND |
127.0.0.1 |
绑定地址 |
AZURE_OPENAI_ENDPOINT |
— | Azure 资源主机名 |
AZURE_OPENAI_DEPLOYMENT |
gpt-4o |
部署名称 |
AZURE_OPENAI_API_VERSION |
2025-01-01-preview |
API 版本 |
curl http://localhost:18790/health
# {"status":"ok","deployment":"gpt-4o"}
404 资源未找到: 检查终端主机名和部署名称是否与 Azure 门户中的信息匹配。
401 未授权: API 密钥错误或已过期。
内容过滤错误: Azure 具有严格的内容过滤策略 —— 某些在 OpenAI 上可用的提示词可能会被阻止。