Skip to main content
NeuralDB 是由 ThirdAI 开发的 CPU 友好型可微调检索引擎。

初始化

提供两种初始化方式:
  • 从头开始:基础模型
  • 从检查点加载:加载先前保存的模型
以下所有初始化方式中,如果已设置 THIRDAI_KEY 环境变量,则可省略 thirdai_key 参数。 ThirdAI API 密钥可在 www.thirdai.com/try-bolt/ 获取。
from langchain_community.retrievers import NeuralDBRetriever

# From scratch
retriever = NeuralDBRetriever.from_scratch(thirdai_key="your-thirdai-key")

# From checkpoint
retriever = NeuralDBRetriever.from_checkpoint(
    # Path to a NeuralDB checkpoint. For example, if you call
    # retriever.save("/path/to/checkpoint.ndb") in one script, then you can
    # call NeuralDBRetriever.from_checkpoint("/path/to/checkpoint.ndb") in
    # another script to load the saved model.
    checkpoint="/path/to/checkpoint.ndb",
    thirdai_key="your-thirdai-key",
)

插入文档来源

retriever.insert(
    # If you have PDF, DOCX, or CSV files, you can directly pass the paths to the documents
    sources=["/path/to/doc.pdf", "/path/to/doc.docx", "/path/to/doc.csv"],
    # When True this means that the underlying model in the NeuralDB will
    # undergo unsupervised pretraining on the inserted files. Defaults to True.
    train=True,
    # Much faster insertion with a slight drop in performance. Defaults to True.
    fast_mode=True,
)

from thirdai import neural_db as ndb

retriever.insert(
    # If you have files in other formats, or prefer to configure how
    # your files are parsed, then you can pass in NeuralDB document objects
    # like this.
    sources=[
        ndb.PDF(
            "/path/to/doc.pdf",
            version="v2",
            chunk_size=100,
            metadata={"published": 2022},
        ),
        ndb.Unstructured("/path/to/deck.pptx"),
    ]
)

检索文档

要查询检索器,可以使用标准的 LangChain 检索器方法 get_relevant_documents,该方法返回一个 LangChain Document 对象列表。每个 document 对象代表已索引文件中的一段文本。例如,它可能包含某个已索引 PDF 文件中的一个段落。除文本内容外,document 的 metadata 字段还包含文档 ID、来源文件以及文档相关性分数等信息。
# This returns a list of LangChain Document objects
documents = retriever.invoke("query", top_k=10)

微调

NeuralDBRetriever 可以根据用户行为和领域特定知识进行微调,支持两种微调方式:
  1. 关联(Association):检索器将源短语与目标短语相关联。当检索器遇到源短语时,也会考虑与目标短语相关的结果。
  2. 点赞(Upvoting):检索器针对特定查询提升某个文档的分数。这在您希望根据用户行为微调检索器时非常有用。例如,如果用户搜索”汽车是如何制造的”并点赞了 id 为 52 的文档,则可以对该查询对 id 为 52 的文档进行点赞。
retriever.associate(source="source phrase", target="target phrase")
retriever.associate_batch(
    [
        ("source phrase 1", "target phrase 1"),
        ("source phrase 2", "target phrase 2"),
    ]
)

retriever.upvote(query="how is a car manufactured", document_id=52)
retriever.upvote_batch(
    [
        ("query 1", 52),
        ("query 2", 20),
    ]
)