查看原文
其他

零基础|搭建基于私域数据的ChatGPT

深思圈 深思圈 2023-04-03


好久没写文章了,因为最近一直在推进自己的创业项目。目前项目已经上线了MVP,正在融资阶段。关注我公众号的朋友应该都了解,我从去年9月就开始关注生成式AI带来的新一轮创业机会,我们团队也做了几个方向的探索和尝试,并最终选定了当前这个方向作为长期目标。今天写的这篇文章跟以往产品分析类的不同,会从技术教程的角度来教大家搭建一个基于私域数据的ChatGPT,但这里核心要提到的一个关键产品是LangChain,一个针对大模型应用的开发框架,帮助开发者快速实现基于大模型结合外部数据和API的AI应用开发。LangChain在最近拿到了硅谷传奇风投Benchmark领投的1000万美金种子轮,估值在4000~5000万美金之间,这是Benchmark在生成式AI领域的首次出手,具有重要的标志性意义。


另外之前创建的深思圈信息分享群已经运行快半年了,里面会实时分享最新有用和有趣的信息,特别是AIGC这块,群里的信息密度和新鲜度非常高,交流氛围也很好,大家一块在群内讨论和学习。目前1群、2群和3群都已经满员了,我刚刚新建了4群,欢迎感兴趣的朋友可以后台回复关键词【信息】,扫码入群。此外,我还在文末特别为大家准备了一份最近海外在AI方向出手的投资人列表,总共有近600位投资人,并且包含了各方面的详细数据,欢迎大家领取。




导语


最近一款名为ChatPDF的应用很火,其底层基于ChatGPT的API接口,用户只需要上传PDF文件,即可用自然语言的方式进行对话获取PDF相关的内容信息。这就是典型的一个基于用户私域数据打造的ChatGPT,大家都知道ChatGPT本身的知识库数据只截止到2021年,同时无法添加外部的数据源进行分析。但很多时候,我们需要的是将ChatGPT自身的语言理解和表达能力与数据进行解耦,将ChatGPT强大的语义能力运用到我们私域数据和内容上,比如ChatPDF、ChatDocs还有ChatExcel等产品就是典型的例子。





01.


教程指南


那么今天的教程就是教大家零基础上手,搭建一个基于私域数据的ChatGPT。本教程的目标人群主要是零基础的普通人,而非专业的开发者。因此,我会教大家以最快最简单的方式搭建出个性化ChatGPT。在此,我们会用到在线代码开发平台Replit,这样就不需要在本地安装和配置相关的开发环境,只需要打开网页即可进行开发和搭建工作。而且Replit官方就提供一个类似的样例项目,我们只需要在已有代码的基础上,稍加修改即可实现目标,真正做到标题中所讲的“零基础”


在开始搭建之前,需要首先有一个OpenAI账户,因为我们需要调用OpenAI的API来实现私域数据ChatGPT的核心问答功能。在登陆成功后,点击右上角头像,选择“View API keys”,然后点击“Create new secret key”按钮来创建一个新的密钥。



接着打开网址https://replit.com/@DavidAtReplit/Custom-Company-Chatbot,这是Replit官方的一个基于个性化公司数据的ChatGPT样例,我们可以直接基于这个项目搭建私域数据的ChatGPT。还没有Replit账号的朋友可以先注册一下Replit账户,然后点击页面右侧蓝色的“Fork”按钮,复制并克隆一个新项目。在项目准备好之后,在左下角的Tools栏中点击“Secrets”选项,在其中创建两个新secrets。一个是用于保存刚刚OpenAI API的密钥,在key的输入框中填写“OPENAI_API_KEY”,然后在value的输入框中填写刚刚创建的Open Ai的密钥,然后点击“Add new secret”保存即可。另外一个secret则是用来保存API密钥的,在当前Replit提供的样例中,同时还将搭建好的Chatbot封装成了一个API,可以由其他应用进行调用,比如集成到网站和企业的IM上等等。这个密钥就是外部调用这个Chatbot时需要校验的Key,不过本次教程不涉及到外部API调用这块,所以大家只需要在新建的secret的key中填入“API_SECRET“,value中填入“MySecret”,确保程序正常运行即可,感兴趣把Chatbot集成到其他产品中的朋友可以自行研究。



接下来我们在左边的文件栏中打开“training”文件夹,将私域数据以纯文本(.txt文件)格式的文件上传到training中的facts文件夹里。我在这里把OpenAI维基百科上的内容复制了下来,做成了一个名叫“data.txt”的文件。大家也可以根据自己的需求,将对应的纯文本文件上传到facts文件夹中即可。至此,我们已经顺利搭建了一个基于私域数据的ChatGPT了。



点击右上角绿色的“Run”按钮,即可顺利运行程序了。在正式开始提问之前,我们首先需要对上传的数据进行Embedding处理,在Console中选择输入“1”,程序就会自动运行并将刚刚上传的文件处理后存到FAISS向量数据库中。在完成处理之后,我们可以看到左侧文件栏会出现一个“.pkl”格式的文件。



接下来,重新点击运行程序,选择输入“2”就可以开始对话了。我在这里测试的数据是来自维基百科上OpenAI的内容,因此我主要提了一些可能包含的相关信息来验证是否实现了我们想要的功能。下面两张图分别是基于OpenAI维基百科数据的ChatGPT和没有外部数据官方ChatGPT的回复,我们可以很直观的看到,在引入维基百科数据源后,ChatGPT可以给出基于数据源最新信息的回复,而GPT-4则只能统一回复没有相关的信息。此外,得益于大模型的多语言特性,虽然我提供的是英文数据源,但依旧可以用中文的方式进行提问和让它用中文进行回答,原始数据的语言壁垒已经不存在了。





02.


原理解析


在上面的教程里,我们根据Replit官方的样例,依样画葫芦做出了一个基于私域数据的ChatGPT,相信大家对这个项目背后技术如何实现还有很多疑问。接下来,就让我们详细讲讲基于私域数据ChatGPT背后的产品技术实现,如下图,主要分为以下几个步骤:

  1. 导入并解析文档,然后对文档进行分割切片

  2. 把每个片段进行向量化(Embedding),然后将结果保存到FAISS向量数据库中

  3. 把用户输入的问题也进行向量化,然后在FAISS库中做相似度检索找到相关的片段

  4. 将用户当前输入的问题、之前的历史问答和找到的片段作为上下文,一同通过API传给大模型,得到回答



我们可以分步骤再进行详细分析一下,首先第一步是文档的导入和分割切片。在Replit的这个样例中,直接需要用户提供的是纯文本,也就是以.txt或者.md结尾的文件。但像ChatPDF这些产品其实只需要用户上传PDF即可实现文件导入,这个是我们后续可以添加的功能,LangChain本身已经集成了多种格式的源文件和URL网址的导入方式,包括PDF、CSV和PPT等等。在导入好文本之后,我们会用到LangChain提供的CharacterTextSplitter这一工具来进行切割分段,在分割时我们可以通过设定“chunk_size”的数值来定义片段大小,这直接决定了给到大模型参考信息的多少,如果太少的话可能会导致关键信息缺乏,太多的则会引入一些无关信息。


在完成分段切片后,接下去核心关键就在将文本内容向量化(Embedding),在Replit样例中直接利用LangChain调用了OpenAI官方的Embeddings接口,将文本转为大模型可以处理的形式,然后把这些向量数据存到专门的向量数据库中,比如FAISS和Pinecone等,方便之后的检索和调用,这里也是会用到LangChain的VectorStores。当用户输入问题之后,会将问题也向量化之后做相似度检索,从向量数据库中找到对应的片段,然后将这个片段和历史问答作为上下文,一同跟用户当前输入的问题传给大模型,等待大模型的回答,这些操作会用LangChain来构建一整个LLMChain来实现





03.


LangChain和AI应用


从以上的技术实现我们可以看到,LangChain在每一环节都提供了对应的开发工具,帮助开发者快速实现AI应用的搭建。接着我们就来详细讲讲LangChain,看看这究竟是怎样的一款产品。


在文章开头有简单提到它是一个面向开发者的AI应用开发框架,如下图所示,属于典型的中间工具层产品。与之类似的还有GPT-Index,包括微软在前几天也刚开源了一款跟LangChain类似的产品叫做Semantic Kernel。除了在文本领域外,在图像生成领域还有一款叫Leap AI的中间层产品,帮助用户快速搭建基于图像生成模型的AI应用。




LangChain主要解决的是在开发基于大模型应用时,无法结合外部数据、无法结合上下文记忆和无法调用外部工具这三大痛点。它通过一个个模块对底层大模型能力进行封装,比如LLMs模块主要是用于调用各类底层模型的,PromptTemplate则是用来管理各种定制化Prompts,还有Chains用来创建各种组合工作流,Memory则是基于对话历史实现多轮对话,此外还有搭建Chatbot必备的Agents模块等。基于这些模块,使得开发者快速能够实现基于大模型AI应用的搭建。



我是从去年10月份LangChain刚发布就在Twitter上关注到了这款产品,并见证了随着整个AI应用爆发式增长,带来LangChain的爆火。目前比较火热的Chatbot类以及语义搜索类应用基本都是通过这个框架搭建的。在当下很多人已经形成一个共识的地方是:随着大模型自然理解和表达能力的涌现,新的基于自然语言的交互方式将带来新的软件范式。我们可以直接通过自然语言来获取和操作底层的数据,而不再需要通过繁琐的图形界面点按来实现。这几个月来我也看到了大量传统软件开始接入生成式AI的能力,包括像最早的Notion、再到HubSpot和Salesforce等等,未来生成式AI应该会成为软件必备的feature集成进来,赋予用户更多的选择。



同时新的软件范式也带来了新的开发方式的迭代,我们在开发基于大模型AI应用的核心功能时,不再需要关注过程的一步步实现,而只需要专注在想要的结果。比如本文搭建的私域数据ChatGPT,其核心的分析和问答能力都是直接用自然语言告诉大模型,你需要扮演一个什么样的角色,提供什么样的功能,如下图,而这都是对最终结果的描述,而非传统开发用代码将整个过程写清楚。因此新一代结合Prompt的开发模式,本质上实现了核心后端功能的“无代码”化,这种新的开发方式也就带来了新的开发框架的兴起。基于此,LangChain这一类中间工具层产品有着非常不错的未来发展空间。




本文为深思圈原创文章,转载请联系公众号后台


参考材料

[1]https://www.youtube.com/watch?v=dc56rI7A2SM

[2]https://langchain.readthedocs.io/en/latest/

[3]https://blog.langchain.dev/tutorial-chatgpt-over-your-data/



结尾


想要获取投资人列表的可以在深思圈后台回复【VC】即可。


我目前创业的方向也是在中间层这一块,并且会比LangChain更容易上手,同时搭建速度更快。今天我们用LangChain搭建一个基于私域数据的ChatGPT大概需要花费10分钟左右的时间,用我们的产品就只需要1分钟。目前我们正在融资阶段,欢迎感兴趣的投资人后台回复【微信】,扫码添加我的个人微信,一块交流交流。同时我们也在招募更多优秀的小伙伴加入团队,特别是在工程研发运营的方面,感兴趣的同学也可以加我微信聊一聊。


最后再提一下:深思圈信息分享群已经运行快半年了,里面会实时分享最新有用和有趣的信息,特别是AIGC这块,群里的信息密度和新鲜度非常高,交流氛围也很好,大家一块在群内讨论和学习。目前1群、2群和3群都已经满员了,我刚刚新建了4群,欢迎感兴趣的朋友可以后台回复关键词【信息】,扫码入群。


觉得内容不错的朋友能够帮忙右下角点个赞,分享一下。您的每次分享,都是在激励我不断产出更好的内容。


欢迎关注深思圈,一起探索更大的世界。


- END -


往期文章

领英创始人Reid Hoffman:如何在熊市中实现闪电式扩张



在寒冬时期,YC建议不要犯这些招聘错误

OpenView年度产品基准报告解读




您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存