推荐序
可略过不看。
初识GPT-4和ChatGPT
LLM概述
NLP的目标是让计算机能够处理自然语言文本,涉及诸多任务:
- 文本分类:将输入文本归为预定义的类别。
- 自动翻译:将文本从一种语言自动翻译成另一种语言,包括程序语言。
- 问题回答:根据给定的文本回答问题。
- 文本生成:根据给定的输入文本(提示词)生成连贯且相关的输出文本。
n-gram模型:通过使用词频来根据前面的词预测句子中的下一个词,其预测结果是在训练文本中紧随前面的词出现的频率最高的词。有时会生成不连贯的文本,在理解上下文和语法方面仍需改进。
改进n-gram模型的算法:循环神经网络(recurrent neural network,RNN)和长短期记忆(long short-term memory,LSTM)网络,依然存在问题:很难处理长文本序列并记住其上下文。
GPT模型简史:从GPT-1到GPT-4
监督学习:使用大量的手动标记数据。
GPT-1:引入无监督的预训练步骤,使用BookCorpus数据集。
GPT-2:GPT-1的扩展版本,其参数量和训练数据集的规模大约是GPT-1的10倍。公开可用,可从Hugging Face或GitHub下载。
GPT-3:主要区别在于模型的大小和用于训练的数据量,取消微调步骤,
InstructGPT:GPT-3的新版本,通过强化学习和人类反馈进行优化。训练过程主要有两个阶段:监督微调(supervised fine-tuning,SFT)和通过人类反馈进行强化学习(reinforcement learning from human feedback,RLHF)。
Codex:
GPT-4:
LLM用例和产品
如Be My Eyes、可汗学院、Yabble、Waymark、Inworld AI。
AI幻觉
AI会给出错误的,过时的,虚构的信息。
插件和微调
优化GPT模型,提高其能力的两种方式:插件和微调。
GPT模型的局限:没有直接访问互联网的权限,无法获取新信息,其知识仅限于训练数据。
深入了解GPT-4和ChatGPT的API
基本概念
OpenAI API提供的可用模型
OpenAI Playground
OpenAI Playground是一个Web站点,可用来测试OpenAI提供的语言模型,
使用OpenAI Python库
在Windows 11中永久添加或更改环境变量,Windows+R打开运行窗口,键入sysdm.cpl
打开系统属性
面板,在高级——环境变量里,可使用OpenAI密钥添加一个新的环境变量。
提供命令行实用程序:
openai api chat_completions.create -m gpt-3.5-turbo -g user "Hello world"
使用GPT-4和ChatGPT
借助于tiktoken库(参考GitHub),开发人员能够计算文本字符串中的标记数,进而估算使用成本。
OpenAI提供的可选参数
字段名称 | 类型 | 描述 |
---|---|---|
temperature | 数值,默认值为1,可接受介于0和2之间的值 | 温度为0意味着对于给定的输入,对模型的调用很可能会返回相同的结果,尽管响应结果会高度一致,但OpenAI不保证确定性输出,温度越高,结果的随机性就越强,LLM通过预测一系列标记来生成回答,根据输入上下文,LLM为每个潜在的标记分配概率,当温度被设置为0时,LLM将始终选择概率最高的标记,较高的温度可产生更多样化、更具创造性的输出 |
n | 整型,默认值为1 | 通过设置这个参数,可为给定的输入消息生成多个回答。如果将温度设为0,虽然可得到多个回答,但它们将完全相同或非常相似 |
stream | 布尔型,默认值为false | 允许回答以流的格式呈现,即并非一次性发送整条消息。当回答的内容较长时,可提供更好的用户体验 |
max_tokens | 整型 | 指定在聊天中生成的最大标记数。强烈建议将其设置为合适的值以控制成本。如果该参数设置得过大,会被OpenAI忽略:输入和生成的标记总数不能超过模型的上限 |
tools | ||
response_format | ||
seed |
输出参数
字段名称 | 类型 | 描述 |
---|---|---|
choices | 对象数组 | 包含模型实际响应的教组。默认情况下,该数组只有一个元素,可通过参数n (上表的输入参数)进行更改,该元素包含以下内容。finish_reason:字符串,回答结束的原因; index:整型,从choices数组中选择对象的索引; message:对象,包会一个role和一个content,role始终是assistant,content包括模型生成的文本。通常希望获得这样的字符串:response[‘choices’][0][‘message’][‘content’] |
created | 时间戳 | 生成时的时间戳 |
id | 字符串 | OpenAl内部使用的技术标识符 |
model | 字符串 | 所用的模型。这与作为输入设置的模型相同 |
object | 字符串 | 对于GPT-4和GPT-3.5模型,这始终应为chat.completion,使用的是ChatCompletion端点 |
usage | 字符串 | 提供有关在此查询中使用的标记数的信息,从而提供费用信息。prompt_tokens表示输入中的标记数,completion_tokens:表示输出中的标记数。total_tokens=prompt_tokens+completion_tokens |
其他文本补全模型
文本补全和聊天补全。
文本补全使用Completion端点,
字段名称 | 类型 | 描述 |
---|---|---|
model | 字符串,必埴 | 所用模型ID,与ChatCompletion相同 |
prompt | 字符串或数组,默认值是<|endoftext|> |
生成补全内容的提示词。体现Completion端点与 ChatCompletion端点的主要区别。Completion.create 应编码为字符串、字符串数组、标记数组或标记数组的数组。如果没有提供该参数,模型将从新文档的开头生成文本 |
max_tokens | 整型 | 最大标记数,默认为16,对于某些用例可能太小,应根据需求进行调整 |
suffix | 字符串,默认值是null | 补全之后的文本。该参数允许添加后缀文本、插入操作 |
考虑因素
使用API需考虑两个因素:成本和数据隐私。
OpenAI声称不会将作为模型输入的数据用于重新训练;但是,用户的输入将被保留30天,用于监控和使用合规检查目的。即,OpenAI员工和第三方承包商可能会访问你的数据。
个人信息和输入的数据可能会传输到OpenAI在美国的服务器上。
其他
使用GPT-4和ChatGPT构建应用程序
概述
用户提供API密钥时的管理原则:
- 对于Web应用程序,将API密钥保存在用户设备的内存中,而不要用浏览器存储;
- 如果选择后端存储API密钥,则需强制采取高安全性的措施,并允许用户自己控制API密钥,包括删除API密钥;
- 在传输期间和静态存储期间加密API密钥。
使用自己的API密钥,应遵循的最佳实践:
- 永远不要直接将API密钥写入代码中;
- 不要将API密钥存储在应用程序的源代码文件中;
- 不要在用户的浏览器中或个人设备上使用你的API密钥;
- 设置使用限制,以确保预算可控。
设计原则
没啥好说的,解耦合等架构设计原则。
漏洞
将用户输入作为提示词发送给LLM的任何面向用户的应用程序都容易受到提示词注入攻击。
建议结合两种方法:
- 添加分析层来过滤用户输入和模型输出;
- 意识到提示词注入不可避免,并采取一定的预防措施。
降低受提示词注入攻击的风险的方法:
- 使用特定规则控制用户输入:具体业务情况设置具体规则;
- 控制输入长度:控制成本。还能降低风险:输入越短,攻击者找到有效恶意提示词的可能性就越小;
- 控制输出:验证输出以检测异常情况;
- 监控和审计:监控应用程序的输入和输出,以便能够在事后检测到攻击。还可对用户进行身份验证,以便检测和阻止恶意账户;
- 意图分析:分析用户输入以检测提示词注入。
这个问题无法避免,因此需要考虑后果:
- 指令可能被泄露:确保你的指令不包含任何对攻击者有用的个人数据或信息;
- 攻击者可能尝试从你的应用程序中提取数据:如果你的应用程序需要操作外部数据源,请确保在设计上不存在任何可能导致提示词注入从而引发数据泄露的方式。
示例项目
获取YouTube字幕:使用第三方库,如youtube-transcript-api,又或者使用Captions Grabber等Web实用工具。
映射—归约:当输入文本超过模型的上限(某个模型不一致,如4096个标记),则需要多次执行请求。
三个组件:
- 意图服务:当用户向应用程序提问时,检测用户的意图。应检测出需要使用的数据源,用户所提的问题是否遵守OpenAI的使用规则,是否包含敏感信息。
- 信息检索服务:将获取意图服务的输出并检索正确的信息。这意味着你已经准备好数据,并且数据在该服务中可用。将比较自己的数据和用户查询之间的嵌入。嵌入将使用OpenAI API生成并存储在向量存储系统中。
- 响应服务:将使用信息检索服务的输出,并从中生成用户所提问题的答案。
OpenAI提供的Whisper库(参考GitHub)实现从语音到文本的转换功能。
Gradio:构建用户界面的工具,可将ML模型快速转换为可访问的Web界面。
GPT-4和ChatGPT高级技巧
提示工程
一门新兴学科,专注于以最佳实践构建LLM输入,从而尽可能以程序化方式生成目标输出。旨在为生成式AI模型设计和优化提示词,以获得更高质量的模型响应。
在提示词中定义三大要素:角色、上下文和任务。
高级技巧:零样本学习、少样本学习和微调。
TL;DR
是too long; didn't read