Skip to main content

oai.client

ModelClient

class ModelClient(Protocol)

客户端类必须实现以下方法:

  • create 方法必须返回一个实现了 ModelClientResponseProtocol 接口的响应对象
  • cost 方法必须返回响应的成本
  • get_usage 方法必须返回一个包含以下键的字典:
  • prompt_tokens
  • completion_tokens
  • total_tokens
  • cost
  • model

该类用于创建一个可以被 OpenAIWrapper 使用的客户端。 create 方法返回的响应必须符合 ModelClientResponseProtocol 接口的要求,但可以根据需要进行扩展。 必须实现 message_retrieval 方法,以返回响应中的字符串列表或消息列表。

message_retrieval

def message_retrieval(
response: ModelClientResponseProtocol
) -> Union[List[str],
List[ModelClient.ModelClientResponseProtocol.Choice.Message]]

从响应中检索并返回字符串列表或 Choice.Message 列表。

注意:如果返回 Choice.Message 列表,则当前需要包含 OpenAI 的 ChatCompletion Message 对象的字段, 因为目前在代码库的其他部分中,对于函数或工具调用,这是预期的,除非使用自定义代理。

get_usage

@staticmethod
def get_usage(response: ModelClientResponseProtocol) -> Dict

使用 RESPONSE_USAGE_KEYS 返回响应的使用情况摘要。

OpenAIClient

class OpenAIClient()

遵循 Client 协议并封装了 OpenAI 客户端。

message_retrieval

def message_retrieval(
response: Union[ChatCompletion, Completion]
) -> Union[List[str], List[ChatCompletionMessage]]

从响应中检索消息。

create

def create(params: Dict[str, Any]) -> ChatCompletion

使用 OpenAI 客户端为给定的配置创建一个完成请求。

参数

  • client - OpenAI 客户端。
  • params - 完成请求的参数。

返回值

完成请求。

cost

def cost(response: Union[ChatCompletion, Completion]) -> float

计算响应的成本。

OpenAIWrapper

class OpenAIWrapper()

OpenAI 客户端的包装类。

__init__

def __init__(*,
config_list: Optional[List[Dict[str, Any]]] = None,
**base_config: Any)

参数

  • config_list - 一个配置字典的列表,用于覆盖 base_config。 它们可以包含 create 方法中允许的其他关键字参数。例如,
config_list=[
{
"model": "gpt-4",
"api_key": os.environ.get("AZURE_OPENAI_API_KEY"),
"api_type": "azure",
"base_url": os.environ.get("AZURE_OPENAI_API_BASE"),
"api_version": "2024-02-01",
},
{
"model": "gpt-3.5-turbo",
"api_key": os.environ.get("OPENAI_API_KEY"),
"api_type": "openai",
"base_url": "https://api.openai.com/v1",
},
{
"model": "llama-7B",
"base_url": "http://127.0.0.1:8080",
}
]

配置列表中包含了三个不同的模型配置。每个配置都有一个模型名称、一个 API 密钥、一个 API 类型和一个基本 URL。其中,第一个配置使用的是 Azure OpenAI API,模型为 gpt-4,API 密钥和基本 URL 从环境变量中获取。第二个配置使用的是 OpenAI API,模型为 gpt-3.5-turbo,API 密钥为固定值,基本 URL 为 "https://api.openai.com/v1"。第三个配置没有指定 API 密钥,模型为 llama-7B,基本 URL 为 "http://127.0.0.1:8080"。

  • base_config - 基础配置。它可以包含用于 OpenAI 客户端的关键字参数和额外的 kwargs。 当使用 OpenAI 或 Azure OpenAI 端点时,请在 base_configconfig_list 的每个配置中指定一个非空的 'model'。

register_model_client

def register_model_client(model_client_cls: ModelClient, **kwargs)

注册一个模型客户端。

参数

  • model_client_cls - 一个遵循 ModelClient 接口的自定义客户端类
  • **kwargs - 用于初始化自定义客户端类的 kwargs

create

def create(**config: Any) -> ModelClient.ModelClientResponseProtocol

使用可用的客户端为给定的配置进行完成。 除了 openai 的 [或其他] 客户端允许的 kwargs 外,我们还允许以下额外的 kwargs。 每个客户端中的配置将被配置覆盖。

参数

  • context (Dict | None): 实例化提示或消息的上下文。默认为 None。 它需要包含由提示模板或过滤函数使用的键。 例如,prompt="Complete the following sentence: {prefix}, context={"prefix": "Today I feel"}。 实际的提示将是: "Complete the following sentence: Today I feel"。 更多示例可以在 templating 中找到。
  • cache (AbstractCache | None): 用于响应缓存的 Cache 对象。默认为 None。 注意,cache 参数会覆盖旧的 cache_seed 参数:如果提供了此参数,则忽略 cache_seed 参数。 如果未提供此参数或为 None,则使用 cache_seed 参数。
  • agent (AbstractAgent | None): 如果是代理,则负责创建完成的对象。
  • (Legacy) cache_seed (int | None) 用于使用 DiskCache。默认为 41。 当实现完成的 "受控随机性" 时,整数 cache_seed 是有用的。 无缓存时为 None。
  • Note - 这是一个旧的参数。仅在未提供 cache 参数时使用。
    • filter_func (Callable | None): 一个函数,接受上下文和响应,并返回一个布尔值,指示响应是否有效。例如,
def yes_or_no_filter(context, response):
return context.get("yes_or_no_choice", False) is False or any(
text in ["Yes.", "No."] for text in client.extract_text_or_completion_object(response)
)
  • allow_format_str_template (bool | None): 是否允许在配置中使用格式字符串模板。默认为 false。
  • api_version (str | None): API 版本。默认为 None。例如,"2024-02-01"。

抛出

  • RuntimeError: 如果所有声明的自定义模型客户端都没有注册
  • APIError: 如果任何模型客户端的 create 调用引发了 APIError
def print_usage_summary(
mode: Union[str, List[str]] = ["actual", "total"]) -> None

打印使用情况摘要。

clear_usage_summary

def clear_usage_summary() -> None

清除使用情况摘要。

extract_text_or_completion_object

@classmethod
def extract_text_or_completion_object(
cls, response: ModelClient.ModelClientResponseProtocol
) -> Union[List[str],
List[ModelClient.ModelClientResponseProtocol.Choice.Message]]

从完成或聊天响应中提取文本或ChatCompletion对象。

参数

  • response ChatCompletion | Completion - 来自OpenAI的响应。

返回值

一个文本列表,或者如果存在function_call/tool_calls,则返回一个ChatCompletion对象列表。