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_config
或config_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
print_usage_summary
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对象列表。