国产av日韩一区二区三区精品,成人性爱视频在线观看,国产,欧美,日韩,一区,www.成色av久久成人,2222eeee成人天堂

首頁(yè) 后端開(kāi)發(fā) Python教程 創(chuàng)建您自己的 AI RAG 聊天機(jī)器人:LangChain 的 Python 指南

創(chuàng)建您自己的 AI RAG 聊天機(jī)器人:LangChain 的 Python 指南

Oct 20, 2024 pm 02:15 PM

誰(shuí)不想從他們的文檔中得到即時(shí)答案?這正是 RAG 聊天機(jī)器人所做的——將檢索與人工智能生成相結(jié)合,以實(shí)現(xiàn)快速、準(zhǔn)確的響應(yīng)!

在本指南中,我將向您展示如何使用 檢索增強(qiáng)生成 (RAG) 以及 LangChainStreamlit 創(chuàng)建聊天機(jī)器人。該聊天機(jī)器人將從知識(shí)庫(kù)中提取相關(guān)信息并使用語(yǔ)言模型生成響應(yīng)。

我將引導(dǎo)您完成每個(gè)步驟,提供多種響應(yīng)生成選項(xiàng),無(wú)論您使用 OpenAI、Gemini 還是 Fireworks — 確保靈活和具有成本效益的解決方案。

什么是檢索增強(qiáng)生成 (RAG)?

RAG 是一種結(jié)合了檢索生成的方法,以提供更準(zhǔn)確和上下文感知的聊天機(jī)器人響應(yīng)。檢索過(guò)程從知識(shí)庫(kù)中提取相關(guān)文檔,而生成過(guò)程則使用語(yǔ)言模型根據(jù)檢索到的內(nèi)容創(chuàng)建連貫的響應(yīng)。這確保您的聊天機(jī)器人可以使用最新數(shù)據(jù)回答問(wèn)題,即使語(yǔ)言模型本身尚未針對(duì)該信息進(jìn)行專(zhuān)門(mén)訓(xùn)練。

想象一下您有一位私人助理,但他并不總是知道您問(wèn)題的答案。因此,當(dāng)你提出問(wèn)題時(shí),他們會(huì)翻閱書(shū)籍并找到相關(guān)信息(檢索),然后他們總結(jié)這些信息并用自己的話(huà)告訴你(生成)。這本質(zhì)上就是 RAG 的工作原理,結(jié)合了兩全其美的優(yōu)點(diǎn)。

在流程圖中,RAG 流程有點(diǎn)像這樣:

Create Your Own AI RAG Chatbot: A Python Guide with LangChain

現(xiàn)在,讓我們開(kāi)始吧,建立我們自己的聊天機(jī)器人!


設(shè)置項(xiàng)目環(huán)境

本教程中我們將主要使用 Python,如果您是 JS 頭,您可以按照說(shuō)明并瀏覽 langchain js 的文檔。

首先,我們需要設(shè)置項(xiàng)目環(huán)境。這包括創(chuàng)建項(xiàng)目目錄、安裝依賴(lài)項(xiàng)以及為不同語(yǔ)言模型設(shè)置 API 密鑰。

1. 創(chuàng)建項(xiàng)目文件夾和虛擬環(huán)境

首先創(chuàng)建項(xiàng)目文件夾和虛擬環(huán)境:

mkdir rag-chatbot
cd rag-chatbot
python -m venv venv
source venv/bin/activate

2.安裝依賴(lài)項(xiàng)

接下來(lái),創(chuàng)建一個(gè)requirements.txt 文件來(lái)列出所有必需的依賴(lài)項(xiàng):

langchain==0.0.329
streamlit==1.27.2
faiss-cpu==1.7.4
python-dotenv==1.0.0
tiktoken==0.5.1
openai==0.27.10
gemini==0.3.1
fireworks==0.4.0
sentence_transformers==2.2.2

現(xiàn)在,安裝這些依賴(lài)項(xiàng):

pip install -r requirements.txt

3. 設(shè)置 API 密鑰

我們將使用 OpenAI、GeminiFireworks 來(lái)生成聊天機(jī)器人的響應(yīng)。您可以根據(jù)自己的喜好選擇其中任何一個(gè)。

如果您正在嘗試,請(qǐng)不要擔(dān)心,F(xiàn)ireworks 免費(fèi)提供價(jià)值 1 美元的 API 密鑰,gemini-1.5-flash 模型在一定程度上也是免費(fèi)的!

設(shè)置 .env 文件來(lái)存儲(chǔ)您首選模型的 API 密鑰:

mkdir rag-chatbot
cd rag-chatbot
python -m venv venv
source venv/bin/activate

請(qǐng)務(wù)必注冊(cè)這些服務(wù)并獲取您的 API 密鑰。 GeminiFireworks 均提供免費(fèi)套餐,而 OpenAI 根據(jù)使用情況收費(fèi)。


文檔處理和分塊

為了給聊天機(jī)器人提供上下文,我們需要處理文檔并將它們分成可管理的塊。這很重要,因?yàn)樾枰纸獯笪谋疽赃M(jìn)行嵌入和索引。

1.創(chuàng)建document_processor.py

創(chuàng)建一個(gè)名為 document_processor.py 的新 Python 腳本來(lái)處理文檔處理:

langchain==0.0.329
streamlit==1.27.2
faiss-cpu==1.7.4
python-dotenv==1.0.0
tiktoken==0.5.1
openai==0.27.10
gemini==0.3.1
fireworks==0.4.0
sentence_transformers==2.2.2

此腳本加載一個(gè)文本文件,并將其分割成約 1000 個(gè)字符的較小塊,并有少量重疊,以確保塊之間不會(huì)丟失上下文。處理完成后,文檔就可以嵌入并建立索引了。


創(chuàng)建嵌入和索引

現(xiàn)在我們已經(jīng)對(duì)文檔進(jìn)行了分塊,下一步是將它們轉(zhuǎn)換為嵌入(文本的數(shù)字表示)并為它們建立索引以便快速檢索。 (因?yàn)闄C(jī)器理解數(shù)字比理解單詞更容易)

1.創(chuàng)建embedding_indexer.py

創(chuàng)建另一個(gè)名為 embedding_indexer.py 的腳本:

pip install -r requirements.txt

在此腳本中,嵌入是使用 Hugging Face 模型(all-MiniLM-L6-v2)創(chuàng)建的。然后,我們將這些嵌入存儲(chǔ)在 FAISS 矢量存儲(chǔ)中,這使我們能夠根據(jù)查詢(xún)快速檢索相似的文本塊。


實(shí)施檢索和響應(yīng)生成

令人興奮的部分來(lái)了:將檢索與語(yǔ)言生成相結(jié)合!現(xiàn)在,您將創(chuàng)建一個(gè) RAG 鏈 ,它從向量存儲(chǔ)中獲取相關(guān)塊并使用語(yǔ)言模型生成響應(yīng)。 (向量存儲(chǔ)是一個(gè)數(shù)據(jù)庫(kù),我們存儲(chǔ)轉(zhuǎn)換為數(shù)字作為向量的數(shù)據(jù))

1.創(chuàng)建rag_chain.py

讓我們創(chuàng)建文件 rag_chain.py:

# Uncomment your API key
# OPENAI_API_KEY=your_openai_api_key_here
# GEMINI_API_KEY=your_gemini_api_key_here
# FIREWORKS_API_KEY=your_fireworks_api_key_here

在這里,我們根據(jù)您提供的 API 密鑰在 OpenAI、GeminiFireworks 之間進(jìn)行選擇。 RAG 鏈將檢索前 3 個(gè)最相關(guān)的文檔,并使用語(yǔ)言模型生成響應(yīng)。

您可以根據(jù)自己的預(yù)算或使用偏好在模型之間切換 - GeminiFireworks 是免費(fèi)的,而 OpenAI 根據(jù)使用情況收費(fèi)。


構(gòu)建聊天機(jī)器人界面

現(xiàn)在,我們將構(gòu)建一個(gè)簡(jiǎn)單的聊天機(jī)器人界面,以使用我們的 RAG 鏈獲取用戶(hù)輸入并生成響應(yīng)。

1.創(chuàng)建chatbot.py

創(chuàng)建一個(gè)名為chatbot.py的新文件:

mkdir rag-chatbot
cd rag-chatbot
python -m venv venv
source venv/bin/activate

此腳本創(chuàng)建一個(gè)命令行聊天機(jī)器人界面,持續(xù)偵聽(tīng)用戶(hù)輸入,通過(guò) RAG 鏈對(duì)其進(jìn)行處理,并返回生成的響應(yīng)。


創(chuàng)建 Streamlit UI

是時(shí)候使用 Streamlit 構(gòu)建 Web 界面,讓您的聊天機(jī)器人更加用戶(hù)友好。這將允許用戶(hù)通過(guò)瀏覽器與您的聊天機(jī)器人交互。

1.創(chuàng)建app.py

創(chuàng)建app.py:

langchain==0.0.329
streamlit==1.27.2
faiss-cpu==1.7.4
python-dotenv==1.0.0
tiktoken==0.5.1
openai==0.27.10
gemini==0.3.1
fireworks==0.4.0
sentence_transformers==2.2.2

2. 運(yùn)行 Streamlit 應(yīng)用程序

要運(yùn)行您的 Streamlit 應(yīng)用程序,只需使用:

pip install -r requirements.txt

這將啟動(dòng)一個(gè)網(wǎng)絡(luò)界面,您可以在其中上傳文本文件、提出問(wèn)題并從聊天機(jī)器人接收答案。


優(yōu)化性能

為了獲得更好的性能,您可以在分割文本時(shí)嘗試塊大小和重疊。較大的塊提供更多上下文,但較小的塊可能使檢索速度更快。您還可以使用 Streamlit 緩存 來(lái)避免重復(fù)生成嵌入等昂貴的操作。

如果您想優(yōu)化成本,可以根據(jù)查詢(xún)復(fù)雜度在 OpenAIGeminiFireworks 之間切換 — 使用 OpenAI 對(duì)于復(fù)雜的問(wèn)題,GeminiFireworks 對(duì)于更簡(jiǎn)單的問(wèn)題以降低成本。


總結(jié)

恭喜!您已成功創(chuàng)建自己的基于 RAG 的聊天機(jī)器人?,F(xiàn)在,可能性是無(wú)限的:

  • 創(chuàng)建您自己的個(gè)性化學(xué)習(xí)伙伴。
  • 不再需要查看冗長(zhǎng)的文檔 - 只需“RAG it out”即可獲得快速、準(zhǔn)確的答案!

旅程從這里開(kāi)始,潛力無(wú)限!


您可以在 GitHub 上關(guān)注我的工作。請(qǐng)隨時(shí)與我聯(lián)系 - 我的 DM 在 X 和 LinkedIn 上始終開(kāi)放。

以上是創(chuàng)建您自己的 AI RAG 聊天機(jī)器人:LangChain 的 Python 指南的詳細(xì)內(nèi)容。更多信息請(qǐng)關(guān)注PHP中文網(wǎng)其他相關(guān)文章!

本站聲明
本文內(nèi)容由網(wǎng)友自發(fā)貢獻(xiàn),版權(quán)歸原作者所有,本站不承擔(dān)相應(yīng)法律責(zé)任。如您發(fā)現(xiàn)有涉嫌抄襲侵權(quán)的內(nèi)容,請(qǐng)聯(lián)系admin@php.cn

熱AI工具

Undress AI Tool

Undress AI Tool

免費(fèi)脫衣服圖片

Undresser.AI Undress

Undresser.AI Undress

人工智能驅(qū)動(dòng)的應(yīng)用程序,用于創(chuàng)建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用于從照片中去除衣服的在線(xiàn)人工智能工具。

Clothoff.io

Clothoff.io

AI脫衣機(jī)

Video Face Swap

Video Face Swap

使用我們完全免費(fèi)的人工智能換臉工具輕松在任何視頻中換臉!

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費(fèi)的代碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

功能強(qiáng)大的PHP集成開(kāi)發(fā)環(huán)境

Dreamweaver CS6

Dreamweaver CS6

視覺(jué)化網(wǎng)頁(yè)開(kāi)發(fā)工具

SublimeText3 Mac版

SublimeText3 Mac版

神級(jí)代碼編輯軟件(SublimeText3)

熱門(mén)話(huà)題

Python類(lèi)中的多態(tài)性 Python類(lèi)中的多態(tài)性 Jul 05, 2025 am 02:58 AM

多態(tài)是Python面向?qū)ο缶幊讨械暮诵母拍?,指“一種接口,多種實(shí)現(xiàn)”,允許統(tǒng)一處理不同類(lèi)型的對(duì)象。1.多態(tài)通過(guò)方法重寫(xiě)實(shí)現(xiàn),子類(lèi)可重新定義父類(lèi)方法,如Animal類(lèi)的speak()方法在Dog和Cat子類(lèi)中有不同實(shí)現(xiàn)。2.多態(tài)的實(shí)際用途包括簡(jiǎn)化代碼結(jié)構(gòu)、增強(qiáng)可擴(kuò)展性,例如圖形繪制程序中統(tǒng)一調(diào)用draw()方法,或游戲開(kāi)發(fā)中處理不同角色的共同行為。3.Python實(shí)現(xiàn)多態(tài)需滿(mǎn)足:父類(lèi)定義方法,子類(lèi)重寫(xiě)該方法,但不要求繼承同一父類(lèi),只要對(duì)象實(shí)現(xiàn)相同方法即可,這稱(chēng)為“鴨子類(lèi)型”。4.注意事項(xiàng)包括保持方

我如何寫(xiě)一個(gè)簡(jiǎn)單的'你好,世界!” Python的程序? 我如何寫(xiě)一個(gè)簡(jiǎn)單的'你好,世界!” Python的程序? Jun 24, 2025 am 12:45 AM

"Hello,World!"程序是用Python編寫(xiě)的最基礎(chǔ)示例,用于展示基本語(yǔ)法并驗(yàn)證開(kāi)發(fā)環(huán)境是否正確配置。1.它通過(guò)一行代碼print("Hello,World!")實(shí)現(xiàn),運(yùn)行后會(huì)在控制臺(tái)輸出指定文本;2.運(yùn)行步驟包括安裝Python、使用文本編輯器編寫(xiě)代碼、保存為.py文件、在終端執(zhí)行該文件;3.常見(jiàn)錯(cuò)誤有遺漏括號(hào)或引號(hào)、誤用大寫(xiě)Print、未保存為.py格式以及運(yùn)行環(huán)境錯(cuò)誤;4.可選工具包括本地文本編輯器 終端、在線(xiàn)編輯器(如replit.com)

如何在Python中產(chǎn)生隨機(jī)字符串? 如何在Python中產(chǎn)生隨機(jī)字符串? Jun 21, 2025 am 01:02 AM

要生成隨機(jī)字符串,可以使用Python的random和string模塊組合。具體步驟為:1.導(dǎo)入random和string模塊;2.定義字符池如string.ascii_letters和string.digits;3.設(shè)定所需長(zhǎng)度;4.調(diào)用random.choices()生成字符串。例如代碼包括importrandom與importstring、設(shè)置length=10、characters=string.ascii_letters string.digits并執(zhí)行''.join(random.c

Python中的算法是什么?為什么它們很重要? Python中的算法是什么?為什么它們很重要? Jun 24, 2025 am 12:43 AM

AlgorithmsinPythonareessentialforefficientproblem-solvinginprogramming.Theyarestep-by-stepproceduresusedtosolvetaskslikesorting,searching,anddatamanipulation.Commontypesincludesortingalgorithmslikequicksort,searchingalgorithmslikebinarysearch,andgrap

什么是python的列表切片? 什么是python的列表切片? Jun 29, 2025 am 02:15 AM

ListslicinginPythonextractsaportionofalistusingindices.1.Itusesthesyntaxlist[start:end:step],wherestartisinclusive,endisexclusive,andstepdefinestheinterval.2.Ifstartorendareomitted,Pythondefaultstothebeginningorendofthelist.3.Commonusesincludegetting

python`@classmethod'裝飾師解釋了 python`@classmethod'裝飾師解釋了 Jul 04, 2025 am 03:26 AM

類(lèi)方法是Python中通過(guò)@classmethod裝飾器定義的方法,其第一個(gè)參數(shù)為類(lèi)本身(cls),用于訪問(wèn)或修改類(lèi)狀態(tài)。它可通過(guò)類(lèi)或?qū)嵗{(diào)用,影響的是整個(gè)類(lèi)而非特定實(shí)例;例如在Person類(lèi)中,show_count()方法統(tǒng)計(jì)創(chuàng)建的對(duì)象數(shù)量;定義類(lèi)方法時(shí)需使用@classmethod裝飾器并將首參命名為cls,如change_var(new_value)方法可修改類(lèi)變量;類(lèi)方法與實(shí)例方法(self參數(shù))、靜態(tài)方法(無(wú)自動(dòng)參數(shù))不同,適用于工廠方法、替代構(gòu)造函數(shù)及管理類(lèi)變量等場(chǎng)景;常見(jiàn)用途包括從

如何使用CSV模塊在Python中使用CSV文件? 如何使用CSV模塊在Python中使用CSV文件? Jun 25, 2025 am 01:03 AM

Python的csv模塊提供了讀寫(xiě)CSV文件的簡(jiǎn)單方法。1.讀取CSV文件時(shí),可使用csv.reader()逐行讀取,并將每行數(shù)據(jù)作為字符串列表返回;若需通過(guò)列名訪問(wèn)數(shù)據(jù),則可用csv.DictReader(),它將每行映射為字典。2.寫(xiě)入CSV文件時(shí),使用csv.writer()并調(diào)用writerow()或writerows()方法寫(xiě)入單行或多行數(shù)據(jù);若要寫(xiě)入字典數(shù)據(jù),則使用csv.DictWriter(),需先定義列名并通過(guò)writeheader()寫(xiě)入表頭。3.處理邊緣情況時(shí),模塊自動(dòng)處理

Python函數(shù)參數(shù)和參數(shù) Python函數(shù)參數(shù)和參數(shù) Jul 04, 2025 am 03:26 AM

參數(shù)(parameters)是定義函數(shù)時(shí)的占位符,而傳參(arguments)是調(diào)用時(shí)傳入的具體值。1.位置參數(shù)需按順序傳遞,順序錯(cuò)誤會(huì)導(dǎo)致結(jié)果錯(cuò)誤;2.關(guān)鍵字參數(shù)通過(guò)參數(shù)名指定,可改變順序且提高可讀性;3.默認(rèn)參數(shù)值在定義時(shí)賦值,避免重復(fù)代碼,但應(yīng)避免使用可變對(duì)象作為默認(rèn)值;4.args和*kwargs可處理不定數(shù)量的參數(shù),適用于通用接口或裝飾器,但應(yīng)謹(jǐn)慎使用以保持可讀性。

See all articles