如何在Python中使用ChatGPT API处理实时数据

译者 | 李睿
审校 | 重楼
AI target=_blank class=infotextkey>OpenAI公司推出的GPT如今已经成为全球最重要的人工智能工具,并精通基于其训练数据处理查询 。但是,它不能回答未知话题的问题,例如:

  • 2021年9月之后的近期事件
  • 非公开文件
  • 来自过去谈话的信息
当用户处理频繁变化的实时数据时,这项任务变得更加复杂 。此外,用户不能向GPT提供大量内容,它也不能长时间保留他们的数据 。在这种情况下,需要有效地构建一个自定义的大型语言模型(LLM)应用程序来为回答过程提供场景 。
本文将引导人们完成使用Python/ target=_blank class=infotextkey>Python中的开源LLM App库开发此类应用程序的步骤 。源代码在Github上(链接在下面的“为销售构建ChatGPT Python API”一节中) 。
学习目标通过本文了解以下内容:
  • 需要添加自定义数据到ChatGPT的原因 。
  • 如何使用嵌入、提示工程和ChatGPT来更好地回答问题 。
  • 用户使用LLM应用程序与自定义数据构建自己的ChatGPT 。
  • 创建一个ChatGPT Python API查找实时折扣或销售价格 。
为什么为ChatGPT提供自定义知识库?在讨论增强ChatGPT功能的方法之前,首先探索人工方法并确定它们面临的挑战 。通常情况下 , ChatGPT通过提示工程进行扩展 。假设用户想在各种在线市场上找到实时折扣/交易/优惠券 。
例如,当询问ChatGPT,“你能帮我找到阿迪达斯男鞋在本周的折扣吗?”,在没有自定义知识的情况下,可能从ChatGPT UI界面得到的标准回答是:
如何在Python中使用ChatGPT API处理实时数据

文章插图
显然,ChatGPT提供了关于寻找折扣的通常建议,但缺乏关于在哪里或什么类型的折扣以及其他细节的具体信息 。现在为了帮助这个模型,使用来自可靠数据源的折扣信息对其进行补充 。在发布实际问题之前,必须通过添加初始文档内容来参与ChatGPT 。将从Amazon产品交易数据集中收集这一示例数据,并在提示中仅插入一个JSON项:
如何在Python中使用ChatGPT API处理实时数据

文章插图
如上图所示,用户得到了预期的输出 , 这很容易实现,因为ChatGPT现在是场景感知的 。然而 , 这种方法的问题是模型的场景受到限制(GPT-4的最大文本长度为8,192个令牌) 。当输入数据规模非常大时,这种策略很快就会出现问题,用户可能希望在销售中发现数千种商品 , 而无法将如此大量的数据作为输入消息提供 。此外,一旦收集了数据 , 可能需要对数据进行清理、格式化和预处理,以确保数据质量和相关性 。
如果用户使用OpenAI聊天完成度端点或为ChatGPT构建自定义插件,它会引入以下其他问题:
  • 成本—通过提供更详细的信息和示例,大型语言模型的性能可能会得到改善,尽管成本更高(对于输入10000个令牌和输出200个令牌的GPT-4,每次预测的成本为0.624美元) 。重复发送相同的请求会增加成本 , 除非使用本地缓存系统 。
  • 延迟—在生产中使用ChatGPT API的一个挑战是它们的不可预测性,不能保证提供一致的服务 。
  • 安全性—当集成自定义插件时,每个API端点必须在OpenAPI规范中指定功能 。这意味着用户正在向ChatGPT泄露其内部API设置,这是令许多企业担心的风险 。
  • 离线评估—对代码和数据输出进行离线测试或在本地复制数据流对开发人员来说是具有挑战性的 。这是因为对系统的每个请求可能产生不同的响应 。
使用嵌入、提示工程和ChatGPT进行问答人们在互联网上发现的一种很有前途的方法是利用大型语言模型(LLM)创建嵌入 , 然后使用这些嵌入构建应用程序,例如用于搜索和询问系统 。换句话说,不是使用聊天完成端点查询ChatGPT,而是执行以下查询:
给定以下折扣数据:{input_data} , 回答这个查询:{user_query} 。
这个概念很简单 。这种方法不是直接发布问题,而是首先通过OpenAI API为每个输入文档(文本、图像、CSV、PDF或其他类型的数据)创建向量嵌入 , 然后对生成的嵌入进行索引以便快速检索 , 并将其存储到向量数据库中,并利用用户的问题从向量数据库中搜索并获得相关文档 。然后将这些文档与问题一起作为提示呈现给ChatGPT 。有了这个添加的场景,ChatGPT就可以像在内部数据集上训练一样进行响应 。


推荐阅读