精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

大模型之深入了解Retrievers解析器 原創(chuàng)

發(fā)布于 2024-12-23 14:46
瀏覽
0收藏

前言

在上一章【??大模型之深入探索RAG流程???】中,我們對(duì)RAG流程中 ??文檔讀取(LOAD)??? -> ??文檔切分(SPLIT)??? -> ??向量化(EMBED)??? -> ??存儲(chǔ)(STORE)??? 進(jìn)行了深入了解,本章將接著深入了解 ??解析(Retrieval)?? 的使用

解析器簡(jiǎn)介

大模型之深入了解Retrievers解析器-AI.x社區(qū)

簡(jiǎn)介:在 RAG(Retrieval-Augmented Generation)流程中,Retrieval(檢索)是關(guān)鍵環(huán)節(jié),其主要目標(biāo)是從大量文檔或知識(shí)庫(kù)中提取與用戶查詢相關(guān)的信息。

目的

  • 信息獲取:根據(jù)用戶的查詢,從外部知識(shí)庫(kù)中獲取相關(guān)文檔或片段,以增強(qiáng)生成模型的上下文信息。
  • 提高準(zhǔn)確性:通過提供具體的、相關(guān)的信息,幫助生成模型(如語言模型)產(chǎn)生更準(zhǔn)確和上下文相關(guān)的回答。

流程

  1. 用戶查詢:用戶輸入一個(gè)查詢或問題。
  2. 檢索器:使用檢索算法(如 BM25、TF-IDF 或基于嵌入的檢索)搜索知識(shí)庫(kù),找到與查詢最相關(guān)的文檔。
  3. 文檔評(píng)分:對(duì)檢索到的文檔進(jìn)行評(píng)分,通常依據(jù)相關(guān)性得分來排序。
  4. 返回結(jié)果:將最相關(guān)的文檔或片段返回給生成模型。

解析器的基礎(chǔ)使用

創(chuàng)建知識(shí)庫(kù)

第一步:?jiǎn)?dòng)Chroma數(shù)據(jù)庫(kù)

chroma run --path chroma_xiyou --port 8000

第二步:使用RAG基礎(chǔ)流程:Load->Split->EMBED->STORE創(chuàng)建一個(gè)知識(shí)庫(kù)

from langchain_text_splitters importRecursiveCharacterTextSplitter
from langchain.embeddings importHuggingFaceEmbeddings
from langchain.document_loaders importPyMuPDFLoader
from langchain_chroma importChroma
from chromadb importSettings
from chromadb importClient
from utils import get_ernie_models
import chromadb

# 連接大模型
llm_ernie, chat_ernie, embed_ernie = get_ernie_models()

# 初始化 HuggingFaceEmbeddings
embedding_function =HuggingFaceEmbeddings(model_name="bert-base-chinese")

# 加載文檔
pdf_loader =PyMuPDFLoader("testfiles/西游記.pdf")
documents = pdf_loader.load()

# 切分文檔
spliter =RecursiveCharacterTextSplitter(chunk_size=128, chunk_overlap=64)
docs = spliter.split_documents(documents)

# 配置連接信息
client = chromadb.HttpClient(host='localhost', port=8000)

chroma_db =Chroma(
    embedding_functinotallow=embedding_function,
    client=client
)

batch_size =6# 每次處理的樣本數(shù)量

# 分批入庫(kù)
for i inrange(0,len(docs), batch_size):
    batch = docs[i:i + batch_size]# 獲取當(dāng)前批次的樣本
print(f'Processing batch {i} to {i + batch_size}, total {len(batch)} samples')
    chroma_db.add_documents(documents=batch)  # 入庫(kù)

說明:

  • 向量化說明:由于Qwen和百度千帆的向量接口限制較多,對(duì)于向量化西游記這本書來說,經(jīng)常會(huì)遇到超出限制等問題,所以此處我將向量化接口換為HuggingFaceEmbeddings(),該接口可能會(huì)存在被Ban的風(fēng)險(xiǎn),請(qǐng)自行更換向量化接口。
  • 測(cè)試文檔:西游記下載地址請(qǐng)見夸克網(wǎng)盤:西游記

創(chuàng)建解析器

第三步:創(chuàng)建一個(gè)解析器

retriever = chroma_db.as_retriever()

創(chuàng)建chain鏈

創(chuàng)建chain鏈有兩種方法:一種是管道符連接,一種是使用 create_retrieval_chain 。本章我們兩種方法都做嘗試,以便對(duì)比代碼的寫法。

方式一:傳統(tǒng)的管道符構(gòu)建chain

# RAG系統(tǒng)經(jīng)典的 Prompt 
prompt =ChatPromptTemplate.from_messages([
("human","""You are an assistant for question-answering tasks. Use the following pieces 
  of retrieved context to answer the question. 
  If you don't know the answer, just say that you don't know. 
  Use three sentences maximum and keep the answer concise.
  Question: {question} 
  Context: {context} 
  Answer:""")
])


defformat_docs(docs):
return"\n\n".join(doc.page_content for doc in docs)


# RAG 鏈
rag_chain =(
{"context": retriever | format_docs,
"question":RunnablePassthrough()}
| prompt
| chat_ernie
|StrOutputParser()
)

rag_chain.invoke(input="孫悟空三打白骨精時(shí),白骨精分別變成了哪些形態(tài)?")

運(yùn)行結(jié)果:

大模型之深入了解Retrievers解析器-AI.x社區(qū)

方式二:使用create_retrieval_chain構(gòu)建

from langchain.chains import create_retrieval_chain
from langchain.chains.combine_documents import create_stuff_documents_chain
from langchain_core.prompts importChatPromptTemplate

prompt =ChatPromptTemplate.from_messages([
("system","""Answer any use questions based solely on the context below:
<context>
{context}
</context>"""),
("placeholder","{chat_history}"),
("human","{input}"),
])

combine_docs_chain = create_stuff_documents_chain(
    llm=chat_ernie,prompt= prompt
)

chain = create_retrieval_chain(retriever=retriever, combine_docs_chain=combine_docs_chain)

chain.invoke(input={"input":"孫悟空三打白骨精時(shí),白骨精分別變成了哪些形態(tài)?"})

說明:

  • 上述的prompt可以在smith.langchain.com上查詢??langchain-ai/retrieval-qa-chat??得到。

運(yùn)行結(jié)果:

大模型之深入了解Retrievers解析器-AI.x社區(qū)

通過對(duì)比,可以看到使用 ??create_retrieval_chain?? 創(chuàng)建chain時(shí),可以減少format_docs()步驟以及使用管道符部分的代碼量,簡(jiǎn)化調(diào)用步驟。

以上調(diào)用即為完整的解析器使用流程,其中第三步中 ??retriever = chroma_db.as_retriever()?? 可以有多種方式構(gòu)建解析器。本章內(nèi)容,我們著重對(duì)此深入研究。

解析器的不同類型

除了上面基礎(chǔ)的向量存儲(chǔ)檢索器之外,Langchain 還提供了多種高級(jí)檢索類型,包括多查詢檢索器(MultiQueryRetriever)、結(jié)合檢索器(EnsembleRetriever)等。

多查詢檢索器 MultiQueryRetriever

簡(jiǎn)介: ??MultiQueryRetriever?? 是一種檢索算法,它通過使用大型語言模型(LLM)生成多個(gè)查詢,從而自動(dòng)化提示調(diào)優(yōu)過程。

功能: 它為給定的用戶輸入查詢生成多個(gè)不同視角的查詢。對(duì)于每個(gè)查詢,它檢索一組相關(guān)文檔,并通過所有查詢的唯一聯(lián)合來獲得更大的一組潛在相關(guān)文檔。這種方法提高了檢索的準(zhǔn)確性和多樣性。

使用場(chǎng)景: 當(dāng)用戶的問題復(fù)雜并且需要多條不同的信息來回答時(shí),??MultiQueryRetriever?? 特別有用。它可以在需要關(guān)于多個(gè)主題的信息時(shí)提供更全面的結(jié)果

使用方法: 第一步:構(gòu)建知識(shí)庫(kù)(此處復(fù)用上面的知識(shí)庫(kù),詳細(xì)內(nèi)容不再贅述)

第二步:使用MultiQueryRetriever

import logging
from langchain.retrievers.multi_query importMultiQueryRetriever

question ="孫悟空三打白骨精時(shí),白骨精分別變成了哪些形態(tài)?"

# 把向量操作封裝為一個(gè)基本檢索器
retriever = chroma_db.as_retriever()

retriever_from_llm =MultiQueryRetriever.from_llm(
    retriever=chroma_db.as_retriever(), llm=chat_ernie
)

logging.basicConfig()
logging.getLogger("langchain.retrievers.multi_query").setLevel(logging.INFO)

unique_docs = retriever_from_llm.get_relevant_documents(query=question)
unique_docs

print(f'返回的文檔個(gè)數(shù):{len(unique_docs)}')
print(f'返回的文檔內(nèi)容:')
for doc in unique_docs:
print(doc.page_content)

運(yùn)行結(jié)果:

INFO:langchain.retrievers.multi_query:Generated 
queries: ['以下是三個(gè)不同版本的生成問題,旨在從不同角度探索原始問題的相關(guān)信息:', 
'1. 孫悟空在三打白骨精的情節(jié)中,白骨精分別化作了哪些生物或物體形態(tài)?', 
'2. 孫悟空三打白骨精時(shí),白骨精變身的形態(tài)有哪些?請(qǐng)?jiān)敿?xì)列出。', 
'3. 在《西游記》中,白骨精在孫悟空三打她的過程中,她變換成了哪些不同的身份或外觀?', 
'希望以上問題可以幫助你從不同的角度獲取相關(guān)信息,從而更全面地回答原始問題。']

大模型之深入了解Retrievers解析器-AI.x社區(qū)

第三步:使用 create_retrieval_chain 進(jìn)行完整查詢

from langchain.chains import create_retrieval_chain
from langchain.chains.combine_documents import create_stuff_documents_chain
from langchain_core.prompts importChatPromptTemplate

# 創(chuàng)建結(jié)合文檔的鏈
prompt =ChatPromptTemplate.from_messages([
("system","""Answer any user questions based solely on the context below:
<context>
{context}
</context>"""),
("placeholder","{chat_history}"),
("human","{input}"),
])

combine_docs_chain = create_stuff_documents_chain(
    llm=chat_ernie, prompt=prompt
)

# 創(chuàng)建檢索鏈
chain = create_retrieval_chain(retriever=retriever_from_llm, combine_docs_chain=combine_docs_chain)

# 使用鏈進(jìn)行查詢
result = chain.invoke(input={"input": question})

# 輸出最終結(jié)果
print("最終回答:", result)

運(yùn)行結(jié)果:

最終回答: {'input':'孫悟空三打白骨精時(shí),白骨精分別變成了哪些形態(tài)?',
'context':[
Document(metadata={'author':'吳承恩','creationDate':"D:20240329064911+00'00'",'creator':'calibre 3.23.0 [https://calibre-ebook.com]','file_path':'testfiles/西游記.pdf','format':'PDF 1.4','keywords':'','modDate':'','page':7,'producer':'calibre 3.23.0 [https://calibre-ebook.com]','source':'testfiles/西游記.pdf','subject':'','title':'西游記(人文社經(jīng)典彩皮版,長(zhǎng)銷70年,以明代世德堂本為底本;三次修訂重校;豆瓣上萬條評(píng)論;2020年教育部指導(dǎo)目錄圖書)','total_pages':675,'trapped':''}, page_cnotallow='了許多新的成果,為了能讓廣大讀者更好地理解該作品,這次特意邀請(qǐng)北京大學(xué)劉勇強(qiáng)教授重新為該書撰\n寫了前言。\n六、關(guān)于取經(jīng)途中所遇的八十一難順序,第九十九回諸神給觀音菩薩提供的簿子所記,與小說的敘述'),
....(內(nèi)容過多,此處省略)
Document(metadata={'author':'吳承恩','creationDate':"D:20240329064911+00'00'",'creator':'calibre 3.23.0 [https://calibre-ebook.com]','file_path':'testfiles/西游記.pdf','format':'PDF 1.4','keywords':'','modDate':'','page':6,'producer':'calibre 3.23.0 [https://calibre-ebook.com]','source':'testfiles/西游記.pdf','subject':'','title':'西游記(人文社經(jīng)典彩皮版,長(zhǎng)銷70年,以明代世德堂本為底本;三次修訂重校;豆瓣上萬條評(píng)論;2020年教育部指導(dǎo)目錄圖書)','total_pages':675,'trapped':''}, page_cnotallow='五、更換前言。本書的前言,過去一直沿用華東師范大學(xué)郭豫適、簡(jiǎn)茂森教授一九七二年所寫的文\n字,限于當(dāng)時(shí)的歷史環(huán)境,政治化色彩較濃,而《西游記》研究在過去的幾十年中取得了很大發(fā)展,出現(xiàn)')],
'answer':'根據(jù)原文信息得出,孫悟空三打白骨精時(shí),白骨精分別變成了美麗的村姑、年滿八旬的老婦人、和一位白發(fā)蒼蒼的老公公。'}

通過以上實(shí)踐,可以看到:

 1、MultiQueryRetriever會(huì)借助大模型生成新的多個(gè)查詢 queries;

 2、MultiQueryRetriever會(huì)通過這些 queries 檢索出相關(guān)的文檔;

 3、最后,通過 combine_docs_chain 將檢索出的文檔交給大模型得到最終答案。

結(jié)合檢索器 EnsembleRetriever

簡(jiǎn)介: EnsembleRetriever是一種結(jié)合多個(gè)檢索器結(jié)果的算法,通過重新排序來提高檢索效果。

功能: 該算法從多個(gè)檢索器中獲取文檔,并將它們組合在一起,以提高文本相似性匹配和信息檢索的準(zhǔn)確性。通過結(jié)合多種補(bǔ)充的向量搜索算法,EnsembleRetriever提供了最先進(jìn)的文本相似性匹配和信息檢索能力。

使用場(chǎng)景: 當(dāng)需要結(jié)合多種檢索方法以獲得更高的檢索準(zhǔn)確性時(shí),EnsembleRetriever是理想的選擇。這種方法適用于需要從大量文檔集合中進(jìn)行信息檢索的應(yīng)用場(chǎng)景

使用方法 第一步:安裝依賴包

pip install rank_bm25
pip install faiss-gpu

第二步:準(zhǔn)備知識(shí)數(shù)據(jù)

from langchain.retrievers import EnsembleRetriever
from langchain_community.retrievers import BM25Retriever
from langchain_community.vectorstores import FAISS

# 初始化 HuggingFaceEmbeddings
embedding =HuggingFaceEmbeddings(model_name="bert-base-chinese")


# 中文文檔列表
doc_list_1 =[
"我喜歡蘋果",
"我喜歡橙子",
"蘋果和橙子都是水果",
]

doc_list_2 =[
"你喜歡蘋果嗎?",
"你喜歡橙子嗎?",
]

第三步:創(chuàng)建組合檢索器

# 初始化 BM25 檢索器
bm25_retriever = BM25Retriever.from_texts(
    doc_list_1, metadatas=[{"source":1}]*len(doc_list_1)
)
bm25_retriever.k =2

# 創(chuàng)建 FAISS 向量存儲(chǔ) 
faiss_vectorstore = FAISS.from_texts(
    doc_list_2, embedding, metadatas=[{"source":2}]*len(doc_list_2)
)
faiss_retriever = faiss_vectorstore.as_retriever(search_kwargs={"k":2})

# 初始化組合檢索器
ensemble_retriever =EnsembleRetriever(
    retrievers=[bm25_retriever, faiss_retriever], weights=[0.5,0.5]
)

第四步:進(jìn)行查詢

# 輸入查詢
docs = ensemble_retriever.invoke("我想知道關(guān)于蘋果的信息")
print(docs)

運(yùn)行結(jié)果:

[
    Document(metadata={'source':1}, page_cnotallow='蘋果和橙子都是水果'),
Document(metadata={'source':2}, page_cnotallow='你喜歡蘋果嗎?'),
Document(metadata={'source':1}, page_cnotallow='我喜歡橙子'),
Document(metadata={'source':2}, page_cnotallow='你喜歡橙子嗎?')
]

說明:

  • BM25Retriever 是一種基于經(jīng)典信息檢索模型 BM25 的檢索器。它的優(yōu)點(diǎn):

簡(jiǎn)單易用,適合處理短文本和關(guān)鍵詞檢索。

對(duì)于傳統(tǒng)的文本匹配任務(wù)表現(xiàn)良好。

  • FAISS(Facebook AI Similarity Search)是一個(gè)高效的相似性搜索庫(kù),專門用于處理大規(guī)模向量數(shù)據(jù)。它的優(yōu)點(diǎn):
  • 適合處理復(fù)雜的語義檢索任務(wù),尤其是在向量空間中。
  • 能夠處理大規(guī)模數(shù)據(jù)集,檢索速度快。
  • 將 BM25Retriever 和 FAISS 組合在一起:
  • 互補(bǔ)性:BM25 更適合處理基于關(guān)鍵詞的檢索,能夠有效地從文本中找到相關(guān)文檔;FAISS 則擅長(zhǎng)處理語義相似性,通過向量化表示捕捉文本的深層含義。
  • 提高檢索:通過組合兩種方法,可以充分利用 BM25 的詞頻特性和 FAISS 的向量相似性,從而提高整體檢索的準(zhǔn)確性和全面性。

長(zhǎng)上下文重排序 LongContextReorder

簡(jiǎn)介: LongContextReorder是一種用于處理長(zhǎng)上下文信息的技術(shù),旨在提高模型在長(zhǎng)文本中的信息提取和理解能力。它通過重新排序文檔,以使最相關(guān)的信息更易于被模型捕捉。

功能信息重排序: LongContextReorder從多個(gè)檢索器中獲取文檔,并對(duì)它們進(jìn)行重新排序,使得最相關(guān)的文檔位于上下文窗口的開頭和結(jié)尾。這有助于模型更好地關(guān)注整個(gè)上下文中的關(guān)鍵內(nèi)容。 上下文優(yōu)化: 通過優(yōu)化上下文的排列,模型能夠更有效地利用長(zhǎng)文本中的信息,從而提高回答的準(zhǔn)確性和相關(guān)性。

使用場(chǎng)景: 這種技術(shù)特別適合需要在長(zhǎng)文本中提取關(guān)鍵信息的應(yīng)用場(chǎng)景,比如法律文書分析、學(xué)術(shù)論文閱讀和長(zhǎng)篇故事理解等。

使用方法

第一步:?jiǎn)?dòng) Chroma 數(shù)據(jù)庫(kù)

chroma run --path chroma_test --port 8000

說明:

  • 此處是避免與前面的代碼產(chǎn)生數(shù)據(jù)污染,所以最好關(guān)閉之前的chroma數(shù)據(jù)庫(kù),重新啟動(dòng)一個(gè)新的。

第二步:準(zhǔn)備數(shù)據(jù)

import os
from langchain.chains importLLMChain,StuffDocumentsChain
from langchain.prompts importPromptTemplate
from langchain_chroma importChroma
from langchain_community.document_transformers import(
LongContextReorder,
)
from langchain_community.embeddings importHuggingFaceEmbeddings

# 測(cè)試數(shù)據(jù)
texts =[
"籃球是一項(xiàng)很棒的運(yùn)動(dòng)。",
"《Fly me to the moon》 是我最喜歡的歌曲之一。",
"凱爾特人是我最喜歡的球隊(duì)。",
"這是關(guān)于波士頓凱爾特人的一篇文章。",
"我最喜歡的游戲是《黑神話:悟空》",
"波士頓凱爾特人以20分的優(yōu)勢(shì)贏得了比賽。",
"在《西游記》中,孫悟空三打白骨精時(shí),白骨精分別變成了村姑、老婦和老翁這三種形態(tài)。"
"孫悟空三大白骨精是西游記中一段精彩的篇章。",
"L. Kornet 是凱爾特人隊(duì)中最優(yōu)秀的球員之一",
"Larry Bird 是一位標(biāo)志性的NBA球員。",
]
# 初始化 HuggingFaceEmbeddings
embeddings =HuggingFaceEmbeddings(model_name="bert-base-chinese")

第三步:創(chuàng)建Retriever并查詢相關(guān)信息

# 創(chuàng)建一個(gè) retriever
retriever = Chroma.from_texts(texts, embedding=embeddings).as_retriever(
    search_kwargs={"k": 10}
)

query = "請(qǐng)告訴我關(guān)于白骨精的事情"
 
# Get relevant documents ordered by relevance score
docs = retriever.get_relevant_documents(query)
for doc in docs:
    print(doc.page_content)

運(yùn)行結(jié)果:

在《西游記》中,孫悟空三打白骨精時(shí),白骨精分別變成了村姑、老婦和老翁這三種形態(tài)。孫悟空三大白骨精是西游記中一段精彩的篇章。
這是關(guān)于波士頓凱爾特人的一篇文章。
我最喜歡的游戲是《黑神話:悟空》
L. Kornet 是凱爾特人隊(duì)中最優(yōu)秀的球員之一
《Fly me to the moon》 是我最喜歡的歌曲之一。
凱爾特人是我最喜歡的球隊(duì)。
Larry Bird 是一位標(biāo)志性的NBA球員。
籃球是一項(xiàng)很棒的運(yùn)動(dòng)。
波士頓凱爾特人以20分的優(yōu)勢(shì)贏得了比賽。

第四步:使用LongContextReorder進(jìn)行重排序

reordering = LongContextReorder()
reordered_docs = reordering.transform_documents(docs)
 
for doc in reordered_docs:
    print(doc.page_content)

運(yùn)行結(jié)果:

在《西游記》中,孫悟空三打白骨精時(shí),白骨精分別變成了村姑、老婦和老翁這三種形態(tài)。孫悟空三大白骨精是西游記中一段精彩的篇章。
我最喜歡的游戲是《黑神話:悟空》
《Fly me to the moon》 是我最喜歡的歌曲之一。
Larry Bird 是一位標(biāo)志性的NBA球員。
波士頓凱爾特人以20分的優(yōu)勢(shì)贏得了比賽。
籃球是一項(xiàng)很棒的運(yùn)動(dòng)。
凱爾特人是我最喜歡的球隊(duì)。
L. Kornet 是凱爾特人隊(duì)中最優(yōu)秀的球員之一
這是關(guān)于波士頓凱爾特人的一篇文章。

對(duì)比上面的結(jié)果,可以看到,通過使用 LongContextReorder,可以將文檔重新排序,將與西游相關(guān)的信息排在前面,有助于提高模型的理解能力。

ElasticSearchBM25Retriever

簡(jiǎn)介: ElasticSearchBM25Retriever使用BM25算法,這是信息檢索中的一種經(jīng)典方法,廣泛應(yīng)用于ElasticSearch等搜索引擎中。

功能: BM25是一種基于概率模型的檢索算法,能夠根據(jù)文檔和查詢之間的詞頻和逆文檔頻率,計(jì)算文檔的相關(guān)性得分。

使用場(chǎng)景: ElasticSearchBM25Retriever適用于需要高效文本搜索的場(chǎng)景,尤其是在需要處理大量非結(jié)構(gòu)化文本數(shù)據(jù)時(shí)。它在搜索引擎優(yōu)化和文本挖掘中非常有用。

使用方法

第一步:安裝必要的庫(kù)

pip install elasticsearch langchain

第二步:安裝Elasticsearch并啟動(dòng)服務(wù)

  1. 1. 啟動(dòng)Elasticsearch的Docker容器,確保 Elasticsearch 服務(wù)正在運(yùn)行。
  2. 2. 在瀏覽器中訪問 http://localhost:9200 可以得到如下內(nèi)容。
  3. 大模型之深入了解Retrievers解析器-AI.x社區(qū)

說明:Elasticsearch 的安裝方法較長(zhǎng),由于不是本章的主線內(nèi)容,所以我將這方面內(nèi)容放在附錄部分。

第三步:準(zhǔn)備數(shù)據(jù)并創(chuàng)建索引

from elasticsearch importElasticsearch
from langchain.retrievers importElasticSearchBM25Retriever

elasticsearch_url ="http://elastic:mytest@localhost:9200"


# 創(chuàng)建檢索器
retriever =ElasticSearchBM25Retriever.create(elasticsearch_url,"langchain-index-5")

# 準(zhǔn)備測(cè)試數(shù)據(jù)
documents =[
"籃球是一項(xiàng)很棒的運(yùn)動(dòng)。",
"《Fly me to the moon》 是我最喜歡的歌曲之一。",
"凱爾特人是我最喜歡的球隊(duì)。",
"這是關(guān)于波士頓凱爾特人的一篇文章。",
"我最喜歡的游戲是《黑神話:悟空》"
]

# 添加文本
retriever.add_texts(documents)

運(yùn)行結(jié)果:

['39c92ff7-4aba-42fb-bc88-2997b5e0c297',
 'b1e9c357-b67c-43e0-bf95-2591c9e2a103',
 'e4f964cf-92a0-4b4a-b648-9d0c2f8594b0',
 '9edcfd38-e954-4bb1-b0d5-68ebf13b3443',
 'ea0fc62f-6afd-4e27-9f85-a357ef9221a3']

說明: ??http://elastic:mytest@localhost:9200?? 中:

  • ??elastic?? 是用戶名
  • ??mytest?? 是密碼

第四步:使用 ??retriever?? 進(jìn)行查詢

# 查詢
query ="請(qǐng)告訴我關(guān)于凱爾特人的事情"
try:
    docs = retriever.get_relevant_documents(query)

# 輸出結(jié)果
for doc in docs:
print(doc.page_content)
print("-"*20)
exceptExceptionas e:
print(f"An error occurred: {e}")

運(yùn)行結(jié)果:

這是關(guān)于波士頓凱爾特人的一篇文章。
--------------------
凱爾特人是我最喜歡的球隊(duì)。
--------------------
我最喜歡的游戲是《黑神話:悟空》
--------------------
《Fly me to the moon》 是我最喜歡的歌曲之一。
--------------------
籃球是一項(xiàng)很棒的運(yùn)動(dòng)。
--------------------

附錄

ElasticSearch的Docker安裝教程

由于在系統(tǒng)環(huán)境中安裝ElasticSearch非常繁瑣,需要安裝(JDK等)基礎(chǔ)環(huán)境,所以我們使用Docker來安裝ElasticSearch。

安裝Docker

Docker的安裝教程比較多且詳細(xì),所以本文不再贅述,詳情請(qǐng)查看: 10分鐘學(xué)會(huì)Docker的安裝和使用

創(chuàng)建網(wǎng)絡(luò)

docker network create es-net

運(yùn)行結(jié)果:

大模型之深入了解Retrievers解析器-AI.x社區(qū)

拉取鏡像

docker pull elasticsearch:8.6.0

運(yùn)行結(jié)果:

大模型之深入了解Retrievers解析器-AI.x社區(qū)

創(chuàng)建掛載點(diǎn)目錄

# 選擇合適的目錄創(chuàng)建三個(gè)文件夾
mkdir -p /Users/deadwalk/Code/elasticsearch/data /Users/deadwalk/Code/elasticsearch/config /Users/deadwalk/Code/elasticsearch/plugins

運(yùn)行結(jié)果:

大模型之深入了解Retrievers解析器-AI.x社區(qū)

啟動(dòng)容器

命令行中輸入命令啟動(dòng)Docker容器

docker run -d \
--restart=always \
--name es \
--network es-net \
-p 9200:9200 \
-p 9300:9300 \
--privileged \
-v /Users/deadwalk/Code/elasticsearch/data:/usr/share/elasticsearch/data \
-v /Users/deadwalk/Code/elasticsearch/plugins:/usr/share/elasticsearch/plugins \
-e "discovery.type=single-node" \
-e "ES_JAVA_OPTS=-Xms512m -Xmx512m" \
elasticsearch:8.6.0

運(yùn)行結(jié)果:

大模型之深入了解Retrievers解析器-AI.x社區(qū)

使用 ??docker ps?? 可以看到Docker容器已經(jīng)啟動(dòng)。

大模型之深入了解Retrievers解析器-AI.x社區(qū)

修改elasticsearch的密碼

第一步:進(jìn)入es容器

docker exec -it es /bin/bash

第二步:命令行輸入重置密碼命令

bin/elasticsearch-reset-password -i -u elastic

根據(jù)提示重置密碼,例如:mytest

第三步:使用瀏覽器訪問http://localhost:9200/ 使用用戶名 ??elastic??? 和重置的密碼 ??mytest?? ,驗(yàn)證可以登錄。

大模型之深入了解Retrievers解析器-AI.x社區(qū)

內(nèi)容小結(jié)

  • RAG系統(tǒng)在進(jìn)行Load->Split->Embedding->Store->Query流程時(shí),需要使用??Retriever?? 進(jìn)行文檔檢索。
  • Retriever進(jìn)行文檔檢索時(shí),有兩種方法構(gòu)建Chain鏈:一種是傳統(tǒng)的管道符構(gòu)建,另一種是使用??create_retrieval_chain?? 。
  • 使用Retriever時(shí),除了基礎(chǔ)的向量存儲(chǔ)檢索器之外,還可以使用多查詢檢索器(??MultiQueryRetriever??)、結(jié)合檢索器(??EnsembleRetriever??)等。
  • ??MultiQueryRetriever?? 是一種檢索算法,它通過使用大型語言模型(LLM)生成多個(gè)查詢,從而自動(dòng)化提示調(diào)優(yōu)過程。
  • ??MultiQueryRetriever?? 的工作流程如下:

     1.??MultiQueryRetriever??? 會(huì)借助大模型生成新的多個(gè)查詢 ??queries;??

     2.??MultiQueryRetriever??? 會(huì)通過這些 ??queries?? 檢索出相關(guān)的文檔;

     3.最后,通過 ??combine_docs_chain?? 將檢索出的文檔交給大模型得到最終答案。

  • ??EnsembleRetriever?? 是一種結(jié)合多個(gè)檢索器結(jié)果的算法,通過重新排序來提高檢索效果。
  • BM25Retriever 是一種基于經(jīng)典信息檢索模型 BM25 的檢索器。
  • FAISS(Facebook AI Similarity Search) 是一個(gè)高效的相似性搜索庫(kù),專門用于處理大規(guī)模向量數(shù)據(jù)。
  • EnsembleRetriever 可以將 BM25Retriever 和 FAISS 組合使用,從而提高整體檢索的準(zhǔn)確性和全面性。
  • LongContextReorder 是一種用于處理長(zhǎng)上下文信息的技術(shù),旨在提高模型在長(zhǎng)文本中的信息提取和理解能力。
  • ElasticSearchBM25Retriever 可以與開源搜索引擎 ElasticSearch 進(jìn)行交互,以實(shí)現(xiàn)向量搜索。


本文轉(zhuǎn)載自公眾號(hào)一起AI技術(shù) 作者:熱情的Dongming

原文鏈接:??https://mp.weixin.qq.com/s/8FhQ2Svp6E15c08OgSCUxQ??

?著作權(quán)歸作者所有,如需轉(zhuǎn)載,請(qǐng)注明出處,否則將追究法律責(zé)任
標(biāo)簽
收藏
回復(fù)
舉報(bào)
回復(fù)
相關(guān)推薦
国产午夜在线视频| 久久免费看少妇高潮v片特黄| 日本伦理一区二区| 久久综合国产精品| 国产欧美在线看| 欧美丰满艳妇bbwbbw| 日韩有码中文字幕在线| 欧美日韩国产美| 国产日韩欧美精品在线观看| 精品无吗乱吗av国产爱色| 久久97超碰色| 欧美性一区二区三区| 免费黄色激情视频| 日韩av字幕| 欧美一区二区三区系列电影| 给我免费播放片在线观看| 成人在线观看黄色| 99久久精品国产导航| 国产一区玩具在线观看| 一区二区三区视频免费看| 久久在线免费| 亚洲人成电影在线| 欧美图片自拍偷拍| 99久久亚洲国产日韩美女| 一区二区成人在线| 视频在线精品一区| 天天综合在线视频| 粉嫩蜜臀av国产精品网站| 国产精品久久色| 日韩 欧美 综合| 91成人国产| 中文字幕国产日韩| 色欲av无码一区二区三区| 99精品国产一区二区三区2021 | 日本a级片视频| 精品久久视频| 亚洲乱码国产乱码精品精天堂| 国产精品中文久久久久久| 成人福利一区二区| 欧美性生交xxxxxdddd| 亚洲精品久久久久久久蜜桃臀| 在线播放毛片| 中文字幕+乱码+中文字幕一区| 久久精品99| 俄罗斯嫩小性bbwbbw| 国产麻豆一精品一av一免费 | 日韩电影精品| 欧美亚洲综合网| 国产真人无码作爱视频免费| 日韩激情电影| 黄色一区二区三区| 国产老熟妇精品观看| 51漫画成人app入口| 亚洲影院理伦片| 真人做人试看60分钟免费| 午夜视频在线| 成人欧美一区二区三区小说| 亚洲一区二区四区| 麻豆影视在线观看_| 国产精品久久久久久久久搜平片 | 夜夜嗨av一区二区三区网页| www.-级毛片线天内射视视| 日韩伦理在线电影| 亚洲人成人一区二区在线观看| 亚洲精品成人三区| 日本精品一区二区三区在线播放| 中文字幕免费不卡在线| 亚洲精品成人久久久998| 视频免费一区| 1区2区3区欧美| 男人日女人的bb| 久草成色在线| 欧美视频在线观看免费| 日韩精品一区二区三区不卡| 激情开心成人网| 欧美三级韩国三级日本三斤| 污色网站在线观看| 日本99精品| 精品国产乱码久久久久久闺蜜 | 国产精品视频一区二区三区综合| 67194成人在线观看| 丰满人妻一区二区三区53视频| 视频一区视频二区欧美| 亚洲成年人在线| 中文字幕免费视频| 99精品综合| 欧美精品videossex88| 在线观看黄网站| 欧美aaaaaa午夜精品| 亚洲r级在线观看| 无码国产精品一区二区免费16| 91性感美女视频| 亚洲一区bb| 黄网av在线| 欧美最猛黑人xxxxx猛交| 亚洲精品在线网址| 中文字幕精品影院| 久久视频在线播放| 日韩少妇裸体做爰视频| 蜜臀国产一区二区三区在线播放| 91传媒视频免费| 欧美孕妇性xxxⅹ精品hd| 欧美激情自拍偷拍| av动漫免费观看| 男人天堂视频在线观看| 欧美狂野另类xxxxoooo| 日本一区二区在线免费观看| 日韩高清欧美| 国内成人精品一区| 国产又粗又猛又爽| 久久久久国产精品厨房| 欧美日韩中文字幕在线播放| 春暖花开亚洲一区二区三区| 日韩精品一区在线观看| 大吊一区二区三区| 日韩一区二区久久| 亚洲精品欧美日韩专区| 国产女主播在线直播| 亚洲国产精品久久人人爱蜜臀| 亚洲无吗一区二区三区| 精品精品国产毛片在线看| 日韩在线观看你懂的| 亚洲第一精品在线观看| 国产高清亚洲一区| 亚洲一区三区电影在线观看| 欧美gv在线| 精品日韩欧美在线| 国产精品免费人成网站酒店| 久久久久在线| 精品久久精品久久| 国产盗摄一区二区| 在线综合视频播放| 99成人在线观看| 老司机精品视频网站| 国产亚洲二区| 日韩少妇视频| 日韩一区二区电影在线| 免费91在线观看| 免费观看日韩av| 日本精品一区| 第四色男人最爱上成人网| 日韩第一页在线| 91精品国产高潮对白| 国产成人自拍网| 中文字幕第一页亚洲| 伊人久久综合网另类网站| 在线观看欧美日韩国产| 波多野结衣在线电影| 久久亚洲春色中文字幕久久久| 男女猛烈激情xx00免费视频| 哺乳挤奶一区二区三区免费看| 欧美成人网在线| 国产精品爽爽久久| 亚洲视频免费在线观看| 三级一区二区三区| 一区二区三区国产精华| 成人免费视频97| 成人免费高清| 日韩一级片在线播放| 麻豆chinese极品少妇| 国产呦萝稀缺另类资源| 精品一区二区三区毛片| 成人亚洲精品| 欧美激情久久久久| 欧美亚洲精品在线观看| 精品magnet| 无码国产69精品久久久久同性| 久久国产欧美| 亚洲一区二区三区乱码| 97精品资源在线观看| 欧美精品在线观看91| 性做久久久久久久久久| 婷婷综合另类小说色区| 中文字幕人妻一区二区| 美女视频第一区二区三区免费观看网站 | 亚洲精品国产系列| 久久国产精品免费一区二区三区| 欧美日本亚洲视频| 欧美一级在线免费观看 | 中文字字幕在线中文乱码| 中文字幕一区日韩精品欧美| 午夜诱惑痒痒网| 亚洲国产免费| 日韩中文一区二区三区| 99精品在线免费观看| 午夜精品久久久久久久久久久久| 亚洲av成人无码久久精品老人 | 欧美成人高清视频| 黄色av小说在线观看| 色综合天天在线| 日本一二三区在线观看| 成人国产视频在线观看| 久章草在线视频| 在线精品小视频| 久久久久久久久久码影片| 成人片免费看| 久久国产精品免费视频| 性xxxx视频| 欧美日韩一区三区| 日本熟妇一区二区| 中文字幕在线不卡一区二区三区| 日本xxxx免费| 久久综合导航| 欧美高清中文字幕| 日本一区二区高清不卡| 国产精品日韩一区二区免费视频| 国产精品高清乱码在线观看 | 熟女少妇a性色生活片毛片| 成人午夜电影网站| 青青草原国产在线视频| 亚洲黄色视屏| 成人在线观看www| 精品久久影院| 久久久久久久久一区二区| 先锋影音一区二区| 国产精品成人aaaaa网站| 日韩伦理av| 久久精彩免费视频| 欧美捆绑视频| 亚洲国产精品va| 国产suv精品一区二区69| 色激情天天射综合网| 欧美不卡视频在线观看| 亚洲免费观看视频| www成人啪啪18软件| 91污在线观看| 第四色在线视频| 国产精品888| 色国产在线视频| 久久狠狠婷婷| 国产最新免费视频| 韩日成人在线| www.国产在线播放| 欧美黄色精品| 米仓穗香在线观看| 99re66热这里只有精品8| 日韩免费三级| 国产一区二区三区四区大秀| 精品一区二区日本| 精品女人视频| 国产日韩精品推荐| 成人动态视频| 国产精品一区二| 日韩欧美另类中文字幕| 91在线高清免费观看| 亚洲伦理久久| 成人看片人aa| 粉嫩av国产一区二区三区| 成人精品aaaa网站| 四虎影视成人精品国库在线观看| 国产精品视频xxxx| 欧美高清影院| 91精品在线观| 秋霞影院一区| 国产精品国产一区二区| 波多野结衣在线一区二区| 国产乱码精品一区二区三区卡| www.国产精品一区| 精品国产一区二区三区免费| 精品综合久久88少妇激情| 久久精品人成| 精品国产一区二区三区噜噜噜| 日本一区网站| 色综合天天爱| 黄色a级在线观看| 欧美日韩国产精品一区二区亚洲| 亚洲精品少妇一区二区| 精品动漫3d一区二区三区免费版| 激情小视频网站| 国产精品入口| 天天干天天草天天| 国产九色精品成人porny| 丰满熟女人妻一区二区三区| 成人免费观看av| 精品成人av一区二区三区| 国产精品网站一区| 99久久99久久精品国产| 亚洲6080在线| 丰满熟女人妻一区二区三| 欧美猛男男办公室激情| xxxx18国产| 亚洲欧美日韩天堂一区二区| 在线免费观看黄色av| 久久人体大胆视频| 国产在线精彩视频| 国产精品视频公开费视频| 国产免费av国片精品草莓男男| 国产精品裸体一区二区三区| 久草成人在线| 乱子伦一区二区| 亚洲综合国产激情另类一区| 8x8x成人免费视频| 99久久精品99国产精品| 99国产精品无码| 婷婷久久综合九色综合绿巨人| 成人免费毛片视频| 日韩精品一区二区三区三区免费| 色在线免费视频| 超碰精品一区二区三区乱码| 桃色av一区二区| 亚洲一区久久久| 精品在线91| 人妻激情另类乱人伦人妻| 日韩在线播放一区二区| 久久黄色一级视频| 中文字幕精品一区二区精品绿巨人 | 欧美成人黄色小视频| 免费日韩电影| 国产精品福利视频| 外国成人激情视频| 男人透女人免费视频| 国产成人综合亚洲网站| 青娱乐国产视频| 天天影视网天天综合色在线播放| 国产精品高潮呻吟AV无码| 亚洲欧美精品一区| 欧美24videosex性欧美| 成人a免费视频| 成人一区二区| 久久久999视频| 粉嫩久久99精品久久久久久夜| 中文字幕第69页| 色先锋aa成人| 日韩一级免费毛片| 欧美久久久精品| 四虎精品永久免费| 亚洲电影免费| 久久精品免费| 亚洲av无码一区二区三区网址| 亚洲婷婷在线视频| 在线观看国产成人| 亚洲图片欧美日产| 美女av在线免费看| av成人观看| 亚洲精品一二三区区别| 日韩av.com| 国产精品美女一区二区| 波多野结衣激情视频| 亚洲欧美国产另类| 91av亚洲| 欧美日韩免费高清| 先锋a资源在线看亚洲| 亚洲久久久久久| 五月激情六月综合| 天堂中文在线资源| 97精品一区二区视频在线观看| av男人一区| 久久久久99精品成人片| 成人永久免费视频| 日本少妇性生活| 亚洲精品久久视频| 欧美aa一级| 欧美系列一区| 日韩av电影天堂| 长河落日免费高清观看| 欧美美女bb生活片| 国产写真视频在线观看| 亚洲综合第一页| 国内精品美女在线观看| 亚洲美女在线播放| 午夜精品久久久久久久久| 亚洲欧美色视频| 国产精品v日韩精品| 成人在线视频免费观看| xxxx在线免费观看| 一区二区三区鲁丝不卡| 人妻妺妺窝人体色www聚色窝| 97在线观看视频| 中文字幕精品影院| 亚洲免费999| 亚洲网友自拍偷拍| 人操人视频在线观看| 国产精品 欧美在线| 欧美jizz| 99免费观看视频| 欧美午夜无遮挡| 午夜视频在线| 国产精品一区二区免费| 亚洲在线成人| 三级在线观看免费大全| 亚洲福利视频专区| 日韩一区精品| 91国在线高清视频| www精品美女久久久tv| 亚洲一区在线观| 国产综合在线视频| 国产免费久久| 国产精品探花在线播放| 五月激情丁香一区二区三区| 成人精品一区二区三区校园激情| 92裸体在线视频网站| 99精品国产一区二区青青牛奶| 国产在线综合视频| 精品国产乱码久久久久久夜甘婷婷| 在线观看福利电影| 亚洲高潮无码久久| 久久久久久久精| 国产乱人乱偷精品视频a人人澡 | 新片速递亚洲合集欧美合集| 中文字幕av久久|