ChatGPT的成功迅速带火了一类产品,与文档对话。这类软件目前比较火爆的有ChatPDF,ChatDOC,chatpaper等等。
ChatPDF是一个在不到一周时间里,就让10万份PDF学会了聊天的应用!无需注册,登录,通过上传PDF文件到ChatPDF,就能实现和PDF跨语言对话,并根据PDF内容进行回答。如果我们的想象力再丰富一些,比如:
PDF是一本历史书,那么我们可以直接和历史对话。
PDF是法律法规,可以提问政策相关问题,使其产品符合法律法规要求(即合规性)。
PDF是一套试卷,那么可以直接问答案。(逻辑推理类型效果不行)
ChatDOC 是一种工具,旨在帮助用户通过上传文件并与 AI 聊天机器人进行自然语言对话来获取知识。它提供了多种功能,例如摘要、提取、数据分析、搜索和定位、头脑风暴、考试问题准备、提供建议等。ChatDOC 还提供了有关如何充分利用其服务的指南,例如使用建议的查询、执行多文档查询、启动线程和引用引用。该平台通过提供参考来源和提供调整模式来确保 AI 解释值得信赖,聊天机器人可以在其中回答文档之外的问题。用户可以通过编写更好的提示来改善聊天机器人的响应,要求它用更简单的术语解释复杂的概念,并指示它分析数据。研究人员、学生、专业人士和出版商也可以使用 ChatDOC 来加快他们的工作速度并更有效地定位信息。
"与文档对话"是一款非常实用的工具,它可以帮助用户在不需要任何额外的软件或技术知识的情况下,将普通的文档文件转换为具有实时聊天功能的文档文件。这类工具的出现,使得团队内的协作变得更加便捷和高效。 随着远程工作的普及,团队内的协作变得越来越重要。而"与文档对话"的工具出现,正是满足了这一需求。通过它,团队成员可以在阅读文档时,直接在文件中进行聊天交流,从而避免了邮件或即时通讯软件的不便。这种实时的交流方式,可以极大地提高工作效率,减少沟通成本。 随着远程工作的普及和全球化趋势的增强,"与文档对话"市场前景非常广阔。全球有数亿人使用PDF文件进行工作或学习,而这些人都可能成为"与文档对话"工具的用户。同时,随着越来越多的企业和组织意识到"与文档对话"的优势,他们也会加大对这一工具的投入和使用。这将进一步推动"与文档对话"市场的发展。典型的应用场景如下:
1.学术研究与文献综述:对于学术界的研究人员和学生而言,"与文档对话"是一款强大的工具。它可以帮助他们快速浏览大量的学术论文和研究成果,提取关键信息和观点,加快文献综述的过程。同时,"与文档对话"还能够自动生成文献摘要和参考文献列表,帮助用户快速整理和引用相关文献。
2.商业与法律文件分析:"与文档对话"对商业和法律领域的专业人士来说是一项强大的工具。它可以快速解析和分析商业合同、法律文件和报告,提取重要条款、法律条文和关键信息。这对于律师、企业法务团队和商业顾问来说,可以节省大量时间和努力,并减少信息漏洞和风险。
3.教育与学习辅助:"与文档对话"可以成为学生的学习伙伴。学生可以利用它来更高效地阅读教科书、参考书和学术文章。"与文档对话"的摘要生成功能可以帮助学生迅速了解文档的核心内容,提供重要概念和知识点,帮助他们更好地掌握学习材料。
4.企业知识管理:对于企业来说,"与文档对话"可以用于知识管理和信息检索。企业通常有大量的内部文档和报告,而"与文档对话"可以帮助企业快速索引和搜索这些文档,提取有价值的信息,促进知识共享和团队协作。
5. 新闻与媒体分析:媒体和新闻机构可以利用"与文档对话"来分析和摘要大量的新闻文章和报道。它可以帮助记者快速获取新闻事件的关键信息和主要观点,为新闻报道和分析提供有力支持。
本质上这类工具是在LLM等模型的API接口上进行二次开发,例如使用OpenAI的接口进行二次开发,其中最主要的部分是涉及到向量数据库,大体的步骤如下(用OpenAI举例):
文章切片到段落
通过 OpenAI 的 embedding 接口将每个段落转换为 embedding 并存入到向量数据库中
将提问的问题转换为 embedding
把问题的 embedding 比较所有段落 embedding 得到近似程度并排序
把和提问(语义)最接近的一个或几个段落作为上下文,通过 OpenAI 的对话接口得到最终的答案
LangChain是一个强大的框架,旨在帮助开发人员使用语言模型构建端到端的应用程序。它提供了一套工具、组件和接口,可简化创建由大型语言模型 (LLM) 和聊天模型提供支持的应用程序的过程。LangChain 可以轻松管理与语言模型的交互,将多个组件链接在一起,并集成额外的资源,例如 API 和数据库。
以下用LangChain的图来解释文档切片及向量化过程:
如上图所示,LangChain可以调用各种文档加载工具进行文档加载(例如pdf,doc,txt,html,md等等)
加载完对应文档后,就需要对文件进行切片,因为目前所有的大语言模型对token长度都有限制。
切完片后,需要对内容进行向量化,例如利用OpenAI的embedding模型进行向量化。向量化的好处是可以将复杂的数据结构转化为简单的数学对象,从而方便进行计算和分析。
向量化完毕后把结果存入到向量数据库或者index文件中。
当需要进行文档对话时,就可以把问题和向量结果进行比对,也就是上图的"Retrieve"步骤。
以下用网络上的一张图来解释文档对话的过程:
如上图所示,当用户提问时,首先是把问题进行向量化,也就是上图的"question_embedding"
拿到向量化的提问后,需要去与向量库中的各个分片的向量进行比对,有很多种数学的比对方法,后续文章接着探讨。
比对完后,拿到相似度最高的n个切片,一般取3或5个。
然后把对应的切片内容以及问题,按照组织好的prompt调用LLM模型的API得到答案。上图示例中用的是ChatGPT大语言模型。
从文档处理角度来看,实现流程如下:
https://github.com/chatchat-space/langchain-ChatGLM
当前流行的软件架构是B/S方式,所谓B就是指浏览器,又称瘦客户端,用户仅仅只需要有一个浏览器就可以使用系统,而不需要安装其他的软件。总而言之,B/S架构好处如下:
跨平台:B/S架构基于Web技术开发,所以可以跨越不同的操作系统和浏览器,在任何地方通过网络就可以使用。
维护简单:因为所有的应用都在服务器上,所以维护升级比较简单,只需要在服务器端更新就行了,不需要在每个客户端上都进行升级和安装。
灵活性强:B/S架构的应用是通过Web浏览器访问的,因此可以随时随地连接到互联网,提供更大的灵活性和可扩展性。
安全性高:B/S架构中的应用程序都是运行在服务器上,客户端无法修改、破解或者盗取数据;同时,也容易实现权限管理和控制,保证数据的安全性。
降低成本:B/S架构中客户端的硬件配置要求不高,只需要一个浏览器就可以访问,这大大降低了客户端的硬件成本。
根据目前软件开发行业的技术成熟度及流行度,我司企起期也采用B/S架构进行系统构建,使用前后端分离技术,具体系统架构分析如下:
前端界面层:前端界面层通过网页,提供给用户直观的、易于操作的界面。此层包括用户登录、数据输入、查询、显示等功能,负责与用户进行交互。
应用逻辑层:应用逻辑层是处理业务逻辑的核心层,主要负责对用户输入数据进行验证和处理,生成报表和统计数据,并将结果返回给前端界面层。
数据访问层:数据访问层是连接数据库的中间层,负责将应用逻辑层的请求翻译成数据库语言,访问数据库,进行数据的读取、更新、删除等操作。
数据库层:通常采用关系型数据库,如MySQL、Oracle等。
服务层:服务层是一些公共的工具类,为其他层提供支持,例如安全认证、缓存管理、日志记录等。
总体来说,aiWithDoc的系统架构设计应该注重可扩展性和稳定性,同时保证系统的安全性和易用性。对于每一层的设计需根据实际情况进行调整和优化,例如前端界面层需要注重界面美观和易用性,应用逻辑层需要注重业务逻辑的处理和数据安全性,数据访问层需要注重数据库的读写性能和可靠性等等。
企起期通过多年的软件开发,目前采用非常流行的前后端技术进行开发,后端框架用SpringBoot,中间层采用Pyhton FastAPI进行开发,前端框架用VUE,前端UI采用ElementUI。对应的优势如下:
Spring Boot 是一种基于 Spring 框架的快速开发应用程序的工具,作为后端开发有以下优势:
快速构建:Spring Boot 提供了许多自动配置和默认值,可以快速地构建出一个完整的Web应用程序并运行,不需要手动配置和管理复杂的依赖关系。
易于维护:Spring Boot 的模块化设计使得应用程序易于维护和更新。应用程序中的各个模块都是独立的,并且可以单独进行测试、部署和升级,因此减少了对整个应用程序进行操作的风险。
易于扩展:Spring Boot 通过提供很多插件和扩展点来支持应用程序的扩展,开发人员可以根据自己的需求进行灵活的扩展和定制。
健壮性和高可靠性:Spring Boot 提供了很多功能和组件来保证应用程序的健壮性和高可靠性,例如内置的Tomcat容器、监控和诊断工具等,能够更好地帮助开发人员维护和监控应用程序。
开发体验友好:Spring Boot 的开发方式非常简单易懂,开发人员可以快速上手,并且提供了丰富的文档和示例,大大提高了开发体验。
Vue 是一种流行的前端开发框架,作为前端开发有以下优势:
数据绑定:Vue 的核心是响应式数据绑定系统。当数据发生变化时,Vue.js 自动更新视图,让开发者专注于业务逻辑而不是手动操作DOM。
组件化开发:Vue 支持组件化开发,将页面拆分为多个可复用的组件,提高代码的可读性和重用性,并且可以减少开发和维护的工作量。
轻量级:Vue 是一款轻量级的JavaScript框架,文件大小小,对性能影响小,加载速度快,同时也不需要其他额外的依赖库。
易于学习和使用:Vue 的语法简单明了,易于学习和使用。它提供了详细的文档和示例,以及大量的扩展插件和工具,方便快速开发出高性能的Web应用程序。
高度灵活:Vue 可以与其他JavaScript库和框架无缝集成,例如React、Angular等,同时还提供了丰富的API和选项,可以满足各种不同的需求。
兼容性好:Vue 兼容各种主流浏览器。
总之,Vue 作为一款流行的前端开发框架,具有数据绑定、组件化开发、轻量级、易于学习和使用、高度灵活和兼容性好等优势。它可以提高Web应用程序的开发效率和质量,使得前端开发更加简单、快速和高效。
ElementUI 是一个基于 Vue 的桌面端组件库,作为前端 UI 组件库有以下优势:
丰富的组件:ElementUI 提供了丰富的组件,包括表格、表单、按钮、弹窗、导航等等,适用于各种场景和使用需求。
简洁易用:ElementUI 的组件风格简洁明了,易于使用和定制。它提供了大量的选项和 API,使得开发者可以按照自己的需求灵活地进行配置和调整。
贴近设计规范:ElementUI 的组件设计贴近业界的设计规范,符合人性化的交互体验,提高用户界面的友好性和易用性。
样式易于修改:ElementUI 的样式易于修改,通过提供的变量和 Mixin 可以轻松地对组件的样式进行定制和扩展,满足不同项目的品牌色、样式需求。
社区活跃:ElementUI 是一个开源项目,拥有庞大的社区支持,有很多优秀的第三方插件和工具,能够更好地帮助开发者快速构建出高质量的Web应用程序。
FastAPI是一个基于Python的现代、快速(高性能)的Web框架,具有以下优势:
高性能:FastAPI基于Starlette框架构建,使用异步(async)编程模型,利用Python的协程和异步IO特性,能够处理大量并发请求,提供出色的性能。
快速开发:FastAPI提供了自动化的API文档生成功能,可以根据代码自动生成交互式API文档,大大减少了编写文档的工作量。同时,FastAPI还提供了强大的类型提示功能,可以在编码过程中自动检查类型错误,提高开发效率。
强大的请求处理能力:FastAPI支持处理各种类型的请求,包括GET、POST、PUT、DELETE等,同时还支持路径参数、查询参数、请求体参数等多种参数传递方式,非常灵活。
安全性:FastAPI内置了许多安全性功能,包括身份验证、授权、CSRF保护等,可以帮助开发者构建安全可靠的Web应用。
易于部署:FastAPI可以轻松地与各种Web服务器(如Uvicorn、Gunicorn等)和部署工具(如Docker、Kubernetes等)集成,方便部署和扩展。
总之,FastAPI是一个功能强大、性能优越、易于使用和部署的Web框架,适用于构建高性能的Web应用和API。
核心框架:Spring Boot
安全框架:Apache Shiro
持久层框架:MyBatis
数据库连接池:Druid
日志管理:Logback
缓存数据: Redis
工具类: HuTool
核心框架:FastAPI
LLM工具: LangChain
大语言模型: ChatGPT
向量数据库: Chroma
Node.js
ES6
Axios
ElementUI
JS-cookie
扫码关注不迷路!!!
郑州升龙商业广场B座25层
service@iqiqiqi.cn
联系电话:187-0363-0315
联系电话:199-3777-5101