借助生成式人工智能让开发者轻松将生成式 AI 集成到自己的应用程序中Quivr项目:开启你的AI第二大脑之旅

借助生成式人工智能让开发者轻松将生成式 AI 集成到自己的应用程序中Quivr项目:开启你的AI第二大脑之旅

quivr

Quivr项目全面解析

项目简介

Quivr旨在助力用户打造个人的“第二大脑”,它借助生成式人工智能(Generative AI)的强大能力,充当用户的得力个人助手。其核心目标是让开发者轻松将生成式 AI 集成到自己的应用程序中,而无需过多关注复杂的检索增强生成(RAG)技术细节,从而将更多精力集中于产品本身的特性与功能开发。

从实际应用场景来看,无论是处理各种文档信息,如 PDF、TXT、Markdown 等文件,还是在不同的语言模型(LLM)和向量数据库(Vectorstore)组合中进行选择,Quivr 都提供了灵活且便捷的解决方案。例如,在企业知识管理场景中,员工可通过 Quivr 快速查询公司内部的各种文档资料,获取所需信息;在个人学习场景下,学生能够利用 Quivr 对学习资料进行整理和智能问答,提高学习效率。

项目特点

  • 独特的 Opiniated RAG:Quivr 构建了一种精心设计的 RAG,具有观点明确、快速且高效的特点。这意味着在将生成式 AI 集成到应用程序时,开发人员无需耗费大量时间和精力优化 RAG 算法,就能获得出色性能,从而更专注于产品功能的实现。例如,在处理大量文档数据时,Opiniated RAG 能够快速准确地检索相关信息,并与语言模型相结合生成高质量的回复。
  • 支持多种 LLM:该项目支持与任何语言模型协同工作,包括 OpenAI 的 GPT 系列、Anthropic 的 Claude、Mistral 的模型,以及像 Gemma 这样的其他模型,甚至还支持通过 Ollama 使用本地模型。这种广泛的兼容性允许开发者依据项目需求、成本和性能等多方面因素,自由选择最合适的语言模型。例如,对于隐私要求较高的项目,可选择使用本地模型;而对于追求最先进语言理解和生成能力的项目,则可以选择 OpenAI 的 GPT4。
  • 处理任意文件类型:Quivr 具备处理各种文件类型的能力,涵盖常见的 PDF、TXT、Markdown 等格式。不仅如此,开发者还可根据自身需求添加自定义的文件解析器。例如,在一些特定行业中,可能涉及特殊格式的文件,通过自定义解析器,Quivr 就能轻松处理这些文件,为用户提供统一的信息检索和问答服务。
  • 高度可定制的 RAG:允许开发者对 RAG 进行定制化操作,例如添加互联网搜索功能,使回答不仅基于本地文档数据,还能整合互联网上的最新信息;或者添加各种工具,进一步拓展应用的功能边界。比如,在一个新闻资讯类应用中,可以通过定制 RAG,使其在回答用户问题时,不仅能从新闻文档库中提取信息,还能实时搜索互联网上的最新新闻动态,为用户提供更全面、及时的回答。
  • 与 Megaparse 集成:Quivr 与 Megaparse 实现了良好的集成,用户可以先利用 Megaparse 对文件进行摄取处理,然后在 Quivr 中使用 RAG 技术对这些文件进行检索和问答。这种集成方式为用户提供了一种更高效的文档处理和信息利用流程,提升了整体的工作效率。

技术原理

  • 检索增强生成(RAG)技术:RAG 是 Quivr 的核心技术之一,它通过将检索系统与生成式模型相结合,提高生成回答的准确性和相关性。在 Quivr 中,Opiniated RAG 经过优化,其工作流程大致如下:当用户提出问题时,系统会根据问题对本地存储的文档数据进行检索,从向量数据库(如 PGVector、Faiss 等)中找到与问题相关度较高的文档片段。这里的向量数据库是将文档数据转化为向量形式存储,通过计算向量之间的相似度来进行检索。例如,将文档中的每一段文字转化为一个向量,当用户提问时,将问题也转化为向量,然后在向量数据库中查找与问题向量相似度高的文档向量对应的文档片段。接着,这些检索到的文档片段会作为上下文信息,与问题一起输入到语言模型中。语言模型基于这些信息生成最终的回答。与传统仅依赖语言模型生成回答的方式相比,RAG 技术能显著提高回答的准确性和可靠性,因为它引入了外部的知识数据(即文档数据),避免了语言模型在生成回答时可能出现的“幻觉”问题。例如,在回答关于特定科学知识的问题时,如果仅依赖语言模型自身的知识,可能会给出不准确的回答,但通过 RAG 技术,结合相关科学文献的检索结果,就能给出更准确的答案。
  • 语言模型的选择与适配:Quivr 支持多种语言模型,得益于其良好的架构设计。在技术实现上,Quivr 为不同的语言模型提供了统一的接口层。当开发者选择使用某一特定语言模型时,Quivr 通过该接口层将问题和相关上下文信息传递给对应的语言模型,并处理语言模型返回的结果。例如,对于 OpenAI 的模型,Quivr 会按照 OpenAI 的 API 规范进行数据的封装和请求发送,接收并解析 OpenAI 模型返回的回答;对于本地模型,如通过 Ollama 使用的模型,Quivr 则会按照 Ollama 的交互方式进行通信。这种适配不同语言模型的方式,使得开发者能够轻松切换语言模型,而无需对应用程序的核心逻辑进行大规模修改。
  • 文件处理与解析:对于各种文件类型,Quivr 首先会使用相应的文件解析器将文件内容提取出来。例如,对于 PDF 文件,会使用专门的 PDF 解析库将文本从 PDF 页面中提取出来;对于 Markdown 文件,则会解析其格式,提取文本内容。然后,这些提取出来的文本会被进一步处理,通常会进行分词、向量化等操作,以便存储到向量数据库中供后续检索使用。当开发者需要添加自定义文件解析器时,Quivr 提供了相应的扩展接口,开发者可以按照接口规范编写自定义解析器,实现对特定文件类型的支持。
  • 定制化功能实现:在定制 RAG 方面,比如添加互联网搜索功能,Quivr 可能会集成一些搜索引擎的 API,如 Google Search API 或 Bing Search API。当用户提问时,除了在本地文档数据中进行检索,还会将问题发送到搜索引擎 API,获取互联网上的相关信息,并将这些信息与本地检索结果合并,一起作为上下文输入到语言模型中,从而使生成的回答更全面。添加工具功能则可能涉及与各种第三方工具的集成,例如,若要添加文本摘要工具,Quivr 可以调用专门的文本摘要库或 API,对检索到的文档片段进行摘要处理,然后再输入到语言模型中,以提高回答的简洁性和针对性。

类似项目

  • LangChainLangChain是一个用于开发由语言模型驱动的应用程序的框架。它提供了一系列工具、组件和接口,帮助开发者更轻松地构建基于语言模型的应用,如聊天机器人、智能文档处理应用等。与 Quivr 类似,LangChain 也支持多种语言模型,并且提供了丰富的功能来处理和操作语言模型的输入输出。例如,它可以通过各种提示模板(Prompt Template)来优化语言模型的输入,从而引导模型生成更符合预期的回答。同时,LangChain 还提供了对多种数据源的集成支持,包括文档数据库、网页等,使得开发者可以方便地将外部知识融入到应用中。然而,与 Quivr 相比,LangChain 更侧重于提供一个通用的框架,开发者需要在这个框架基础上进行更多的开发工作来实现完整的应用功能,而 Quivr 则更专注于提供一种更便捷的、开箱即用的 RAG 解决方案,让开发者能更快速地将生成式 AI 集成到自己的应用中。
  • HaystackHaystack是一个用于构建问答系统的开源框架。它提供了灵活的架构,可以轻松集成各种语言模型、搜索引擎和文档存储。Haystack 支持从不同类型的数据源(如 PDF、CSV、TXT 等)中提取信息,并通过检索和生成步骤来回答用户的问题。在技术实现上,Haystack 使用了类似 RAG 的方法,通过检索相关文档片段并结合语言模型生成回答。它还提供了一些预训练的模型和组件,方便开发者快速搭建问答系统。与 Quivr 相比,Haystack 的优势在于其对问答系统的深度定制能力,适合那些需要对问答系统的各个环节进行精细调整的开发者。而 Quivr 则更强调简单易用和快速集成,对于希望尽快将生成式 AI 功能添加到现有产品中的开发者来说,可能是更合适的选择。
  • ChromaChroma是一个轻量级的向量数据库,主要用于存储和检索向量数据。它专注于为机器学习和人工智能应用提供高效的向量存储和检索服务。Chroma 可以与各种语言模型和其他工具集成,帮助实现基于向量相似性检索的功能。例如,在构建文本检索系统时,可以将文本转化为向量并存储在 Chroma 中,然后通过查询向量来检索相关文本。与 Quivr 不同的是,Chroma 本身并不具备完整的生成式 AI 集成和问答功能,它更像是 Quivr 中向量存储部分的一个可选替代方案。Quivr 则是一个更全面的解决方案,不仅包含向量存储相关功能,还集成了语言模型、文件处理、RAG 等一系列功能,以实现完整的生成式 AI 应用集成。

Quivr 项目使用指南

环境配置

  • Python 版本要求:Quivr 要求 Python 3.10 或更新版本。Python 作为一种广泛使用的高级编程语言,在数据科学、人工智能等领域有着深厚的应用基础。较新的 Python 版本通常带来了性能优化、安全修复以及新特性,对于 Quivr 的高效运行至关重要。如果你的系统尚未安装 Python 3.10 或更新版本,可以从 Python 官方网站(https://www.python.org/downloads/)下载对应操作系统的安装包进行安装。在安装过程中,注意勾选“Add Python to PATH”选项,以便在命令行中能够直接调用 Python。
  • API 密钥准备:Quivr 支持多种语言模型供应商的 API,如 Anthropic、OpenAI 和 Mistral 等,同时也支持通过 Ollama 使用本地模型。以使用 OpenAI 的 API 为例,你需要在 OpenAI 官网(https://openai.com/)注册账号并获取 API 密钥。获取密钥后,将其设置为环境变量。在 Linux 或 macOS 系统中,可以通过在终端中执行以下命令来临时设置环境变量:
# 假设你已经获取了 OpenAI 的 API 密钥
export OPENAI_API_KEY=your_openai_api_key

在 Windows 系统中,可以通过“系统属性” -> “高级” -> “环境变量”来设置系统环境变量,或者在命令提示符中使用以下命令临时设置:

# 假设你已经获取了 OpenAI 的 API 密钥
set OPENAI_API_KEY=your_openai_api_key

安装

  • 安装 quivr-core 包:Quivr 的核心功能封装在quivr-core包中,通过 Python 的包管理工具pip进行安装。在确保 Python 环境已正确配置且pip可用的情况下,打开终端或命令提示符,执行以下命令:
pip install quivr-core

这个过程中,pip会从 Python Package Index(PyPI)下载quivr-core及其依赖项。安装完成后,可以通过以下命令检查安装是否成功:

python -c "import quivr_core; print(quivr_core.__version__)"

如果没有报错并输出了quivr-core的版本号,则说明安装成功。

使用

  • 创建简单的 RAG(检索增强生成)示例:RAG 是 Quivr 的核心功能之一,它结合了检索和生成技术,使得模型能够利用外部知识来生成更准确的回答。以下是一个简单的示例,展示如何在 5 行代码内创建一个 RAG:
import tempfile
from quivr_core import Brain
if __name__ == "__main__":
    with tempfile.NamedTemporaryFile(mode="w", suffix=".txt") as temp_file:
        temp_file.write("Gold is a liquid of blue-like colour.")
        temp_file.flush()
        brain = Brain.from_files(name="test_brain", file_paths=[temp_file.name])
        answer = brain.ask("what is gold? answer in french")
        print("answer:", answer)

在这个示例中:
– 首先,我们使用tempfile模块创建了一个临时文本文件,并向其中写入了一些内容。这只是为了演示目的,在实际应用中,你可以替换为真实的文件路径。
– 然后,通过Brain.from_files方法创建了一个Brain实例,name参数为这个“大脑”实例命名,file_paths参数指定了要加载的文件路径。
– 最后,使用brain.ask方法向这个“大脑”提问,并打印回答。

  • 配置 RAG 工作流程
    • 创建 YAML 配置文件:创建一个名为basic_rag_workflow.yaml的文件,并将以下内容复制到其中:
workflow_config:
  name: "standard RAG"
  nodes:
    - name: "START"
      edges: ["filter_history"]
    - name: "filter_history"
      edges: ["rewrite"]
    - name: "rewrite"
      edges: ["retrieve"]
    - name: "retrieve"
      edges: ["generate_rag"]
    - name: "generate_rag" # 最后一个节点的名称,我们希望从该节点将答案流式传输给用户
      edges: ["END"]
  # 最大历史记录数,即包含在答案上下文中的先前对话迭代次数
  max_history: 10
  # 重排器配置
  reranker_config:
    # 重排器供应商
    supplier: "cohere"
    # 用于重排器的模型
    model: "rerank-multilingual-v3.0"
    # 重排器返回的块数
    top_n: 5
  # LLM 配置
  llm_config:
    # 传递给 LLM 以生成答案的最大令牌数
    max_input_tokens: 4000
    # LLM 的温度
    temperature: 0.7

在这个配置文件中:
workflow_config部分定义了工作流程的名称和节点之间的连接关系。
max_history指定了在生成答案时,要考虑的先前对话的最大迭代次数。
reranker_config配置了重排器,重排器用于对检索到的结果进行重新排序,以提高答案的相关性。这里指定了使用cohere作为供应商,rerank-multilingual-v3.0模型,并设置返回的块数为 5。
llm_config配置了语言模型的参数,max_input_tokens设置了传递给 LLM 的最大令牌数,temperature控制了生成文本的随机性,值越高生成的文本越具多样性,但也可能越不准确。

使用配置文件创建 Brain 实例:在 Python 代码中,使用上述配置文件创建`Brain`实例并进行问答交互:

from quivr_core import Brain
from quivr_core.config import RetrievalConfig
from rich.console import Console
from rich.panel import Panel
from rich.prompt import Prompt
config_file_name = "./basic_rag_workflow.yaml"
retrieval_config = RetrievalConfig.from_yaml(config_file_name)
brain = Brain.from_files(name = "my smart brain", file_paths = ["./my_first_doc.pdf", "./my_second_doc.txt"])
console = Console()
console.print(Panel.fit("Ask your brain!", style="bold magenta"))
while True:
    # 获取用户输入
    question = Prompt.ask("[bold cyan]Question[/bold cyan]")
    # 检查用户是否想退出
    if question.lower() == "exit":
        console.print(Panel("Goodbye!", style="bold yellow"))
        break
    answer = brain.ask(question, retrieval_config=retrieval_config)
    # 以打字效果打印答案
    console.print(f"[bold green]Quivr Assistant[/bold green]: {answer.answer}")
    console.print("-" * console.width)
    brain.print_info()

在这个代码中:
– 首先,通过RetrievalConfig.from_yaml方法从 YAML 配置文件中加载检索配置。
– 然后,使用Brain.from_files方法创建Brain实例,加载指定的文件。
– 使用rich库创建一个交互式的控制台界面,用户可以在其中输入问题,程序会根据配置的 RAG 工作流程生成答案并打印。

  • 拓展功能:Quivr 还支持添加互联网搜索、添加工具等拓展功能。例如,通过添加互联网搜索功能,可以让模型在回答问题时参考最新的在线信息。具体的拓展方法可以参考项目的官方文档。

 

官网:  https://core.quivr.com/

项目地址:  https://github.com/QuivrHQ/quivr

© 版权声明

相关文章

暂无评论

暂无评论...