快轉到主要內容

LlamaIndex 學習筆記 - 餵資料之 IngestionPipeline

這筆記是建構在 LlamaIndex 官方文件的範例節錄/實作/追蹤

嘗試的原始碼在 https://github.com/unclefomotw/llamaindex-try/blob/main/src/rag_8.py


在線下用 LlamaIndex 把資料輸入資料庫,也就是 data ingestion,可以用 LlamaIndex 提供的 IngestionPipeline 並儲存至外部 vector DB

最簡單的程式碼片段如下

    # 範例:把資料文件切段,轉換成 chunks / nodes 的轉換器
    # 單純為了 retrieval 品質;可以是任意多個轉換器
    node_parser = SentenceSplitter(chunk_size=512, chunk_overlap=128)

    # embed model 也是轉換器的一種 (把 node 加上 embedding)
    # 加在全域單純只是為後續 online 預測準備
    # 模型可用 OpenAI 也可用 HuggineFace 上的,沒差
    Settings.embed_model = HuggingFaceEmbedding(model_name="DMetaSoul/Dmeta-embedding-zh-small")

    # 照想要的執行順序,把轉換器放在 list 裡(包括 embedding!)
    transformations = [
        node_parser,
        Settings.embed_model
    ]

    # 載入文件,例如用 SimpleDirectoryReader 去 load_data
    documents = my_load_doc()

    # 設定好 vector database
    db_client = QdrantClient(host="localhost", port=6333)
    vector_store = QdrantVectorStore(
        client=db_client, collection_name="my_collection",
    )

    # 最後重頭戲:餵資料
    pipeline = IngestionPipeline(
        transformations=transformations,
        vector_store=vector_store
    )
    pipeline.run(documents=documents)

這個作用其實跟 之前這篇的 Offline 效果一樣,但更具敘述性更好看

  • IngestionPipeline 是一個獨立的個體;所有跟 ingestion 有關的都在那邊設定
  • 要哪些 transformations 集中在一起給定
  • 清楚指明是 vector “store”, 而不依靠 LlamaIndex 的 “index” (那是 online 的事)

Online 查詢聊天則跟之前那篇一樣,用 VectorStoreIndex.from_vector_store(vector_store)

IngestionPipeline 還提供更多功能,可參見官方文件

  • Cache (local / remote)
  • Dedup / upsert 處理文件重複或更新
  • async
  • 平行 multiprocessing
若您覺得有趣, 請 追蹤我的Facebook 或  Linkedin, 讓你獲得更多資訊!