IncarnaMind是一个可通过大语言模型(LLMs)与多个文档(PDF、TXT等)同时聊天的开源项目。项目使用了Langchain框架,向量数据库选用Chroma DB。
虽然OpenAI最近推出了GPT-3.5模型的微调API,但它不允许预训练模型学习最新的数据,且响应内容产生幻觉。利用IncarnaMind的窗口分块机制和集成检索器,可有效查询用户的地面真实文档中的精细和粗粒度信息,以增强LLMs的功能。
01 功能
1. 文档交互:用户可以上传他们的文档(如 PDF、TXT)并与之进行交互聊天。
2. 多文档查询:不仅限于单一文档,用户可以同时在多个文档上执行简单和多跳查询。
3. 自适应内容分块:该工具能够动态地调整文本块的大小和位置,以提高查询的准确性。
4. 模型兼容性:支持多种大语言模型,如 OpenAI GPT 和 Anthropic Claude。
02 工作原理
IncarnaMind 与其他同类型工具的主要区别在于其独特的特点和方法,使其在与文档交互时更为高效和准确。以下是 IncarnaMind 的一些独特之处:
1. 自适应分块:IncarnaMind 能够动态地调整文本块的大小和位置,以提高查询的准确性。这意味着它可以根据查询的内容和上下文自动调整分块策略,而不是简单地使用固定大小的窗口。
2. 混合搜索方法:它结合了基于嵌入的方法和 BM25 方法进行混合搜索。这种组合使得搜索更为准确,因为它结合了两种不同的搜索策略的优点。
3. 检索增强生成(RAG):一旦找到相关的文本块,这些块被送入大型语言模型进行进一步的处理。这种方法结合了检索和生成两个步骤,使得生成的答案更为相关和准确。
4. 模型兼容性:IncarnaMind 支持多种大型语言模型,如 OpenAI GPT 和 Anthropic Claude。这为用户提供了更多的选择,使他们可以根据自己的需求选择最合适的模型,项目基于Langchain框架实现,这使得切换其他大语言模型变得简单。
5. 针对长文档的优化:IncarnaMind 特别针对长文档进行了优化,使其能够有效地处理和查询大量的文本内容。
03 值得借鉴
通过查看项目的开源代码,这个项目是有一些值得借鉴之处的:
1. 用LLM将用户的提问转换成独立查询。当用户提问后,它先针对问题和历史消息,让LLM对问题重新提炼,拆分成多个独立查询。举例来说:
用户提问:“Transformer论文作者是谁?”LLM回复:“Ashish Vaswani,....”用户提问:“那这篇论文和GPT论文有什么区别?”
上面的两个用户问题和一个LLM回复提交给LLM后,LLM将其提炼成两个独立的查询:“论文《Attention is all you need》的内容是什么?”,“论文《GPT》的内容是什么?”。
这样做的好处就是在做相似度检索时,能过滤掉用户输入问题的无用信息,检索效果更好。
2. 用小分块保证尽可能找到更多的相关内容,用大分块保证内容完整性。如果是用Embedding做相似度检索,第一步就是要对文档进行分块,分块太大的话检索效果要差一些,分块太小检索出来的内容不完整。
所以它在分块时,分的比较小,但在分块的元数据中会保留大块的信息,当做相似度检索时,借助滑块遍历结果时,可以根据小块反向找出大块,这样最终在提交给LLM作为上下文时,可以提交完整的段落,不影响上下文的效果。
这个实现思路在Langchain中也有实践,父文档检索器(Parent Document Retriever)通过分割和存储小块数据来达到平衡。在检索过程中,首先获取小块,然后查找这些块的父 ID,并返回那些较大的文档。
04
IncarnaMind 项目依旧在持续更新,接下来开发者计划推出的新功能包括:加上前端UI界面、OCR支持、回复的异步优化、支持开源的LLM、支持更多文档格式。
领取专属 10元无门槛券
私享最新 技术干货