要在调用 OpenAI API 时处理大型输入,你需要管理令牌限制、优化输入结构,并使用分块或摘要等策略。每个 OpenAI 模型都有最大令牌限制(例如,gpt-3.5-turbo
为 16k 令牌,gpt-4
为 128k)。如果你的输入超过此限制,API 将返回错误。首先使用 OpenAI 的 tiktoken
库等工具计算输入的令牌数量。例如,tiktoken.get_encoding("cl100k_base").encode(text)
返回一个令牌列表,让你验证输入是否在模型的限制内。如果超出限制,将文本分割成小于令牌上限的小段,并确保在逻辑断点(如段落或代码块)处分割,以保留上下文。
分割大型输入时,优先考虑保持连贯性。例如,如果处理长文档,将其按章节或部分划分,并分别处理每个部分。对于代码分析,将文件分割成函数或逻辑模块。使用系统提示词指导模型处理各个分块。例如,如果使用 gpt-3.5-turbo
(16k 限制)总结一篇 20k 令牌的文章,将其分割成两个 10k 令牌的部分。总结第一个分块,然后在处理第二个分块时将摘要作为上下文包含进去,以保留整体主题。或者,使用嵌入索引大型数据集,并仅检索与每个查询相关的片段,在减小输入大小的同时保持准确性。
调整 API 参数以优化大型输入。设置 max_tokens
以保留足够的令牌用于响应,确保输入和输出的总和不超过模型的限制。对于迭代任务,可以链式调用多个 API:处理第一个分块,提取关键点,然后将其作为后续请求的输入。例如,分析大型代码库时,将其分解为文件,分析每个文件的漏洞,然后合并结果。始终测试边缘情况(如接近令牌限制的输入),并实现错误处理,如果 API 拒绝请求,则尝试使用更小的分块重试。通过结合令牌管理、逻辑分块和迭代处理,你可以高效处理大型输入,同时不牺牲输出质量。