综合介绍
Danswer是一个开源的企业文档检索AI助手,旨在通过智能聊天界面和统一搜索功能,连接到团队的文档、应用程序和人员,提供统一的搜索和自然语言查询答案。确保用户数据和聊天记录完全由用户控制。其模块化设计和易于扩展的特性,使其成为团队知识管理和协作的理想工具。
功能列表
- 聊天界面:与文档进行对话,选择特定文档进行互动。
- 自定义AI助手:创建不同提示和知识库的AI助手。
- 文档搜索:提供自然语言查询的文档搜索和AI答案。
- 多种连接器:支持与Google Drive、Confluence、Slack等常见工作工具的连接。
- Slack集成:直接在Slack中获取答案和搜索结果。
- 用户认证:提供文档级别的访问管理。
- 角色管理:支持管理员和普通用户的角色管理。
- 聊天记录持久化:保存聊天记录,便于后续查询。
- UI配置:提供配置AI助手和提示的用户界面。
- 多模态支持:支持与图像、视频等进行对话(计划中)。
- 工具调用和代理配置:提供工具调用和代理配置选项(计划中)。
使用帮助
安装流程
- 本地部署:
- 下载并安装Docker。
- 克隆Danswer的GitHub仓库。
- 在终端中导航到项目目录,运行
docker-compose up
命令。 - 打开浏览器,访问
http://localhost:8000
,开始使用Danswer。
- 云端部署:
- 在虚拟机上安装Docker。
- 克隆Danswer的GitHub仓库。
- 在终端中导航到项目目录,运行
docker-compose up
命令。 - 配置域名和SSL证书,确保安全访问。
- Kubernetes部署:
- 安装并配置Kubernetes集群。
- 克隆Danswer的GitHub仓库。
- 在项目目录中找到Kubernetes部署文件,运行相应的kubectl命令进行部署。
使用指南
- 聊天界面:
- 打开Danswer的Web应用,登录后进入聊天界面。
- 选择要对话的文档,输入自然语言问题,Danswer将提供相关答案。
- 自定义AI助手:
- 在管理员界面中,创建新的AI助手。
- 配置助手的提示和知识库,保存设置。
- 在聊天界面中选择不同的AI助手进行对话。
- 文档搜索:
- 在搜索栏中输入自然语言查询,Danswer将返回相关文档和AI生成的答案。
- 支持对搜索结果进行筛选和排序,快速找到所需信息。
- Slack集成:
- 在Slack中安装Danswer应用。
- 配置Danswer与Slack的连接,授权访问相关频道。
- 在Slack中直接输入查询,Danswer将返回搜索结果和答案。
- 用户认证和角色管理:
- 在管理员界面中,添加和管理用户。
- 配置用户的访问权限和角色,确保数据安全。
- 聊天记录持久化:
- 所有聊天记录将自动保存,用户可以随时查看历史记录。
- 支持对聊天记录进行搜索和筛选,方便查找过去的对话。
特色功能
- 高效搜索:结合BM-25和前缀感知嵌入模型,提供最佳的混合搜索体验。
- 自定义模型:支持自定义深度学习模型,并从用户反馈中学习。
- 多种部署方式:支持本地、云端和Kubernetes部署,灵活适应不同规模的团队需求。
- 多模态支持:未来版本将支持与图像、视频等进行对话,提升用户体验。
- 工具调用和代理配置:提供灵活的工具调用和代理配置选项,满足不同团队的需求。
- 组织理解和专家建议:Danswer将能够识别团队中的专家,并提供相关建议,提升团队协作效率。
系统概述
不同系统组件和流程的解释
本页讨论了 Danswer 从高层次的工作原理。目的是让我们的设计更加透明。这样,您在使用 Danswer 时可以放心。
或者,如果您想定制系统或成为开源贡献者,这是一个很好的起点。
系统架构
无论在单个实例还是容器编排平台上部署 Danswer,数据流都是相同的。文档通过连接器被拉取并处理,然后持久化存储在运行在系统容器中的 Vespa/Postgres 中。
唯一一次敏感数据离开您的 Danswer 设置是在它调用LLM以生成答案时。与LLM的通讯是加密的。LLM API 上的数据持久性取决于您所使用的LLM托管服务的条款。
我们同时注意到 Danswer 有一些非常有限且匿名的遥测数据,这有助于我们通过识别瓶颈和不可靠的数据连接器来改进系统。您可以通过将 DISABLE_TELEMETRY 环境变量设置为 True 来关闭遥测功能。
嵌入流
每份文档都被分割成更小的部分,称为“块”。
通过将块传递给LLM而不是完整文档,我们能够通过仅传递文档的相关部分来降低模型中的噪声。此外,这显著提高了成本效益,因为LLM服务通常按令牌收费。最后,通过嵌入块而不是完整文档,我们能够保留更多细节,因为每个向量嵌入只能编码有限的信息。
添加微型块将这一概念进一步深化。通过嵌入不同大小,Danswer 可以检索高级别上下文和细节。微型块也可以通过环境变量开启/关闭,因为每个块生成多个向量可能会在硬件性能较低的情况下减慢文档索引速度。
在选择我们的嵌入模型时,我们使用最新的最先进的双编码器,它足够小,可以在 CPU 上运行,同时保持亚秒级的文档检索时间。
查询流程
这个流程通常会被更新,因为我们不断努力推动检索管道的能力,利用来自研究和开源社区的最新进展。同时请注意,这个流程的许多参数,如要检索多少文档、要重新排序多少个、使用哪些模型、哪些块传递给LLM等,都是可配置的。