之前的文章已经介绍了整个源代码的基本流程,接下的分专题看一下各个模块的具体实现。首先来了解下和 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 参数配置(如
- 适用场景:适用于需要自定义 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 参数配置(如
- 适用场景:适用于需要自定义 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_request | GPT-3.5 Turbo | 否 | 否 | 否 | 否 | 简单的单次请求 |
| GPT4_request | GPT-4 | 否 | 否 | 否 | 否 | 简单的单次 GPT-4 请求 |
| ChatGPT_request | GPT-3.5 Turbo | 否 | 否 | 否 | 否 | 简单的单次 GPT-3.5 请求 |
| GPT_request | 自定义 | 否 | 否 | 是 | 否 | 自定义参数的 GPT 请求 |
| GPT4_safe_generate_response | GPT-4 | 是 | 是(最多 3 次) | 否 | 是 | 需要 JSON 格式和验证的 GPT-4 |
| ChatGPT_safe_generate_response | GPT-3.5 Turbo | 是 | 是(最多 3 次) | 否 | 是 | 需要 JSON 格式和验证的 GPT-3.5 |
| ChatGPT_safe_generate_response_OLD | GPT-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(人类反馈强化学习) 恢复部分上下文学习能力,并提升零样本任务表现。生成质量更高,支持复杂指令与长文本。
- text-davinci-002:基于
- 定位: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-003 | GPT-3.5 + RLHF | 复杂指令跟随、代码生成 | 技术文档/逻辑推理 |
| gpt-3.5-turbo | GPT-3.5优化版 | 低成本对话、基础任务处理 | 客服/日常问答 |
| gpt-4 | 多模态Transformer | 多模态理解、强推理、长文本处理 | 学术研究/专业分析 |