Danswer 快速指南:不到15分钟打造您的企业级开源知识问答系统

news2025/1/16 14:51:32

一、写在前面

至于为什么需要做企业知识库,知识问答检索系统,以及现有GPT模型在企业应用中存在哪些劣势,今天在这里就不再赘述了,前面介绍其他构建知识库案例的文章中基本上都有讲过,如果您有兴趣可以去翻翻历史文章来了解。

今天就直接进入主题,介绍一款还不错的开源项目 Danswer,相较于其他开源的产品来说,从 Danswer 的设计上来来看确实存在一定的优势和可以参考的地方,其中最值得一提的还属 Connectors 连接器。目前官方已经提供了 12 中内置的连接器,连接器可以很方便的将任何你需要加入知识检索和问答的文档资料添加到向量数据库中进行索引。

二、Danswer 基本介绍

Danswer 允许您针对内部文档提出自然语言问题,并获得由源材料中的引用和参考文献支持的可靠答案,以便您始终可以信任您得到的结果。您可以连接到许多常用工具,例如 Slack、GitHub、Confluence 等。

https://sundun-rdcenter.feishu.cn/space/api/box/stream/download/asynccode/?code=NWIyMDlhZjVjNTI0NzJlNGYxMTFjZDUzYmUyMGZiZDRfcnZ4c3RCM0hVUWVxSXpNSmdOVVhkdXZQWlhpWFdVNWtfVG9rZW46SGJyc2I5ckJpb09Lc1p4cGpRMWNHZFNwbmVoXzE2OTIzNDgzOTg6MTY5MjM1MTk5OF9WNA

2.1、Danswer 有哪些优势 ?

  • 它是完全开源的(MIT 许可证)并且免费使用,完全可以本地部署,数据隐私安全。

  • 允许您即插即用不同的 LLM 模型,例如 GPT、HuggingFace、GPT4All、Llama cpp,甚至自定义自托管模型

  • 具有开箱即用的关键功能,如文档访问控制、前端 UI、管理仪表板、轮询文档更新和灵活的部署选项。

  • Slack、GitHub、GoogleDrive 等12种其他工具的连接器的不错列表。

  • 直接提问,无需打开任何文档即可解答您的问题,由GPT-4(或您选择的自托管模型)提供支持的答案,每个答案均附有引文和参考资料,因此您始终可以相信您得到的答复。

  • Danswer 使用最新的大语言模型来查找最相关的文档。

  • 自定义深度学习模型根据用户意图优化搜索。智能文本分块甚至可以防止细则丢失。

默认设置下,Danswer 使用 OpenAI 的 GPT 系列模型,你也可以根据需要在Danswer中使用开源模型,比如最近很火的Llama 2模型。

三、Danswer 实现原理

Danswer 是开源 NLP 和生成人工智能的最新技术的结合,Danswer 在执行用户查询请求到反馈结果的流程和原理如下:

1)、当用户提交查询时,首先通过用户意图模型进行处理,该模型确定是使用关键字搜索还是语义搜索。该模型是使用DistilBert检查点微调而成,使用由GPT提示生成的数据集,并手动过滤掉不良示例。

2)、语义搜索流程分为两个步骤:检索和重新排序。

  • 检索是通过使用双编码器模型对文本进行嵌入来完成的。向量存储在Qdrant向量数据库中,然后在查询时通过以相同方式投影用户查询来获取。在进行检索时会执行一些操作包括:上下文感知分块文档,包括跨块的重叠,并在不同尺度上多次嵌入块。一次使用512个标记进行更大的上下文,然后使用128个标记进行更精细的细节。

  • 对于重新排序,使用了一组不同的模型作为集合。通过组合在不同数据集上表现更好的多个模型,可以获得最佳的重新排序结果,甚至可以使用较小的模型,从而使步骤整体更快。

3)、最后,最相关的文档部分被传递给生成模型,该模型被提示也提供其答案的引用。然后将引用与源文档匹配,并将其与答案一起呈现给用户。

四、Danswer 快速部署

Danswer 提供了 Docker 容器,可以轻松部署在任何云上,无论是在单个实例上还是通过 Kubernetes。在本演示中,我们将使用 Docker Compose 在本地运行 Danswer。

  • 首先拉取代码:
git clone https://github.com/danswer-ai/danswer.git
  • 接下来导航到部署目录:
cd danswer/deployment/docker_compose
  • [可选] 默认的 Danswer 模型是 GPT-3.5-Turbo,因此如果您想使用它,则无需进行任何更改。

如果想使用开源的如Llama 2 模型API,可以通过创建 .env 文件来覆盖一些默认值,将 Danswer 配置为使用新的 Llama 2 端点:

INTERNAL_MODEL_VERSION=request-completion  # 将Danswer设置为使用requests而不是客户端库与LLM进行接口交互
GEN_AI_HOST_TYPE=colab-demo  # 将请求的头/主体设置为模型端点所期望的格式
GEN_AI_ENDPOINT=<REPLACE-WITH-YOUR-NGROK-PUBLIC-URL>/generate  # 设置模型端点URL
  • 启动Danswer(使用docker版本≥= 1.13.0):
docker compose -f docker-compose.dev.yml -p danswer-stack up -d --pull always --force-recreate
  • 完成后,Danswer 将在http://localhost:3000上可用访问。

有关 Danswer 的更多文档,请访问Quickstart - Danswer Documentation

五、Danswer 应用实践

5.1、添加文档到 Danswer

Danswer 提供了12种 Connectors 连接器用于将 Danswer 连接到你的数据源,以便答案基于你组织的知识来回答,如果目前内置的所有连接器不满足你的要求,也可以给官方提需求,或者自己基于开源代码来实现。将不同的数据源连接到 Danswer 是通过管理页面完成的,在右上角点击[Admin Panel]菜单即可进行设置。

https://sundun-rdcenter.feishu.cn/space/api/box/stream/download/asynccode/?code=OTVhNDQzMTQyNDYwMzhlNDkyMjQwYmUzY2Y0NTNiYzRfYlc0cXRsWkQ4UWJTZGRWYVpNZ1JOT2dSb2kyQVlPRWVfVG9rZW46V04zdmJka0Y4b0FlcnJ4RjRYSWNBc3Z3bnpoXzE2OTIzNDgzOTg6MTY5MjM1MTk5OF9WNA

关于每个 Connectors 连接器具体的配置使用可以在官网文档中找到详细的介绍。

这里我们添加一个Web连接器数据源来演示,只需要将一个公开可访问的网址URL加入到Web连接器即可,Danswer会爬去该文档的内容来存储到向量数据库中。

https://sundun-rdcenter.feishu.cn/space/api/box/stream/download/asynccode/?code=ZWQxZWZjNjIwZWM5YTU2ZWZlYzczZmQwMGVmNTNjNTNfNTFoQWJabFk0dkV4M3pWMGVlQ0hCT0ZMbDNScm9VRklfVG9rZW46RkRuc2JlOW0xb2RjU3p4TVRtWmM4bDI2bkVnXzE2OTIzNDgzOTg6MTY5MjM1MTk5OF9WNA

5.2、从 Danswer 获取答案

添加完数据源之后,我们就可以单击 Danswer 图标返回主页,现在就可以直接输入你文档相关的问题来索引了。

https://sundun-rdcenter.feishu.cn/space/api/box/stream/download/asynccode/?code=NzIzY2E0OTBkOTFjZDM1YWFhM2Q2Y2MwY2E3MGM3YzVfcHZzamRlUXZQWkg1MGlGS0FwdzNKUEFaa2VGNE9GYktfVG9rZW46RWNSU2JCTWdIb1FKWUl4SmhiMGNNQTZVbnhIXzE2OTIzNDgzOTg6MTY5MjM1MTk5OF9WNA

六、结束语

Danswer 是一款优秀的开源企业知识问答系统,通过使用连接器,可以方便地将各种文档资料添加到向量数据库中进行索引。它允许用户针对内部文档提出自然语言问题,并获得可靠、有参考价值的答案。Danswer 的优势包括完全开源、免费使用、数据隐私安全以及支持即插即用不同的 LLM 模型。它还可以与许多常用工具(如 Slack、GitHub、Confluence 等)无缝连接,为企业提供高效且可靠的知识检索和问答解决方案。

七、References

  • Danswer GitHub:

  • https://github.com/danswer-ai/danswer

  • Danswer Docs:

  • Overview - Danswer Documentation

  • Dnaswer Connectors:

  • https://github.com/danswer-ai/danswer/blob/main/backend/danswer/connectors/README.md

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

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

相关文章

小样本图像分类研究综述

https://kns.cnki.net/kcms2/article/abstract?v3uoqIhG8C44YLTlOAiTRKibYlV5Vjs7ioT0BO4yQ4m_mOgeS2ml3UDKtyAQtTA0dGC-TDvW_fPi0YZxfWg8dHOnpSvOL7pVA&uniplatformNZKPT 摘 要&#xff1a; 近年来&#xff0c;借助大规模数据集和庞大的计算资源&#xff0c;以深度学习为…

UE4/5Niagara粒子特效之Niagara_Particles官方案例:1.1->1.4

目录 1.1-Simple Sprite Emitter ​编辑 发射器更新 粒子生成 粒子更新 1.2-Simple Sprite Emitter 发射器更新 粒子生成 粒子更新 渲染 1.3-Simple GPU Emitter 属性 发射器更新 粒子生成 粒子更新 1.4-Sprite Facing 发射器更新 粒子生成 粒子更新 通过对官方…

Web菜鸟入门教程 - Radis实现高性能数据库

Redis是用C语言开发的一个高性能键值对数据库&#xff0c;可用于数据缓存&#xff0c;主要用于处理大量数据的高访问负载。 也就是说&#xff0c;如果你对性能要求不高&#xff0c;不用Radis也是可以的。不过作为最自己写的程序有高要求的程序员&#xff0c;自然是要学一下的&a…

博客系统之单元测试

对博客系统进行单元测试 1、测试查找已存在的用户 测试名称 selectByUsernameTest01 测试源码 //查找用户&#xff0c;存在 Test public void selectByUsernameTest01 () { UserDao userDao new UserDao(); String ret1 userDao.selectByUsername("张三").toStr…

【C++数据结构】智能指针的构建

文章目录 一、构建智能指针的原因二、智能指针分析三、实现智能指针数据结构使用的编译器创建Qt控制台项目 智能指针的构建新文件结构创建指针成员实现析构函数构造函数操作符重载成员函数的实现拷贝构造函数和""重载操作符 四、代码一览总结 一、构建智能指针的原因…

通过 kk 创建 k8s 集群和 kubesphere

官方文档&#xff1a;多节点安装 确保从正确的区域下载 KubeKey export KKZONEcn下载 KubeKey curl -sfL https://get-kk.kubesphere.io | VERSIONv3.0.7 sh -为 kk 添加可执行权限&#xff1a; chmod x kk创建 config 文件 KubeSphere 版本&#xff1a;v3.3 支持的 Kuber…

中睿天下受邀参加第六届电力信息通信新技术大会并发表主题演讲

2023年8月9-11日&#xff0c;中国电力企业联合会科技开发服务中心以“加快数字化转型助力新型电力系统建设”为主题&#xff0c;在杭州举办2023年&#xff08;第六届&#xff09;电力信息通信新技术大会暨数字化发展论坛。 大会旨在加快推进“双碳”目标下的新型能源体系和新型…

【电商领域】Axure在线购物商城小程序原型图,品牌自营垂直电商APP原型

作品概况 页面数量&#xff1a;共 60 页 兼容软件&#xff1a;Axure RP 9/10&#xff0c;不支持低版本 应用领域&#xff1a;网上商城、品牌自营商城、商城模块插件 作品申明&#xff1a;页面内容仅用于功能演示&#xff0c;无实际功能 作品特色 本作品为品牌自营网上商城…

前端技术Vue学习笔记--004

Vue学习 文章目录 Vue学习一、scoped解决样式冲突二、data必须是一个函数三、组件通信3.1、组件关系3.2、组件通信解决方案3.3、父传子通信3.4、子传父通信3.5、组件通信案例 四、prop语法4.1、prop语法基础语法4.2、 <font color blue>prop校验4.3、prop&data、单向…

流程图用什么软件做?这几款常用软件了解一下

流程图用什么软件做&#xff1f;流程图是在工作中非常常见的一种图形&#xff0c;它可以清晰地展示一个流程的步骤和流向。在工作中&#xff0c;我们经常需要制作各种流程图&#xff0c;如项目流程图、销售流程图等&#xff0c;以便更好地组织和管理工作。那么&#xff0c;应该…

boot-admin整合flowable官方editor-app源码进行BPMN2-0建模

boot-admin整合flowable官方editor-app源码进行BPMN2-0建模&#xff08;续&#xff09;书接上回 项目源码仓库github项目源码仓库gitee boot-admin 是一款采用前后端分离模式、基于SpringCloud微服务架构的SaaS后台管理框架。系统内置基础管理、权限管理、运行管理、定义管理…

Spark第三课

1.分区规则 1.分区规则 shuffle 1.打乱顺序 2.重新组合 1.分区的规则 默认与MapReduce的规则一致,都是按照哈希值取余进行分配. 一个分区可以多个组,一个组的数据必须一个分区 2. 分组的分区导致数据倾斜怎么解决? 扩容 让分区变多修改分区规则 3.HashMap扩容为什么必须…

【源码篇】ThreadLocal源码解析(主打的就是通俗易懂,言简意赅)

文章目录 ThreadLocal学习笔记前言1、TheadLocal基本介绍2、ThreadLocal基本使用3、体验ThreadLocal的优点3.1 ThreadLocal与synchronized的比较3.2、ThreadLoca的应用场景 4、ThreadLocal的内部原理4.1 ThreadLocal内部结构4.2 ThreadLocal常用方法分析4.2.1 set原理分析4.2.2…

10.4K Star!程序员为程序员针对性优化的开源免费笔记

平时我一直用Notion来记录内容为主&#xff0c;但也一直关注着其他开源产品。上周正好看到一款非常受欢迎的开源免费笔记&#xff0c;今天就推荐给大家&#xff1a;VNote。 VNote一个由程序员为程序员打造的开源笔记应用&#xff0c;基于Qt开发&#xff0c;专注于使用 Markdown…

视觉三维重建第一课

0. 简介 对于视觉而言&#xff0c;想要获得比较精细的地图信息&#xff0c;这离不开地图的三维重建。三维重建&#xff08;3D Reconstruction&#xff09;的定义就是&#xff0c;从一堆二维图像中恢复物体的三维结构&#xff0c;并进行渲染&#xff0c;最终在计算机中进行客观…

【Math】特征值和奇异值辨析

奇异值和特征值都描述了一个矩阵的一些特性&#xff0c;但很多情况下&#xff0c;对于两者之间的区别和联系都不太清楚。 本文就这两者进行解析&#xff0c;并对奇异值的一些简单应用进行探索。 奇异值与特征值的定义 奇异值与特征值都被用于描述矩阵作用于某些向量的标量&am…

智能排水解决方案,设备实时监控+预测分析,真正实现“无人值守”!

什么是矿山排水 随着煤炭开采深度不断增加&#xff0c;地质条件也愈加复杂&#xff0c;井下综采作业会面临越来越高的渗水风险。为确保井下综采作业安全&#xff0c;需要设置大量排水系统&#xff0c;在矿山建设和生产过程中排除进入矿山的地下水和地表水。矿井排水系统是保障…

【C++】C++ 语言对 C 语言的加强 ① ( 实用性增强 - 变量任意位置定义 | register 关键字增强 - 自动进行寄存器优化 )

文章目录 一、实用性增强 - 变量任意位置定义二、register 关键字增强 - 自动进行寄存器优化 一、实用性增强 - 变量任意位置定义 C 语言定义变量位置 : 在 C 语言中 , 函数作用域中使用到的变量 , 必须在 作用域 开始的位置定义 , 一旦开始编写代码逻辑后 , 在逻辑代码行之间 …

【100天精通python】Day39:GUI界面编程_PyQt 从入门到实战(下)_图形绘制和动画效果,数据可视化,刷新交互

目录 专栏导读 6 图形绘制与动画效果 6.1 绘制基本图形、文本和图片 6.2 实现动画效果和过渡效果 7 数据可视化 7.1 使用 Matplotlib绘制图表 7.2 使用PyQtGraph绘制图表 7.3 数据的实时刷新和交互操作 7.3.1 数据的实时刷新 7.3.2 交互操作 7.4 自定义数据可视化…

vue实现穿梭框,ctrl多选,shift多选

效果图 代码 <template><div class"container"><!--左侧--><div><div class"title">{{ titles[0] }}</div><div class"layerContainer"><div v-for"item in leftLayerArray":key"…