迎接AI的时代,创建自己的私人助理

cybozu发表于:2023年04月19日 10:15:18更新于:2023年04月26日 13:58:21

Index


简介

ChatGPT是由OpenAI公司于2022年12月发布的聊天生成型预训练变换模型。

仅用2个月的时间,就达到了1亿的月活跃用户,堪称史上最快增速。

从这张Google的搜索热点趋势图中,我们可以看到ChatGPT的三个热点高峰。


001643f7bd931573863a105f89beeb3

  • 第一波高峰出现在2022年12月。

    • 人们第一次接触到与众不同的聊天体验。ChatGPT能够回答各种问题,写小说,生成的代码居然能直接运行。这极大的引发了人类的好奇心,纷纷想要了解ChatGPT的极限。因此在自媒体上出现了大量调戏AI的视频,进而造成了病毒式的自推广。

  • 第二波高峰出现在2023年2月。

    • 当时的微软宣布将旗下产品接入ChatGPT,并发布NewBing,而其他的大型科技厂商纷纷宣布将推出自己的LLM(Large Language Model)。NVIDIA的CEO的“我们正处于AI的iPhone时刻”,更是让人们意识到AI已经进入了生产力领域,或许这足以称为第四次生产力革命?

  • 第三波高峰出现在2023年3月。

    • 整个3月堪称AI领域的大爆发。更强的AI模型(GPT4、midjourney v5)发布、ChatGPT Plugins的推出、Meta的LLM泄露、其他科技厂商的对标产品、微软宣布整合AI的Microsoft 365 Copilot,等等的一切让人眼花撩乱的同时,给予人们极大的期待。同时人们开始担心AI是否会抢走自己的工作。


ChatGPT注册问题及解决方案

ChatGPT是一个非常受欢迎的服务,但是中国用户在注册时会遇到一些问题。下面我会一一列举这些问题,并提供相应的解决方案。

问题1:无法访问ChatGPT网站

解决方案:使用代理服务器。

注意事项

  1. 不要选择OpenAI不提供服务的国家的代理服务器。(4月初的不提供区域包含中国香港、俄罗斯、伊朗、意大利等)

  2. 尽可能选择有好线路的服务提供商。

  3. 需要有住宅IP。

问题2:部分国内邮箱无法注册

解决方案:请尽量使用国外邮箱(如Gmail)注册。

问题3:注册时需要国外手机接收短信

解决方案:使用sms-activate租借手机,按照其官方的ChatGPT解决方案进行注册。

注意事项

  • 最低充值金额调整为2美元。

    001643f81546669dfd3a05cebb5b90d

  • 选择提供OpenAI服务的低价手机。

    001643f81747ac7f079066f04c0fe3d

  • 20分钟内没收到信息可以取消号码,不扣费。同时也可以接收多条短信。

    001643f8190cc461b9ce4da652367d2

  • 无需特地移除区号。

    001643f81a34269821d96a42a8c4fa9

问题4:访问ChatGPT页面时显示Access Denied

解决方案:由于OpenAI禁止服务器IP访问ChatGPT页面,建议使用有住宅IP的代理服务。

所有问题解决后,我们就可以尽情体验ChatGPT的网页服务。

请注意,网站使用是免费的。但如果需要有限体验GPT-4和ChatGPT-Plugins,请升级Plus服务($20/月)。


ChatGPT的原理

越是深入使用ChatGPT,便越会被其所惊艳。那么它是真正的AI吗?下面我们会简单的讨论一下其本质。

ChatGPT是OpenAI旗下GPT系列预训练技术方案之一,GPT全称为Generative Pre-Trained Transformer。

Generative代表生成式,意味着该人工智能可以从基础知识中创造新的思想。

Pre-Trained代表预训练,通过大量文本语料库进行训练,使模型理解语言的基本模式和关系,从而实现更加精准的文本生成能力。

Chat代表是聊天程序,OpenAI对GPT-3进行了一系列的改进,使得模型在对话生成任务上表现更加优异。需要注意的是,ChatGPT的定位为聊天程序,而非AI助手,其输出内容并不完全正确,比如:

001643f83bbc88eb66a49af06136e74


这是由于通过概率得到的推导结论并不能证明其合理性。这种错误的感知则被称为幻觉

Transformer则是GPT模型核心算法,由Google在2017年推出,目前已成为自然语言处理问题的首选算法之一。其核心思想是利用自注意力机制来进行信息传递和提取,从而有效处理自然语言中的长距离依赖关系,进而大幅提高模型的性能和效率。

001643f86722eeac167dba154a4247d


GPT的训练过程分为三个步骤。

  • 人类在问题集中选择问题并编写答案,以此来生成一个基本的初始模型。

  • 对同一个问题的不同答案进行人类的打分,并生成一个奖励模型。

  • 通过奖励模型不断对新的答案进行打分,以此来迭代初始模型,进行强化训练。

综上所述,我们可以将ChatGPT看作一个单词接龙程序,通过神经网络来预测下一个应该出现的词,进而实现自然语言文本的生成。


Prompt Engineering

既然其本质是个接龙程序,那么我们怎么来限制其产生幻觉呢?

在这方面,Prompt Engineering也许会是一个很好的选择。

Prompt Engineering 是一种在人工智能领域,特别是自然语言处理领域的概念。

它指的是如何设计输入数据,使其能够清楚地描述任务,并引导模型给出正确和合理的输出。

换句话说,它就是给AI模型的指令。你可以通过添加额外的上下文、限制输出方式等方式来控制AI的输出结果。

比如:

001643f89a4d298f2f8bee1472595ed

我们给予了ChatGPT一个指令:“以历史学家角度聊天”,

添加额外的上下文:“关公秦琼的生卒年月”,

再次以输入数据的方式提问了“关公战秦琼”,

并限制了其输出方式:“按史实说话”。

最后进而利用ChatGPT的推理能力,输出了正确的答案。


PS:

  • Awesome ChatGPT Prompts网站收集了常用的prompts,可以在这里快速找到自己需要的prompt。

  • chatgpt_buddy这是一个有趣的案例,将ChatGPT的输出方式限制成了系统指令,或许这种方案可以为我们带来新的启发。


ChatGPT API

既然可以让AI正常说话,那么我们可以将它整合进自己的项目吗?

别急,我们还需要了解ChatGPT在API方面的限制及收费标准。

  1. 每个OpenAI账号都可以通过api-keys管理自己的API key。

    001643f8d52cfa36b821025607b9e7b

  2. 请注意,API的使用是收费的,在Usage页面可以看到每月的使用费用。

    001643f8d8844af4dc211f03f78c3a1

    每个账号最多有4个月的免费额度(2023年3月开始注册的账号,额度下调为$5)。

  3. 收费标准按tokens计算,每个模型的收费标准并不相同。

    GPT-4(8k context)  输入 $0.03 / 1K tokens 输出 $0.06 / 1K tokens

    GPT-4(32k context) 输入 $0.06 / 1K tokens 输出 $0.12 / 1K tokens

    ChatGPT                  $0.002 / 1K tokens

    Embedding             $0.0004 / 1K tokens


    这里涉及到一个新概念tokens,意为分词,我们可以简单的理解为单词片段。

    而tokens的消耗,则包含了用户的输入和ChatGPT的输出,这些都要计费。

    可以利用交互式Tokenizer 工具计算数量。一般来说,100个token大约为75个英文单词,而一个中文则最少消耗2个token。

  4. 在发送API时,我们可以将之前的输入内容一起发送。以此实现ChatGPT的上下文联系能力,但同时也会消耗更多的tokens。

  5. 请注意上下文(Context)的长度限制,GPT-4按照不同的模型有不同的限制,而ChatGPT的限制为4000个tokens。


开发自己的AI知识库助手

了解了ChatGPT API和Prompt Engineering这2个基本知识后,我们可以开始尝试实现个人的知识库助手。

可以参考开源项目paul-graham-gpt

其基本原理如下

  1. 将个人知识库的所有知识切片后,使用Embedding模型,转化成向量,并储存在向量数据库(包含但不限于:pinecone、weaviate、zilliz、milvus、qdrant、redis、pgvector)中。

  2. 在用户提问时,将问题转化成向量,并利用余弦距离等向量运算来计算答案切片相似度,匹配相似度最高几个切片。

  3. 设计一个prompt,将用户问题和答案切片包装在一个prompt中,并声明ChatGPT需要扮演的角色。

  4. 控制prompt的tokens,使其在ChatGPT的上下文限制范围内。

  5. 利用ChatGPT对答案进行归纳整理,并按指定的格式输出。

PS:

  • 类似的方案也被OpenAI整合进plugins,如chatgpt-retrieval-plugin

  • 推荐一个开源项目llama_index使用这个第三方库能更简单的从现有数据中匹配提问。

  • 我们在paul-graham-gpt的基础上,创建了一个kintone帮助手册的AI助手,测试下来效果不错。全中文手册Embedding费用为$0.4。


开发自己的J.A.R.V.I.S.

ChatGPT插件的使用体验非常惊艳,然而距离真正的J.A.R.V.I.S.还有一段距离,理想中的AI并不应该只是个问答器。

那么,将ChatGPT作为中枢大脑,按照提问分解任务,并赋予其调用程序接口的能力,运行的结果返回ChatGPT并不停的迭代,直到完成任务。这一思路是否可行呢?

LangChainAutoGPT的出现则给了我们惊喜。

LangChain是一个开发语言模型的落地应用的框架,它将应用抽象出了Models、Prompts、Indexes,并追加了保存状态的Memory,多模型链式调用的Chains,和调用外部程序的Agents。

简单来说,利用LangChain,可以让语言模型做决策,通过agents加入外部的控制,一起配合形成一套复杂的系统。


如果说LangChain偏于面向开发人员,AutoGPT则更像一个已经实现的应用。

根据用户的输入,AutoGPT会自我迭代,直到问题解决。

它遵循:行动 → 观察行动结果 → 思考 → 决定下一步行动,这样的逻辑来实现自我循环。

001643f9b751c0c891333e52dee00ea

这有点像“套娃”,通过你输入的问题,利用prompt engineering进行约束,利用ChatGPT分解任务并制定计划,然后执行各个命令。如果命令返回不对,继续指定下一步计划,直到得到最终结果为止。

这种方式类似模型堆叠,即模型“一路向下”,去套用别的模型来拆解并解决任务。


类似的方案还有微软的JARVIS


本地部署

AutoGPT的表现十分接近于我们理想中的AI,然而在运行时,还是会存在一些问题,这也是所有基于ChatGPT API应用的缺点:

  1. API访问

    国内网络无法访问API服务器,我们需要使用国外的服务器代理发送请求。不过这次不需要住宅IP。

  2. 续费

    使用AutoGPT运行复杂的任务时,会消耗大量的tokens,当免费额度用完后,需要续费时你会发现国内/香港的信用卡均不支持。只能选择国外的虚拟信用卡。

  3. 隐私问题

    一些敏感信息其实并不希望发送到OpenAI的服务器。


那么能不能本地部署类ChatGPT的模型呢?

  • 开源模型的选择

    OpenAI在ChatGPT模型方面可不open,目前可选择的开源模型有:

    • Meta意外泄露的LLAMA
          ● 基于LLaMA的Alpaca
                  ○ 基于Alpaca,号称达到90%ChatGPT效果的FastChat
                  ○ 基于Alpaca,加入中文的BELLE
                  ○ 基于Alpaca,商汤科技参与的骆驼

    • 清华大学的GLM
          ● 基于GLM的ChatGLM-6B
          ● 使用Alpaca数据集的ChatGLM-Tuning

  • 硬件成本
    目前vultr上的一台8卡服务器的租用成本为$14000/月。
    001643f9f3f721280bd0f761bac55c2

    而据
    知乎网友估算,标准大小的ChatGPT-175B大概需要150-200台8卡A100服务器进行训练1个月。
    6B大小的模型则需要22台8卡服务器,1-4周完成一次模型训练。

  • 运行成本
    GLM-130B支持在一台 A100(40G * 8) 或 V100(32G * 8)服务器上对千亿规模的参数进行推理。
    另外按照OpenAI创始人(官方)给出的数据,ChatGPT运行成本大概每次回答1美分。

    由于成本巨大,目前有很多降低训练成本的研究。
    ColossalAI又或者微软的DeepSpeed


最后

ChatGPT引发的热潮足以改变我们的生活,它开创了一个新的人机交互方式,即用自然语言控制程序。

当前制约AI发展的始终是过高的硬件成本,但随着技术的进步,人均一个J.A.R.V.I.S.未来必将到来。

为了不被时代所淘汰,主动加入这次的AI狂欢,创造一个更精彩的世界也许是一个不错的选择。