跳到内容

OpenAI 及兼容 API

安装

您需要安装 openai 库才能在 Outlines 中使用 OpenAI API。或者您可以

pip install "outlines[openai]"

OpenAI 模型

Outlines 支持通过 OpenAI Chat API 提供的模型,例如 GPT-4o、ChatGPT 和 GPT-4。您可以通过将模型名称传递给 outlines.models.openai 来初始化模型。

from outlines import models


model = models.openai("gpt-4o-mini")
model = models.openai("gpt-4o")

查看 OpenAI 文档,获取最新的可用模型列表。您可以将传递给 openai.AsyncOpenAI 的任何参数作为关键字参数传递。

import os
from outlines import models


model = models.openai(
    "gpt-4o-mini",
    api_key=os.environ["OPENAI_API_KEY"]
)

下表列举了可能的参数。请参考 OpenAI SDK 的代码,获取最新列表。

参数

参数 类型 描述 默认值
api_key str OpenAI API 密钥。如果未指定,则从 OPENAI_API_KEY 推断。 None
organization str OpenAI 组织 ID。如果未指定,则从 OPENAI_ORG_ID 推断。 None
project str OpenAI 项目 ID。如果未指定,则从 OPENAI_PROJECT_ID 推断。 None
base_url str | https.URL 端点的基础 URL。如果未指定,则从 OPENAI_BASE_URL 推断。 None
timeout float 请求超时。 NOT_GIVEN
max_retries int 失败请求的最大重试次数 2
default_headers Mapping[str, str] 默认 HTTP 头 None
default_query Mapping[str, str] 添加到 HTTP 查询的自定义参数 None
http_client https.AsyncClient 用户指定的 httpx 客户端 None

Azure OpenAI 模型

Outlines 也支持 Azure OpenAI 模型

from outlines import models


model = models.azure_openai(
    "azure-deployment-name",
    "gpt-4o-mini",
    api_version="2024-07-18",
    azure_endpoint="https://example-endpoint.openai.azure.com",
)

为什么需要指定模型和部署名称?

需要模型名称来加载正确的模型分词器。分词器对于结构化生成是必需的。

您可以传递任何传递给 openai.AsyncAzureOpenAI 的参数。您可以查阅 OpenAI SDK 的代码,获取最新列表。

参数

参数 类型 描述 默认值
azure_endpoint str Azure 端点,包括资源。如果未指定,则从 AZURE_OPENAI_ENDPOINT 推断。 None
api_version str API 版本。如果未指定,则从 AZURE_OPENAI_API_KEY 推断。 None
api_key str OpenAI API 密钥。如果未指定,则从 OPENAI_API_KEY 推断。 None
azure_ad_token str Azure Active Directory 令牌。如果未指定,则从 AZURE_OPENAI_AD_TOKEN 推断。 None
azure_ad_token_provider AzureADTokenProvider 返回 Azure Active Directory 令牌的函数 None
organization str OpenAI 组织 ID。如果未指定,则从 OPENAI_ORG_ID 推断。 None
project str OpenAI 项目 ID。如果未指定,则从 OPENAI_PROJECT_ID 推断。 None
base_url str | https.URL 端点的基础 URL。如果未指定,则从 OPENAI_BASE_URL 推断。 None
timeout float 请求超时。 NOT_GIVEN
max_retries int 失败请求的最大重试次数 2
default_headers Mapping[str, str] 默认 HTTP 头 None
default_query Mapping[str, str] 添加到 HTTP 查询的自定义参数 None
http_client https.AsyncClient 用户指定的 httpx 客户端 None

遵循 OpenAI 标准的模型

Outlines 支持遵循 OpenAI 标准的模型。您需要正确配置并初始化 OpenAI 客户端,然后将其传递给 outlines.models.openai

import os
from openai import AsyncOpenAI
from outlines import models
from outlines.models.openai import OpenAIConfig


client = AsyncOpenAI(
    api_key=os.environ.get("PROVIDER_KEY"),
    base_url="http://other.provider.server.com"
)
config = OpenAIConfig("model_name")
model = models.openai(client, config)

警告

您需要传递异步客户端才能进行批量推理。

结构化生成支持

Outlines 通过 outlines.generate.jsonoutlines.generate.choice 提供对 OpenAI 结构化输出 的支持

from pydantic import BaseModel, ConfigDict
import outlines.models as models
from outlines import generate

model = models.openai("gpt-4o-mini")

class Person(BaseModel):
    model_config = ConfigDict(extra='forbid')  # required for openai
    first_name: str
    last_name: str
    age: int

generator = generate.json(model, Person)
generator("current indian prime minister on january 1st 2023")
# Person(first_name='Narendra', last_name='Modi', age=72)

generator = generate.choice(model, ["Chicken", "Egg"])
print(generator("Which came first?"))
# Chicken

警告

结构化生成支持仅限于符合 OpenAI 标准的 OpenAI 兼容端点。此外,不支持 generate.regexgenerate.cfg

高级配置

有关更高级的配置选项,例如代理支持,请查阅 OpenAI SDK 的文档

from openai import AsyncOpenAI, DefaultHttpxClient
from outlines import models
from outlines.models.openai import OpenAIConfig


client = AsyncOpenAI(
    base_url="http://my.test.server.example.com:8083",
    http_client=DefaultHttpxClient(
        proxies="http://my.test.proxy.example.com",
        transport=httpx.HTTPTransport(local_address="0.0.0.0"),
    ),
)
config = OpenAIConfig("model_name")
model = models.openai(client, config)

可以通过在初始化模型时传递 OpenAIConfig 实例来指定 seedpresence_penaltyfrequence_penaltytop_p 的值

from outlines.models.openai import OpenAIConfig
from outlines import models


config = OpenAIConfig(
    presence_penalty=1.,
    frequency_penalty=1.,
    top_p=.95,
    seed=0,
)
model = models.openai("gpt-4o-mini", config)

监控 API 使用情况

在使用 OpenAI API 时,能够跟踪您的 API 使用情况非常重要。提示令牌和完成令牌的数量可通过模型实例直接访问

from openai import AsyncOpenAI
import outlines.models


model = models.openai("gpt-4o")

print(model.prompt_tokens)
# 0

print(model.completion_tokens)
# 0

每次调用模型时,这些数字都会更新。