Generative agents 代码分析 LLM 交互

92 阅读7分钟

之前的文章已经介绍了整个源代码的基本流程,接下的分专题看一下各个模块的具体实现。首先来了解下和 LLM 的交互。

简单封装 openai 接口

gpt_structure.py 文件中定义了多个与 GPT 模型交互的函数,这些函数主要分为两类:直接请求函数安全生成响应函数

import openai	# 引入了 openai 库

openai.api_key = openai_api_key	# 配置 openai 的 api key

1. 直接请求函数

这些函数直接调用 OpenAI 的 API,发送请求并返回原始响应。它们适用于简单的、不需要复杂验证的场景。

1.1 ChatGPT_single_request(prompt)
  • 功能:发送一个简单的用户提示给 GPT-3.5 Turbo 模型,并返回模型的响应。
  • 特点
    • 仅适用于单次请求。
    • 不进行任何参数校验或错误处理。
    • 返回原始的字符串响应。
  • 适用场景:适用于简单的、不需要多次尝试的请求。
1.2 GPT4_request(prompt)
  • 功能:发送一个用户提示给 GPT-4 模型,并返回模型的响应。
  • 特点
    • 与 ChatGPT_single_request 类似,但针对 GPT-4 模型。
    • 包含异常处理,如果请求失败会打印错误信息并返回 "ChatGPT ERROR"
  • 适用场景:适用于需要使用 GPT-4 模型的单次请求。
1.3 ChatGPT_request(prompt)
  • 功能:发送一个用户提示给 GPT-3.5 Turbo 模型,并返回模型的响应。
  • 特点
    • 与 GPT4_request 类似,但针对 GPT-3.5 Turbo 模型。
    • 包含异常处理,如果请求失败会打印错误信息并返回 "ChatGPT ERROR"
  • 适用场景:适用于需要使用 GPT-3.5 Turbo 模型的单次请求。
1.4 GPT_request(prompt, gpt_parameter)
  • 功能:发送一个用户提示给指定的 GPT 模型(如 text-davinci-003),并返回模型的响应。
  • 特点
    • 支持更多的 GPT 参数配置(如 temperature, max_tokens 等)。
    • 包含异常处理,如果请求失败会打印错误信息并返回 "TOKEN LIMIT EXCEEDED"
  • 适用场景:适用于需要自定义 GPT 参数的更复杂请求。

2. 安全生成响应函数

这些函数在调用 GPT 模型时,增加了额外的安全机制,确保返回的响应符合预期格式,并且可以通过验证。它们适用于需要高可靠性的场景。

2.1 GPT4_safe_generate_response
  • 功能:发送一个用户提示给 GPT-4 模型,并尝试多次生成符合预期格式的响应。
  • 特点
    • 要求模型返回 JSON 格式的响应,并提供示例输出和特殊指令。
    • 支持重复尝试(默认最多 3 次),直到响应通过验证。
    • 提供验证函数 func_validate 和清理函数 func_clean_up 来处理响应。
    • 如果所有尝试都失败,返回 fail_safe_response
  • 适用场景:适用于需要严格格式验证和多次重试的 GPT-4 请求。
2.2 ChatGPT_safe_generate_response
  • 功能:与 GPT4_safe_generate_response 类似,但针对 GPT-3.5 Turbo 模型。
  • 特点
    • 同样要求模型返回 JSON 格式的响应,并提供示例输出和特殊指令。
    • 支持重复尝试(默认最多 3 次),直到响应通过验证。
    • 提供验证函数 func_validate 和清理函数 func_clean_up 来处理响应。
    • 如果所有尝试都失败,返回 fail_safe_response
  • 适用场景:适用于需要严格格式验证和多次重试的 GPT-3.5 Turbo 请求。
2.3 ChatGPT_safe_generate_response_OLD
  • 功能:与 ChatGPT_safe_generate_response 类似,但不包含 JSON 格式的要求。
  • 特点
    • 直接返回模型的原始响应,不强制要求 JSON 格式。
    • 支持重复尝试(默认最多 3 次),直到响应通过验证。
    • 提供验证函数 func_validate 和清理函数 func_clean_up 来处理响应。
    • 如果所有尝试都失败,返回 fail_safe_response
  • 适用场景:适用于不需要 JSON 格式、但需要多次重试和验证的 GPT-3.5 Turbo 请求。
2.4 safe_generate_response
  • 功能:发送一个用户提示给指定的 GPT 模型,并尝试多次生成符合预期格式的响应。
  • 特点
    • 支持更多的 GPT 参数配置(如 temperature, max_tokens 等)。
    • 支持重复尝试(默认最多 5 次),直到响应通过验证。
    • 提供验证函数 func_validate 和清理函数 func_clean_up 来处理响应。
    • 如果所有尝试都失败,返回 fail_safe_response
  • 适用场景:适用于需要自定义 GPT 参数、多次重试和验证的更复杂请求。

3. 其他辅助函数

3.1 generate_prompt(curr_input, prompt_lib_file)
  • 功能:从指定的提示文件中读取模板,并将占位符替换为实际的输入内容。
  • 特点
    • 支持多输入替换。
    • 可以处理文件中的注释块标记。
  • 适用场景:适用于从文件中动态生成提示内容的场景。
3.2 get_embedding(text, model="text-embedding-ada-002")
  • 功能:使用 OpenAI 的嵌入模型(如 text-embedding-ada-002)生成文本的向量表示。
  • 特点
    • 处理空字符串的情况。
    • 返回嵌入向量。
  • 适用场景:适用于需要将文本转换为向量表示的场景,如语义相似度计算、聚类等。

对比

函数名模型类型是否支持 JSON 输出是否支持多次重试是否支持参数配置是否提供验证/清理函数适用场景
ChatGPT_single_requestGPT-3.5 Turbo简单的单次请求
GPT4_requestGPT-4简单的单次 GPT-4 请求
ChatGPT_requestGPT-3.5 Turbo简单的单次 GPT-3.5 请求
GPT_request自定义自定义参数的 GPT 请求
GPT4_safe_generate_responseGPT-4是(最多 3 次)需要 JSON 格式和验证的 GPT-4
ChatGPT_safe_generate_responseGPT-3.5 Turbo是(最多 3 次)需要 JSON 格式和验证的 GPT-3.5
ChatGPT_safe_generate_response_OLDGPT-3.5 Turbo是(最多 3 次)不需要 JSON 格式的 GPT-3.5
safe_generate_response自定义是(最多 5 次)自定义参数且需要验证的请求

涉及的模型

1. text-embedding-ada-002

  • 定位:文本嵌入模型,非生成式语言模型。
  • 功能:将文本转换为高维向量(嵌入),用于语义搜索、聚类、推荐系统等。
  • 特点
    • 高效压缩文本语义,支持短句/长文本处理。
    • 嵌入向量固定维度(1536),优化计算效率。
  • 现状:已被新一代嵌入模型(如text-embedding-3-small)取代,后者性能更强、成本更低。

2. text-davinci-002 → text-davinci-003

  • 演进关系
    • text-davinci-002:基于code-davinci-002微调,属InstructGPT系列。强化指令跟随能力,但牺牲了部分上下文学习能力。
    • text-davinci-003:改进002版本,通过RLHF(人类反馈强化学习) 恢复部分上下文学习能力,并提升零样本任务表现。生成质量更高,支持复杂指令与长文本。
  • 定位:GPT-3.5系列的高性能文本生成模型,擅长逻辑推理与代码生成。

3. gpt-3.5-turbo

  • 定位:GPT-3.5系列的对话优化版本,ChatGPT免费版的核心模型
  • 特点
    • 成本低、响应快,适合日常对话与基础任务。
    • 支持16K上下文版本(处理长文本)。
    • 2024年降价:输入0.0005/千token,输出0.0005/千token,输出0.0005/千token,输出0.0015/千token。
  • 局限:逻辑推理与多模态能力弱于GPT-4。

4. gpt-4

  • 定位:OpenAI当前最先进的多模态模型(支持文本+图像输入)。
  • 核心升级
    • 强推理能力:在SAT、法律考试等测试中超越90%人类考生。
    • 多模态处理:解析图像内容(如生成菜谱、分析图表)。
    • 长上下文:标准版8K token,扩展版32K token(处理整本书/论文)。
  • 衍生版本
    • GPT-4 Turbo:响应更快,支持128K上下文,知识更新至2023年12月。
    • GPT-4o:免费开放多模态交互,优化实时任务响应。

模型演进与技术对比

模型基础架构关键能力典型应用场景
text-embedding-ada-002嵌入模型文本向量化、语义检索搜索/聚类/推荐系统
text-davinci-003GPT-3.5 + RLHF复杂指令跟随、代码生成技术文档/逻辑推理
gpt-3.5-turboGPT-3.5优化版低成本对话、基础任务处理客服/日常问答
gpt-4多模态Transformer多模态理解、强推理、长文本处理学术研究/专业分析