Wang Defa 6a5e6bcf7c
All checks were successful
Build and Push OCI GenAI Gateway Docker Image / docker-build-push (push) Successful in 33s
修正 Dockerfile 和 docker-compose.yml 配置,优化环境变量设置和健康检查命令
2025-12-09 16:23:05 +08:00
2025-12-09 14:44:09 +08:00
2025-12-09 14:44:09 +08:00
2025-12-09 14:44:09 +08:00
2025-12-09 14:44:09 +08:00
2025-12-09 14:44:09 +08:00

OCI GenAI to OpenAI API 网关

🚀 为 Oracle Cloud Infrastructure 的 Generative AI Service 提供 OpenAI 兼容的 REST API

License Python FastAPI

📖 简介

这是一个 FastAPI 服务,作为 OCI Generative AI 和 OpenAI API 之间的转换层,允许 OpenAI SDK 客户端无需修改代码即可与 OCI GenAI 模型交互。

主要特性

  • 🔄 OpenAI API 兼容: 完全兼容 OpenAI SDK无需修改现有代码
  • 🤖 动态模型发现: 启动时自动从 OCI 获取所有可用模型
  • 🌐 多区域负载均衡: 支持多个 OCI profiles 的 round-robin 负载均衡
  • 🖼️ 多模态支持: 支持文本、图像Vision 模型、Base64 编码等多种内容类型
  • 真实流式传输: 真正的边缘到边缘流式响应TTFB < 200ms
  • 🔒 安全性: 自动过滤敏感信息OCID、request-id、endpoint URLs
  • 🎯 性能优化: 客户端连接池机制,显著提升性能

🚀 快速开始

前置要求

  • Python 3.8+
  • OCI 账号和 API 密钥
  • OCI Generative AI 服务访问权限

🔧 自动配置 OCI 访问权限(推荐)

如果您还没有配置 OCI Generative AI 访问权限,可以使用我们提供的自动化脚本快速完成配置:

# 在 Oracle Cloud Shell 中运行
bash <(curl -sL https://gitea.bcde.io/wangdefa/oracle-openai/raw/branch/main/script/setup-oci-genai-access.sh)

脚本将自动创建:

  • IAM 用户组(用于 Generative AI 访问)
  • IAM 策略(授予必要权限)
  • IAM 用户(用于 API 调用)

详细配置说明请参考:OCI-SETUP-GUIDE.md

安装

  1. 克隆仓库

    git clone <repository-url>
    cd oracle-openai
    
  2. 安装依赖

    pip install -r requirements.txt
    
  3. 配置 OCI

    创建或编辑 ~/.oci/config:

    [DEFAULT]
    user=ocid1.user.oc1...
    fingerprint=aa:bb:cc:dd...
    key_file=~/.oci/oci_api_key.pem
    tenancy=ocid1.tenancy.oc1...
    region=us-chicago-1
    
  4. 配置环境变量

    复制 .env.example.env 并编辑:

    cp .env.example .env
    # 编辑 .env 文件设置 API_KEYS 和其他配置
    
  5. 运行服务

    cd src
    python main.py
    

    服务将在 http://localhost:8000 启动

💻 使用示例

使用 cURL

curl http://localhost:8000/v1/chat/completions \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer sk-oci-genai-default-key" \
  -d '{
    "model": "google.gemini-2.5-pro",
    "messages": [{"role": "user", "content": "你好!"}]
  }'

使用 Python OpenAI SDK

from openai import OpenAI

client = OpenAI(
    api_key="sk-oci-genai-default-key",
    base_url="http://localhost:8000/v1"
)

response = client.chat.completions.create(
    model="google.gemini-2.5-pro",
    messages=[{"role": "user", "content": "你好!"}]
)

print(response.choices[0].message.content)

流式响应

stream = client.chat.completions.create(
    model="google.gemini-2.5-pro",
    messages=[{"role": "user", "content": "从1数到10"}],
    stream=True
)

for chunk in stream:
    if chunk.choices[0].delta.content:
        print(chunk.choices[0].delta.content, end="", flush=True)

Vision 模型(多模态)

response = client.chat.completions.create(
    model="google.gemini-2.5-pro",
    messages=[
        {
            "role": "user",
            "content": [
                {"type": "text", "text": "描述这张图片"},
                {
                    "type": "image_url",
                    "image_url": {
                        "url": "https://example.com/image.jpg"
                    }
                }
            ]
        }
    ]
)

📋 支持的端点

端点 方法 说明
/health GET 健康检查
/v1/models GET 列出所有可用模型
/v1/chat/completions POST 对话补全(支持流式)
/v1/embeddings POST 文本嵌入

🎨 支持的模型

服务启动时自动从 OCI 发现可用模型,包括:

  • Cohere: command-r-plus, command-r-16k 等
  • Meta: llama-3.1-405b, llama-3.1-70b, llama-3.2-90b-vision 等
  • Google: gemini 系列
  • OpenAI: gpt 系列
  • xAI: grok 系列

使用 GET /v1/models 查看所有可用模型。

⚙️ 配置选项

关键环境变量

变量 说明 默认值
API_KEYS API 密钥列表JSON 数组) -
OCI_CONFIG_PROFILE OCI 配置 profile支持多个逗号分隔 DEFAULT
OCI_AUTH_TYPE 认证类型 api_key
MAX_TOKENS 默认最大 token 数 4096
TEMPERATURE 默认温度参数 0.7
ENABLE_STREAMING 全局流式开关 true
LOG_LEVEL 日志级别 INFO

完整配置请参考 .env.example

🌐 多区域负载均衡

支持配置多个 OCI profiles 实现自动负载均衡:

# .env 文件
OCI_CONFIG_PROFILE=DEFAULT,CHICAGO,ASHBURN

系统将使用 round-robin 策略在不同区域之间分配请求。

🐳 Docker 部署

# 使用 docker-compose
docker-compose up

# 或使用 Docker
docker build -t oci-genai-gateway .
docker run -p 8000:8000 --env-file .env oci-genai-gateway

📚 文档

  • CLAUDE.md - 完整的开发文档,包含架构说明、开发指南和调试技巧
  • .env.example - 环境变量配置示例

🔧 故障排除

常见问题

  1. 模型未找到

    • 检查模型 ID 拼写
    • 确认模型在您的 OCI 区域可用
    • 查看启动日志确认模型已加载
  2. 认证失败

    • 验证 ~/.oci/config 配置正确
    • 检查 API 密钥文件权限:chmod 600 ~/.oci/oci_api_key.pem
    • 运行 oci iam region list 测试 OCI 配置
  3. 429 速率限制错误

    • 使用多个 profile 进行负载均衡
    • 等待 1-2 分钟后重试

🤝 贡献

欢迎贡献!请随时提交 issues 或 pull requests。

📄 许可证

本项目基于 UPL (Universal Permissive License) 开源,详见 LICENSE 文件。

🙏 致谢


如果这个项目对您有帮助,请给我们一个 Star

Description
No description provided
Readme MIT 98 KiB
Languages
Python 80.3%
Shell 18.8%
Dockerfile 0.9%