跳到主要内容

LLM 配置

Open In Colab Open on GitHub

在 AutoGen 中,代理使用 LLMs 作为关键组件来理解和反应。 要配置代理对 LLMs 的访问,你可以在其构造函数中指定一个 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, 必需): 要使用的模型的标识符,例如 'gpt-4', 'gpt-3.5-turbo'。
  • api_key (str, optional): 用于认证对模型API端点的请求所需的API密钥。
  • api_rate_limit (float, 可选): 指定每秒允许的最大API请求数。
  • base_url (str, 可选): API 终端的基本 URL。这是 API 调用指向的根地址。
  • tags (List[str], optional): 可用于过滤的标签。

示例:

[
{
"model": "gpt-4",
"api_key": os.environ['OPENAI_API_KEY']
"api_rate_limit": 60.0, // Set to allow up to 60 API requests per second.
}
]

tip

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

OAI_CONFIG_LIST 模式

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

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

# Then, create the assistant agent with the config list
assistant = autogen.AssistantAgent(name="assistant", llm_config={"config_list": config_list})

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

该函数对env_or_file参数的解释如下:

  • If env_or_file is an environment variable then:
    • 它将首先尝试从环境变量指定的路径加载文件。
    • 如果文件不存在,它将尝试将环境变量解释为JSON字符串。
  • 否则,它将尝试打开由 env_or_file 指定的路径下的文件。

为什么是一个列表?

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

  • 如果某个模型超时或失败,agent 可以尝试另一个模型。
  • 拥有一个全局的模型列表,并基于某些键(例如名称、标签)进行过滤,以便将选定的模型传递给某个代理(例如,为处理较简单任务的代理使用更便宜的GPT 3.5)
  • 虽然核心代理(例如可对话或助手)在选择配置时没有特殊逻辑,但一些专门化的代理可能会根据当前任务选择最佳模型。

代理如何从列表中选择模型?

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

配置列表过滤

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

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

然后可以将其应用于通过 filter_config加载的配置列表:

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,
}

使用Azure Active Directory (AAD) 进行认证

Azure Active Directory (AAD) 提供对资源和应用程序的安全访问。请按照以下步骤为Autogen配置AAD身份验证。

先决条件

  • 一个Azure订阅 - 免费创建一个.
  • 已授予访问所需 Azure 订阅中的 Azure OpenAI 服务。
  • 在AAD中注册应用程序的适当权限。
  • 需要自定义子域名以启用诸如Microsoft Entra ID进行身份验证等功能。
  • Azure CLI - 安装指南.

有关更详细和最新的说明,请参阅官方的Azure OpenAI 文档

第一步:在AAD中注册应用程序

  1. 导航到 Azure portal.
  2. 前往 Azure Active Directory > App registrations.
  3. 点击New registration
  4. 为您的应用程序输入一个名称。
  5. 设置Redirect URI(可选)。
  6. 点击 Register

有关详细说明,请参阅官方Azure AD 快速入门文档

步骤2:配置API权限

  1. 注册后,前往 API permissions
  2. 点击Add a permission.
  3. 选择 Microsoft Graph,然后选择 Delegated permissions
  4. 添加必要的权限(例如,User.Read)。

更多详情,请参见Microsoft Graph中的API权限

第3步:获取客户端ID和租户ID

  1. 转到你注册应用程序的概述
  2. 记下Application (client) IDDirectory (tenant) ID

更多详情,请访问在微软身份平台上注册应用程序

步骤 4: 配置您的应用程序

在您的应用程序配置中使用获得的Client IDTenant ID。以下是在配置文件中如何执行此操作的示例:

aad_config = {
"client_id": "YOUR_CLIENT_ID",
"tenant_id": "YOUR_TENANT_ID",
"authority": "https://login.microsoftonline.com/YOUR_TENANT_ID",
"scope": ["https://graph.microsoft.com/.default"],
}

第5步:验证并获取令牌

使用以下代码进行身份验证并获取令牌:

from msal import ConfidentialClientApplication

app = ConfidentialClientApplication(
client_id=aad_config["client_id"],
client_credential="YOUR_CLIENT_SECRET",
authority=aad_config["authority"]
)

result = app.acquire_token_for_client(scopes=aad_config["scope"])

if "access_token" in result:
print("Token acquired")
else:
print("Error acquiring token:", result.get("error"))

有关更多详细信息,请参阅 在 Azure OpenAI 服务中进行身份验证和授权 以及 如何使用 Microsoft Entra ID 身份验证配置 Azure OpenAI 服务

步骤6:在AutoGen中配置使用AAD认证的Azure OpenAI

要在AutoGen中使用Azure OpenAI的AAD认证,请使用必要的参数配置llm_config

以下是一个配置示例:

llm_config = {
"config_list": [
{
"model": "gpt-4",
"base_url": "YOUR_BASE_URL",
"api_type": "azure",
"api_version": "2024-02-01",
"max_tokens": 1000,
"azure_ad_token_provider": "DEFAULT"
}
]
}

有关更多详细信息,请参阅 在 Azure OpenAI 服务中进行身份验证和授权 以及 如何使用 Microsoft Entra ID 身份验证配置 Azure OpenAI 服务

在此配置中:- model: Azure OpenAI 的部署名称。- base_url: Azure OpenAI 端点的基本URL。- api_type: 应设置为“azure”。- api_version: 使用的API版本。- azure_ad_token_provider: 设置为“DEFAULT”以使用默认的令牌 提供者。

使用AAD身份验证初始化辅助代理的示例

import autogen

# Initialize the assistant agent with the AAD authenticated config
assistant = autogen.AssistantAgent(name="assistant", llm_config=llm_config)

故障排除

如果遇到问题,请检查以下内容:- 确保您的 Client IDTenant ID 是正确的。- 验证授予您的应用程序的权限。- 检查网络连接和 Azure 服务状态。

本文档提供了在AutoGen中配置和使用Azure OpenAI的AAD身份验证的完整指南。

其他配置参数

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

AutoGen特定参数

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

额外的模型客户端参数

也可以将参数直接传递给 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配置和密钥。

查看这个笔记本获取使用上述函数的示例。