OpenAI 及兼容 API
OpenAI 模型
Outlines 支持通过 OpenAI Chat API 提供的模型,例如 GPT-4o、ChatGPT 和 GPT-4。您可以通过将模型名称传递给 outlines.models.openai
来初始化模型。
查看 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.json
、outlines.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.regex
和 generate.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
实例来指定 seed
、presence_penalty
、frequence_penalty
、top_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
每次调用模型时,这些数字都会更新。