该项目旨在构建一个建议引擎,利用代理检索型生成(RAG)体系结构,以根据用户查询提供上下文感知的建议。 MVP专注于模块化和可扩展性,同时利用开源技术来提高成本效率。
建议的代码库结构:
ragsearch/
├── __init__.py
├── retrieval/
│ ├── __init__.py
│ ├── structured.py # For databases (e.g., DuckDB,sqlLite,MongoDB)
│ ├── unstructured.py # For document loaders (e.g., PDF, Word, HTML)
│ ├── base.py # Abstract base class
├── generation/
│ ├── __init__.py
│ ├── langchain.py # LangChain-based generation
│ ├── llamaindex.py # LlamaIndex-based generation
│ ├── base.py # Abstract base class
├── fusion/
│ ├── __init__.py
│ ├── simple_fusion.py # Simple query-context fusion
│ ├── attention.py # Advanced fusion strategies
│ ├── base.py # Abstract base class
├── reranking/
│ ├── __init__.py # Factory for reranking components
│ ├── bm25_reranker.py # Reranking based on BM25 scores
│ ├── neural_reranker.py # Reranking with neural models
│ ├── base.py # Abstract base class
├── llms/
│ ├── __init__.py # Factory for LLMs
│ ├── openai.py # OpenAI wrapper
│ ├── cohere.py # Cohere wrapper
│ ├── huggingface.py # HuggingFace wrapper
│ ├── base.py # Abstract base class
├── utils/
│ ├── __init__.py
│ ├── logger.py # Logging utilities
│ ├── config.py # Configuration utilities
│ ├── data.py # Data utilities
│ ├── metrics.py # Evaluation metrics
├── tests/
│ ├── __init__.py
│ ├── test_retrieval.py
│ ├── test_generation.py
│ ├── test_fusion.py
│ ├── test_reranking.py
│ ├── test_llms.py
├── main.py # Main entry point
├── config.yaml # Configuration file
├── README.md # Project documentation
├── RAG.md # Documentation for Retrieval-Augmented Generation
├── RAG-FAQ.md # FAQ for Retrieval-Augmented Generation
检索增强的生成(RAG)是优化大型语言模型的输出的过程,因此在产生响应之前,它在其培训数据源之外引用了权威知识库。大型语言模型(LLMS)经过大量数据的培训,并使用数十亿个参数来为诸如回答问题,翻译语言和完成句子的任务生成原始输出。 RAG将LLM的功能扩展到特定领域或组织的内部知识库,而无需重新训练模型。这是提高LLM输出的一种经济高效的方法,因此在各种情况下仍然相关,准确且有用。
LLMS是为智能聊天机器人和其他自然语言处理(NLP)应用程序提供动力的关键人工智能(AI)技术。目的是创建可以通过交叉引用的权威知识来源来回答用户问题的机器人。不幸的是,LLM技术的性质引入了LLM响应中的不可预测性。此外,LLM培训数据是静态的,并根据其知识引入了截止日期。
当没有答案时,提出虚假信息。当用户期望特定的当前响应时,呈现过时或通用信息。从非授权来源创建响应。由于术语混乱而产生不准确的响应,其中不同的培训来源使用相同的术语来谈论不同的事情。您可以将大型语言模型视为一个过度热情的新员工,他们拒绝在当前事件中保持知情,但始终将充满信心地回答每个问题。不幸的是,这种态度会对用户信任产生负面影响,而不是您希望聊天机器人效仿的东西!
抹布是解决其中一些挑战的一种方法。它重定向LLM以从权威,预定的知识来源中检索相关信息。组织对生成的文本输出具有更大的控制权,并且用户可以洞悉LLM如何生成响应。
抹布技术为组织的生成AI努力带来了一些好处。
聊天机器人开发通常开始使用基础模型。基础模型(FMS)是在广泛和未标记数据的广泛范围内训练的API访问LLM。针对组织或域特异性信息的Retration FM的计算和财务成本很高。 RAG是将新数据引入LLM的一种更具成本效益的方法。它使生成人工智能(生成AI)技术更广泛地易于访问和可用。
即使最初的LLM培训数据源适合您的需求,保持相关性也很具有挑战性。 RAG允许开发人员向生成模型提供最新的研究,统计或新闻。他们可以使用抹布直接将LLM连接到实时的社交媒体供稿,新闻网站或其他经常更新的信息来源。然后,LLM可以向用户提供最新信息。
RAG允许LLM通过源归因提供准确的信息。输出可以包括引用或引用来源。如果用户需要进一步澄清或更多详细信息,也可以自己查找源文档。这可以增加对您的生成AI解决方案的信任和信心。
使用RAG,开发人员可以更有效地测试和改进其聊天应用程序。他们可以控制和更改LLM的信息源,以适应不断变化的需求或跨职能用法。开发人员还可以将敏感信息检索限制为不同的授权级别,并确保LLM产生适当的响应。此外,如果LLM参考文献不正确,则可以进行故障排除并进行修复。组织可以对更广泛的应用程序更自信地实施生成的AI技术。
如果没有抹布,LLM将获取用户输入,并根据培训的信息或已经知道的信息创建响应。使用RAG,引入了一个信息检索组件,该组件利用用户输入从新的数据源中提取信息。用户查询和相关信息都提供给LLM。 LLM使用新知识及其培训数据来创建更好的响应。以下各节提供了该过程的概述。
LLM原始培训数据集之外的新数据称为外部数据。它可以来自多个数据源,例如API,数据库或文档存储库。数据可能以各种格式存在,例如文件,数据库记录或长形式文本。另一种称为嵌入语言模型的AI技术将数据转换为数值表示,并将其存储在矢量数据库中。此过程创建了一个知识库,生成的AI模型可以理解。
下一步是执行相关搜索。用户查询将转换为向量表示形式,并与矢量数据库匹配。例如,考虑一个可以回答组织人力资源问题的智能聊天机器人。如果员工搜索“我有多少年假?”该系统将与单个员工过去的休假记录一起检索年假政策文件。这些特定文件将被返回,因为它们与员工的投入非常相关。使用数学矢量计算和表示来计算和建立相关性。
接下来,抹布模型通过在上下文中添加相关检索的数据来增加用户输入(或提示)。此步骤使用及时的工程技术与LLM有效沟通。增强提示允许大型语言模型对用户查询产生准确的答案。
下一个问题可能是 - 如果外部数据变得陈旧了什么?为了维护当前信息以进行检索,异步更新文档并更新文档的嵌入表示形式。您可以通过自动实时过程或定期批处理处理来执行此操作。这是数据分析中的一个普遍挑战,可以使用不同的数据科学方法。
语义搜索增强了希望在其LLM应用程序中添加大量外部知识源的组织的抹布结果。现代企业存储了大量信息,例如手册,常见问题解答,研究报告,客户服务指南和人力资源文档存储库。上下文检索在大规模上具有挑战性,因此降低了生成产出质量。
语义搜索技术可以扫描大型信息数据库,并更准确地检索数据。例如,他们可以回答诸如“去年在机械维修上花费了多少?”之类的问题。通过将问题映射到相关文档并返回特定的文本而不是搜索结果。
抹布中的常规或关键字搜索解决方案为知识密集型任务产生有限的结果。开发人员还必须在手动准备数据时处理单词嵌入,文档块和其他复杂性。相反,语义搜索技术完成了知识库准备的所有工作,因此不必这样做。他们还生成了与相关的语义相关段落和与之相关的令牌单词,以最大程度地提高抹布有效载荷的质量。