菜单

AI接口

相关源文件

此页面记录了 gpt-engineer 的 AI 接口组件,它是 gpt-engineer 系统与各种大型语言模型 (LLM) 提供商之间的主要中介。AI 接口负责与 LLM 的通信、消息格式化、跟踪 token 使用量以及实现退避和重试逻辑等弹性策略。

有关使用此接口的 Agent 系统的信息,请参阅CLI 和 Agent 系统。有关接收 AI 响应后发生的文件的详细信息,请参阅文件处理系统

架构概述

AI 接口位于 gpt-engineer 架构的关键节点,连接 Agent 系统与外部语言模型提供商。它抽象了不同 LLM API 的复杂性,为系统的其余部分提供了一个统一的接口。

来源: gpt_engineer/core/ai.py16-438

核心组件

AI 类

AI 类是 AI 接口的核心组件,提供了管理与语言模型对话的方法。它负责消息格式化、token 跟踪和弹性模式的实现。

来源: gpt_engineer/core/ai.py50-379 gpt_engineer/core/token_usage.py180-297

初始化选项

在初始化 AI 类时,有几个配置选项可用于自定义其行为

参数类型默认描述
model_namestr"gpt-4-turbo"要使用的语言模型名称
temperature浮点数0.1模型输出随机性的温度设置
azure_endpointstrNoneAzure 托管模型的端点 URL
streamingboolTrue是否为模型响应使用流式传输
visionbool(auto)模型是否支持视觉功能

vision 参数是根据模型名称自动确定的,在可用时支持多模态输入。

来源: gpt_engineer/core/ai.py88-116

对话管理

AI 接口提供了两个主要方法来管理与语言模型的对话

  1. start() - 开始一次新的对话,包含系统和用户消息
  2. next() - 通过发送消息历史记录和新提示来推进现有对话

对话流程

来源: gpt_engineer/core/ai.py120-251

消息折叠

为了提高效率,AI 接口包含一个消息折叠机制,该机制会将相同类型的连续消息合并。这有助于减少 token 使用量,并将对话保持在上下文限制内

此方法会自动应用于非视觉模型的 next() 方法中。

来源: gpt_engineer/core/ai.py165-204

LLM 提供商支持

AI 接口通过统一的接口支持多个 LLM 提供商。根据模型名称和配置选择合适的提供商

来源: gpt_engineer/core/ai.py330-379

提供商配置

每个提供商都有特定的配置选项

提供商关键配置
OpenAIChatOpenAImodel, temperature, streaming
Azure OpenAIAzureChatOpenAIazure_endpoint, deployment_name, api_version
AnthropicChatAnthropicmodel, temperature, max_tokens_to_sample
支持视觉功能的模型ChatOpenAImodel, temperature, max_tokens

来源: gpt_engineer/core/ai.py330-379

错误处理和弹性

AI 接口实现了弹性模式,用于处理与 LLM 提供商通信时遇到的常见问题,特别是速率限制。

退避策略

backoff_inference 方法使用指数退避策略来处理 OpenAI API 的速率限制错误

这种方法

  • 带有指数级增加的等待时间重试失败的请求
  • 最多尝试重试 7 次
  • 在 45 秒后停止重试

来源: gpt_engineer/core/ai.py253-287

Token 使用量跟踪

AI 接口通过 TokenUsageLog 类实现了详细的 token 使用量跟踪,该类

  1. 计算提示和完成中使用的 token
  2. 跟踪跨多个步骤的累积 token 使用量
  3. 估算 OpenAI 模型的 API 使用成本
  4. 处理多模态内容(图像)的特殊 token 计数

来源: gpt_engineer/core/token_usage.py31-297

图像 Token 计数

对于支持视觉功能的模型,Tokenizer 类包含了图像 token 计数的特殊处理,遵循 OpenAI 的图像 token 计算指南

这使得能够准确地跟踪多模态对话的 token 使用量和成本估算。

来源: gpt_engineer/core/token_usage.py96-140

消息序列化

AI 接口提供了用于序列化和反序列化消息链的静态方法,这对于缓存、日志记录和调试非常有用

来源: gpt_engineer/core/ai.py290-328

用于离线开发的 ClipboardAI

对于没有直接 API 访问权限的开发或情况,ClipboardAI 类提供了一个替代实现,该实现

  1. 将提示复制到剪贴板
  2. 将其写入文件
  3. 允许手动输入响应

这有助于在没有 API 成本的情况下进行测试,并支持离线开发工作流程。

来源: gpt_engineer/core/ai.py386-437

与代理系统集成

AI 接口通常由 Agent 类使用,以处理代码生成和改进工作流程

来源: gpt_engineer/core/ai.py120-251 tests/applications/cli/test_main.py78-177

常见使用模式

在使用 AI 接口时,有几个常见的模式

  1. 对话初始化:

  2. 对话延续:

  3. 响应提取:

  4. Token 使用量报告:

这些模式构成了代码库中大多数与 AI 接口交互的基础。

性能考量

使用 AI 接口时,请考虑这些性能因素

  1. Token 效率:消息折叠和仔细的提示设计对于减少 token 使用量很重要
  2. 速率限制:退避策略有助于处理速率限制,但高容量使用可能仍需要额外的处理
  3. 流式传输:通过在模型生成完整响应时显示部分结果,流式传输响应可提高感知性能
  4. 模型选择:不同的模型具有不同的性能特征和 token 成本

通过理解这些注意事项,您可以优化 AI 接口的使用,以兼顾成本和性能。