国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

利用 LangChain 和 Neo4j 向量索引,構(gòu)建一個(gè)RAG應(yīng)用程序

這篇具有很好參考價(jià)值的文章主要介紹了利用 LangChain 和 Neo4j 向量索引,構(gòu)建一個(gè)RAG應(yīng)用程序。希望對大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問。

Neo4j 在5.11版本中將向量搜索功能完全集成到 Neo4j AuraDB 和 Neo4j 圖數(shù)據(jù)庫中。隨后對 Neo4j 向量檢索的全面支持也被集成到了 LangChain 庫中。

Neo4j 向量檢索已成為檢索增強(qiáng)生成 (RAG) 應(yīng)用程序領(lǐng)域的關(guān)鍵工具,特別是在處理結(jié)構(gòu)化和非結(jié)構(gòu)化數(shù)據(jù)方面。LangChain 庫是構(gòu)建大型語言模型 (LLM) 應(yīng)用程序的重要框架。

這種集成有助于將數(shù)據(jù)有效地?cái)z取到 Neo4j Vector Index 中,簡化了 RAG 應(yīng)用程序中的數(shù)據(jù)攝取和查詢,并能夠構(gòu)建有效的 RAG 應(yīng)用程序,通過利用結(jié)構(gòu)化和非結(jié)構(gòu)化數(shù)據(jù)提供實(shí)時(shí)、準(zhǔn)確且與上下文相關(guān)的答案。它支持?jǐn)?shù)據(jù)攝取和讀取工作流程,對于使用 RAG 架構(gòu)開發(fā)問答聊天機(jī)器人特別有用。

這篇文章將演示如何利用 LangChain 將數(shù)據(jù)有效攝取到 Neo4j 向量索引中,然后構(gòu)建一個(gè)簡單而有效的 RAG 應(yīng)用程序。

利用 LangChain 和 Neo4j 向量索引,構(gòu)建一個(gè)RAG應(yīng)用程序,NLP與大模型,大模型實(shí)戰(zhàn),langchain,neo4j,大模型,大語言模型,深度學(xué)習(xí),人工智能

本教程將包含以下步驟:

  • 使用 LangChain 文檔閱讀器閱讀維基百科文章

  • 將文本分塊

  • 將文本存儲(chǔ)在 Neo4j 中并使用新添加的向量索引對其進(jìn)行索引

  • 實(shí)施問答工作流程以支持 RAG 應(yīng)用程序。

用通俗易懂方式講解系列

  • 用通俗易懂的方式講解:自然語言處理初學(xué)者指南(附1000頁的PPT講解)
  • 用通俗易懂的方式講解:NLP 這樣學(xué)習(xí)才是正確路線
  • 用通俗易懂的方式講解:28張圖全解深度學(xué)習(xí)知識(shí)!
  • 用通俗易懂的方式講解:不用再找了,這就是 NLP 方向最全面試題庫
  • 用通俗易懂的方式講解:實(shí)體關(guān)系抽取入門教程
  • 用通俗易懂的方式講解:靈魂 20 問幫你徹底搞定Transformer
  • 用通俗易懂的方式講解:大模型算法面經(jīng)指南(附答案)
  • 用通俗易懂的方式講解:十分鐘部署清華 ChatGLM-6B,實(shí)測效果超預(yù)期
  • 用通俗易懂的方式講解:內(nèi)容講解+代碼案例,輕松掌握大模型應(yīng)用框架 LangChain
  • 用通俗易懂的方式講解:如何用大語言模型構(gòu)建一個(gè)知識(shí)問答系統(tǒng)
  • 用通俗易懂的方式講解:最全的大模型 RAG 技術(shù)概覽

技術(shù)交流群

前沿技術(shù)資訊、算法交流、求職內(nèi)推、算法競賽、面試交流(校招、社招、實(shí)習(xí))等、與 10000+來自港科大、北大、清華、中科院、CMU、騰訊、百度等名校名企開發(fā)者互動(dòng)交流~

我們建了NLP面試與技術(shù)交流群, 想要進(jìn)交流群、需要源碼&資料、提升技術(shù)的同學(xué),可以直接加微信號(hào):mlc2060。加的時(shí)候備注一下:研究方向 +學(xué)校/公司+CSDN,即可。然后就可以拉你進(jìn)群了。

方式①、添加微信號(hào):mlc2060,備注:技術(shù)交流
方式②、微信搜索公眾號(hào):機(jī)器學(xué)習(xí)社區(qū),后臺(tái)回復(fù):技術(shù)交流

利用 LangChain 和 Neo4j 向量索引,構(gòu)建一個(gè)RAG應(yīng)用程序,NLP與大模型,大模型實(shí)戰(zhàn),langchain,neo4j,大模型,大語言模型,深度學(xué)習(xí),人工智能

01 Neo4j 環(huán)境設(shè)置

我們需要設(shè)置 Neo4j 5.11 或更高版本才能完成本文章中的示例。最簡單的方法是在 Neo4j Aura 上啟動(dòng)一個(gè)免費(fèi)實(shí)例,它提供 Neo4j 數(shù)據(jù)庫的云實(shí)例。或者,我們還可以通過下載 Neo4j Desktop 應(yīng)用程序并創(chuàng)建本地?cái)?shù)據(jù)庫實(shí)例來設(shè)置 Neo4j 數(shù)據(jù)庫的本地實(shí)例。

首先安裝 langchain openai wikipedia tiktoken neo4j 包

pip install langchain openai wikipedia tiktoken neo4j

然后導(dǎo)入配置

import os

from langchain.vectorstores.neo4j_vector import Neo4jVector
from langchain.document_loaders import WikipediaLoader
from langchain.embeddings.openai import OpenAIEmbeddings
from langchain.text_splitter import CharacterTextSplitter

os.environ['OPENAI_API_KEY'] = "API_KEY"

02 閱讀和分塊維基百科文章

我們將從閱讀和分塊維基百科文章開始。這個(gè)過程非常簡單,因?yàn)?LangChain 集成了維基百科文檔加載器以及文本分塊模塊。

from langchain.document_loaders import WikipediaLoader
from langchain.text_splitter import CharacterTextSplitter

# Read the wikipedia article
raw_documents = WikipediaLoader(query="Leonhard Euler").load()
# Define chunking strategy
text_splitter = CharacterTextSplitter.from_tiktoken_encoder(
    chunk_size=1000, chunk_overlap=20
)
# Chunk the document
documents = text_splitter.split_documents(raw_documents)

# Remove summary from metadata
for d in documents:
    del d.metadata['summary']

由于 Neo4j 是一個(gè)圖形數(shù)據(jù)庫,使用有關(guān) Leonhard Euler 的維基百科文章作為示例是比較合適的。接下來,我們使用 tiktoken 文本分塊模塊,該模塊使用 OpenAI 制作的分詞器,將文章分成具有1000個(gè)標(biāo)記的塊。我們可以在本文中了解有關(guān)文本分塊策略的更多信息。

LangChain WikipediaLoader 默認(rèn)為每個(gè)塊添加一個(gè)摘要。我認(rèn)為添加的摘要有點(diǎn)多余。例如,如果我們使用向量相似性搜索來檢索前三個(gè)結(jié)果,則摘要將重復(fù)三次。因此,我決定將其從數(shù)據(jù)集中刪除。

03 使用 Neo4j 存儲(chǔ)文本并為其建立索引

LangChain 可以輕松地將文檔導(dǎo)入 Neo4j 并使用新添加的向量索引對其進(jìn)行索引,官方盡可能地使其用戶友好,這意味著我們無需了解有關(guān) Neo4j 或圖形的任何知識(shí)即可使用它。另一方面,官方為更有經(jīng)驗(yàn)的用戶提供了幾個(gè)自定義選項(xiàng),這些選項(xiàng)官方都會(huì)出單獨(dú)的文章進(jìn)行介紹。

Neo4j 向量索引被包裝為 LangChain 向量存儲(chǔ),因此遵循用于與其他向量數(shù)據(jù)庫交互的語法。

from langchain.vectorstores import Neo4jVector
from langchain.embeddings.openai import OpenAIEmbeddings

# Neo4j Aura credentials
url="neo4j+s://.databases.neo4j.io"
username="neo4j"
pd="<insert password>"

# Instantiate Neo4j vector from documents
neo4j_vector = Neo4jVector.from_documents(
    documents,
    OpenAIEmbeddings(),
    url=url,
    username=username,
    password=pd
)

該 from_documents 方法連接到 Neo4j 數(shù)據(jù)庫,導(dǎo)入并嵌入文檔,并創(chuàng)建向量索引。默認(rèn)情況下,數(shù)據(jù)將表示為“Chunk”節(jié)點(diǎn)。如前所述,我們可以自定義數(shù)據(jù)的存儲(chǔ)方式以及返回哪些數(shù)據(jù)。不過,這將在下面的文章中討論。

如果我們已有包含填充數(shù)據(jù)的現(xiàn)有向量索引,則可以使用該 from_existing_index 方法。

04 向量相似度搜索

我們將從簡單的向量相似性搜索開始,以驗(yàn)證一切是否按預(yù)期工作。

query = "Where did Euler grow up?"

results = neo4j_vector.similarity_search(query, k=1)
print(results[0].page_content)

結(jié)果如下:

利用 LangChain 和 Neo4j 向量索引,構(gòu)建一個(gè)RAG應(yīng)用程序,NLP與大模型,大模型實(shí)戰(zhàn),langchain,neo4j,大模型,大語言模型,深度學(xué)習(xí),人工智能

LangChain 模塊使用指定的嵌入函數(shù)(本例中為 OpenAI)嵌入問題,然后通過比較用戶問題和索引文檔之間的余弦相似度來找到最相似的文檔。

Neo4j 向量索引還支持歐幾里得相似度度量以及余弦相似度。

05 LangChain 問答工作流程

LangChain 的好處是它支持僅使用一兩行代碼的問答工作流程。例如,如果我們想要?jiǎng)?chuàng)建一個(gè)問答系統(tǒng),根據(jù)提供的上下文生成答案,同時(shí)還提供它用作上下文的文檔,我們可以使用以下代碼。

from langchain.chat_models import ChatOpenAI
from langchain.chains import RetrievalQAWithSourcesChain

chain = RetrievalQAWithSourcesChain.from_chain_type(
    ChatOpenAI(temperature=0),
    chain_type="stuff",
    retriever=neo4j_vector.as_retriever()
)

query = "What is Euler credited for popularizing?"

chain(
    {"question": query},
    return_only_outputs=True,
)

結(jié)果如下:

利用 LangChain 和 Neo4j 向量索引,構(gòu)建一個(gè)RAG應(yīng)用程序,NLP與大模型,大模型實(shí)戰(zhàn),langchain,neo4j,大模型,大語言模型,深度學(xué)習(xí),人工智能

正如我們所看到的,LLM 根據(jù)提供的維基百科文章構(gòu)建了準(zhǔn)確的答案,但也返回了它使用的源文檔。我們只需要一行代碼就可以實(shí)現(xiàn)這一點(diǎn)。

在測試代碼時(shí),我注意到并不總是返回源代碼。這里的問題不是 Neo4j Vector 實(shí)現(xiàn),而是 GPT-3.5-turbo。有時(shí),它不聽指令返回源文檔。但是,如果我們使用 GPT-4,問題就會(huì)消失。

最后,為了復(fù)制 ChatGPT 界面,我們可以添加一個(gè)內(nèi)存模塊,該模塊還為 LLM 提供對話歷史記錄,以便我們可以提出后續(xù)問題。同樣,我們只需要兩行代碼。

from langchain.chains import ConversationalRetrievalChain
from langchain.memory import ConversationBufferMemory

memory = ConversationBufferMemory(memory_key="chat_history", return_messages=True)
qa = ConversationalRetrievalChain.from_llm(
    ChatOpenAI(temperature=0), neo4j_vector.as_retriever(), memory=memory)

現(xiàn)在我們來測試一下。

print(qa({"question": "What is Euler credited for popularizing?"})["answer"])

結(jié)果如下:

利用 LangChain 和 Neo4j 向量索引,構(gòu)建一個(gè)RAG應(yīng)用程序,NLP與大模型,大模型實(shí)戰(zhàn),langchain,neo4j,大模型,大語言模型,深度學(xué)習(xí),人工智能

現(xiàn)在是一個(gè)后續(xù)問題。

print(qa({"question": "Where did he grow up?"})["answer"])

結(jié)果如下:

利用 LangChain 和 Neo4j 向量索引,構(gòu)建一個(gè)RAG應(yīng)用程序,NLP與大模型,大模型實(shí)戰(zhàn),langchain,neo4j,大模型,大語言模型,深度學(xué)習(xí),人工智能

總結(jié)

向量索引是 Neo4j 的一個(gè)重要補(bǔ)充,使其成為處理 RAG 應(yīng)用程序的結(jié)構(gòu)化和非結(jié)構(gòu)化數(shù)據(jù)的出色解決方案。希望 LangChain 集成能夠簡化將向量索引集成到現(xiàn)有或新的 RAG 應(yīng)用程序中的過程,這樣我們就不必?fù)?dān)心細(xì)節(jié)。請記住,LangChain 已經(jīng)支持生成 Cypher 語句并使用它們來檢索上下文,因此我們現(xiàn)在可以使用它來檢索結(jié)構(gòu)化和非結(jié)構(gòu)化信息。

參考文獻(xiàn)

https://medium.com/neo4j/langchain-library-adds-full-support-for-neo4j-vector-index-fa94b8eab334文章來源地址http://www.zghlxwxcb.cn/news/detail-804756.html

到了這里,關(guān)于利用 LangChain 和 Neo4j 向量索引,構(gòu)建一個(gè)RAG應(yīng)用程序的文章就介紹完了。如果您還想了解更多內(nèi)容,請?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • Neo4j簡單構(gòu)建知識(shí)圖譜實(shí)例

    Neo4j簡單構(gòu)建知識(shí)圖譜實(shí)例

    目錄 ?一、需要兩組數(shù)據(jù) 二、提取所需專題數(shù)據(jù) 三、利用結(jié)巴分詞將專題數(shù)據(jù)分詞 四、連接并繪制知識(shí)圖譜 五、消除重復(fù)節(jié)點(diǎn)及重復(fù)關(guān)系 六、結(jié)果展示 Ps:在使用Neo4j前,需要先在該安裝路徑文件下cmd運(yùn)行,輸入neo4j console 即可啟動(dòng),可根據(jù)關(guān)閉時(shí)輸入neo4j stop,如下圖所示

    2023年04月12日
    瀏覽(17)
  • 使用 Neo4j 和 LangChain 集成非結(jié)構(gòu)化知識(shí)圖增強(qiáng) QA

    使用 Neo4j 和 LangChain 集成非結(jié)構(gòu)化知識(shí)圖增強(qiáng) QA

    目前基于大模型的信息檢索有兩種方法,一種是基于微調(diào)的方法,一種是基于 RAG 的方法。 信息檢索和知識(shí)提取是一個(gè)不斷發(fā)展的領(lǐng)域,隨著大型語言模型(LLM)和知識(shí)圖的出現(xiàn),這一領(lǐng)域發(fā)生了顯著的變化,特別是在多跳問答的背景下。 接下來我們繼續(xù)深入,跟著文章完成

    2024年01月18日
    瀏覽(25)
  • 知識(shí)圖譜構(gòu)建: Neo4j 常見實(shí)例應(yīng)用

    知識(shí)圖譜構(gòu)建: Neo4j 常見實(shí)例應(yīng)用

    社交網(wǎng)絡(luò)圖:存儲(chǔ)用戶之間的關(guān)系和聯(lián)系,如朋友關(guān)系、粉絲關(guān)系等。 產(chǎn)品推薦系統(tǒng):利用用戶的歷史購買記錄和評分?jǐn)?shù)據(jù),推薦相似的產(chǎn)品。 客戶關(guān)系管理:存儲(chǔ)企業(yè)和客戶之間的聯(lián)系,包括聯(lián)系信息、交易記錄等。 知識(shí)圖譜:存儲(chǔ)各種實(shí)體之間的關(guān)系,如人物、事件、

    2024年02月10日
    瀏覽(34)
  • 使用Neo4j構(gòu)建企業(yè)級別的數(shù)據(jù)倉庫

    數(shù)據(jù)倉庫是企業(yè)在現(xiàn)代數(shù)字時(shí)代中非常重要的技術(shù)基礎(chǔ)設(shè)施之一。隨著數(shù)據(jù)的規(guī)模不斷擴(kuò)大,傳統(tǒng)的關(guān)系型數(shù)據(jù)庫已經(jīng)無法滿足企業(yè)對數(shù)據(jù)處理和分析的需求。因此,企業(yè)需要尋找更高效、更靈活的數(shù)據(jù)倉庫解決方案。Neo4j是一種基于圖的數(shù)據(jù)庫管理系統(tǒng),它可以幫助企業(yè)構(gòu)

    2024年04月09日
    瀏覽(25)
  • 圖數(shù)據(jù)庫Neo4J 中文分詞查詢及全文檢索(建立全文索引)

    圖數(shù)據(jù)庫Neo4J 中文分詞查詢及全文檢索(建立全文索引)

    Neo4j的全文索引是基于Lucene實(shí)現(xiàn)的,但是Lucene默認(rèn)情況下只提供了基于英文的分詞器,下篇文章我們在討論中文分詞器(IK)的引用,本篇默認(rèn)基于英文分詞來做。我們前邊文章就舉例說明過,比如我要搜索蘋果公司?首先我們要做的第一步在各個(gè)詞條上創(chuàng)建全文索引,第二步

    2024年02月03日
    瀏覽(22)
  • 利用python將json格式的文件導(dǎo)入neo4j圖數(shù)據(jù)庫

    筆者收到了朋友的求助,希望我寫一段python代碼將含對用關(guān)系的json文件導(dǎo)入neo4j圖數(shù)據(jù)庫。json的格式如下: 他說數(shù)據(jù)量有幾十萬條,而且對應(yīng)關(guān)系不唯一:但可以保證每條都含有名稱和治療,但是可能有若干條其他的對用關(guān)系,例如上文的例子:其既包含之前的三個(gè)模塊,

    2024年02月16日
    瀏覽(28)
  • 知識(shí)圖譜構(gòu)建:圖數(shù)據(jù)庫Neo4j的節(jié)點(diǎn)和關(guān)系的新增、刪除

    知識(shí)圖譜構(gòu)建:圖數(shù)據(jù)庫Neo4j的節(jié)點(diǎn)和關(guān)系的新增、刪除

    目錄 1、新增節(jié)點(diǎn)和節(jié)點(diǎn)屬性,批量添加屬性 2、節(jié)點(diǎn)顯示信息修改 3、新增關(guān)系 4、同時(shí)新增兩個(gè)節(jié)點(diǎn)與節(jié)點(diǎn)關(guān)系 5、刪除節(jié)點(diǎn) 6、刪除關(guān)系 7、同時(shí)刪除節(jié)點(diǎn)和關(guān)系 CREATE(n:節(jié)點(diǎn)名稱?{屬性1:\\\'屬性值\\\',?屬性2:\\\'屬性值\\\',? ......}?)?return?n 其中,n只在此語句運(yùn)行時(shí)代表創(chuàng)建的節(jié)點(diǎn)

    2024年02月10日
    瀏覽(24)
  • 知識(shí)圖譜實(shí)戰(zhàn)應(yīng)用9-基于neo4j的知識(shí)圖譜框架設(shè)計(jì)與類模型構(gòu)建

    大家好,我是微學(xué)AI,今天給大家介紹一下知識(shí)圖譜實(shí)戰(zhàn)應(yīng)用9-基于neo4j的知識(shí)圖譜框架設(shè)計(jì)與類模型構(gòu)建。我將構(gòu)建KnowledgeGraphs的類,用于操作Neo4j圖數(shù)據(jù)庫中的知識(shí)圖譜數(shù)據(jù)。方便管理整個(gè)知識(shí)圖譜操作。創(chuàng)建KnowledgeGraphs類可以使操作數(shù)據(jù)的代碼更加模塊化和可復(fù)用。使用

    2024年02月07日
    瀏覽(26)
  • 圖數(shù)據(jù)庫_Neo4j學(xué)習(xí)cypher語言_使用CQL_構(gòu)建明星關(guān)系圖譜_導(dǎo)入明星數(shù)據(jù)_導(dǎo)入明星關(guān)系數(shù)據(jù)_創(chuàng)建明星關(guān)系---Neo4j圖數(shù)據(jù)庫工作筆記0009

    圖數(shù)據(jù)庫_Neo4j學(xué)習(xí)cypher語言_使用CQL_構(gòu)建明星關(guān)系圖譜_導(dǎo)入明星數(shù)據(jù)_導(dǎo)入明星關(guān)系數(shù)據(jù)_創(chuàng)建明星關(guān)系---Neo4j圖數(shù)據(jù)庫工作筆記0009

    首先找到明星數(shù)據(jù) ? 可以看到有一個(gè)sheet1,是,記錄了所有的關(guān)系的數(shù)據(jù) ? 然后比如我們搜索一個(gè)撒貝寧,可以看到撒貝寧的數(shù)據(jù) ? 然后這個(gè)是構(gòu)建的CQL語句 ? 首先我們先去啟動(dòng)服務(wù) neo4j console ? ? 然后我們再來看一下以前導(dǎo)入的,可以看到導(dǎo)入很簡單, 就是上面有CQL 看一下節(jié)

    2024年02月12日
    瀏覽(28)
  • 記一個(gè)因?yàn)镹eo4j server版和Desktop版都裝引起的問題

    經(jīng)典錯(cuò)誤 提示: DBMS failed to start: DBMS process terminated, see logs… Check the logs 我就去檢查log,有個(gè)log.log里面是Neo4j @ 7687 is down.和Neo4j @ 7474 is down. 查了很久,沒用,desktop版卸載重裝好幾次,沒用 裝server版的時(shí)候,配置了環(huán)境變量,刪了之前配的環(huán)境變量,重啟電腦。解決

    2024年02月11日
    瀏覽(26)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包