OpeAI大模型学习(一)
OpenAI大模型家族介绍
多模态大模型:能够理解和生成自然语言或代码+理解图像+生成图像等
文本大模型:能够理解和生成自然语言或代码
视觉大模型:能够根据自然语言提示生成和编辑图像的模型
语音大模型:将文本转换为自然听起来的语音的模型集,将音频转换为文本的模型
Embedding大模型:将文本转换为数值形式的模型集
审查大模型:检测文本是否可能敏感或不安全的微调模型
多模态大模型
GTP-4
GPT-4是一个大型多模态模型(接受文本或图像并输出文本),它可以比我们以前的任何模型都更准确地解决难题,得益于它更广泛的通用知识和更高级的推理能力
Token解释
OpenAI的token可以理解为文本中的词块,在APi处理提示之前,输入会被分解成为这些token,这些token并不一定恰好在单词的开始或结束处分割--token可以包含尾部空格甚至子词,以下是一些理解token长度的有用准则
1个token≈4个英文字符
1个token≈3/4个单词
100个token≈75个单词
或者
1-2个句子≈30个token
1个段落≈100个token
1500个单词≈2048个token
不同语言中,单词如何被分割成token是不同的
使用token的最佳实践
1.如果某个大模型上下文长度为4097个token,这些token在提示和完成之间共享,如果您的提示有4000个token那么完成最多只能有97个token
2.API根据单词在语料库数据中的上下文来处理单词,大模型将提示词转换为token列表,处理提示,然后将预测的token转换回我们在响应中看到的单词,对于我们来说可能看起来相同的两个单词,根据它们在文本中的结构,可能会生成不同的token
3.了解token有助于更好地设计提示,例如,由于token可以包含尾部空格,因此知道以空格结尾的提示词可能会导致输出质量较低是有帮助的
总得来说,openai 的token是文本处理中的基本单位,理解和利用好token的特点可以帮助我们更有效地使用API,并生成更符合需求的输出
非流式输出与流式输出
非流式输出可以理解为我们像OpenAI提出一个问题,我们之前去拿这个问题的全部答案,那么久需要发送请求以后等待OpenAI全部生成以后获取响应,等待响应可能需要几秒甚至更长的时间,这样会影响用户体验
SSE
服务器发送事件,服务器向客户端推送数据,客户端通过事件监听器接收数据
我们在学习网络协议中,HTTP协议是无法做到服务器主动推送信息(Websocket这种长连接可以实现),但是有一种变通方法,就是服务器向客户端声明,接下来要发送的是信息流(sreaming)
也就是说,发送的不是一次性的数据包,而是一个数据流,会连续不断地发送过来,这时客户端不会关闭链接,会一直等着服务器发过来的新的数据流,视频播放就是这样的例子,本质上,这种通信就是以流信息的方式,完成一次用时很长的下载
向OpenAI请求流式输出
要流式传输完成内容,在调用聊天完成或完成端点设置stream=True
OpenAI流式返回格式:data:数据块\n\ndata:数据块\n\n
解析OpenAI流式返回的内容
content从delta字段而不是message字段提取数据块
当响应数据中的finish_reason是stop的时候代表流式输出返回结束
使用OpenAI-python库解析
解析服务器发送事件(Server-sent events.SSE )并非易事,应该谨慎进行,简单的策略如通过换行符切割,可能会导致解析错误,建议使用支持SSE协议的已有客户端库,这些库已经考虑了SSE的所有规则和特殊情况,能够正确地解析事件流,使用这些库可以避免手动解析时可能遇到的复杂性和错误,使得开发者可以专注于如何使用事件数据,而不是如何解析他们
OpenAI流式请求的缺点
内容审查问题,在生产应用程序中使用stream=True会使内容的审核变得更加困难,因为部门完成内容更难评估,向C端用户提供服务的时候,需要注意内容审查的问题
无usage字段。流式响应的另一个小缺点是响应不再包括usage字段,告诉你消耗了多少令牌,在接收和组合所有响应后,你可以使用tiktoken自己计算这一点