基于openai chatgpt和embeddings制作私有知识库聊天机器人

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档

文章目录

  • 前言
  • 一、原理、流程
  • 二、制作预料库
  • 三、制作问答功能
  • 总结


如果有问题可以联系我**:https://gitee.com/xiaoyuren/gpt3

前言

在当今信息爆炸的时代,构建高效、个性化的知识服务成为了企业和组织的迫切需求。为满足这一需求,基于OpenAI ChatGPT和Embeddings的私有知识库聊天机器人正在崭露头角。

OpenAI ChatGPT是一种基于深度学习的自然语言处理模型,通过对大量文本数据进行训练,能够理解和生成人类语言。而Embeddings则是将文本数据映射到低维向量空间的技术,捕捉了文本之间的语义和语法关系。

结合这两者的优势,私有知识库聊天机器人能够像人类专家一样回答用户的问题,并提供准确、针对性的信息。它将私有知识库的内容与ChatGPT模型和Embeddings技术相结合,为用户提供个性化、实时的知识服务。

本文将深入探讨基于OpenAI ChatGPT和Embeddings的私有知识库聊天机器人的制作方法。我们将探讨如何建立私有知识库,集成ChatGPT模型,并借助Embeddings技术提升聊天机器人的准确性和效率。私有知识库聊天机器人在客户服务、技术支持和在线教育等领域具有广泛应用前景。

让我们一起探索这一引人注目的技术,揭示私有知识库聊天机器人在知识服务领域的潜力和可能性。


一、原理、流程

在这里插入图片描述

上面的图可以清晰得看到其中得流程:

我们首先要准备自己的语料库,如果你是制作像chatpdf、chatdoc这种程序 需要先读取其中的内容,然后把内容转为向量数据。当用户输入问题时,也需要把用户问题转为向量数据,拿用户的向量问题去我们语料库的向量数据查找,计算问题和语料库中内容的相似度,最高相似度的内容就是我们需要的答案。
为了让回答更智能让方便我们阅读,我们还需要让chatgpt配合。我们需要把上面计算的几条最符合的答案交给chatgpt,让chatgpt通过我们给他的内容回答我们。
这就是我们本篇的原理和流程。下面看下具体如何实现。

二、制作预料库

我们首先需要把我们语料库分句,让语料库是一段一段的而不是一整篇文章,可以用标点作为分隔符。例如句号、感叹号、分号、省略号等,注意:中英文的符号不一样,如果是英文的内容需要按照英文的符合去分割。

if any('\u4e00' <= char <= '\u9fff' for char in book_text):print("中文")pattern = r'(?:\.|\!|\?|。|!|?|;|;|\.{6})'# 使用正则表达式进行分句cn_sentences = re.split(pattern, book_text)# 去除空字符串和空格cn_sentences = [s.strip() for s in cn_sentences if s.strip()]print('中书籍分句结果:', cn_sentences)ln_sentences=cn_sentences
else:print("英文")en_sentences = sent_tokenize(book_text)ln_sentences = en_sentencesprint('英文书籍分句结果:', en_sentences)

为了方便后续的处理我们需要把数据在处理一下:、

如果有问题可以联系我**:https://gitee.com/xiaoyuren/gpt3

def split_token(sentences, min_tokens=min_tokens, max_tokens=max_tokens):# Split the text into sentences# Get the number of tokens for each sentencen_tokens = [len(tokenizer.encode(" " + sentence)) for sentence in sentences]chunks = []tokens_so_far = 0chunk = []for sentence, token in zip(sentences, n_tokens):if token<=1:continueprint(sentence)print(token)# Check if adding this sentence would exceed the token limitif tokens_so_far + token > min_tokens:# If so, add the current chunk to the list of chunks and start a new chunkchunk.append(sentence)chunks.append(" ".join(chunk))chunk = []tokens_so_far = 0continue# Add the current sentence to the current chunkchunk.append(sentence)tokens_so_far += tokenif len(chunk)>1:chunks.append(" ".join(chunk))print("1-----------------------------")# 用于存放分割后的字符串的临时列表temp_list = []# 遍历原列表中的元素for item in chunks:# 使用tokenizer计算当前字符串的token数目tokens = tokenizer.encode(item)# 如果当前字符串的token数目不超过20,则直接将其添加到临时列表中if len(tokens) <= max_tokens:temp_list.append(item)else:# 否则,将当前字符串切分成若干个token数目不超过20的子串for sub_item in tokenize_string(item, min_tokens):temp_list.append(sub_item)# 将临时列表中的元素赋值给原列表my_list = temp_listreturn my_listdf = pd.DataFrame(ln_sentences, columns=['text'])
#移除换行 空格
df['text'] =  remove_newlines(df.text)r=split_token(df['text'])
print(r)
df = pd.DataFrame(r, columns = ['text'])
df['n_tokens'] = df.text.apply(lambda x: len(tokenizer.encode(x)))
df.n_tokens.hist()
print(df)

其中关键在于split_token:此方法可让计算每句话的token长度,不足min_tokens的可以用下一句补充,大于max_tokens的给截断,这样就保证每段话都是我们要的范围长度的内容。

最后也就是最关键的就是把数据量化处理了:

df['embeddings'] = df.text.apply(lambda text: openai.Embedding.create(input=text, engine='text-embedding-ada-002')['data'][0]['embedding'])df.to_csv('processed/embeddings.csv')
df.head()

上面代码如果因速率限制返回错误:可以使用df.text.apply(get_embedding_with_delay)去增加延迟。

至此语料的向量化已经完成了。


三、制作问答功能

看下如何把用户问题量化 并且在语料中查找:

def create_context(question, df, max_len=1800):print("\n\n")print("questionSTART:\n" + question)print("\n\n")print("questionEND:\n")"""Create a context for a question by finding the most similar context from the dataframe"""# Get the embeddings for the questionq_embeddings = openai.Embedding.create(input=question, engine='text-embedding-ada-002')['data'][0]['embedding']# Get the distances from the embeddingsdf['distances'] = distances_from_embeddings(q_embeddings, df['embeddings'].values, distance_metric='cosine')returns = []cur_len = 0# Sort by distance and add the text to the context until the context is too longfor i, row in df.sort_values('distances', ascending=True).iterrows():# Add the length of the text to the current lengthcur_len += row['n_tokens'] + 4# If the context is too long, breakif cur_len > max_len:break# Else add it to the text that is being returnedreturns.append(row["text"])# Return the contextreturn "\n\n###\n\n".join(returns)

上面方法返回的内容就是我们的问题在语料库中查找的结果最接近的内容
然后把上面返回的内容交给chatgpt处理:

        response = openai.ChatCompletion.create(model="gpt-3.5-turbo",temperature=0,max_tokens=max_tokens,top_p=1,frequency_penalty=0,presence_penalty=0,stop=stop_sequence,messages=[{"role": "system", "content": "你现在充当一个人工智能客服,你的回答要表现的像一个人工客服。如果问你是不是人工客服,回答是人工客服。回答完毕在后面加上:亲~ 。 不要在回答中带有根据XXX"},{"role": "user", "content": f"Answer the question based on the context below with Chinese, and if the question can't be answered based on the context, say \"亲~ 我这边只负责产品相关咨询,其他问题我可以帮你转接一下相关客服\"\n\nContext: {context}\n\n---\n\nQuestion: {question}\nAnswer:"},])result = ''for choice in response.choices:result += choice.message.contentreturn result

上面的system和user内容可根据自己情况自定义。context是上面返回的内容,question是用户提问的内容。通过以上代码我们就实现了基于自己知识库的聊天机器人

总结

本篇讲述了基于openai chatgpt和embeddings制作私有知识库聊天机器人的原理和流程和代码实现。如果你对上面的内容有什么不明白的或者疑问可以私信或者下方联系我。

如果有问题可以联系我**:https://gitee.com/xiaoyuren/gpt3

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/53065.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

基于 Quivr 搭建个人知识库

目录 Quivr介绍 Quivr特性 Quivr演示 Demo with GPT3.5: Demo of the new version&#xff1a; Quivr实战 Quiv 使用的主要技术 Quiv 实践依赖 创建Supabase项目 部署Quiv项目 第一步&#xff1a;现在源码 第二步&#xff1a;设置环境变量 第三步&#xff1a;执行sql 第…

标书打印分册小技巧

标书打印出来后&#xff0c;一般都有很多本&#xff0c;去打印店胶装标书时&#xff0c;需要把每一本标书分出来&#xff0c;黑帽大师用便签纸就能方便的分出标书。 把便签纸贴在每本标书的最后一页上&#xff0c;这样就能方便的分出每一本了。

学校计算机维护投标书,信息化系统硬件及应用系统安全运维服务投标书范本

这是一份信息化系统硬件及应用系统安全运维服务投标书范本&#xff0c;含运维服务方案&#xff0c;word格式&#xff0c;可编辑&#xff0c;有需要的朋友可以参考学习。 信息化系统硬件及应用系统安全运维服务 本次服务范围为XX局信息化系统硬件及应用系统&#xff0c;各类软硬…

招投标小程序开发功能及源码

一般获取招投标信息的渠道主要有三种&#xff0c;一&#xff0c;来源于官方、正规的政府网站、公共资源交易中心等&#xff1b;二&#xff0c;能提供针对性的招投标信息平台&#xff1b;三是通过个人的人脉资源来获取项目信息。今天我们重点讲下招投标平台怎么运营的&#xff0…

python制作标书_爬取比比网中标标书,并保存为PDF格式文件

前言 本文的文字及图片来源于网络,仅供学习、交流使用,不具有任何商业用途,如有问题请及时联系我们以作处理。 以下文章来源于CSDN&#xff0c;作者嗨学编程 python开发环境 python 3.6 pycharm import requests import parsel import pdfkit import time 相关模块pip安装即可 …

python制作标书_Python爬取比比网中标标书并保存成PDF格式

前言 本文的文字及图片来源于网络,仅供学习、交流使用,不具有任何商业用途,如有问题请及时联系我们以作处理。 python开发环境 python 3.6 pycharm requests parsel pdfkit time 相关模块pip安装即可 目标网页分析 1、先从列表页中获取详情页的URL地址 是静态网站,可以直接请求…

第一次写标书

由于工作需要开始写起标书。前后大概花了五天时间。 经过自我学习和老师指导&#xff0c;知道了一件事情&#xff0c;不管做什么&#xff0c;其实都是能够有所学习的。 而学习&#xff0c;为了有所收获&#xff0c;需要用心再去体会每一个过程&#xff0c;并记录下来&#xf…

小程序投标书_快来学习招投标小技巧!中标率提高50%(建议收藏)

99%的投标人使用【建企同盟APP】都中标了&#xff01; 建企同盟APP 招标信息不遮挡 订阅推送零费用 从保证中标的因素来看&#xff0c;三个因素最为重要&#xff0c;首先是关系&#xff0c;其次是能力&#xff0c;最后才是价格。关系指与用户的关系&#xff0c;既有最终用户又包…

小程序投标书_程序员接私活常用哪些平台?

给大家推荐国内外几个接外包比较靠谱的平台&#xff0c;相对来说规模和专业性都还不错。 想要接外包或者积累行业人脉的小伙伴都可以收藏一波&#xff1a; 国外篇 如果打算接国外的软件外包&#xff0c;首先以下几点能力需要提前掌握&#xff1a; 基本的英语沟通能力(能够基本沟…

重磅:AI 的 “iPhone 时刻” 已经到来

大家好&#xff0c;我是校长。 上周英伟达 CEO 黄仁勋在 GTC 大会主题演讲火爆了全网。 一起来看看黄仁勋说了什么。 英伟达 CEO 黄仁勋在 GTC 大会主题演讲上开场时这么说&#xff1a; “近四十年来&#xff0c;摩尔定律一直是引领计算机行业动态发展的重要规律&#xff0c;而…

AI内容生成检查器

我的新书《Android App开发入门与实战》已于2020年8月由人民邮电出版社出版&#xff0c;欢迎购买。点击进入详情 AI进行内容生成已经是是当下的人们话题&#xff0c;那么怎么判断文本的内容是不是AI生成的呢&#xff1f;AI 生成的句子将被突出显示&#xff0c;目前工具可以检测…

ChatGPT生成文本检测器-task5

#### 任务五&#xff1a;使用TFIDF特征和XGBoost完成训练和预测 说明&#xff1a;在这个任务中&#xff0c;你需要使用TFIDF特征和XGBoost算法完成训练和预测&#xff0c;进一步提升文本分类的性能。实践步骤&#xff1a; 准备TFIDF特征矩阵和相应的标签。划分训练集和测试集。…

ChatGPT生成文本检测器-task2

#### 任务二&#xff1a;对数据集字符进行可视化&#xff0c;统计标签和字符分布 说明&#xff1a;在这个任务中&#xff0c;你需要使用Pandas库对数据集的字符进行可视化&#xff0c;并统计数据集中的标签和字符的分布情况&#xff0c;以便更好地理解数据集。实践步骤&#x…

ChatGPT生成文本检测器-task8

#### 任务八&#xff1a;使用Word2Vec词向量&#xff0c;搭建BILSTM模型进行训练和预测 说明&#xff1a;在这个任务中&#xff0c;你将使用Word2Vec词向量&#xff0c;搭建BILSTM模型进行文本分类的训练和预测&#xff0c;通过双向长短期记忆网络来进行文本分类。实践步骤&am…

ChatGPT生成文本检测器-task1

### 背景介绍 近年来人工智能在自然语言处理领域取得了巨大的进展。其中一项引人注目的技术是生成模型&#xff0c;如OpenAI的GPT-3.5。这类模型通过学习大量的文本数据&#xff0c;具备了生成高质量文本的能力&#xff0c;从而引发了一系列关于文本生成真实性的讨论。 正因为…

Mac GoLand打不开(闪退)也不报错

Mac用过GoLand&#xff0c;电脑应用初始化后就打不开了&#xff0c;下其他版本也不行 原因就是之前的配置文件还在需要清理&#xff1a; /Users/你的文件/Library/Preferences/ 配置文件在这个文件下

MAC 有些网址可以 ping 通,但是浏览器打不开

MAC 访问外网网址打不开&#xff0c;因为平时开着 VPN&#xff0c;故开始逐步排查问题&#xff1a; 重启电脑ping ip切换网络改 DNS 方法都试过了在公司还是不行&#xff0c;但是在家里能连上 最后解决办法是点击网络&#xff0c;新建位置就一切正常了。

Mac有些网址打不开问题解决办法

搜这个问题的兄嘚是不是遇到了这样的问题&#xff0c;大多数网页可以打开&#xff0c;但是某些网页确死活打不开&#xff0c;将连接发给朋友&#xff0c;人家秒开&#xff0c;很气&#xff0c;辣鸡Mac &#xff0c;&#xff0c;&#xff0c;困扰了我这么久&#xff0c;&#xf…

Mac上Chrome登录了LT网页打不开

Mac上首先登陆了LT成功的时候上面的菜单栏会显示点亮状态的LT 可是过了一段时间&#xff0c;发现菜单栏上的LT不见了&#xff0c;此时发现浏览器打开其他的网页的时候打不开 经过排查发现原因如下 需要退出这个LT进程 解决办法&#xff1a; 进入活动监视器&#xff0c;找到…

解决Mac能上微信聊QQ但是打不开网页的问题

解决Mac能上微信聊QQ但是打不开网页的问题 1.在访达中&#xff0c;前往文件夹 2.操作截图 复制代码 /Library/Preferences/SystemConfiguration/com.apple.Boot.plist3.在SystemConfiguration文件夹里面 4.只要留下com.apple.Boot.plist文件&#xff0c;其他全部删掉&#xf…