Skip to main content

LLM 配置

在 Colab 中打开 在 GitHub 上打开

在 AutoGen 中,代理使用 LLM(语言模型)作为关键组件来理解和反应。要配置代理对 LLM 的访问,可以在其构造函数中指定一个 llm_config 参数。例如,以下代码片段显示了一个使用 gpt-4 的配置:

import os

llm_config = {
"config_list": [{"model": "gpt-4", "api_key": os.environ["OPENAI_API_KEY"]}],
}
warning

重要提示:千万不要将机密信息提交到代码中,因此我们从环境变量中读取 OpenAI API 密钥。

然后,可以将这个 llm_config 传递给代理的构造函数,以使其能够使用 LLM。

import autogen

assistant = autogen.AssistantAgent(name="assistant", llm_config=llm_config)

config_list 简介

不同的任务可能需要不同的模型,config_list 允许指定要使用的不同端点和配置。它是一个字典的列表,每个字典根据使用的端点类型包含以下键:

  • model (str, required): 要使用的模型的标识符,例如 'gpt-4','gpt-3.5-turbo'。
  • api_key (str, optional): 用于对模型的 API 端点进行身份验证的 API 密钥。
  • base_url (str, optional): API 端点的基本 URL。这是 API 调用的根地址。
  • tags (List[str], optional): 可用于过滤的标签。

示例:

[
{
"model": "gpt-4",
"api_key": os.environ['OPENAI_API_KEY']
}
]

tip

默认情况下,这将创建一个假定为OpenAI API(或兼容)端点的模型客户端。要使用自定义模型客户端,请参见这里

OAI_CONFIG_LIST 模式

一种常见且有用的模式是通过JSON(指定为文件或设置为JSON格式字符串的环境变量)定义此config_list,然后使用config_list_from_json辅助函数加载它:

config_list = autogen.config_list_from_json(
env_or_file="OAI_CONFIG_LIST",
)

# 然后,使用配置列表创建助手代理
assistant = autogen.AssistantAgent(name="assistant", llm_config={"config_list": config_list})

这很有用,因为它将所有配置集中在一个地方,适用于不同的项目或笔记本。

此函数将env_or_file参数解释如下:

  • 如果env_or_file是一个环境变量,则:
    • 它将首先尝试从环境变量指定的路径加载文件。
    • 如果没有文件,它将尝试将环境变量解释为JSON字符串。
  • 否则,它将尝试打开env_or_file指定路径的文件。

为什么是一个列表?

作为一个列表,允许您定义多个可以被代理使用的模型。这很有用,原因如下:

  • 如果一个模型超时或失败,代理可以尝试另一个模型。
  • 拥有一个全局的模型列表,并根据某些键(例如名称、标签)过滤,以便将选择的模型传递给某个代理(例如,使用便宜的GPT-3.5来解决简单任务的代理)。
  • 尽管核心代理(例如对话型代理或助手代理)没有选择配置的特殊逻辑,但一些专门的代理可能会根据任务选择最佳模型。

代理如何决定从列表中选择哪个模型?

代理使用“config_list”中的第一个可用模型,并针对该模型进行LLM调用。如果模型失败(例如API限制),代理将对第二个模型重试请求,以此类推,直到收到提示完成(或如果没有一个模型成功完成请求则抛出错误)。总的来说,代理内部没有隐式/隐藏的逻辑来选择“任务的最佳模型”。然而,一些专门的代理可能会尝试选择“任务的最佳模型”。选择合适的模型并与代理一起使用是开发人员的责任。

配置列表过滤

如上所述,列表可以根据某些标准进行过滤。定义为一个字典,包含要过滤的键和值。例如,如果您有一个配置列表,并且想选择模型“gpt-3.5-turbo”,可以使用如下过滤器:

filter_dict = {"model": ["gpt-3.5-turbo"]}

然后,可以使用filter_config将其应用于在Python中加载的配置列表:

config_list = autogen.filter_config(config_list, filter_dict)

或者,在加载配置列表时直接使用config_list_from_json

config_list = autogen.config_list_from_json(env_or_file="OAI_CONFIG_LIST", filter_dict=filter_dict)

标签

OpenAI和Azure OpenAI之间的模型名称可能不同,因此标签提供了一种简单的方法来解决这种不一致性。标签是config_list中的字符串列表,例如以下config_list

config_list = [
{"model": "my-gpt-4-deployment", "api_key": "", "tags": ["gpt4", "openai"]},
{"model": "llama-7B", "base_url": "http://127.0.0.1:8080", "tags": ["llama", "local"]},
]

然后,在过滤config_list时,您可以指定所需的标签。如果配置中至少有一个指定的标签,则选择该配置。例如,要获取llama模型,可以使用以下过滤器:

filter_dict = {"tags": ["llama", "another_tag"]}
config_list = autogen.filter_config(config_list, filter_dict)
assert len(config_list) == 1

在llm_config中添加http客户端以进行代理

在Autogen中,对llm_config使用了深拷贝,以确保用户传递的llm_config不会在内部被修改。如果llm_config包含不支持深拷贝的类的对象,则可能会出现错误。要解决此问题,您需要为该类实现一个__deepcopy__方法。

下面的示例显示了如何为http客户端实现一个__deepcopy__方法并添加代理。

#!pip install httpx
import httpx


class MyHttpClient(httpx.Client):
def __deepcopy__(self, memo):
return self


config_list = [
{
"model": "my-gpt-4-deployment",
"api_key": "",
"http_client": MyHttpClient(proxy="http://localhost:8030"),
}
]

llm_config = {
"config_list": config_list,
}

其他配置参数

除了config_list之外,还有其他参数可用于配置LLM。这些参数分为Autogen特定参数和传递给模型客户端的参数。

Autogen特定参数

  • cache_seed - 这是一个遗留参数,不建议使用,除非使用它的原因是禁用默认的缓存行为。要禁用默认缓存,请将其设置为None。否则,默认情况下或如果传递了一个整数,则将使用DiskCache。对于使用缓存的新方法,请将Cache对象传递给

额外的模型客户端参数

还可以通过OpenAI客户端传递参数。可以提供与OpenAI客户端OpenAI completions create API对应的参数。

这通常用于诸如temperaturetimeout之类的参数。

示例

llm_config = {
"config_list": [
{
"model": "my-gpt-4-deployment",
"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": "llama-7B",
"base_url": "http://127.0.0.1:8080",
"api_type": "openai",
},
],
"temperature": 0.9,
"timeout": 300,
}

加载配置列表的其他辅助函数

  • get_config_list:根据提供的API密钥生成API调用的配置。
  • config_list_openai_aoai:使用Azure OpenAI和OpenAI端点构建配置列表,从环境变量或本地文件获取API密钥。
  • config_list_from_models:根据提供的模型列表创建配置,用于针对特定模型而不手动指定每个配置时很有用。
  • config_list_from_dotenv:从.env文件构建配置列表,提供了一种从单个文件中管理多个API配置和密钥的集中方式。

有关使用上述函数的示例,请参见此笔记本