Skip to content

适用于 ADK 智能体的 OpenAI 模型

Supported in ADKGo v2.1.0Experimental

Experimental

openaimodel 包是实验性的,其行为可能会在未来发生变更或被移除。欢迎你提出 反馈!

你可以使用 OpenAI 模型配合 ADK。连接方式取决于你使用的编程语言:

  • Go — 原生支持: ADK Go 提供了直接的 openaimodel 包,实现了 model.LLM 接口,目标是 OpenAI Responses API 或 Chat Completions API。开始使用。
  • Python — 通过 LiteLLM: ADK Python 通过 LiteLLM 连接器访问 OpenAI 模型(以及许多其他提供商)。参见 LiteLLM。

开始使用

openaimodel 包提供了一个用于与 OpenAI API 交互的客户端。它实现了 model.LLM 接口,默认使用 OpenAI Responses API,或者在 ClientConfig.API 选择时使用 Chat Completions API。 以下代码示例展示了在你的智能体中使用 OpenAI 模型的基本实现:

import (
    "context"
    "log"

    "github.com/openai/openai-go/v3"
    "google.golang.org/adk/v2/agent/llmagent"
    "google.golang.org/adk/v2/model/openaimodel"
)

// 实例化模型
llm, err := openaimodel.NewModel(context.Background(), openai.ChatModelGPT4oMini, &openaimodel.ClientConfig{})
if err != nil {
  log.Fatal(err)
}

// 创建智能体
agent, err := llmagent.New(llmagent.Config{
  Name:        "openai_agent",
  Model:       llm,
  Instruction: "你是一个有用的 AI 助手。",
})
if err != nil {
  log.Fatal(err)
}

如需完整可运行的示例,请参见 ADK Go 仓库中的 examples/openai/responses/。

需要 ADK Go v2.5.0 或更高版本。

import (
    "context"
    "log"
    "os"

    "github.com/openai/openai-go/v3"
    "google.golang.org/adk/v2/agent/llmagent"
    "google.golang.org/adk/v2/model/openaimodel"
)

// 在 Chat Completions API 上实例化模型
llm, err := openaimodel.NewModel(context.Background(), openai.ChatModelGPT4oMini, &openaimodel.ClientConfig{
  APIKey: os.Getenv("OPENAI_API_KEY"),
  API:    openaimodel.APIChatCompletions,
})
if err != nil {
  log.Fatal(err)
}

// 创建智能体
agent, err := llmagent.New(llmagent.Config{
  Name:        "openai_agent",
  Model:       llm,
  Instruction: "你是一个有用的 AI 助手。",
})
if err != nil {
  log.Fatal(err)
}

如需完整可运行的示例,请参见 ADK Go 仓库中的 examples/openai/completions/。

Chat Completions API

Supported in ADKGo v2.5.0Experimental

默认情况下,openaimodel 将请求发送到 OpenAI Responses API (POST /v1/responses)。几乎每个 OpenAI 兼容提供商都实现了 Chat Completions API (POST /v1/chat/completions),而有些只实现了这一个。要使用它,请将 ClientConfig 的 API 字段设置为 openaimodel.APIChatCompletions,如 开始使用下的 Chat Completions API 标签页所示。智能体、工具和运行器在两种 API 下的工作方式相同。

为其他提供商设置 API 密钥

要访问其他 OpenAI 兼容提供商,请将 BaseURL 设置为其端点, 将 APIKey 设置为其密钥。当 APIKey 为空时,openai-go SDK 会 回退到 OPENAI_API_KEY 环境变量,并将该密钥发送到 BaseURL。

这两种 API 支持相同的功能,区别如下:

  • 生成设置: StopSequences、FrequencyPenalty、PresencePenalty 和 Seed 会发送到 Chat Completions API。Responses API 没有对应的字段,并会为它们返回错误。
  • 推理输出: Chat Completions API 不返回推理文本,因此响应中不包含思考部分,ThinkingConfig.IncludeThoughts 会被忽略。推理力度和推理 token 计数在两种 API 下都可用。
  • 输出 token 上限: MaxOutputTokens 以 max_completion_tokens 形式发送。某些兼容服务器只认较旧的 max_tokens 字段,因此该限制在那里不会生效。

支持的功能

  • 文本生成(流式和非流式)
  • 函数(工具)调用
  • 通过 OutputSchema 实现结构化输出(JSON schema)
  • 推理模型(例如 o 系列),包括推理 token 计量
  • Token logprobs

限制

  • 仅支持文本 — 不支持多模态输入(图片、音频、文件)。
  • 仅支持函数工具 — 不支持内置工具(Google 搜索、代码执行等)。
  • 结构化输出使用 OpenAI 严格模式 — 在 OutputSchema 中声明的每个字段都被视为必填。
  • 部分 GenerateContentConfig 选项会返回错误而非被静默忽略:TopK、多个候选、请求标签和安全设置。Responses API 还会拒绝停止序列、频率/存在惩罚和 seed,而 Chat Completions API 支持这些。

配置选项

ClientConfig 提供了多个用于配置客户端的选项:

  • APIKey:你的 OpenAI API 密钥。
  • BaseURL:自定义端点 URL,适用于 OpenAI 兼容端点。
  • HTTPClient:自定义 *http.Client。
  • Options:高级 openai-go 请求选项([]option.RequestOption)。
  • API:要调用的 OpenAI API:openaimodel.APIResponses(默认)或 openaimodel.APIChatCompletions。参见 Chat Completions API。

如果 APIKey 或 BaseURL 留空,它们将自动回退到 OPENAI_API_KEY 和 OPENAI_BASE_URL 环境变量,由底层 openai-go SDK 的默认行为处理。

OpenAI 模型认证

使用 OpenAI 模型时,你必须提供 API 密钥来向 OpenAI API 进行认证。提供此信息最直接的方式是使用环境变量或 .env 文件。

openaimodel 包还支持 OpenAI 兼容端点(例如通过 Ollama、LM Studio 或 vLLM 提供的本地模型),只需配置基础 URL 即可。如果该端点不提供 Responses API,还需将 API 设置为 openaimodel.APIChatCompletions,如 Chat Completions API 中所述。

# .env 配置文件
OPENAI_API_KEY="PASTE_YOUR_OPENAI_API_KEY_HERE"
# .env 配置文件
OPENAI_API_KEY="api-key-if-required"
OPENAI_BASE_URL="http://localhost:11434/v1" # 示例:本地 Ollama 端点