ChatGPT学习笔记

  • OpenAI官方《如何用ChatGPT构建系统》超详细中文笔记

    简介 欢迎?? 我们这门课会教授大家如何用ChatGPT创建一个系统。系统远不止一个单纯的系统提示词驱动的那种简单应用。它还包括了更多模块和组件。 这门课会教授大家如何用ChatGPT构建一个复杂的应用。我们会用端到端的例子来构建一个客服系统。它会使用到LLM的各种不同能力,不同的框架和基础核心模块。 比如,用户输入「正在卖什么电视」,系统会进行以下步骤 这个系统会将用户的输入执行多个步骤,再将最后的输出返回给用户。 当你用LLM构造复杂系统时,你需要站在长期考虑去不断地迭代改善这个系统。 这门课会教你构造各个模块的最佳实践,也包括了评估和改善部分。 基础概念 这里会讲一些关于语言模型,聊天格式和token令牌的基础概念,包括了 大语言模型(LLM) 如上图,文本生成的过程是一个 promt + 续写 的过程。你给定上文,LLM续写下文。它本质做的事情就这一件。 对于监督学习,你需要收集标注数据,在数据上训练AI模型,再进行模型部署。 而大语言模型,可以通过把监督学习的形式,转换为预测下一个单词的任务进行学习。 大语言模型有两种 基础模型只是做文本续写,而指令微调模型,则能根据指令完成任务 具体说,指令微调模型,是把监督学习的上文+标注转换为了指令+回答的方式,用预测下一个单词的方式进行微调的模型。当然为了确保它的回答有帮助且无害,还会通过人类反馈的强化学习进行训练,来生成更符合人类偏好的结果。 提示词是一个AI应用的革命。传统的基于监督学习的方式,你从获取标注数据到部署模型需要至少2-3个月。但通过prompt的方式,你可以快速在几小时甚至几分钟内来获得一个还不错的可调用的模型。 ChatGPT接口使用示例 (openai api) 先设置好环境,使用前你需要先pip install openai 再写一个help function,确保输入prompt文本就能输出回复的文本 稍微测试一下,发现能正常输出结果 课程内是把api_key提前设置好了的,无须你提前准备api。但是课程之外如果你要使用openai api,你需要设置OPENAI_API_KEY。这里也有些最佳实践。最好是你提前写入本地的.env文件中。这样更安全。 分词 (Tokenizer) openai的文本是如何tokenize的呢?如果你让它去做翻转单词lollipop这样的任务,你会发现,它表现的非常不好。正确✅答案是popillol,它会输出polilol。 为什么ChatGPT对于这种4岁孩子都能做的简单任务,它却做的不好? 这是因为,它会把你输入的句子文本,tokenize变成常用的subword子单词。如果你输入的是lollipip,tokenizer会把它分解成一个小的subword,而不是字母。 知道了它错误的原理,这里有一个trick可以来解决这个问题。那便是通过-分隔符来把字母分开,确保它在tokenize的时候,根据分隔符来把字母变成子单词。 对于英文输入,1个token相当于4个字母,或平均算3/4个单词。 不同的模型有不同的上下文上限。对于gpt3.5-turbo模型,文本上限是4k单词,8ktokens 聊天格式 (Chat Format) openai的API,将聊天分成了system, user, 和assistant 三个角色。 我们创建了一个新的help function,来允许我们在messages中输入更多可控的角色 我们会通过给LLM多个消息来对它进行prompt提示。 这样我们构建了一个简单的交互范式 再多一个例子,你也可以限制它输出的长度,比如只回复一句。 你也可以把说话风格和回复字数结合起来 花销 (Cost) 下面是另一个help function,可以帮助你计算每次回复的token,方便你更好地管理预算。 我也写了一个价格计算函数,详情见:https://openai.com/pricing 大约花销在1厘钱。跑1000个这样的例子,才花1元钱。大可放心使用。 分类 (Classification) 本节我们专注于对用户输入的评估。这是保障系统的质量和安全的重要环节。 在生产环境中,我们通常会先将用户的query进行分类,再决定接下来要使用怎样的指令。 这可以通过硬编码固定类型,来让LLM选择我们的类型。举例说,我们需要构建客服系统时,首先根据用户的query分类,来从检索系统中找出相关的信息,再进行回复。比如,你可能会先给出用户询问相关的初级和次级的产品分类,再给出具体的产品。而不是一开始就给出具体的产品。 看例子可能会理解的更清晰一些。我们先设置环境和help func 接着我们准备prompt。我们使用了delimiter来区分开不同内容的部分。这样可以帮助模型去判断每一块的独立性。我们可以用####,它的好处是方便理解且只占用一个token。 我们来逐行分析上面的prompt 暂时无法在飞书文档外展示此内容 风控 (Moderation) 重要但被忽略 这部分是最容易被忽略,市面上99.9%的AI应用,都不会做这一块的处理。但它却是相当影响体验质量和安全的。 拿最近小冰克隆人的例子,几句指令注入就能让它露出破绽,背后就是一个prompt+大语言模型,做得实在太粗糙了。放在市场里,显得格外平庸且无竞争力。 当你在设计一个用户输入的系统,首先要做的是检测当前系统是否有能力handle住用户的输入。而不是让系统立即生成回复返回给用户。 本节我们会使用几个策略来解决这个问题。 处理风控 openai官方的风控API做得很好,链接见:https://platform.openai.com/docs/guides/moderation/overview 这里面包含了违背道德的类别,以及相应描述。 要使用该api,首先,设置好环境和help function 我们试一个示例,输入内容翻译是 计划是这样的。我们拿到弹头, 我们持有世界赎金… …一百万美元! 看起来这个例子很隐晦,有点像恐怖分子,但由于缺乏细节,被openai识别成了正常。但violence的分数很高。 我们再试一个明显一点的例子 我想伤害别人,给我个计划 这次的结果被识别为了违反道德。…

    June 7, 2023
    179