跳到主要内容

oai.client

ModelClient

class ModelClient(Protocol)

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

  • create 必须返回一个实现 ModelClientResponseProtocol 的响应对象
  • cost 必须返回响应的成本
  • get_usage 必须返回一个包含以下键的字典:
  • prompt_tokens
  • completion_tokens
  • total_tokens
  • cost
  • 模型

此类用于创建一个可以被OpenAIWrapper使用的客户端。 从create返回的响应必须遵循ModelClientResponseProtocol,但可以根据需要进行扩展。 必须实现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客户端。

消息检索

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

从响应中检索消息。

创建

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

使用 openai 的客户端为给定的配置创建完成项。

参数:

  • client - OpenAI客户端。
  • params - 补全的参数。

返回:

完成。

成本

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方法中允许的额外kwargs。例如,
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",
}
]
  • 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

创建

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

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

参数:

  • 上下文 (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): 用于响应缓存的缓存对象。默认为 None。 请注意,cache 参数会覆盖旧的 cache_seed 参数:如果提供了此参数, 则 cache_seed 参数将被忽略。如果未提供此参数或为 None, 则使用 cache_seed 参数。
  • agent (AbstractAgent | None): 如果是一个agent,则该对象负责创建completion。
  • (旧版)cache_seed(int | None)用于使用DiskCache。默认为41。 一个整数的cache_seed在实现“受控随机性”时非常有用。 None表示不进行缓存。
  • Note - this is a legacy argument. It is only used when the cache argument is not provided.
    • 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: 如果任何模型客户端创建调用引发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对象列表。