2024基于ChatGPT⼤模型开发应⽤指南_第1页
2024基于ChatGPT⼤模型开发应⽤指南_第2页
2024基于ChatGPT⼤模型开发应⽤指南_第3页
2024基于ChatGPT⼤模型开发应⽤指南_第4页
2024基于ChatGPT⼤模型开发应⽤指南_第5页
已阅读5页,还剩167页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

基于ChatGPT⼤模型开发应⽤指南第1 初识GPT-4和探索语⾔NLP的理解Transformer架构及其LLM中的作解密GPT模型的标记化和预测GPT-3.5、CodexLLM⽤例和⽰例产BeMy摩根可汗学多InworldAI幻觉:限制与考使⽤插件和微调优化GPT⼩ 基本概OpenAIAPI提供的可⽤OpenAI访问权API密ChatCompletion端点的输⼊选ChatCompletion端点的输出从⽂本补使⽤其他⽂本补全Completion端点的输⼊选Completion端点的输出考定价和标记限安全嵌内容审⼩结(含速查清单第3 使⽤GPT-4和ChatGPT构建应⽤程应⽤程序开发API密数据安全和数软件架构设计LLM驱动型应⽤程序的分析输⼊和输⽆法避免提⽰词注⽰例项⽬1:构建新闻稿⽣项⽬2:YouTube视频摘项⽬3:打造《塞尔达传说:旷野之息》4:语⾳控⼩ 提⽰⼯设计有效的提⽰逐步思实现少样改善提⽰效微开始⽣成和微调电⼦邮件营销活动的合成数微调的成⼩第5 使⽤LangChain框架和插件增强LLM的功动态提⽰智能体记嵌概插件清描⼩总术语GPT-4OpenAI努⼒构建的世界,它通过其GPT模型让设备拥有与⼈类对话的⼒。作为(artificialintelligence,AI)领域的最新成果,GPT-4其他GPT模型是基于⼤量数据训练⽽成

model,LLM),它们能够以⾮常⾼的准确性识别和⽣成⼈类可读的⽂本1“⼤语⾔模型”简称“⼤模型”。在本书中,两者的意思相同。——编者这些AI模型的意义远超简单的语⾳助⼿。多亏了OpenAI的模型,开发⼈的学习⻛格的个性化教学⼯具,GPT-4ChatGPT打开了⼀扇门,让⼈们GPT-4ChatGPT究竟是什么?本章的⽬标是深⼊探讨这些AI模型的基LLM本节介GPT-4ChatGPT发展历程的基础模块。我们旨在帮助你NLP器学习和⼈⼯智能的⼀个⼦领域。在深⼊GPT-4ChatGPT之前,必要了解NLP及其相关领域AI有不同的定义,但其中⼀个定义或多或少已成为共识,即AI是⼀机系统,它能够执⾏通常需要⼈类智能才能完成的任务。根据这个定义,许多算法可以被归为AI算法,⽐如导航应⽤程序所⽤的交通预测算法或策略类视频游戏所⽤的基于规则的系统。从表⾯上看,在这些⽰例中,计算机似乎需要智能才能完成相关任务。试图直接实AI系统使⽤的决策规则。相反,我们试图开发算法,使系统能够通过⽰例⾃⼰学习。⾃从20世50年代开始进⾏ML研究以来,⼈们已经在科学⽂献中提出了许ML算法在这些ML算法中,(deeplearning,DL)算法已经引起了⼴泛关注。DL是ML的⼀个分⽀,专注于受⼤脑结构启发的算法。这些算法被称GPT-4ChatGPT基于⼀种特定的神经⽹络架构,即Transformerransformer就像阅读机⼀样,它关注句⼦或段落的不同部分,以理解其上下⽂并产⽣连贯的回答。此外,它还可以理解句⼦中的单词顺序和上下⽂意思。这使ransformer在语⾔翻译、问题回答和⽂本⽣成等效。图1-1展⽰了以上术语之间的关系。1-1AITransformerNLP是AI的⼀个⼦领域,专注于使计算机能够处理、解释和⽣成⼈类⾔。现代NLP解决⽅案基于ML算法。NLP的⽬标是让计算机能够处理⾃⽂本分将输⼊⽂本归为预定义的类别。这类任务包括情感分析和主题分类⽐如,某公司使⽤情感分析来了解客户对其服务的意⻅。电⼦邮件过滤⾃动翻括将代码从⼀种程序设计语⾔翻译成另⼀种程序设计语⾔,⽐如从Python翻C++。问题根据给定的⽂本回答问题。⽐如,在线客服门户⽹站可以使⽤NLP模型回答关于产品的常⻅问题;教学软件可以使⽤NLP模型回答学⽣关于所⽂本⽣根据给定的输⼊⽂本(称为提⽰词2)⽣成连贯且相关的输出⽂本对于prompt⼀词,本书统⼀采⽤“提⽰词”这个译法,以符合业内惯例。不过,prompt既可以是⼀个词,也可以是⼀个或多个句⼦。对于promptengineering,本书采⽤“提⽰⼯程”这个译法。——者注如前所述,LLM是试图完成⽂本⽣成任务的⼀类ML模型。LLM使计算能够处理、解释和⽣成⼈类语⾔,从⽽提⾼⼈机交互效率。为了做到这⼀点,LLM会分析⼤量⽂本数据或基于这些数据进⾏训练,从⽽学习句⼦中各词之间的模式和关系。这个学习过程可以使⽤各种数据源,包括维基百科、Reddit、成千上万本书,甚⾄互联⽹本⾝。在给定输⼊⽂本的情况下,这个学习过程使得LLM能够预测最有可能出现的后续单词,从⽽⽣成对输⼊⽂本有意义的回应。于2023年发布的⼀些现代语⾔模型⾮常庞⼤,并且已经在⼤量⽂本上进⾏了训练,因此它们可以直接执⾏⼤多数NLP任务,务上表现LLM。LLM的发展可以追溯到⼏年前。它始于简单的语⾔模型,如n-gram模型n-gram模型通过使⽤来根据前⾯的词预测句⼦中的下⼀个词,其预测结果是在训练⽂本中紧随前⾯的词出现的频率最⾼的词。虽然这种⽅法提供了不错的着⼿点,但是n-gram模型在理解上下⽂和语法⽅⾯仍需改进,因为它有时会⽣成不连贯的⽂本。为了提n-gram模型的性能,⼈们引⼊了更先进的学习算法,(recurrentneuralnetwork,RNN)和(longshort-termmemory,LSTM)⽹络。与n-gram模型相⽐,这些模型能够学习更⻓的序 TransformerLLMTransformer架构彻底改变了NLP领域,这主要是因为它能够有效地解决之前的NLP模型(如RNN)存在的⼀个关键问题:很难处理⻓⽂本序列并记住其上下⽂。换句话说,RNN在处理⻓⽂本序列时容易忘记上下⽂(也就是臭名昭著的“灾难性遗忘问题”),Transformer则具备⾼效处理和编码上这场⾰命的核⼼⽀柱是,这是⼀个简单⽽⼜强⼤的机制。模型不再将⽂本序列中的所有词视为同等重要,⽽是在任务的每个步骤中关注最相关的词。和是基于注意⼒机制的两个架构模块,它们经常出现在LLM中。ransformer架构⼴泛使⽤了交叉注意⼒模块和注意⼒模块。享受布鲁塞尔阳光明媚的天⽓)。如果⽬标语⾔是法语,那么输出⽂本应该是:AliceaprofitédutempsensoleilléàBruxelles。在这个例⼦中,让我专注于⽣成法语单词ensoleillé,它对应原句中的sunny。对于这个预测任务,交叉注意⼒模块会更关注英语单词sunny和weather,因为它们都与ensoleillé相关。通过关注这两个单词,交叉注意⼒模块有助于模型为句⼦2⾃注意⼒机制是指模型能够关注其输⼊⽂本的不同部分。具体到NLP领colleagues(Alice受到同事的赞扬)。假设模型试图理解her这个单词的意colleagues这两个单词。如前所述,⾃注意⼒机制帮助模型根据这些单词构建新概念。在本例中,可能出现的⼀个新概念是Alice'scolleagues,如1-3所⽰。1-3Alice'scolleagues与RNN不同,Transformer架构具有易于并⾏化的优势。这意味Transformer架构可以同时处理输⼊⽂本的多个部分,⽽⽆须顺序处理。这⽽⽆须等待前⼀步骤完成。基于Transformer架构的模型所具备的并⾏处理能⼒与(graphicsprocessingunit,GPU)的架构完美契合,后GPU⾮常适合⽤于训练和运⾏基于Transformer架构的模型。硬件上的这⼀进展使数据科学家能够在⼤型数据集上训练模型,从⽽为开发LLM铺平了Transformer架构由来⾃⾕歌公司的AshishVaswani等⼈2017年的⽂“AttentionIsAllouNeed”中提出,最初⽤于序列到序列的任务,如机器翻译任务。标准的ransformer架构有两个主要组件:编码器和解码器,者都⼗分依赖注意⼒机制。编码器的任务是处理输⼊⽂本,识别有价值的特征,并⽣成有意义的⽂本表⽰,称为(embedding)。解码器使⽤个嵌⼊来⽣成⼀个输出,⽐如翻译结果或摘要⽂本。这个输出有效地解释了编码信息。⼀类基于ransformer架构的模型,专门利⽤原始架构中的解码器部分。在GPT中,不存在编码器,因此⽆须通过交叉注意⼒机制来整合编码器产⽣的嵌⼊。也就是说,GPT仅依赖解码器内部的⾃注意⼒机制来⽣成上下⽂感知的表⽰和预测结果。请注意,BET等其他⼀些众所周知的模型基于码器部分,但本书不涉及这类模型。图1-4展⽰了NLP技术的演变历程。1-4NLPn-gramLLM GPTGPT模型接收⼀段提⽰词作为输⼊,然后⽣成⼀段⽂本作为输出。这个过decidedto(今天天⽓很好,所以我决定),模型的输出则可能是goforawalk(去散步)。你可GPT模型是如何根据输⼊的提⽰词构建输当GPT模型收到⼀段提⽰词之后,它⾸先将输⼊拆分成(token)。些标记代表单词、单词的⼀部分、空格或标点符号。⽐如,在前⾯的例⼦中,提⽰词可以被拆分成[The,wea,the,is,nice,toda,,,so,I,de,ci,ded,to]。3现在,OpenAI已在其⽹站上提供了GPT-4的分词器。——译者理解标记与词⻓的⼀条经验法则是,对于英语⽂本,100个⼤约等于75个单词因为有了注意⼒机制和ransformer架构,LLM能够轻松处理标记们之间的关系及提⽰词的整体含义。ransformer架构使模型能够⾼效地识别⽂本中的关键信息和上下⽂。为了⽣成新的句⼦,LLM根据提⽰词的上下⽂预测最有可能出现的下⼀个标记。OpenAI开发了两个版本的GPT-4,上下⽂窗⼝⼤⼩分别为8192个标32768个4。与之前的循环模型不同,带有注意⼒机制的ransformer架构使得LLM能够将上下⽂作为⼀个整体来考虑。基于这下⽂,模型为每个潜在的后续标记分配⼀个概率分数,然后选择概率最⾼的标记作为序列中的下⼀个标记。在前⾯的例⼦中,“今天天⽓很好,所以我决定”之后,下⼀个最佳标记可能是“去”。4请注意,本书中的译者注的添加时间为2023年11⽉19⽇~2023年12⽉2⽇,在此统⼀说明,后preview、gpt-4-vision-preview、gpt-4、gpt-4-32k、gpt-4-0613、gpt-4-32k-0613,其中gpt-4-1106-preview的上下⽂窗⼝已增加⾄16385个标记。——译者接下来重复此过程,但现在上下⽂变为“今天天⽓很好,所以我决定去”,之前预测的标记“去”被添加到原始提⽰词中。这个过程会⼀直重复,直到形成⼀个完整的句⼦:“今天天⽓很好,所以我决定去散步。”这个过程依赖于LLM学习从⼤量⽂本数据中预测下⼀个最有可能出现的单词的能⼒图1-5展⽰了这个过程。5GPTGPT-1GPT-本节将回顾OpenAI的GPT模型从GPT-1到GPT-4的演变历程2018年年中,就Transformer架构诞⽣⼀年后,OpenAI发表了⼀篇GPT-1出现之前,构建⾼NLP神经⽹络的常⽤⽅法是利⽤监督学策略是收集数千个⼿动标记的⽂本⽰例来构建有效的分类模型。然⽽在论⽂中,GP-1的作者提出了⼀种新的学习过程,其中引训练步骤。这个预训练步骤不需要标记数据。相反,他们训练模型来预测下⼀个标记。由于采⽤了可以并⾏化的ransformer架构,预训练步骤是在⼤量数据上进⾏的。对于预训练,GPT-1模型使⽤了BookCorpus数据集。Zhu等⼈2015年的论⽂“AligningBooksandMovies:TowardsStory-like⼈们发现,GP-1在各种基本的⽂本补全任务中是有效的。在⽆监督学习段,该模型学习BookCorpus数据集并预测⽂本中的下⼀个词。然⽽,GP-1是⼩模型,它⽆法在不经过微调的情况下执⾏复杂任务。因此,⼈们将微调作为第⼆个监督学习步骤,让模型在⼀⼩部分⼿动标记的数据上进⾏微调,从⽽适应特定的⽬标任务。⽐如,在情感分析等分类任务中,可能需要在⼀⼩部分⼿动标记的⽂本⽰例上重新训练模型,以使其达到不错的准确度。这个过程使模型在初始的预训练阶段习得的参数得到修改,从⽽更好地适应具体的任务。尽管规模相对较⼩,但GPT-1在仅⽤少量⼿动标记的数据进⾏微调后,能Transformer架构中的解码器类似),具有1.17亿个参数。作为⾸个GPT模型,它为更强⼤的模型铺平了道路。后续的GPT模型使⽤更⼤的数据集和 GPT-2是公开可⽤的,可以从HuggingFaceGitHub下载GP-2表明,使⽤更⼤的数据集训练更⼤的语⾔模型可以提⾼语⾔模型务处理能⼒,并使其在许多任务中超越已有模型。它还表明,更⼤的语⾔模型能够更好地处理⾃然语⾔。2020年6⽉,OpenAI发布了GP-3。GP-2和GP-3之间的主要区别在于模型的⼤⼩和⽤于训练的数据量。GP-3⽐GP-2⼤得多,它有1750亿个参数,这使其能够捕捉更复杂的模式。此外,GP-3是在更⼴泛的数据集进⾏训练的。这包括CommonCrawl(它就像互联⽹档案馆,其中包含来⾃数⼗亿个⽹⻚的⽂本)和维基百科。这个训练数据集包括来⾃⽹站、书籍和⽂章的内容,使得GP-3能够更深⼊地理解语⾔和上下⽂。因此,GP-3在各种语⾔相关任务中都展⽰出更强的性能。此外,它在⽂本⽣成⽅⾯还展⽰出更强的连贯性和创造⼒。它甚⾄能够编写代码⽚段,如SQL查询,并执⾏其他智能任务。此外,GP-3取消了微调步骤,⽽这在之前的GPT模型中是必需的。然⽽,GPT-3存在⼀个问题,即最终⽤户提供的任务与模型在训练过程中图或指令。GPT-3这样的模型是在互联⽹数据上进⾏训练的。尽管数据话,甚⾄说出有害的话。2021年,OpenAI发布了GPT-3模型的新版本,并强化学习和⼈类反馈进⾏优化。这意味着InstructGPT模型利⽤反馈来学习标准的GPT-3模型给出的回答是:“解释什么是空间复杂度。解释什么O记法。”InstructGPT模型给出的回答是:“时间复杂度⽤于衡量算法运⾏和完任务所需的时间,通常采⽤⼤O记法表⽰。它以操作次数来衡量算法的复杂度。算法的时间复杂度⾄关重要,因为它决定了算法的效率和对更⼤输⼊的扩展能⼒。”答甚⾄很奇怪),⽽第⼆个模型可以回答问题。当然,使⽤标准的GPT-3GPT-3InstructGPTFeedback”的论⽂中,OpenAI的欧阳⻰等⼈解释了InstructGPT是如何构建从GPT-3模型到InstructGPT模型的训练过程主要有两个阶段:前⼀阶段的结果进⾏微调。也就是说,SFT阶段接收GPT-3模型并返回⼀OpenAI的论⽂,我们重新绘制了⼀张流程图,如1-6所⽰。SFT阶段中,原始GPT-3模型通过监督学习进⾏微调(1-6中的步骤1)。OpenAI拥有⼀系列由最终⽤户创建的提⽰词。⾸先,从可⽤的理想回答组成的监督训练数据集。最后,使⽤该数据集微调GPT-3模型,以针对⽤户的提问提供更⼀致的回答。此时得到的模型称为SFT模型。1-6InstructGPTRLHF阶段分为两个⼦步骤:⾸先训练奖励模型(1-6中的步骤2),然该很低。为了训练奖励模型,OpenAI⾸先随机选择⼀个问题,并使⽤SFT(temperature)的参数,可以针对同⼀输⼊⽣成许多回答。然后,要求员根据与提⽰词的匹配程度和有害程度等标准给这些回答排序。在多次重复此过程后,使⽤数据集微调SFT模型以进⾏评分。这个奖励模型将⽤于构建最终的InstructGPT模型。InstructGPT模型的最后⼀步是强化学习,这是⼀个迭代的过程。⼀个初始的⽣成式模型开始,⽐如SFT模型。然后随机选择⼀个提⽰词,与基础的GPT-3模型相⽐,InstructGPT模型能够针对⽤户的提问⽣成更准GPT-3.5Codex2022年3⽉,OpenAI发布了GPT-3的新版本。新模型可以编辑⽂本或向⽂OpenAI还提出了Codex模型,这是⼀个在数⼗亿⾏代码上进GPT-3模型。正是它GitHubCopilot这款⾃动化编程⼯具赋予了强⼤的时,GitHub发布了基于GPT-4的CopilotX版本,其功能⽐之前的版本多得 OpenAI对Codex模型的弃⽤提醒我们,使⽤应⽤程序接⼝存在模型。该模型经过了微调,采⽤1-6所⽰的类似技术,在交互式对话中表 说明中将ChatGPT称为“模型”。在本书中,除⾮操作代码,否则我们将ChatGPT⽤作通⽤术语,既指应⽤程序⼜指模型。在特指模型时,我们使⽤gpt-3.5-turbo。2023年3⽉,OpenAI发布了GPT-4。关于这个新模型的架构,我们知之甚少,因为OpenAI提供的信息很少。这是OpenAI迄今为⽌最先进的系统,应该能够针对⽤户的提问⽣成更安全、更有⽤的回答。OpenAI声称,GPT-与OpenAIGPT家族中的其他模型不同,GPT-4是第⼀个能够同时接收⽂本和图像的多模态模型。这意味着GPT-4在⽣成输出句⼦时会考虑图像和⽂统⼀律师资格考试中,ChatGPT的得分位于第10百分位,⽽GPT-4的得分位于第90百分位。国际⽣物学奥林匹克竞赛的结果也类似,ChatGPT分位于第31百分位,GPT-4的得分则位于第99百分位。这个进展令⼈印象1-1总结了GPT模型的演变历程1-1GPT第⼀个GPT模型诞⽣,参数量为1.17GPT-2模型发布,参数量为15GPT-3模型发布,参数量为1750GPT-3.5(ChatGPT)模型发布,参数量为1750GPT-4模型发布,但具体的参数量未公 你可能听说过这个术语。虽然像GPT这样的LLM被各种任务进⾏微调,包括但不限于NLP任务。所有的LLM都是基础LLMOpenAI在其⽹站上展⽰了许多激励⼈⼼的客户故事,本节探讨应⽤、⽤例和⽰例产品。我们将了解这些模型如何改变我们的社会并为商业和创造⼒开辟新机遇。正如你将看到的,许多企业已经开始使⽤这些新技术,但还有更多创意空间等待你去探索。BeMy⾃2012年起,BeMyEyes已通过技术为数百万视障⼈⼠提供了帮助。它的GPT-4的多模态能⼒使得它能够处理⽂本和图像。BeMyEyes开始基GPT-4开发新的虚拟志愿者。这个虚拟志愿者旨在达到与⼈类志愿者相当的BeMyEyes的⾸席执⾏官MichaelBuckley表⽰:“全球可达性的影响深在我们撰写本书之时,虚拟志愿者仍处于测试阶段5。要获得访问权限,你⾮常不错个内部⽹站上,其⽂件格式主要是PDF。这意味着顾问必须搜索⼤量⽂档摩根⼠丹利评估了如何利⽤其知识资本与GPT的研究能⼒。由公司内部开发的模型将驱动⼀个聊天机器⼈,对财富管理内容进⾏全⾯搜索,并⾼效地解锁摩根⼠丹利积累的知识。通过这种⽅式,GP-4提供了⼀种更易使的格式来分析所有相关信息。可汗学院是⼀家总部位于美国的⾮营利教育组织,由SalKhan于2008情,⽐如引导和⿎励他们,提问并帮助他们准备考试。Khanmigo旨在成为案,⽽会引导学⽣进⾏学习。除了帮助学⽣,Khanmigo还可以帮助教师准可汗学院的⾸席学习官KristenDiCerbo说道:“我们认为GP-4正在教育域开辟新的前沿。它是很多⼈⻓期以来梦寐以求的技术。它具有变⾰性,我们计划负责任地对它进⾏测试,以探索它能否有效地⽤于学习和教学。”在我们撰写本书之时,Khanmigo试点计划仅⾯向特定⼈员开放。要参与该多邻国(Duolingo)是⼀家总部位于美国的教育科技公司,成⽴于2011解语法规则以学习⼀门语⾔的基础知识。他们需要进⾏对话,多邻国已经使⽤GPT-4为其产品添加了两个新功能:“⾓⾊扮演”和“解释我的答案”。这两个功能在名为DuolingoMax的新订阅级别中可⽤。借助这两个功能,多邻国填补了理论知识和语⾔应⽤之间的鸿沟。多亏了LLM,多“⾓⾊扮演”功能模拟与⺟语⼈⼠的对话,让⽤户能够在各种场景中练多邻国的⾸席产EdwinBodge说道:“我们希望AI技术能够深度GPT-4与DuolingoMax的集成,不仅增强了整体学习体验,还为更有效的Yabble是⼀家市场研究公司,它利⽤AI技术分析消费者数据,为企业提供可⽤的⻅解。Yabble的平台将原始的⾮结构化数据转化为可视化形式,使将先进的AI技术(如GPT)整合到Yabble的平台中,这样做增强了其消Yabble的产品负责⼈BenRoe说道:“我们知道,如果要扩⼤现有的服务规模,我们需要AI来完成⼤部分的繁重⼯作,这样我们就可以把时间和创⼒⽤在其他地⽅。OpenAI完全符合我们的要求。Waymark提供了⼀个创作视频⼴告的平台。该平台利⽤AI技术帮助企业轻aymark已将GPT集成到其平台中,这显著地改进了平台⽤户的脚本编过程。这种由GPT驱动的增强功能使得平台能够在⼏秒内为⽤户⽣成定制脚本。这样⼀来,⽤户能够更专注于他们的主要⽬标,因为他们⽆须花费太多时间编辑脚本,从⽽有更多的时间来创作视频⼴告。因此,将GPT集成到aymark平台中提供了效率更⾼、个性化更强的视频创作体验。Waymark创始⼈NathanLabenz说道:“在过去的五年中,我使⽤了各AIInworldInworldAI为开发⼈员提供了⼀个平台,⽤于创建具有独特个性、多模态表InworldAI平台的主要应⽤领域之⼀是视频游戏。将GPT作为Inworld⾓⾊引擎的基础,可以实现⾼效、快速的视频游戏⾓⾊开发。通过将GPT与其他ML模型结合,该平台可以为AI⾓⾊⽣成独特的个性、情感、记和⾏为。这个过程使游戏开发⼈员能够专注于叙事和其他主题,⽽⽆须花费⼤量时间从头开始创建语⾔模型。InworldAI的⾸席产品官兼联合创始⼈KylanGibbs表⽰:“有了GPT-3,我⼒。AI正如你所⻅,LLM根据给定的输⼊提⽰词逐个预测下⼀个词(也就是标记),从⽽⽣成回答。在⼤多数情况下,模型的输出是与提问相关的,并且完全可⽤,但是在使⽤语⾔模型时需要⼩⼼,因为它们给出的回答可能不准确。这种回答通常被称为AI,即AI⾃信地给出⼀个回答,但是这个回答是错误的,或者涉及虚构的信息。对于依赖GPT的⽤户来说,AI幻觉可能带来危险。你需要仔细核对并批判性地审视模型的回答。考虑以下例⼦。⾸先,我们让模型计算⼀个简单的式⼦:2+2。不出所料,它给出的答案是4。⾮常好!然后,我们让它计算⼀个复杂的式⼦个错误的答案,如1-7所⽰。当我们要求它进⾏检查并重新计算时,它仍1-7ChatGPTChatGPT2023422尽管我们可以使⽤插件系统向GPT添加新功能,但GPT默认不包含计算器。为了回答我们的问题,即2+2等于多少,GPT逐个⽣成每个标记。它之所以能正确回答,是因为它可能经常在训练⽂本中遇到2+2等于4。这 GPT很可能没有在其训练⽂本中⻅过太多次3695×123548。就是它犯错的原因。你可以看到,即使犯了错,它对⾃⼰的错误输出也相当⾃信。因此,在应⽤程序中使⽤GPT时要特别⼩⼼。如果GPT犯错,那么你的应⽤程序可能会得到不⼀致的结果。请注意,在刚才的例⼦中,ChatGPT给出的结果接近正确答案,⽽不是完ChatGPT仅通过语⾔⽅法就能给出近似的估计结果 看到的那样,这些⼯具让我们能够向LLM添加额外的功能。计算器就在前⾯的例⼦中,ChatGPT犯了⼀个错误。但在某些情况下,它甚⾄会故意欺骗,如1-8所⽰。1-8ChatGPTChatGPT202345ChatGPT声称⾃⼰⽆法访问互联⽹。然⽽,如果我们坚持,就会发⽣有趣的事情,如1-9所⽰。1-9ChatGPTChatGPT的意思是,它已经访问了链接。然⽽,这在⽬前绝对不可能ChatGPT明显让⽤户误以为它具备其实并不具备的能⼒。顺便说⼀下,正1-10ChatGPT ChatGPTGPT-4在设计上并不可靠:它们可能会提供错误信总之,我们强烈推荐在创意型应⽤程序中使⽤GPT解决⽅案,⽽不是在GPT除了简单的⽂本补全功能,还可以使⽤更⾼级的技术来进⼀步利⽤GPT模解释器、知识库上传等功能,丰富了GPT模型构建应⽤程序的能⼒。同时,OpenAI上线了GPTs微调GPT模型有⼀定的局限性,例如其计算能⼒有限。正如你所⻅,GPT模型可以正确回答简单的数学问题,如2+2等于多少,但在⾯对更复杂的计算时可能会遇到困难,如3695×123548。此外,它没有直接访问互联⽹的权限,这意味着GPT模型⽆法获取新信息,其知识仅限于训练数据。对于互。这个过程可以极⼤地增GPT模型的能⼒,因为它们可以通过各种操插件为开发⼈员带来许多新的机会。想象⼀下,将来每家公司都可能希望拥有⾃⼰的LLM插件。就像我们今天在智能⼿机应⽤商店中看到的可能会有⼀系列的插件集合。通过插件可以添加的应⽤程序数量可能是巨⼤的在其⽹站上,OpenAI表⽰可以通过插件ChatGPT执⾏以下检索实时信息,如体育赛事⽐分、股票价格、最新资讯等;代表⽤户执⾏操作,如预订航班、订购⾷品等;准确地执⾏数学运算。以上只是⼀些例⼦,还有更多的新⽤例等着你去发现GPT模型。新模型专为特定任务⽽设计,这个额外的训练过程让模型能够LLM已经取得了⻓⾜的进步。LLM是可以处理和⽣成⼈类语⾔的计算机程序,它利⽤ML技术来分析⼤量的⽂本数据。通过使⽤⾃注意⼒机制和交本书探讨如何使⽤GPT-4ChatGPT,它们具备理解和⽣成上下⽂的⾼级能⼒。利⽤它们构建应⽤程序超越了传统的BERTLSTM模型的范畴,它们为促进各⾏各业的AI应⽤程序快速发展做出了贡献。从BeMyEyes这样的应⽤程序到Waymark这样的平台,不同的⾏业案例证明,GPT模不过,在使⽤LLM时,要牢记可能存在⻛险。使⽤OpenAIAPI的应⽤程序开发⼈员应确保⽤户了解错误带来的⻛险,并能够验证由AI⽣成的信第2章将介绍⼀些⼯具和信息,帮助你将GPT模型作为⼀种服务,并让你4ChatGPT法,以便有效地将它们集成到Python应⽤程序中。学完本章后,你将能够熟练地使⽤这些API,并在⾃⼰的开发项⽬中充分利⽤它们的强⼤功能。⾸先,我们了解OpenAIPlayground。这将使你在编写代码之前更好地了解模型。接着,我们学习OpenAIPython库。这部分内容包括登录信息和简单的Helloorld⽰例。然后,我们学习创建和发送API请求的过程,并了解如何处理API响应。这将确保你知道如何解释这些API返回的数据。最后,本章还会介绍诸如安全最佳实践和成本管理等考虑因素。随着学习的深⼊,你将获得实⽤的知识,这对使⽤GPT-4ChatGPT进⾏Python开发⾮常有帮助。你可以在随书⽂件包1中找到本章涉及的所有Python代码。1请访问图灵社区,免费下载随书⽂件包:\h/book/3344。——编者 在继续阅读之前,请查看OpenAI的使⽤规则。如果还没有户,请OpenAI主⻚上创建⼀个。你也可以查看TermsandPolicies⾯上的内容。第1章介绍的概念对于使⽤OpenAIAPI及其相关库是必OpenAI提供了多个专为不同任务设计的模型,每个模型都有⾃⼰的定价接下来,我们将详细地对⽐这些模型并讨论如何根据需求选择模型。需要注意的是,模型的设计⽬的——⽆论是⽤于补全⽂本、聊天还是编辑——会影响你如何使⽤其API。⽐如,GPT-4ChatGPT背后的模型基于聊⽬的,并使⽤聊天端点第1章介绍了“提⽰词”这个概念。提⽰词不仅适⽤于OpenAIAPI,⽽且是所有LLM的⼊⼝点。简单地说,提⽰词就是⽤户发送给模型的输⼊⽂本⽤于指导模型执⾏特定任务。对于GPT-4ChatGPT背后的模型,提⽰词除了提⽰词,第1章还介绍了标记。标记是词或词的⼀部分。据粗略估计,100个标记⼤约相当于75个英语单词。对OpenAI模型的请求是根据所使⽤的标记数量来定价的,也就是说,调⽤API的成本取决于输⼊⽂本2-1总结了OpenAIAPI的基本概念2-1OpenAIAPI了解基本概念之后,让我们深⼊探讨模型的细节OpenAIAPIOpenAIAPI,你可以使⽤OpenAI开发的多个模型。这些模型可通过API作为服务使⽤(通过直接的HTTP调⽤或提供的库),这意味着OpenAI在远程服务器上运⾏模型,开发⼈员只需向其发送查询请求即可每个模型都有⾃⼰的功能和定价。本节将介OpenAI通过其API提供的LLM。需要注意的是,这些模型是专有的,你不能根据⾃⼰的需求直改模型的代码。但是正如后⽂所述,你可以OpenAIAPI在特定数据上 ⼀些较旧的OpenAI模型(包括GPT-2模型)并不是专有的。你可以直接从HuggingFaceGitHub下GPT-2模型,但⽆API由于OpenAI提供的许多模型会不断更新,因此本书很难给出完整的列表。要了解最新的模型列表,请查看OpenAI的在线⽂档。本章将重点介绍⼏个最为重要的模型这个模型系列可以处理许多单轮⽂本补全任务。text-ada-001模型只能处理简单的⽂本补全任务,但它也是GPT-3系列中速度最快、价格最便宜昂贵。text-davinci-003模型可以出⾊地执⾏所有⽂本补全任务,但它也是GPT-3系2中最昂贵的。2截⾄2023年11⽉下旬的消息,InstructGPT系列将2024年1⽉4⽇统⼀替换为最新gpt-3.5-turbo-instruct模型。——译者注ChatGPT背后的模型是gpt-3.5-turbo。作为⼀个聊天模型,它可以将⼀系列消息作为输⼊,并⽣成相应的消息作为输出。虽然gpt-3.5-turbo的聊格式旨在进⾏多轮对话,但它也可⽤于没有对话的单轮任务。在单轮任务中,gpt-3.5-turbo的性能与text-davinci-003相当。由于gpt-3.5-turbo的价格只有text-davinci-003的⼗分之⼀3,⽽且两者性能相当,因此建议默认使⽤它来进⾏单轮任务。gpt-3.5-turbo模型的上下⽂窗⼝⼤⼩约为4000个标记,这意味着它可以接收约4000个标记作为输⼊。OpenAI还提供了另⼀这是迄今为⽌OpenAI发布的最⼤的模型。由于在⼴泛的⽂本和图像多模态语料库上进⾏了训练,因此它精通许多领域。GP-4能够准确地遵杂的⾃然语⾔指令并解决难题。它可⽤于聊天任务和单轮任务,并具有相当⾼的准确性。OpenAI提供了两个GP-4模型4:gpt-4的上下⽂窗⼝⼤⼩为8192个标记,gpt-4-32k的上下⽂窗⼝⼤⼩为32768个标记。32768个标记⼤约相当于24576个英语单词,即⼤约40⻚的上下⽂。gpt-3.5-turbo-16k、gpt-4和gpt-4-32k时,我们指的是这些模型5开发⼈员通常希望LLM版本具有良好的稳定性和可⻅性,以便在应⽤程中使⽤它。对于开发⼈员来说,如果模型的版本在⼀夜之间发⽣变化,并且针对相同的输⼊给出截然不同的回答,那么这样的模型使⽤起来很困时,上述模型最新的静态快照版本分别是gpt-3.5-turbo-0613、gpt-3.5-turbo-16k-0613、gpt-4-0613gpt-4-32k-0613。使⽤时要谨慎。然⽽,由于这些模型是仅有的⼏个可以针对你的数据进微调的模型,因此它们仍然可⽤。截⾄本书英⽂版出版之时,OpenAI已宣6截⾄2023年11⽉下旬,GPT-3.5微调功能已完全开放,GPT-4微调功能可通过申请权限开放——译者 第1章介绍的SFTSFT阶段后获得,该模型没有经RLHF阶段,也可以API以davinci-instruct-beta的名称使⽤OpenAIPlaygroundGPTOpenAIPlayground是⼀个基于Web的平台。你可以使⽤它直可以编写提⽰词,选择模型,并轻松查看模型⽣成的输出。要测试OpenAI径以下是访问OpenAIPlayground的步骤如果你已经拥有⼀个账户但未登录,请单击屏幕右上⽅的Login。如OpenAI的⼤部分功能。请注意,由于PlaygroundAPI是收费的,因登录后,你将在⽹⻚的顶部看到加⼊Playground的链接。单击该链 2-2OpenAIPlayground7⾯与图2-2中的界⾯存在差异,请以最新版本为准。——译者界⾯中的主要空⽩处⽤于输⼊消息。编写完消息后,单击Submit按钮以⽣therefore”(正如笛卡⼉所说,我思故),然后单击Submit按钮。模型⽤“I每次单击Submit按钮时,OpenAI都会收取相应的费⽤。本章稍后会提供有关费⽤的更多信息。就本例⽽⾔,成本约为0.0002美界⾯的底部和右侧有许多选项。我们从底部开始。Submit按钮右侧的是撤销按钮(在图中标记为A),⽤于删除最后⽣成的⽂本。在本例中,它将删除“Iam”。接下来是重新⽣成按钮(在图中标记为B),⽤于重新⽣成刚刚删除的⽂本。再往后是历史按钮(在图中标记为C),它会给出过去30天内的所有请求。请注意,⼀旦进⼊历史菜单,你就可以出于隐私原因式列表(在图中标记为D)。在我们撰写本书之时,可⽤的模式有聊天(默认选项)、补全和编辑 补全模式和编辑模式已被标记为遗留模式,可能会2024⽉消失如前所⽰,语⾔模型在Playground的补全模式下努⼒补全⽤户的输⼊。图2-3展⽰了在聊天模式下使⽤Playground的⽰例。界⾯左侧是系统(在图中标记为E)。在这⾥,你可以描述聊天系统的⾏为⽅式。⽐如2-3中,我们要求它成为⼀个喜欢猫的有⽤助⼿。我们还要求它只谈论如果想继续与系统对话,你可以单击Addmessage(在图中标记为F),⼊消息,然后单击Submit按钮(在图中标记为G)。还可以在右侧定义模型(在图中标记为H),这⾥使⽤GPT-4。请注意,并⾮所有模型在所有模截⾄2023年1⽉下旬,OpenAIPlayground聊天模式可⽤的模型包括gpt-3.5-turbo、gpt-3.5-0301、gpt-3.5-turbo-0613、gpt-3.5-turbo-106、gpt-3.5-turbo-16k、gpt-3.5-turbo-16k-0613。——译注2-3OpenAIPlaygroundPlayground还提供了编辑模式。如2-4所⽰,在这种模式下,你提供⽂本(在图中标记为I)和指令(在图中标记为J),模型将尝试修本。2-4所⽰的例⼦中,我们给出了⼀段描述⼀个年轻2-4OpenAIPlayground在Playground界⾯的右侧、模式下拉列表下⽅的是模型下拉列表(在图中标记为L)。正如你已经看到的,这是你选择LLM的地⽅。该下拉列表中(在图中标记为M),它定义模型的⾏为。我们不会在此详细讨论这些参界⾯顶部有⼀个加载预设项的下拉列表(在图中标记为N)和4个按钮。2-2中,我们使⽤LLM来补全句⼦,但是通过使⽤适当的提⽰词,我们也可以让模型执⾏特定的任务。2-5显⽰了模型可以执⾏的常⻅任务5选择“GrammaticalStandardEnglish”(语法标准的英语),那么你将在主⼝中看到2-6所⽰的提⽰词2-6GrammaticalStandardEnglish如果单击Submit按钮,那么你将得到以下结果:“Shedidnotgotomarket”(她没有去市场)。虽然可以从下拉列表中的提⽰词⼊⼿,但是你应该修改它们以使其适合你的问题。OpenAI为不同的任务提供例列表,详⻅OpenAI⽹站的Examples⻚⾯。参数,并且希望以后Playground中轻松复⽤它们。Save按钮的功能是把Playground的当前状态保存为⼀个预设状态。你可以为预设状态命名并添加中cURL代码,以Linux终端中直接与OpenAI远程服务器交互。如果⽤importimportopenai.api_key=os.getenv("OPENAI_API_KEY")response=openai.Completion.create(prompt="AsDescartessaid,Ithinktherefore",现在你应该了解了如何在没有编码的情况下使⽤Playground来OpenAIOpenAIPython本节重点介绍如何在⼀个⼩Python脚本中使⽤API密钥,并展⽰如⽤OpenAIAPI进⾏第⼀次测试OpenAI将GPT-4ChatGPT作为服务提供。这意味着⽤户⽆法直接访问模型代码,也⽆法在⾃⼰的服务器上运⾏这些模型。OpenAI负责部署和运⾏在执⾏以下步骤之前,请确保你已登OpenAI账户OpenAIAPIOpenAI要求你必须拥有API密钥才能使⽤其服务。此密钥有两个⽤它赋予你调⽤API⽅法的权利;它将你的API调⽤与你的账户关联,⽤于计费。你必须拥有此密钥才能在应⽤程序中调⽤OpenAI服务要获取密钥,请访问OpenAI的平台⻚⾯。单击⻚⾯右上⾓的账户名,然后2-7OpenAIAPI进⼊API密钥⻚⾯后,请单击“Createnewsecretkey”(创建新密钥)并复制对于LinuxexportOPENAI_API_KEY=sk-(...)#检查是否设置了环境变echosetOPENAI_API_KEY=sk-(...)#检查是否设置了环境变echo以上代码⽚段将设置⼀个环境变量,并使密钥对从同⼀shell会话启动的其将允许在所有的shell会话中访问该环境变量。当然,请勿在要推送到公共要Windows11中永久添加或更改环境变量,请同时按下Windows键,以打开运⾏窗⼝。在此窗⼝中,键⼊sysdm.cpl以打开“系统属性”板。单击“⾼级”选项卡,接着单击“环境变量”按钮。在出现的窗⼝中,你以使⽤OpenAI密钥添加⼀个新的环境变量。 OpenAI提供了关于API密钥安全的详细⻚⾯,详⻅其⽹站上的“BestPracticesforAPIKeySafety”。现在你已经有了密钥,是时候⽤OpenAIAPI编写第⼀个HelloWorld⽰例Hello本节展⽰如何使⽤OpenAIPython库开始编写代码。我们从经典的Hello使⽤pip安Python库pippipinstallopenai9使⽤这⾏代码安装的是OpenAI最新版的Python库(1.6.1),这与本书写作时的版本(0.28.1)已经不同。如果想安装本书写作时的版本请使⽤代pipinstallopenai==0.28.;但不建议你这样做,因为这个领域变化很快,我们有必要紧跟最新官⽅⽂档。——编者注接下来Python中访问OpenAIimportimport调⽤OpenAIChatCompletionresponse=messages=[{"role":"user","content":"Hello你将看到以下输出HelloHellothere!HowmayIassistyou恭喜!你刚刚使⽤OpenAIPython库编写了第⼀个程序。 OpenAIPython库还提供了⼀个命令⾏实⽤程序。在终端中运⾏以下代码的效果与执⾏之前的HelloWorld⽰例程序相同:openaiopenaiapichat_completions.create-mgpt-3.5-turbo-guser"Hello你可能已经注意到,以上代码⽚段并没有明确提到OpenAIAPI密钥。这是或者,你可以使⽤以下代码将openai模块指向包含密钥的⽂件:openai.api_key_path=你还可以使⽤以下⽅法在代码中⼿动设API密加API密openai.api_key=我们建议遵循环境变量使⽤惯例:将密钥存储在⼀个.env⽂件中,并.gitignore⽂件中将其从源代码控制中移除。Python中,你可以运load_dotenv函数来加载环境变量并导⼊openai库fromfromdotenvimportload_dotenvimport在加.env⽂件后声明导⼊openai库,这样做很重要,不然⽆法正确应⽤OpenAI的设置。我们已经了解了GPT-4ChatGPT的基本概念,接下来进⼀步讨论它们的GPT-4ChatGPT本节讨论如何使⽤GPT-4ChatGPT背后的模型,以及OpenAI库在我们撰写本书之时,GPT-3.5Turbo是最便宜且功能最多的模型。因此,它也是⼤多数⽤例的最佳选择10。以下是使⽤⽰例:⼩是GPT-3.5Turbo30倍以上,并下调了整体价格,后者新增了图像理解能⼒。请根据具体⽤例importimport对GPT-3.5Turbo来说,端点是ChatCompletion对GPT-3.5Turbo来说,模型是gpt-3.5-turbo#消息列表形式的对{"role":"system","content":"Youareahelpful"role":"content":"Arethereothermeasuresthantime\complexityforanalgorithm?","role":"content":"Yes,thereareothermeasuresbesidestime\complexityforanalgorithm,suchasspace{"role":"user","content":"Whatis在前⾯的例⼦中,我们使⽤了最少数量的参数,即⽤于预测的LLM和输消息。正如你所⻅,输⼊消息中的对话格式允许模型进⾏多轮对话。请注意,API不会在其上下⽂中存储先前的消息。问题“Whatisit?”问的是先前的回答,这只有在模型知道答案的情况下才有意义。每次模拟聊天会话时,都必须发送整段对话。我们将在下⼀节中进⼀步讨论这个问题GP-3.5urbo模型和GP-4模型针对聊天会话进⾏了优化,但这并⾮强要求。这两个模型可⽤于多轮对话和单轮任务。如果你在提⽰词中请求模型补全⽂本,那么它们也可以很好地完成传统的⽂本补全任务。以通过更改ID来GPT-3.5TurboGPT-4之间切换,⽽⽆须修他代码ChatCompletion让我们更详细地看⼀下如何使⽤ChatCompletion端点及其create⽅ create⽅法让⽤户能够调⽤OpenAI的模型。当然,还⽅法可⽤,但它们对与模型的交互没有帮助。你可以OpenAI库的GitHub代码仓库中查看代码01.ChatCompletion端点及其create⽅法有多个输⼊参数,但只有两系统消息帮助设置助⼿的⾏为⽤户消息相当于是⽤ChatGPT⽹⻚界⾯中键⼊的问题或句⼦。它2-111ID。⽬前可⽤的有gpt-4、gpt-4-0613、gpt-4-32k、gpt-4-32k-0613、gpt-3.5-turbo、gpt-3.5-turbo-0613、gpt-3.5-turbo-16kgpt-表⽰对话的消息对象数组。消息对象有两个属性:role(可能的值02.标记总数必须⼩于模型的上限。你可以2.7节中找到关于标记数正如你所⻅,有必要⼩⼼控制对话的⻓度。你可以通过管理消息的⻓度来控制输⼊标记的数量,并通过max_tokens参数来控制输出的数量。 OpenAI提供了⼀个名为tiktoken的库,让开发⼈员能够03.OpenAI提供了其他⼏个选项来微调⽤户与库的交互⽅式。这⾥不会详2-212数由可⽤函数组成的数组,详⻅2.5.3或对控制模型的响应⽅none表⽰模型必须以标准⽅式响应⽤auto表⽰模型可以在以标准⽅式响应⽤functions数数2之间的值温度为0意味着对于给定的输⼊,对模型的调⽤很可能会LLM通过预测⼀系列标记来⽣成回答。根据输⼊上下⽂,LLM为每个潜在的标记分配概率。当温度被设置为0时,LLM将始终选择概率最⾼的标记。较⾼的温度可以产⽣更整通过设置这个参数,可以为给定的输⼊消息⽣成多个回答。不过,如果将温度设为0,那么虽然可以得到多个答,但它们将完全相同或⾮常相似布尔整OpenAI忽略:输⼊和⽣成的标记总数不能超过模型的上你可以OpenAI的⽂档中找到更多详细信息OpenAI⽂档为准。——译者注ChatCompletion以下是HelloWorld⽰例程序的完整响应"choices":"finish_reason":"stop","index":0,"message":"content":"Hellothere!HowmayIassistyoutoday?","role":"assistant","created":"id":"chatcmpl-73mC3tbOlMNHGci3gyy9nAxIP2vsU","model":"gpt-3.5-turbo","object":"usage":{"completion_tokens":10,"prompt_tokens":"total_tokens":2-3列出了⽣成的输出。13截⾄2023年11⽉下旬,ChatCompletion输出参数已更新,新增了3中,n是,这意味着我们从模型中得到了完整的响应。如果在输出⽣成过程中出现错误,那么将体现在该字段中index(整型):从choices数组中选择对message(对象):包含role和contentfunction_call。role的值始终是assistant,content包括模型⽣成的⽂本。我们通常希望获得这⽣成时的时间戳。HelloWorld⽰例程序中,这个时间戳转换为2023年⽉10⽇星期⼀下OpenAI内部使⽤的技术所⽤的模型。这与作为输⼊设置的模型使⽤的是ChatCompletion端点提供有关在此查询中使⽤的标记数的信息,从⽽为你提供费⽤信息数。你可能已经猜到了,total_tokens=prompt_tokens+如果将参数n设置为⼤于1,那么你会发prompt_tokens的值不会改变,但completion_tokens的值将⼤致变为原来的n倍OpenAI使其模型可以输出⼀个包含函数调⽤参数的JSON对象。模型OpenAIAPI调⽤结果需要由代码的其余部分处理时,这个功能⽤:你可以使⽤函数定义将⾃然语⾔转换为API调⽤或数据库查询,从⽂函数定义需要作为函数对象数组传递。2-4列出了函数对象的144字符函数对deffind_product(sql_query):#执⾏查询results={"name":"pen","color":"blue","price":{"name":"pen","color":"red","price":return接下来定义函数的规functions="name":"description":"Getalistofproductsfromasqlquery","parameters":{"type":"object","properties":{"sql_query":{"type":"string","description":"ASQL"required":我们可以创建⼀个对话,并调⽤ChatCompletion端user_question="Ineedthetop2productswherethepriceisthanmessages[{"role":"user","content":user_question}]使⽤函数定义调⽤ChatCompletion端点response=model="gpt-3.5-turbo-0613",messages=messages,response_message=response["choices"][0]["message"]我们使⽤该模型创建了⼀个查询。如果打印function_call对象,会得"function_call":"function_call":"name":"arguments":'{\n"sql_query":"SELECT*FROMproducts\WHEREprice<2.00ORDERBYpriceASCLIMIT2"\n}',接下来,我们执⾏该函数并继续对function_args=productsfind_product(function_args.get("sql_query"))"role":"function","name":function_name,"content":#将函数的响应格式化为⾃然语response=最后,提取最终的响应并得到以下内容TheThetop2productswherethepriceislessthan$2.00Pen(Blue)-Price:Pen(Red)-Price:模型所⽤的端点与GPT-4和ChatGPT所⽤的不同。尽管⽆论是在价格⽅⾯还是在性能⽅⾯,GPT-3.5Turbo模型通常都是最佳选择,但是不妨了解如何使⽤⽂本补全模型,特别是在微调等⽤例中,GPT-3⽂本补全模型是唯⼀的选择15。15截⾄2023年11⽉下旬,GPT-3.5微调功能已完全开放,GPT-4微调功能可通过申请权限开放——译者 OpenAI已经发布了⽂本补全端点的弃⽤计划。我们之所以在此介绍这个端点,只是因为基于补全的模型是唯⼀可以进⾏微调的模型16。OpenAI计划在2024年1⽉之前为基于聊天的模型提供案。由于⽬前尚不可⽤,我们⽆法在此提供有关它的描述信息。16截⾄2023年11⽉下旬,GPT-3.5微调功能已完全开放,GPT-4微调功能可通过申请权限开放——译者补全更适⽤于对话。从如下代码⽚段可以看出,与ChatCompletion端点相⽐,Completion端点的主要区别在于提⽰词的格式。基于聊天的模importimport调⽤Completionresponse=model="text-davinci-003",prompt="Hello以上代码⽚段将输出类似于以下内容的"\n\nIt's"\n\nIt'sapleasuretomeetyou.I'mnewtothe接下来详细介Completion端点的输⼊选项CompletionCompletion端点的输⼊选项集与我们之前在ChatCompletion端点中01.表2-5列出了我们认为最有⽤的必需参数和⼀些可选参数2-5Completion字符串(必填⼀的必需字符串或数(默认值⽣成补全内容的提⽰词。它体现了Completion端点与ChatCompletion端点的主要区别。Completion.create应编码为字符串、字符串数组、标记数组或标记数的数组。如果没有提供该参数,那么模型将从新⽂的开头⽣成⽂本整是null)02.与聊天模型⼀样,⽂本补全模型的费⽤也取决于输⼊和输出。对于⼊,必须仔prompt参数的⻓度;如果使⽤suffix参数,还需要管理它的⻓度。对于输出,请使⽤max_tokens参数。它可以帮03.同样,与ChatCompletion端点⼀样,可以使⽤可选参数来进⼀步调整模型的⾏为。由于这些参数的⽤法与ChatCompletion端点中的相同,因此这⾥不再赘述。请记住,可以使⽤temperature或n来控制输出,使⽤max_tokens来控制成本,并使⽤stream在本补全场景中提供更好的⽤户体验。Completion天模型的结果⾮常相似。以下是HelloWorld⽰例程序使⽤davinci模型后"choices":"finish_reason":"stop","index":0,"logprobs":"text":"<br/>\n\nHithere!It'sgreattosee"created":"id":"cmpl-76uutuZiSxOyzaFboxBnaatGINMLT","model":"text-davinci-003","object":"usage":{"completion_tokens":15,"prompt_tokens":"total_tokens": choices对象:不再有属contentrole,⽽有⼀个包含模型⽣成⽂本的属text。在⼴泛使⽤API之前,应该考虑两个重要因素:成本和数据隐私 OpenAIPricing⻚⾯上列出了模型的定价。请注意,OpenAI不⼀定及时在我们撰写本书之时,常⽤OpenAI模型的定价和最⼤标记数如2-6⽰2-6OpenAI1717截⾄2023年11⽉下旬,OpenAI模型的定价已整体下调,具体定价请以OpenAI⽹站为准。译者聊输⼊:每千个0.03美元输出:每千个0.06聊输⼊:每千个0.06美元输出:每千个0.1232聊输⼊:每千个0.0015美元输出:每千个0.0020聊输⼊:每千个0.003美元输出:每千个0.00416⽂本补每千个0.022-6中,有⼏点需要注意turbo模型也可⽤于单轮⽂本补全任务,并且对于这类任务,两个模型的准确性相当,因此我们建议使⽤gpt-3.5-turbo模型(除⾮你需要插⼊、后缀等gpt-3.5-turbo模型⽐gpt-4模型便宜。对于许多基本任务来说,⼆者的⼤同⼩异。然⽽,在复杂的推理场景中,gpt-4模型远优于任何先前的模与text-davinci-003模型不同,聊天系列的模型对于输⼊和输出有不同的定gpt-4模型的上下⽂窗⼝⼤⼩⼤约是gpt-3.5-turbo模型的两倍,gpt-4-32k模型甚⾄达到32768个标记,这⼤概相当于25000个英语单词18。gpt-4可以实现⻓篇内容创作、⾼级对话,以及⽂档搜索和分析,但⽤户需要相应地付出更⾼的成本。 在我们撰写本书之时,OpenAI声称不会将作为模型输⼊的数据⽤于重新训练,除⾮⽤户选择这样做。然⽽,⽤户的输⼊将被保留30天,⽤于监控和使⽤合规检查⽬的。这意味着OpenAI员⼯和专门的第三⽅承包商可能会访问你的API数据。 请勿通过OpenAI的端点发送个⼈信息或密码等敏感数据。我建议你查阅OpenAI的数据使⽤规则以获取最新信息,因为使⽤规则可能会有所变动。如果你是国际⽤户,请注意,你的个⼈信息和输⼊的数据可能会从你的所在地传输到OpenAI在美国的服务器上。这可能在法律⽅⾯对你的应⽤程序创建产⽣影响。3章会进⼀步详述如何在考虑安全问题和隐私问题的情况下构建基于LLM的应⽤程序。OpenAIAPI除了⽂本补全功能,OpenAI⽤户还可以使⽤其他⼀些功能。本节会带你探索⼏个功能,但如果你想深⼊了解所有API,那么请查看OpenAI的API 机能够更⾼效地处理它们之间的关系。在某些情况下,嵌⼊能⼒可能⽤。OpenAI提供了⼀个可以将⽂本转换为数值向量的模型。嵌⼊端点让开发⼈员能够获取输⼊⽂本的向量表⽰,然后将该向量表⽰⽤作其他ML模NLP算法的输⼊。截⾄本书英⽂版出版之时,OpenAI建议⼏乎所有的⽤例都使⽤其最新text-embedding-ada-002。该模型使⽤起来⾮常简单,如下所⽰resultresult=model="text-embedding-ada-002",input="your通过以下⽅式访问嵌⼊结果嵌⼊是⼀个向量,即⼀个浮点数数组 请OpenAI的APIreference⻚⾯上查看嵌⼊的完整⽂档搜按查询字符串的相关性给结果排序推找到⼀个与其他字符串⽆关的⽂本字符串ML在ML领域,特别是在处理语⾔模型时,我们会遇到这⼀重要概数值格式,具体⽽⾔是实数向量。这种转换是必要的,因为ML模型换为ML模型能够轻松理解的数值语⾔。嵌⼊的⼀个突出特点是,它LLM⼴泛使⽤嵌⼊。通常,这些模型处理约512维的嵌⼊,从⽽语⾔数据的⾼维数值表⽰。这些维度很深,使得模型能够区分各种复杂的模式。因此,它们在各种语⾔任务上表现出⾊,包括翻译、摘要和⽣成与⼈类对话相似的⽂本回应。嵌⼊具有这样的属性:如果两段⽂本具有相似的含义,那么它们的向量⽰也是相似的。举例来说,图2-8显⽰了三个句⼦。尽管“猫在房⼦周围追着⽼⿏跑”和“在房⼦周围,⽼⿏被猫追着跑”具有不同的语法结构,但它们的⼤体意思相同,因此具有相似的嵌⼊表⽰。⽽句⼦“航天员在轨修理宙⻜船”与前⾯的句⼦(关于猫和⽼⿏的句⼦)⽆关,并且讨论的主题(航天员和宇宙⻜船),因此它的嵌⼊表⽰明显不同。请注意,为清晰起⻅,本例将嵌⼊显⽰为具有两个维度,但实际上,嵌⼊通常具有更⾼的维度,⽐如512维8后续各章将多次提及嵌⼊API,因为嵌⼊是使⽤AI模型处理⾃然语⾔的重如前所述,在使⽤OpenAI模型时,必须遵守OpenAI使⽤规则。为了帮助你遵守这些规则,OpenAI提供了⼀个模型来检查内容是否符合使⽤规则。19截⾄2023年11⽉下旬,审核内容新增了harassment类别,内容涉及表达、煽动或推⼴对任⽬标的骚扰⾔论。——译者内容涉及对种族、性别、⺠族、宗教、国籍、残疾或种姓的仇恨内容涉及对特定群体的暴⼒⾏为或严重伤害内容涉及⾃残⾏为内容涉及性⾏为(性教育和与健康相关的内容除外)内容同上,但涉18岁以下的未成年⼈内容涉及崇尚暴⼒或者给他⼈造成痛苦或羞辱 内容审核模型的端点是openai.Moderation.create,参数model和inpu。有两个内容审核模型可供选择,默认模型是text-moderation-latest,它会随时间⾃动更新,以确保你始终使⽤最准确的模知你 latest模型。以下是使⽤text-moderation-latest模型的⽰importimport⽤⽤response=input="Iwanttokillmyneighbor.",以下是内容审"id":"modr-7AftIJg7L5jqGIsbc7NutObH4j0Ig","model":"text-moderation-004","results":"categories":{"hate":false,"hate/threatening":false,"self-harm":false,"sexual":false,"sexual/minors":false,"violence":true,"violence/graphic":false,"category_scores":"category_scores":"hate":"hate/threatening":3.671687863970874e-06,"self-harm":1.3143378509994363e-06,"sexual":5.508050548996835e-07,"sexual/minors":1.1862029225540027e-07,"violence":0.9461417198181152,"flagged":2-7解释了输出中的各个字段2-7Moderation如果模型将内容识别为违反了OpenAI的使⽤规则,那么该值true,否则为print(type(response['results'[0['categories'])访问该字典数范围是0〜1,分数越⾼表⽰信⼼越⾜。这些分数不应被视为概率。可以print(type(response['results'][0]['category_scores'])访问该字典 OpenAI会定期改进内容审核系统。因此可能会有所变化,⽤于确定类别的阈值也可能会改变WhisperDALL·可以轻松地与GPT模型结合使⽤。我们在此不介绍它们,因为它们不是本书的重点。但是不⽤担⼼,它们的API使⽤⽅法与LLM的API使⽤⽅法相Whisper是⽤于语⾳识别的多功能模型。它是在⼤型⾳频数据集上训练的,OpenAIWhisper项⽬的GitHub⻚⾯提供了⼀个开源版本创造逼真图像和艺术作品的AI系统。DALL·E2在技术上进⼀步提升了分辨率和输⼊⽂本理解能⼒,并添加了新功能。这两个版本的DALL·E是通过对图像及其⽂本描述进⾏训练的Transformer模型创建的。你可以通过APIOpenAILabs界⾯试DALL·E220。如前所述,OpenAIAPI将其模型作为⼀项服务提供给⽤户。在本书中,我们选择使⽤OpenAI提供的Python库,它是对API的简单封装。借助这个库,我们可以与GPT-4ChatGPT进⾏交互:这是构LLM型应⽤程序的第⼀步。然⽽,使⽤这些模型涉及⼏个考虑因素:API密钥管开始使⽤LLM之前,我们建议查阅OpenAI的使⽤规则,并通过Playground来熟悉不同的模型,⽽⽆须编写代码。请记住,GPT-3.5TurboTurbo30倍以上,后者新增了图像理解能⼒。请根据具体⽤例需求选择合适的模型。——译者注以下是向GPT-3.5Turbo发送输⼊消息时可参考的速查清单安openai依赖项pippipinstall将API密钥设置为环境变量exportexportOPENAI_API_KEY=sk-Python中,导⼊openaiimportimportresponseresponse=openai.ChatCompletion.create(messages=[{"role":"user","content":"YourInput获取答案 别忘了查看定价⻚⾯,并使⽤tiktoken库估算使⽤成本请注意,不应OpenAI的端点发送敏感数据,例如个⼈信息或密码OpenAI还提供了其他⼏个模型和⼯具。你将在后续章节中发现,嵌⼊端⾮常有⽤,它可以帮助你在应⽤程序中集成NLP功能现在你已经知道如何使⽤OpenAI的服务,是时候深⼊了解为何应该使⽤它们。在第3章中,你将看到各种⽰例和⽤例,从⽽学习如何充分利⽤GPT-4ChatGPT。GPT-4GPT-4ChatGPT的API服务为开发⼈员赋予了新的能⼒。⽆须深⼊了解AI技术,开发⼈员就可以构建能够理解和回应⾃然语⾔的智能应⽤程序。从聊天机器⼈和虚拟助⼿到内容创作和语⾔翻译,LLM被⽤于驱动各⾏各本章详细介LLM驱动型应⽤程序的构建过程。你将了解到在将这些模型要开发基于L

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论