背景
最近Chatgpt很火,在自然语言聊天和问答方面的能力非常的强劲,但不足是Chatgpt的训练数据都是基于2021年之前的网上数据,没法让他帮我回答基于时间较近的网页内容的问题或者基于私人或公司的私有数据进行聊天问答,即Chatgpt没有插上实时搜索网页的能力。虽然当前有new bing,以及chatgpt-retrieve-plugin即将上线,还需要在waiting list里面耐心等待。
最近我们产品想要把我们搜集的财务会计相关知识的网址汇集成一个知识库,能够服务于我们的客户,帮助他们解决财务方面的问题,那么这些专业的私有数据如何当做一个数据源让chatgpt接入集成,并通过聊天QA的方式来获取信息呢?
本文要叙述的方案即通过chatgpt接入私有数据集合,通过聊天的交互方式进行FAQ。
效果
首先我们来看下效果,假使我们的私有数据来自如下网址:kruzeconsulting.com/cash-burn-r… 该网址内容是有关财务相关知识,那么我需要将网站中的内容爬取下来,然后让chatgpt能够理解网站中的内容,用户通过问答的方式获取到对应的知识内容。当然你可以把知识库相关的所有网址都一股脑的往里扔。
由上面两张图可以看到,自然语言的提问均获得了不错的答案(答案也都来自于我们给定的网址),并且将答案相关的URL也展示了出来,完成了一次自然语言的搜索任务。
原理
要解决私有数据的自然语言查询,我觉得要先解决以下几个问题
-
私有数据的存储
私有数据需要解决大数据量存储和查询的问题,由于chatgpt是个大语言模型,1750亿个参数,不可能将自己的数据喂给他微调做对应的子任务模型,成本太高。
那么必然我们需要将自己的私有数据存储在自己的私有数据库中,这个时候向量数据库(vector database)就出现了
-
如何通过自然语言进行问答
自然语言的问答,自然需要借助chatgpt的能力,但是chatgpt的一次Prompt是有字数限制的,我不可能把私有数据所有的数据都一起组装成Prompt来问chatgpt,如何能够突破Prompt的字数限制呢?一个可行的想法就是将私有数据库中相关的内容抽取出来,当做Prompt来问,这是个行之有效的方式。那么如何提取和问答相关性比较大的内容呢,这个时候Embeddings技术就出现了
什么是Embeddings?
OpenAI的官方文档给出了相关的解释:Text Embeddings用于测量文本字符串之间的相关性大小,一段文字你可以看成是有限字符的有序排列,一次Embedding操作就是将一段文本转化为一个vector向量,即浮点数组。通过计算两个向量之间的距离来测量两段文字的相关性。小距离表示高相关,大距离表示低相关。
比如说一下几个短语:
- “狗咬耗子”
- “犬类捕食啮齿动物”
- “我家养了只狗”
那很明显1和2是类似的,即使它们之间没有任何相同的文字。那么怎么让计算机知道1和2很相似呢?
如果我们把之前的短语对应的向量能画在坐标轴上,它看起来像图中那样。短句1和短句2会离得很近,而短句3和他们离得比较远。这样我们就可以通过向量之间距离的计算来判断短语之间的相似度大小。
总结下来Embeddings 可以用于如下场景:
Search (where results are ranked by relevance to a query string)
Clustering (where text strings are grouped by similarity)
Recommendations (where items with related text strings are recommended)
Anomaly detection (where outliers with little relatedness are identified)
Diversity measurement (where similarity distributions are analyzed)
Classification (where text strings are classified by their most similar label)
整体流程
下图是我直接截取@宝玉xp画的流程图,基本上可以很容易得理解整个流程
整个流程可以分为两大部分: 第一大部分:私有数据切片&存储
第二大部分:筛选和提问相关性高的内容整合一齐向Openai提问
第一大部分:私有数据切片&存储:
1、首先需要将原始文本按照固定长度截取为一段一段文本,原因是希望通过openai的Embedding能力生成对应阶段文本的向量数据集合,由于openai对于输入有文本长度的限制,所以需要截取到固定长度。
2、调用openai的Embeddings接口,将一段段文本转成向量,这样每段文本就有一个向量与之对应。
3、将原始文本和对应的向量存储到之前提到的向量数据库中
第二大部分:筛选和提问相关性高的内容整合一齐向Openai提问:
1、将用户输入的问题字符串当做输入,调用openai的Embeddings能力换取对应的vector向量
2、将用户输入文本对应的向量去向量数据库中查询高相似度的向量集合,即对应的相关性文本列表就都查了出来。
3、将从向量数据库中查出来的相关性文本和原始的问题组成一个Prompt直接问chatgpt,既可以得出来结果。
对应的Prompt的结构如下:
You are a helpful assistant. When given CONTEXT you answer questions using only that information, and you always format your output in markdown. You include code snippets if relevant. If you are unsure and the answer is not explicitly written in the CONTEXT provided, you say "Sorry, I don't know how to help with that." If the CONTEXT includes source URLs include them under a SOURCES heading at the end of your response. Always include all of the relevant source urls from the CONTEXT, but never list a URL more than once (ignore trailing forward slashes when comparing for uniqueness). Never include URLs that are not in the CONTEXT sections. Never make up URLs`;
CONTEXT:
There are a couple of different ways to calculate a startup's burn rate. One of the easiest methods is to take the average decrease in the company's cash position over the past several months, exclusive of any financing events. For example, if a company had $300,000 in the bank, then $275,000 the next month, then $250,000 the last month, then the metric would be $25,000 a month. You should also include other non-checking account balances, such as your payment processor, a money market account, a savings account, etc. that likely contain dollars that should be included in the analysis...
Q:
How to calculate BURN RATE?
A:
实践
可以基于github.com/gannonh/gpt… Readme的方式搭建,本文就不在赘述,实践中选用的向量数据库为Supabase,最终存储在Supabase里面数据形式大概如下:
如何学习大模型 AI ?
由于新岗位的生产效率,要优于被取代岗位的生产效率,所以实际上整个社会的生产效率是提升的。
但是具体到个人,只能说是:
“最先掌握AI的人,将会比较晚掌握AI的人有竞争优势”。
这句话,放在计算机、互联网、移动互联网的开局时期,都是一样的道理。
我在一线互联网企业工作十余年里,指导过不少同行后辈。帮助很多人得到了学习和成长。
我意识到有很多经验和知识值得分享给大家,也可以通过我们的能力和经验解答大家在人工智能学习中的很多困惑,所以在工作繁忙的情况下还是坚持各种整理和分享。但苦于知识传播途径有限,很多互联网行业朋友无法获得正确的资料得到学习提升,故此将并将重要的AI大模型资料包括AI大模型入门学习思维导图、精品AI大模型学习书籍手册、视频教程、实战学习等录播视频免费分享出来。
第一阶段(10天):初阶应用
该阶段让大家对大模型 AI有一个最前沿的认识,对大模型 AI 的理解超过 95% 的人,可以在相关讨论时发表高级、不跟风、又接地气的见解,别人只会和 AI 聊天,而你能调教 AI,并能用代码将大模型和业务衔接。
- 大模型 AI 能干什么?
- 大模型是怎样获得「智能」的?
- 用好 AI 的核心心法
- 大模型应用业务架构
- 大模型应用技术架构
- 代码示例:向 GPT-3.5 灌入新知识
- 提示工程的意义和核心思想
- Prompt 典型构成
- 指令调优方法论
- 思维链和思维树
- Prompt 攻击和防范
- …
第二阶段(30天):高阶应用
该阶段我们正式进入大模型 AI 进阶实战学习,学会构造私有知识库,扩展 AI 的能力。快速开发一个完整的基于 agent 对话机器人。掌握功能最强的大模型开发框架,抓住最新的技术进展,适合 Python 和 JavaScript 程序员。
- 为什么要做 RAG
- 搭建一个简单的 ChatPDF
- 检索的基础概念
- 什么是向量表示(Embeddings)
- 向量数据库与向量检索
- 基于向量检索的 RAG
- 搭建 RAG 系统的扩展知识
- 混合检索与 RAG-Fusion 简介
- 向量模型本地部署
- …
第三阶段(30天):模型训练
恭喜你,如果学到这里,你基本可以找到一份大模型 AI相关的工作,自己也能训练 GPT 了!通过微调,训练自己的垂直大模型,能独立训练开源多模态大模型,掌握更多技术方案。
到此为止,大概2个月的时间。你已经成为了一名“AI小子”。那么你还想往下探索吗?
- 为什么要做 RAG
- 什么是模型
- 什么是模型训练
- 求解器 & 损失函数简介
- 小实验2:手写一个简单的神经网络并训练它
- 什么是训练/预训练/微调/轻量化微调
- Transformer结构简介
- 轻量化微调
- 实验数据集的构建
- …
第四阶段(20天):商业闭环
对全球大模型从性能、吞吐量、成本等方面有一定的认知,可以在云端和本地等多种环境下部署大模型,找到适合自己的项目/创业方向,做一名被 AI 武装的产品经理。
- 硬件选型
- 带你了解全球大模型
- 使用国产大模型服务
- 搭建 OpenAI 代理
- 热身:基于阿里云 PAI 部署 Stable Diffusion
- 在本地计算机运行大模型
- 大模型的私有化部署
- 基于 vLLM 部署大模型
- 案例:如何优雅地在阿里云私有部署开源大模型
- 部署一套开源 LLM 项目
- 内容安全
- 互联网信息服务算法备案
- …
学习是一个过程,只要学习就会有挑战。天道酬勤,你越努力,就会成为越优秀的自己。
如果你能在15天内完成所有的任务,那你堪称天才。然而,如果你能完成 60-70% 的内容,你就已经开始具备成为一名大模型 AI 的正确特征了。
这份完整版的大模型 AI 学习资料已经上传CSDN,朋友们如果需要可以微信扫描下方CSDN官方认证二维码免费领取【保证100%免费
】
