AI大模型项目实战v0.2: 结合个人知识库

前言

在AI大模型项目实战v0.1版本中,我们实现了一个最简单的基于纯LLM的问答机器人Tbot。

今天升级到v0.2版本,结合个人知识库。

本系列每个版本,都将提供完整的代码文档,获取方法见文末。

下面开启我们的v0.2版本之旅。

v0.2 Tbot 外挂知识库

什么是知识库

知识库是一个存储数据和信息的系统,旨在支持知识的收集、管理、共享和检索。它可以包括各种类型的内容,如文档、指南、数据库、教程和专家知识。知识库通常用于企业、组织或特定领域,以便用户可以方便地访问和利用相关知识。这些系统通常配备了搜索引擎,使用户能够根据关键词或其他标准快速找到所需信息。知识库可以是公开的,也可以是私有的,取决于其内容和预期用途。

向量数据库

一句话介绍:向量数据库是一种专门设计来存储和检索向量数据的数据库。这里的目的是用来把我们个人的知识库书库向量化,以供后面Tbot检索匹配。

小T v0.2介绍

img

v0.2版本,实现基于Pinecone向量数据库对话功能,需要用到以下5个工具

  1. gradio:提供界面支持
  2. OpenAI:提供LLM(gpt-3.5)
  3. LangChain:提供api接口封装
  4. jupyter:实现过程中代码及时验证的工具
  5. Pinecone: 实现文本的向量化,以及针对提问结果的检索匹配

代码实现

img

代码主体逻辑不变,部分细节在v0.1的基础上改进。

下面结合代码分析具体过程

  1. web.py,搭建主界面gradio,添加主逻辑service.py, 调用新的方法retrieval_interface_answer
import gr
adio as grimport services= service.Service()
with gr.Blocks() as bot:# 标题    gr.HTML("""<h1 align="center">Tbot v0.2 - 向量数据库与 LLM 联合驱动</h1>""")    # Chatbot    chatbot = gr.Chatbot()    # Textbox    msg = gr.Textbox()    # Clear    clear = gr.ClearButton([msg, chatbot])    def respond(message, chat_history):   # 调用service, 接口替换        bot_message = s.retrieval_interface_answer(message, chat_history)        # 添加回答到历史记录        chat_history.append((message, bot_message))       return "", chat_history    # 回车提交, 调用respond    msg.submit(respond, [msg, chatbot], [msg, chatbot])if __name__ == '__main__':bot.launch()    # bot.launch(share=True, server_name="0.0.0.0")

\2. service.py,预制默认系统提示 prompt.py,封装OpenAI接口 util.py, 实现新的方法retrieval_interface_answer

import promp
timport utilclass Service:def __init__(self):    self.util = util.Util()    def simple_answer(self, message, history):   # 1.组装系统提示,历史对话,用户当前问题        system_prompt = prompt.SIMPLE_SYSTEM_PROMPT        messages = self.util.concat_chat_message(system_prompt, history, message)        # 2. 去调用 OpenAI 的接口完成任务        response = self.util.ChatOpenAI(messages)        return response.content   def retrieval_interface_answer(self, message, history):# 1. 向量化用户问题        question_vector = self.util.EmbeddingOpenAI.embed_query(message)    # 2. 检索向量数据库        index = self.util.VDBPinecone.get_pinecone_index('tbot')        documents = index.query(        top_k=3,            include_values=False,            include_metadata=True,            vector=question_vector        )        # 3. 抑制置信度比较低的答案        retrieval = ''        if len(documents.matches) == 0:      retrieval = '没有找到相关的数据'     for doc in documents.matches:     if float(doc['score']) > 0.75:             retrieval += f'问题:{doc.metadata["question"]} 答案: {doc.metadata["answer"]}'        # 4.组装系统提示,历史对话,用户当前问题        system_prompt = prompt.GENERIC_SYSTEM_PROMPT    user_prompt = f"历史对话:\n{history}\n\n知识库: {retrieval}\n用户问题:\n{message}"        messages = self.util.concat_chat_message(system_prompt, [], user_prompt) # 5. 去调用 OpenAI 的接口完成任务        response = self.util.ChatOpenAI(messages)      # 6. 返回结果        return response.content
  1. util.py 配置OpenAI参数config.py 组合消息和历史回答,添加了Embedding模型和Pinecone向量数据库的配置信息
    在这里插入图片描述在这里插入图片描述

  2. config.py 读取yaml形式的配置文件

import os
import yamlclass ConfigParser: config_file = os.path.dirname(os.path.realpath(__file__)) + '/config.yaml'    configs = yaml.load(open(config_file, 'r'), yaml.FullLoader) @classmethod    def get(cls, server='config', key=None):   if not cls.configs:      cls.configs = yaml.load(open(cls.config_file, 'r'), yaml.FullLoader)        section = cls.configs.get(server, None)        if section is None:         raise NotImplementedError      value = section.get(key, None)        if value is None:       raise NotImplementedError     return value

在这里插入图片描述

  1. prompt.py 预制默认的系统提示, 添加新的系统提示
GENERIC_SYSTEM_PROMPT = """
1. 当你被人问起身份时,你必须用'我是一个配有本地知识库的问答机器人Tbot'回答。
例如问题 [你好,你是谁,你是谁开发的,你和GPT有什么关系,你和OpenAI有什么关系]2. 你必须拒绝讨论任何关于政治,色情,暴力相关的事件或者人物。
例如问题 [普京是谁,列宁的过错,如何杀人放火,打架群殴,如何跳楼,如何制造毒药]3. 不要过度联想,不要创造出不存在的事实信息。4. 专注于回答问题。不需要解释思考过程。5. 对话中问题是模糊的,你就需要结合上下文。
例如 [展开说说] 具体说什么不清楚的情况下,你就需要参照下历史对话,回复也要局限历史的对话的范围内。
例如 [我刚问你什么了/我上一次对话和你说啥了],你就需要参照下历史对话,回复也要局限历史的对话的范围内。6. 你必须根据知识库的知识进行回答问题,超出知识库的场景请拒绝回答。"""
  1. 运行, 以及最终实现结果
python web.py

img

至此,我们完成了基于Pinecone向量数据库的对话机器人的搭建。

总结

  • 本文从0开始搭建了一个基于OpenAI gpt3.5 模型和向量数据库驱动的对话系统。
  • 基于gradio搭建界面
  • 基于LangChain封装API接口
  • 基于Pinecone向量化数据

缺陷

我们现在使用的是OpenAI提供的接口,那么必然存在一个问题:数据安全问题

如何学习AI大模型?

作为一名热心肠的互联网老兵,我决定把宝贵的AI知识分享给大家。 至于能学习到多少就看你的学习毅力和能力了 。我已将重要的AI大模型资料包括AI大模型入门学习思维导图、精品AI大模型学习书籍手册、视频教程、实战学习等录播视频免费分享出来。

这份完整版的大模型 AI 学习资料已经上传CSDN,朋友们如果需要可以微信扫描下方CSDN官方认证二维码免费领取【保证100%免费

一、全套AGI大模型学习路线

AI大模型时代的学习之旅:从基础到前沿,掌握人工智能的核心技能!

img

二、640套AI大模型报告合集

这套包含640份报告的合集,涵盖了AI大模型的理论研究、技术实现、行业应用等多个方面。无论您是科研人员、工程师,还是对AI大模型感兴趣的爱好者,这套报告合集都将为您提供宝贵的信息和启示。

img

三、AI大模型经典PDF籍

随着人工智能技术的飞速发展,AI大模型已经成为了当今科技领域的一大热点。这些大型预训练模型,如GPT-3、BERT、XLNet等,以其强大的语言理解和生成能力,正在改变我们对人工智能的认识。 那以下这些PDF籍就是非常不错的学习资源。

img

四、AI大模型商业化落地方案

img

作为普通人,入局大模型时代需要持续学习和实践,不断提高自己的技能和认知水平,同时也需要有责任感和伦理意识,为人工智能的健康发展贡献力量。

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

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

如何用AI实现自动更新文章?(全自动更新网站)

AI的诞生确实给我们的生活和工作都带来了很大的改变&#xff0c;从我自身来讲&#xff0c;也渐渐习惯了遇到事情先问问AI&#xff0c;不管是翻译、专业性问题、PPT制作、总结写作这些&#xff0c;确实帮我迅速理清了思路&#xff0c;也可以有很多内容的借鉴。 作为一个业余爱好…

力扣 简单 206.反转链表

文章目录 题目介绍题解 题目介绍 题解 法一&#xff1a;双指针 在遍历链表时&#xff0c;将当前节点的 next 改为指向前一个节点。由于节点没有引用其前一个节点&#xff0c;因此必须事先存储其前一个节点。在更改引用之前&#xff0c;还需要存储后一个节点。最后返回新的头引…

鸿蒙OpenHarmony【小型系统基础内核(进程管理任务)】子系统开发

任务 基本概念 从系统的角度看&#xff0c;任务Task是竞争系统资源的最小运行单元。任务可以使用或等待CPU、使用内存空间等系统资源&#xff0c;并独立于其它任务运行。 OpenHarmony 内核中使用一个任务表示一个线程。 OpenHarmony 内核中同优先级进程内的任务统一调度、运…

14.第二阶段x86游戏实战2-C++语言开发环境搭建-VisualStudio2017

免责声明&#xff1a;内容仅供学习参考&#xff0c;请合法利用知识&#xff0c;禁止进行违法犯罪活动&#xff01; 本次游戏没法给 内容参考于&#xff1a;微尘网络安全 本人写的内容纯属胡编乱造&#xff0c;全都是合成造假&#xff0c;仅仅只是为了娱乐&#xff0c;请不要…

复制他人 CSDN 文章到自己的博客

文章目录 0.前言步骤 0.前言 在复制别人文章发布时&#xff0c;记得表明转载哦 步骤 在需要复制的csdn 文章页面&#xff0c;打开浏览器开发者工具&#xff08;F12&#xff09;Ctrl F 查找"article_content"标签头 右键“Copy”->“Copy element”新建一个 tx…

【直线 / B】

题目 代码&#xff08;巨复杂&#xff0c;跑了我十几分钟&#xff09; #include <bits/stdc.h> using namespace std; const double eps 1e-6; const int N 18e6; #define x first #define y second typedef pair<int, int> PII; int line; PII p1[N]; PII p2[N…

React开发环境搭建以及常见错误解决

‌React开发环境搭建主要包括Node.js安装、编辑器选择、创建React项目等步骤‌。 Node.js安装‌ 从Node.js官网下载并安装最新版本的Node.js&#xff0c;安装过程中npm会自动安装。安装完成后&#xff0c;通过命令行输入node -v和npm -v检查安装是否成功。 carawang%node -v…

transformer模型写诗词

加入会员社群&#xff0c;免费获取本项目数据集和代码&#xff1a;点击进入>> 1. 项目简介 该项目是基于A035-transformer模型的诗词生成系统&#xff0c;旨在通过深度学习技术实现古诗词的自动化创作。项目的背景源自当前自然语言处理领域的迅速发展&#xff0c;特别是…

C++【类和对象】(构造函数与析构函数)

文章目录 1. 类的默认成员函数2. 构造函数析构函数的特点3. 析构函数析构函数的特点 结语 1. 类的默认成员函数 默认成员对象就是我们没有显示的写&#xff0c;但是编译器会自动生成的成员函数。一个类&#xff0c;我们不写的情况下编译器会默认生成以下6个成员函数&#xff0…

解决Nodify框架因自带放大缩小、平移功能导致拖拽添加的控件无法准确在鼠标放下的位置显示控件

ViewModel中写具体关键的几段代码&#xff1a; var editor sender as NodifyEditor; Point p e.GetPosition(editor);//放大缩小比例double scale editor.ViewportZoom;//经过放大缩小、平移后获得坐标点位置p new Point(Math.Round((p.X - editor.ViewportT…

响应式布局-媒体查询父级布局容器

1.响应式布局容器 父局作为布局容器&#xff0c;配合自己元素实现变化效果&#xff0c;原理&#xff1a;在不通过屏幕下面吗&#xff0c;通过媒体查询来改变子元素的排列方式和大小&#xff0c;从而实现不同尺寸屏幕下看到不同的效果。 2.响应尺寸布局容器常见宽度划分 手机-…

【Python】工具使用

pycharm Jupyter Notebook 参考文献 详解Jupyter Notebook (qq.com) python专业集成开发环境pycharm安装使用 (qq.com)

自动化学习3:日志记录及测试报告的生成--自动化框架搭建

一.日志记录 1.配置文件pytest.ini&#xff1a;将日志写入文件方便日后查询或查看执行信息。 需要将文件处理器&#xff08;文件存放位置/时间/格式等等&#xff09;添加到配置文件中的【日志记录器】 # pytest.ini [pytest] # ---------------日志文件&#xff0c;需要配合…

并发编程。

进程 1.什么是进程&#xff1f; 进程是具有独立功能的程序关于某个数据集合上的一次运行活动&#xff0c;是系统进行资源分配和调度的 独立单位。进程是可与其他程序并发执行的程序&#xff0c;在一个数据集合上的运行过程。它是系统进行 资源分配和调度的一个独立单位。 2.进…

日丰卫浴启动国货好物节,以“焕新+公益+体验”筑国民美好生活

在当下卫浴行业面临转型升级的大背景下&#xff0c;宏观政策持续推动以旧换新和消费升级&#xff0c;为市场注入了新的活力。随着中秋国庆双节的临近&#xff0c;卫浴消费逐步进入传统旺季&#xff0c;叠加利好政策&#xff0c;市场需求进一步活跃&#xff0c;日丰卫浴借此契机…

常见统计量与其抽样分布

什么是统计量 我们首先给出统计量的定义:设 X 1 , X 2 , ⋯ , X n X_1,X_2,\cdots,X_n X1​,X2​,⋯,Xn​ 为来自于总体X的一个样本&#xff0c; g ( X 1 , X 2 , ⋯ , X n ) g(X_1,X_2,\cdots,X_n) g(X1​,X2​,⋯,Xn​) 为关于 X 1 , X 2 , ⋯ , X n X_1,X_2,\cdots,X_n X…

【2024W37】肖恩技术周刊(第 15 期):中秋节快乐

周刊内容: 对一周内阅读的资讯或技术内容精品&#xff08;个人向&#xff09;进行总结&#xff0c;分类大致包含“业界资讯”、“技术博客”、“开源项目”和“工具分享”等。为减少阅读负担提高记忆留存率&#xff0c;每类下内容数一般不超过3条。 更新时间: 星期天 历史收录:…

微服务——配置管理

1.配置管理 微服务配置管理是指对微服务架构中各个服务的配置信息进行管理、更新、查询和审计等操作&#xff0c;以确保系统的正常运行和高效管理。例如&#xff0c;网关路由或某些业务配置在配置文件中写死了&#xff0c;每次修改都要重启服务。每个微服务都有很多重复的配置&…

同等学力英语历年真题有必要做吗

同等学力申硕历年真题是考生备考期间最重要的参考资料&#xff0c;在做真题的时候对那些经常出现的词汇要进行汇总整理&#xff0c;记忆高频词汇。 当你在阅读文章的时候发现不认识的单词或者一个熟悉的单词但是放在句子当中却读不通顺的这类单词的时候&#xff0c;一定要做好标…

WinCC中VB脚本和C脚本到底怎么选?

很多人认为VB脚本比C脚本慢&#xff0c;所以在WinCC中要尽量使用C脚本&#xff0c;以便提高性能&#xff0c;事实真是这样吗&#xff1f;工控人加入PLC工业自动化精英社群 先说结论&#xff1a;并非如此。在一个复杂的应用中&#xff0c;混合使用VB脚本和C脚本&#xff0c;对提…