SparkDesk知识库 + ChuanhuChatGPT前端 = 实现轻量化知识库问答

上一篇 讯飞星火知识库文档问答Web API的使用(二)
把星火知识库搞明白了;
然后又花了时间学习了一下gradio的一些基础内容:
在Gradio实现两个下拉框进行联动案例解读:change/click/input实践(三)
在Gradio实现分栏、分页的效果(二)
Gradio的重要函数以及一些代码示例学习(一)

好了,终于可以把笔者最终的想法开始实践了:

SparkDesk知识库 + ChuanhuChatGPT前端 = 实现轻量化知识库问答
为什么有这个想法,是因为…笔者穷啊,没有GPU,搞不了Langchain-Chatchat;搞向量数据库麻烦;PDF文档分chunk也是个技术活,一个人做搞到头发花白了去
笔者设想的是,借大厂的力,随便拉个机器就可以实现大数据知识库,岂不是美哉

目前实现的效果:
在这里插入图片描述
目前需要的功能:

  • 右侧改造【知识库】栏目
    • 新增PDF【上传星火】 的功能
    • 新增根据上传文档进行【文档总结】功能
    • 新增根据输入内容进行问答
  • 【文档总结】和【文档问答】都在中间的对话框显示,且在对话的第一行显示[文档问答] [问答总结]的提示字样

当然你直接用大厂的也是可以的:

在这里插入图片描述


文章目录

  • 1 星火知识库大致页面架构
  • 2 文档问答的输出内容打在对话框中


1 星火知识库大致页面架构

详细可以参考:在Gradio实现两个下拉框进行联动案例解读:change/click/input实践(三)

笔者是设想在右侧加一个知识库上传、知识文档选择的下拉框,然后再主对话框进行对话:

在这里插入图片描述
在与ChuanhuChatGPT结合前,自己先搭了一个大致的框架:

具体效果如下:

上传模块:
在这里插入图片描述

文档总结模块:

在这里插入图片描述

问答模块:
在这里插入图片描述

具体代码我放在了github里面:sparkdesk_document_qa_test.py

因为笔者之前对Gradio一无所知,这里本篇就稍微提一些笔者在实践中的一些特别点

    # 上传星火
    def upload_button_func(index_files):
        # 输入:无输入项
        # 输出:更新【一级下拉】选项,【二级下拉】置空
        # 触发方式: click点击行为
        global valid_files_group

        for file in index_files:
            # file_path = 'aigc相关报告/AIGC+AI生成内容产业展望报告-量子位-34页.pdf'
            print(file.name)
            files = {'file': open(file.name, 'rb')}
            body = {
                        "url": "",
                        "fileName": file.name.split('/')[-1],
                        "fileType": "wiki",     # 固定值
                        "needSummary": False,
                        "stepByStep": False,
                        "callbackUrl": "your_callbackUrl",
                    }
            
            response = dus.upload_files(files,body)
            
            # 赋值
            valid_files_group[file.name.replace('\\','/').split('/')[-1]] = response.json()["data"]["fileId"]

        # for file in index_files:
        #     valid_files_group[file.name.replace('\\','/').split('/')[-1]] = 'fileid'
        return gr.Dropdown.update(choices=list(valid_files_group.keys()),value = list(valid_files_group.keys())[0]  ),\
            gr.Dropdown.update(choices=list(valid_files_group.keys()),value = list(valid_files_group.keys())[0]  )

    
    upload_button.click(upload_button_func, [index_files], 
                             [FileSelectDropdown_first,FileSelectDropdown])

以上传模块为例,主要就是定义这个【上传星火】按钮的输入、输出;
这里的输入项是拖放文件的名地址;输出是:更新+新增下面【文档总结】【文档问答】两个下拉框
在这里插入图片描述
当用户执行上传之后,或者多个文件上传后:

index_files = gr.Files(label="上传", type="file", elem_id="upload-index-file")

之前定义的index_files此时收到的是带一连串绝对路径的文件名列表,比如:

["c:/a/b/c.pdf","c:/a/b/e.pdf"]

之后输出的时候更新下拉框,就直接使用gr.Dropdown.update更新choices以及默认选项value

gr.Dropdown.update(choices=list(valid_files_group.keys()),value = list(valid_files_group.keys())[0]  )

2 文档问答的输出内容打在对话框中

在这里插入图片描述
这里有一个问题就是点击[文档总结]后,希望将输出内容显示在中间的主对话框之中,此时就需要了解gr.chatbot的一些功能。

其中ChuanhuChatGPT项目中,中间的对话是由gr.chatbot构造:

 chatbot = gr.Chatbot(
     label="Chuanhu Chat",
     elem_id="chuanhu-chatbot",
     latex_delimiters=latex_delimiters_set,
     # height=700,
     show_label=False,
     avatar_images=[config.user_avatar, config.bot_avatar],
     show_share_button=False,
 )

那么需要的功能就只有在点击【文档总结】的时候,输出在gr.chatbot中即可,那么大概可以改造:

# 文档总结
def doc_summary_button_func(FileSelectDropdown_first,chatbot):
    # 输入:无输入项
    # 输出:更新【一级下拉】选项,【二级下拉】置空
    # 触发方式: click点击行为
    
    fileid = valid_files_group[FileSelectDropdown_first]
    # print('fileid',fileid)
    response = dus.file_summary(fileid)
    summary = response.json()
    # spark_output_text = f"文件名是:{'++'.join(FileSelectDropdown)},输入是:{SparkInputText}"
    print('summary',summary)
    if (summary['code'] == 0)&(summary['data']==summary['data']):      
        return chatbot+[['[文档总结]\n'+ FileSelectDropdown_first,summary['data']['summary']]]
    else:
        return chatbot+[['[文档总结]\n'+ FileSelectDropdown_first,f'未调用成功,报错输出为:{str(summary)}']]
    
    
doc_summary_btn.click(doc_summary_button_func, [FileSelectDropdown_first,chatbot], 
                         [chatbot])

其实就是把【1 星火知识库大致页面架构】里面的return到gr.chatbot
不过要传给chatbot,需要的是一个列表,大致为:

[("用户提问1","回答1"),("用户提问2","回答2")]

关于gr.chatbot可以在 Gradio的重要函数以及一些代码示例学习(一) 细究

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

快速了解软件工程学概述(5种软件过程模型)

目录 1 、什么是软件?特点有哪些 ? 2 、 软件危机 定义: 软件危机产生的原因 消除软件危机的方法 3 、软件工程 1.软件工程的介绍 (1)概念 (2)本质特征 (3)软件工程方法学(方…

优思学院|如何在企业中实施降本增效策略,实现财务突破

在当今竞争激烈的商业环境中,企业降低成本并提高效益变得至关重要。本文将深入探讨如何降本增效,以及实施这些策略的方法。 提到降本增效或提升生产效率,第一个被提出来检讨的一定是直接部门。但是如果无视于日渐臃肿的间接部门,…

全程云OA SQL注入漏洞复现

0x01 产品简介 全程云OA为企业提供日常办公管理、公文管理、工作请示、汇报、档案、知识体系、预算控制等26个功能,超过100多个子模块。为企业内部提供高效、畅通的信息渠道,同时也能大力推动公司信息系统发展,提高企业的办公自动化程度和综合…

SAS Planet软件介绍与使用教程

软件情况 SAS Planet是一位俄罗斯爱好者创建的的开源应用,该应用可以浏览与下载主流网络地图,包括Google地图、Google地球、Bing地图、Esri 地图、Yandex地图等。 该软件是基于Pascal开发的应用,目前已在github上开源,并使用了GP…

哈希表、哈希冲突解决办法

文章目录 一、什么是哈希表?二、什么是哈希冲突?怎样解决?三、哈希表的大小为什么是质数?四、链表法五、开放地址法线性探测法平方探测法双哈希(Double Hashing) 六、哈希表满了怎么办?七、完美哈希八、一些使用哈希解…

Java抽象类和接口(2)

🐵本篇文章继续对接口相关知识进行讲解 一、排序 1.1 给一个对象数组排序: class Student {public String name;public int age;public Student(String name, int age) {this.name name;this.age age;}public String toString() {return "name:…

爆肝整理! Python 网络爬虫 + 数据分析 + 机器学习教程来了

前段时间,有小伙伴多次在后台留言询问 Python 爬虫教程的问题。经过这两个多月以来的收集与整理,汇集了多个高校以及公开课视频教程,包括 python 爬虫的入门、进阶与实践,共 9G 左右。爬虫作为机器学习语料库构建的主要方式&#…

Python中的sys模块详解

1. 简介 sys模块是Python标准库中的一个内置模块,提供了与Python解释器和运行环境相关的功能。它包含了一些与系统操作和交互相关的函数和变量,可以用于获取命令行参数、控制程序的执行、管理模块和包、处理异常等。 2. 常用函数和变量 2.1 命令行参数…

虹科Pico汽车示波器 | 汽车免拆检修 | 2016款东风悦达起亚K5车发动机怠速抖动严重、加速无力

一、故障现象 一辆2016款东风悦达起亚K5车,搭载G4FJ发动机,累计行驶里程约为8.2万km。该车发动机怠速抖动严重、加速无力,同时发动机故障灯异常点亮,为此在其他维修厂更换了所有点火线圈和火花塞,故障依旧,…

自驾游汽车托运是交智商税吗?

自驾游汽车托运是交智商税吗? 亲爱的小伙伴们 你们有没有遇到过这样的困扰: 自驾游时,车辆的运输问题让你头疼不已? 是选择自己驾驶还是托运呢? 今天,我就来给大家种草一下汽车托运的好处, 让你的自驾游之旅更加轻松愉快! 1️.…

idea spring initializr创建项目报错

闲来无事就想搞个项目练练手,没想到直接给我卡在项目创建上了,一个个问题最终迎刃而解。 1.上来就给我报了个maven的错 未解析的插件: ‘org.apache.maven.plugins:maven-resources-plugin:3.3.1’ 不慌,应该是maven的路径有问题&#xff0c…

本地Nginx服务搭建结合内网穿透实现多个Windows Web站点公网访问

文章目录 1. 下载windows版Nginx2. 配置Nginx3. 测试局域网访问4. cpolar内网穿透5. 测试公网访问6. 配置固定二级子域名7. 测试访问公网固定二级子域名 1. 下载windows版Nginx 进入官方网站(http://nginx.org/en/download.html)下载windows版的nginx 下载好后解压进入nginx目…

Flask WTForms 表单插件的使用

在Web应用中,表单处理是一个基本而常见的任务。Python的WTForms库通过提供表单的结构、验证和渲染等功能,简化了表单的处理流程。与此同时,Flask的扩展Flask-WTF更进一步地整合了WTForms,为开发者提供了更便捷、灵活的表单处理方式…

Linux(9):正规表示法与文件格式化处理

简单的说,正规表示法就是处理字符串的方法,他是以行为单位来进行字符串的处理行为,正规表示法透过一些特殊符号的辅助,可以让使用者轻易的达到【搜寻/删除/取代】某特定字符串的处理程序。 正规表示法基本上是一种【表示法】&…

【运营思维】美团面试题:如何把梳子卖给寺庙和尚?

Hello 小米的小伙伴们~ 欢迎来到小米的微信公众号!今天小米要和大家分享一道美团运营面试题,题目可真是独特——“如何把梳子卖给寺庙和尚?”想必大家一定兴奋不已吧! 首先,让我们理清思路,挑战这个看似不…

[学习笔记]IK分词器的学习

IK分词器有几种模式 # 测试分词器 POST /_analyze {"text":"黑马程序员学习java太棒了","analyzer": "standard" }# 测试分词器 POST /_analyze {"text":"黑马程序员学习java太棒了","analyzer": &quo…

最新AI创作系统ChatGPT系统运营源码+DALL-E3文生图+支持OpenAI-GPT全模型+国内AI全模型

一、AI创作系统 SparkAi创作系统是基于ChatGPT进行开发的Ai智能问答系统和Midjourney绘画系统,支持OpenAI-GPT全模型国内AI全模型。本期针对源码系统整体测试下来非常完美,可以说SparkAi是目前国内一款的ChatGPT对接OpenAI软件系统。那么如何搭建部署AI…

1评论收藏分享抖店不要再无脑铺货了!这个方法学会,7天流量就起飞~

这2023年都马上过完了,你还在上一堆链接到抖店吗?要知道这样无脑铺货是拿不到大流量的。 哪今天我给大家分享一个,比较适合新手操作,也能快速起流量出单的方法。 。首先你的店铺拿不到流量,一定要先查清楚你为什么拿…

海外Leads Generation产业:中国出海群体的行业大机会

Leads Generation(简称LeadsGen)指的是集中精力吸引和开发潜在客户的营销策略。通过引导式的营销策略,企业分发内容吸引潜在客户,引导客户留下电话/邮件/姓名等信息。基于这些信息,企业可建立潜在客户数据库&#xff0…

P8A002-CIA安全模型-配置Linux描述网络安全CIA模型之可用性案例

【预备知识】 可用性(Availability) 数据可用性是一种以使用者为中心的设计概念,易用性设计的重点在于让产品的设计能够符合使用者的习惯与需求。以互联网网站的设计为例,希望让使用者在浏览的过程中不会产生压力或感到挫折,并能让使用者在使用网站功能时,能用最少的努力…