ChatGPT企业调用教程(Dash和FastAPI双版本源码)
淘宝搜:【天降红包222】领超级红包,京东搜:【天降红包222】
淘宝互助,淘宝双11微信互助群关注公众号 【淘姐妹】
最近ChatGPT莫名其妙在国内火了。
我以为它风头都过去了,毕竟去年11月份刚出来的时候,就火的一塌糊涂。
我对NLP研究比较少,对于chatGPT只是略知皮毛,毕竟时序预测和NLP都会用Transfomer模型,只不过生成时序的场景会比较少。
但是Chatgpt出色的回答能力,也着实让我惊讶,所以还是写个Tool方便调用。
本文分享两个随手写的APP:
一个是使用FastAPI写的APP,可以便于其它软件调用接口,比如公司的CRM软件。
一个是使用Dash写的机器人对答程序,就是类似于chatapt的官方示例APP。不过是纯Dash写的,有可能免翻墙使用。
FastAPI调用chatgpt
FastAPI我之前已经介绍了,这里我们只需要一个endpoint,那就是用户输入文本(text),FastAPI自动调用chatgpt返回response的文本。
这就是全部代码了毕竟我们只是chatgpt的搬运工。
调用openai.Completion.create 直接就会返回结果。
【【邮箱】】("/chat") async def ask_data_amber(text): openai.api_key='sk-F67Tnx【【微信】】Oq_dummy_key_random' response=openai.Completion.create(engine='text-da【【微信】】9;, prompt=text,temperature=0.6, max_tokens=1000) return Response( response.choices[0].text)
运行程序后,可以给127.0.0.1:8000/chat 发送问题来咨询了,比如
用FastAPI如何调用openai?
这就是OpenAI的回答:
使用FastAPI可以通过使用OpenAI提供的API来调用OpenAI。 首先,需要创建一个OpenAI帐户,然后登录到OpenAI控制台,获取API密钥。 接下来,可以使用FastAPI为OpenAI创建一个路由,并使用OpenAI的API密钥进行认证。 最后,可以使用FastAPI的请求/响应处理机制来调用OpenAI的API,以获取需要的结果。
创建咨询机器人APP
机器人APP界面也很简单。
我们只需要创建一个现实历史对话的Div作为主界面。
用户输入就是一个Input以及Submit 按钮。
我们可以模拟chatgpt官网,把聊天记录保存在cache里,不用写到数据库。
如果写回数据库,可以用于挖掘用户的需求,甚至可以用于fine-tune 模型。
这就是迁移学习最佳用途,让chagpt更了解某些特殊群体的特殊需求,比如你的客户的需求。
编写Dash APP首先就是创建一个app instance。
from dash.exceptions import Pre【【微信】】port dcc,html import dash import dash_bootstrap_components as dbc from dash.dependencies import Input, Output, State import openai
然后就是创建我们需要的组件,比如Input, Div,以及【【微信】】。
# Define Layout conversation=html.Div( html.Div(id="【【微信】】"), style={ "o【【微信】】": "auto", "display": "flex", "height": "calc(90【【微信】】)", "flex-direction": "column-reverse", }, ) 【【微信】】=dbc.InputGroup( children=[ dbc.Input(id="user-input", placeholder="随便写点什么", type="text"), dbc.InputGroupText(dbc.Button("Submit", id="submit")), ] ) app.layout=dbc.Container( fluid=False, children=[ Header("Dash ChatGPT- DataAmber", app), html.Hr(), dcc.Store(id="store-conversation", data=""), conversation, 【【微信】】, dbc.Spinner(html.Div(id="【【微信】】")), ], )
之后就是将用户每次的输入和chatgpt的结果保存到cache里面。
@app.callback( [Output("store-conversation", "data"), Output("【【微信】】", "children")], [Input("submit", "n_clicks"), Input("user-input", "n_submit")], [State("user-input", "value"), State("store-conversation", "data")], ) def run_chatbot(n_clicks, n_submit, user_input, chat_history): if user_input is None or user_input == "": raise PreventUpdate else: name = "DataAmber" # First add the user input to the chat history chat_history += f"You: {user_input}<split>{name}:" model_input = chat_history.replace("<split>", "\ ") response = openai.Completion.create( engine="text-da【【微信】】4;, prompt=model_input, max_tokens=250, temperature=0.6, ) model_output = response.choices[0].text + '<split>' chat_history += f"{model_output}" return [chat_history, None]
当有新的输入和结果出现的时候,我们刷新一下历史对话框,这里可以把用户输入和机器回答分别显示到左右两侧。
@app.callback( Output("【【微信】】", "children"),[Input("store-conversation", "data")] ) def update_display(chat_history): return[ textbox(x, box="user") if i % 2==0 else textbox(x, box="AI") for i, x in enumerate(chat_history.split("<split>")[:-1]) ]
网站部署
我们可以把Dash APP或者是FastAPI部署到网站上,用其它人调用,Heroku已经不再免费了,这里推荐render进行部署。
最后,部署到企业app时,最好不要闲聊,毕竟每个token都是钱。
chatgpt使用小技巧 关于chatgpt的通俗总结
chatgpt怎么下载,chatgpt国内能用吗,chatgpt怎么读,chatgpt账号观众老爷们大家好,还记得我年初定的计划是 2023 年继续更新 Power Platform 的进阶内容吗?
哎,现在是计划赶不上变化,谁能想到 ChatGPT 横空出世,而且现在明显是不学习不掌握这些 AI 工具就要被淘汰的节奏。
因此我经过一番思索,决定顺风而行,后续更新 ChatGPT 相关内容,目前规划的方向会包括介绍篇的概念性解释,基础篇的日常使用,训练篇的微调数据,以及开发篇的实战开发。
这样既能包括业务用户,也能涵盖低代码甚至专业开发人员。
今天是我们的第一篇 ChatGPT 的前世今生
本篇文章会从 GPT-1 一直讲到 GPT-4 ,看一看现在火爆的ChatGPT 背后,到底经历了些什么。
我们要想知道 ChatGPT 为什么爆火,这就要我们静下心来,稍微理解一下 NLP 领域的一些历史故事。
NLP 是自然语言理解的缩写,属于 AI 人工智能领域的一个分支,主要目的是让计算机能够理解,解释和生成人类的语言。
早在 2018年之前,实际上 NLP 自然语言理解已经基本处于半废的状态,市面上几乎没有可以说得上的产品存在。这是因为 NLP 之前缺乏大规模数据集,计算能力,以及有效的算法和模型,导致整体 NLP 领域发展非常缓慢。
而到了 18年6月 OpenAI 推出了预生成语言模型 GPT 。
GPT-1
其中 GPT 第一代,也就是 GPT-1 使用了7000本书籍作为训练集,总大小大约 5G 左右,最关键的是 GPT-1 是一个生成式预训练语言模型,这种模型通过两个阶段来进行训练,包括先通过无监督模式进行通用语言模型的训练,再针对特殊的下游任务,比如对文本分类,问答等任务进行微调。
虽然通过微调后的 GPT-1 模型在各个任务上都超过了原有的模型,但这也导致GPT-1 使用起来比较麻烦,因为所有的下游任务都需要进行微调。
GPT-2
而到了2019年2月的GPT-2 , 它使用了 800万份文档,大约 40GB 的数据作为训练集,同时 OpenAI 为了解决所有任务都需要微调的麻烦,提出了一个叫做 zero-shot 的概念,也就是训练完的模型不需要做任何微调,不管你的下游任务是什么,模型都可以直接应对。
怎么做到呢?
这里通过的是暗示,或者说提示,也就是告诉模型它需要完成什么任务。
这就像是我们现在在使用 ChatGPT 的时候,想让它做什么事情,会告诉它,比如你想让他做翻译。
那么就告诉它,请翻译以下句子。这时候把提示“请翻译以下句子”和问题本身一起传入到模型中。模型就知道你要做什么事情了,那不管是翻译,分类,还是其他下游任务,通过 GPT-2 就完全可以在不用微调的情况下,依然可以应对。
这时候 GPT-2 的出现,真正的让 NLP 领域看到了希望,这个希望就是可以通过一个统一的生成式大模型来完成所有下游任务,而不是再像往常一样,每个任务都还需要单独训练模型。
那为什么 19年的时候大家没有听说过 GPT-2 呢?
这主要因为 GPT-2 虽然有了 zero-short 的概念,但实现的效果并不理想,生成的内容很可能并不合适,也会有很多虚假的信息,歧视类的信息,甚至是陷入死循环。这是因为 GPT-2 在训练的过程当中,并不知道哪些信息对人类友好,哪些信息又算作歧视,并且生成内容的多样性做的也不好。
GPT-3
到了2020年5月,GPT-3首次亮相,它的训练包含了多个数据集大约 45TB 的训练数据,这让 GPT-3的模型可以说是上知天文,下知地理,在多项自然语言处理任务上都取得了非常惊人的表现,后面 OpenAI 也推出了 API , 让广大开发者可以调用模型进行体验,那时据统计每天就会产生 450亿个词,相当于每小时写了100w 本书,
大家要知道,那时候大众基本都没听过 GPT ,可想而知现在 2023年3月份这个数据会多么恐怖。
除了训练集变大外,GPT-3 当中将 GPT-2 的 zero-shot 概念进行延展。推出了另外两个概念 Few-shot 和 One-shot 。
zero-shot 我们刚才知道了,相当于提问的时候加上个提示指令,比如翻译以下句子为英文。
one-shot 相当于,在提问的时候给个例子,还是以翻译句子为例,如果你想要固定的格式,可以提前给模型一个例子,这样模型可以参照你的例子来进行内容生成。
如果一个例子不够或者说效果不好,那就需要 few-shot 给多个例子,让模型更加详细的了解要做的事情。
这三种方式本身都没有更新模型,但却可以让模型实现不同的下游任务。
而且 zero-shot , one-shot , few-shot 随着我们给的例子越多,模型生成的效果就会越准确,虽然准确了,但这时候会导致另外一个问题,就是模型调用成本变大了,因为每次提问的时候问的字数多了。
但这种庞大的训练数据也导致了一个问题,懂的内容太多了,这就会在回答问题的时候随意联想,有时候看起来就像是胡说八道,说的内容也不受约束。
那为什么只有 OpenAI 把这个事情做成了呢?
因为他有一个金主爸爸 - 微软。
微软专门在 OpenAI 的总部设置了一个数据中心,用于训练这些模型。这其中每年耗费的算力资源是非常恐怖的,OpenAI 官方的数据是说 GPT-3使用了上万个 GPU 进行训练,光电费就花费超过 1200 万美元,所以 GPT 这种大语言模型不是任何一家小企业可以玩的,只有顶级的云计算厂商在不确定未来的情况下,依然舍得持续投入,才有可能做出来。
ChatGPT
那我们前面提到的都是 GPT ,而不是 ChatGPT 。
这是因为 ChatGPT 本身实际相当于 GPT 模型的一个扩展,基于 GPT 模型, OpenAI 做出来的一个应用层,让其模型本身可以真正的用于去解决一些问题,并给到更多用户进行体验。
而这里最关键的就是如何让 GPT 更像人,而不是一个机器一样的生成文字内容。
这时候就必须要在预训练模型的基础上,采用有监督学习了,因为纯靠无监督学习做出来的模型,它生成的东西是好是坏都没法控制。
为了解决这个问题, OpenAI 雇佣了很多的人,来进行人工干预,相当于通过人工来给一些高质量的生成结果。这些示例相当于真实人类的说话方式,并将这些数据用于微调训练 GPT3,从而得到 GPT3.5模型 。
这就是重点了,在 ChatGPT 推出的时候,使用到的是 GPT3.5 模型,这个模型可以让ChatGPT 初步具备理解人类意图的能力,只不过当时并没有公开 3.5 模型的 API ,市面上当时能够使用的 API 还是 GPT-3 的,因此当时唯一能够体验到GPT3.5 模型效果的方式只有使用 ChatGPT 本身。
当 ChatGPT 经过人工标注的微调训练之后,还会使用到的 GPT3.5 模型另一个概念,叫做RLHF 人类反馈强化学习。
简单来说,它是指模型生成内容的时候,通过人类来对输出结果进行打分,从而不断改进模型,让模型的生成可以更符合人类的预期。
注意,这里的关键是对内容进行打分,而并不是直接判断对错。这是因为回答的结果无法完全用对错来判断。
你并不能说模型回答的就不对,你只能说是他回答的不够好,这时候打分的机制就很关键了。
通过打分的机制,模型自己会觉得,你为什么给我的回答打了7分,是不是我的回答中有哪些方式不对?这时候模型就能够生成更多的多样性结果。比如在评分较低时,会尝试生成不同的响应结果,来获得更高的分数。
而这个强化学习中的得分机制,背后是通过 OpenAI 的一个奖励模型(小版本GPT)来实现的。
假设随便一个问题,产生了A,B,C,D四种答案,人工需要针对这四种回答分别进行打分。
之后会根据打分的结果进行排序,再把标注的数据用于训练,从而得到一个奖励模型。
而当这个奖励模型训练出来以后,结合微调后的的 GPT3.5 模型和这个奖励模型来采用强化学习的方法来进行行为策略的更新,从而让 ChatGPT 整体能够更好的理解人类意图,输出更符合人类需求的文字内容。
举个例子,相当于我们有了奖励模型后,再拿出一个问题来问 ChatGPT ,这时候ChatGPT 给到一个输出结果,这个结果会传递到奖励模型中,奖励模型会给出一个评分,再根据这个评分的高低来更新 ChatGPT 模型,而这个更新的方法叫做 PPO ,这个大家不需要理解,这里面都是些数学的内容。大家只需要知道一个大致过程就行。
而经过这一系列不断的训练,最终就形成了 GPT3.5模型,同时 OpenAI 也在 2022年11月推出了 ChatGPT 这个使用了 GPT3.5 模型的应用层,让用户可以在网页中和机器人进行对话,机器人可以回答问题,撰写文本,生成代码,归纳总结等等。并且在全球大量用户的体验下来,发现 ChatGPT 不像是以往哪些 AI 一样,多说几句话就会露出破绽。 ChatGPT 几乎可以接近真实的人类对话,还有上下文的语言理解,直接在体验上碾压了过去的所有同类型产品,至此 ChatGPT 开始在全球爆火。
GPT-4
而时间来到了 2023年3月14日, OpenAI 宣布了全新的大型多模态模型 :GPT-4 ,整体性能和准确性上都优于之前的 GPT3.5 版本,还能更好的编写多种不同的写作风格,同时他还能支持用户输入图像,从而理解图像当中的信息。此外,相比ChatGPT的4096词,GPT-4 支持 25000字的文本输入,这让 GPT-4 可以从更长的文本内容中执行下游任务,例如原先只能分析几千个字的文章,但现在可以分析2w字的文章来写总结报告。
ChatGPT Plugin
直到前两天2023年3月24日,OpenAI 推出了 ChatGPT 插件功能,让ChatGPT可以和开发者定义的 API 进行交互,这项更新直接赋予了 ChatGPT 使用其他工具和联网的能力。比如原先我们只能询问 ChatGPT 一些酒店推荐,但现在我们可以直接使用 ChatGPT 预定酒店;原先我们只能询问 21年9月之前的数据,因为 ChatGPT 的模型本身是使用 21年9月之前的互联网数据进行的训练,但现在通过 browsing 插件,让ChatGPT 可以基于微软 Bing 的搜索 API 来访问最新的互联网信息,从而突破模型数据的限制。
ChatGPT更新插件功能后,相信未来用不了多长时间,现有的一切应用交互方式都将发生改变。
总结
纵观整个 GPT 的发展历史,我们能发现 ChatGPT 的爆火背后是无数科研人员的努力以及大量资金支持的结果。可能很多人都会对 ChatGPT 感到害怕,产生焦虑,但我们又能做什么呢?生活还要继续,我们能做的,只有拥抱技术,保持学习。
END
我是李祺,微软 Power Platform 方向 MVP ,2014 年进入开发领域,了解微软云全系产品。2020 年以来专注在 Power Platform 领域,曾为微软和多家客户提供售前、培训和实施服务。为普及产品知识,帮助国内用户快速上手。从 2021 年开始创建个人公众号和知乎【李祺 【【微信】】】,目前已提供 200+ Power Platform 中文学习资料,欢迎大家进入公众号菜单【问答社区】进行问题咨询。