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

首頁 後端開發(fā) Python教學 創(chuàng)建您自己的 AI RAG 聊天機器人:LangChain 的 Python 指南

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

Oct 20, 2024 pm 02:15 PM

誰不想從他們的文件中得到即時答案?這正是 RAG 聊天機器人所做的事——將檢索與人工智慧生成相結合,以實現(xiàn)快速、準確的回應!

在本指南中,我將向您展示如何使用 檢索增強生成 (RAG) 以及 LangChainStreamlit 創(chuàng)建聊天機器人。該聊天機器人將從知識庫中提取相關資訊並使用語言模型產(chǎn)生回應。

我將引導您完成每個步驟,提供多種回應產(chǎn)生選項,無論您使用OpenAIGeminiFireworks — 確保靈活且具有成本效益的解決方案。

什麼是檢索增強生成 (RAG)?

RAG 是一種結合了檢索產(chǎn)生的方法,以提供更準確和上下文感知的聊天機器人回應。檢索過程從知識庫中提取相關文檔,而生成過程則使用語言模型根據(jù)檢索到的內容創(chuàng)建連貫的回應。這可確保您的聊天機器人可以使用最新資料回答問題,即使語言模型本身尚未針對該資訊進行專門訓練。

想像一下您有一位私人助理,但他並不總是知道您問題的答案。因此,當你提出問題時,他們會翻閱書籍並找到相關資訊(檢索),然後他們總結這些資訊並用自己的話告訴你(產(chǎn)生)。這本質上就是 RAG 的工作原理,結合了兩全其美的優(yōu)點。

在流程圖中,RAG 流程有點像這樣:

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

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


設定專案環(huán)境

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

首先,我們需要設定專案環(huán)境。這包括建立專案目錄、安裝依賴項以及為不同語言模型設定 API 金鑰。

1. 建立專案資料夾和虛擬環(huán)境

先建立專案資料夾與虛擬環(huán)境:

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

2.安裝依賴項

接下來,建立一個requirements.txt 檔案來列出所有必要的依賴項:

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)在,安裝這些相依性:

pip install -r requirements.txt

3. 設定 API 金鑰

我們將使用 OpenAI、GeminiFireworks 來產(chǎn)生聊天機器人的回應。您可以根據(jù)自己的喜好選擇其中任何一個。

如果您正在嘗試,請不要擔心,F(xiàn)ireworks 免費提供價值 1 美元的 API 金鑰,gemini-1.5-flash 型號在一定程度上也是免費的!

設定 .env 檔案來儲存您首選模型的 API 金鑰:

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

請務必註冊這些服務並取得您的 API 金鑰。 GeminiFireworks 皆提供免費套餐,而 OpenAI 依使用情況收費。


文件處理和分塊

為了提供聊天機器人上下文,我們需要處理文件並將它們分成可管理的區(qū)塊。這很重要,因為需要分解大文本以進行嵌入和索引。

1.建立document_processor.py

建立一個名為 document_processor.py 的新 Python 腳本來處理文件處理:

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

此腳本載入一個文字文件,並將其分割成約 1000 個字元的較小區(qū)塊,並有少量重疊,以確保區(qū)塊之間不會遺失上下文。處理完成後,文件就可以嵌入並建立索引了。


建立嵌入和索引

現(xiàn)在我們已經(jīng)對文件進行了分塊,下一步是將它們轉換為嵌入(文字的數(shù)字表示)並為它們建立索引以便快速檢索。 (因為機器理解數(shù)字比理解單字更容易)

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

建立另一個名為 embedding_indexer.py 的腳本:

pip install -r requirements.txt

在此腳本中,嵌入是使用 Hugging Face 模型(all-MiniLM-L6-v2)建立的。然後,我們將這些嵌入儲存在 FAISS 向量儲存中,這使我們能夠根據(jù)查詢快速檢索相似的文字區(qū)塊。


實施檢索和回應生成

令人興奮的部分來了:將檢索與語言生成結合!現(xiàn)在,您將建立一個 RAG 鏈 ,它從向量儲存中取得相關區(qū)塊並使用語言模型產(chǎn)生回應。 (向量儲存是一個資料庫,我們儲存轉換為數(shù)字作為向量的資料)

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

讓我們建立檔案 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 之間進行選擇。 RAG 鏈將檢索前 3 個最相關的文檔,並使用語言模型產(chǎn)生回應。

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


建構聊天機器人介面

現(xiàn)在,我們將建立一個簡單的聊天機器人介面,以使用我們的 RAG 鏈獲取用戶輸入並產(chǎn)生回應。

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

建立一個名為chatbot.py的新檔案:

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

此腳本建立一個命令列聊天機器人介面,持續(xù)偵聽使用者輸入,透過 RAG 鏈對其進行處理,並傳回產(chǎn)生的回應。


建立 Streamlit UI

是時候使用 Streamlit 建立 Web 介面,讓您的聊天機器人更加用戶友好。這將允許用戶透過瀏覽器與您的聊天機器人互動。

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

建立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. 運行 Streamlit 應用程式

要運行您的 Streamlit 應用程序,只需使用:

pip install -r requirements.txt

這將啟動一個網(wǎng)頁介面,您可以在其中上傳文字檔案、提出問題並從聊天機器人接收答案。


優(yōu)化效能

為了獲得更好的效能,您可以在分割文字時嘗試區(qū)塊大小和重疊。較大的區(qū)塊提供更多上下文,但較小的區(qū)塊可能使檢索速度更快。您也可以使用 Streamlit 快取 來避免重複產(chǎn)生嵌入等昂貴的操作。

如果您想要最佳化成本,可以依照查詢複雜度在OpenAI、GeminiFireworks 之間切換— 使用OpenAI對於複雜的問題,GeminiFireworks 對於更簡單的問題以降低成本。


總結

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

    創(chuàng)建您自己的個人化學習夥伴。
  • 不再需要查看冗長的文件 - 只需「RAG it out」即可獲得快速、準確的答案!
旅程從這裡開始,潛力無限!


您可以在 GitHub 上關注我的工作。請隨時與我聯(lián)繫 - 我的 DM 在 X 和 LinkedIn 上始終開放。

以上是創(chuàng)建您自己的 AI RAG 聊天機器人:LangChain 的 Python 指南的詳細內容。更多資訊請關注PHP中文網(wǎng)其他相關文章!

本網(wǎng)站聲明
本文內容由網(wǎng)友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發(fā)現(xiàn)涉嫌抄襲或侵權的內容,請聯(lián)絡admin@php.cn

熱AI工具

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創(chuàng)建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發(fā)環(huán)境

Dreamweaver CS6

Dreamweaver CS6

視覺化網(wǎng)頁開發(fā)工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

Python Web應用程序中有哪些常見的安全漏洞(例如XSS,SQL注入)以及如何緩解它們? Python Web應用程序中有哪些常見的安全漏洞(例如XSS,SQL注入)以及如何緩解它們? Jun 10, 2025 am 12:13 AM

Web應用安全需重視,Python網(wǎng)站常見漏洞包括XSS、SQL注入、CSRF及文件上傳風險。針對XSS,應使用模板引擎自動轉義、過濾富文本HTML並設置CSP策略;防範SQL注入應採用參數(shù)化查詢或ORM框架,並驗證用戶輸入;防禦CSRF需啟用CSRFToken機制並對敏感操作二次確認;文件上傳漏洞則要限制類型、重命名文件並禁止執(zhí)行權限。遵循規(guī)範與使用成熟工具可有效降低風險,安全需持續(xù)關注與測試。

Python的UNITDEST或PYTEST框架如何促進自動測試? Python的UNITDEST或PYTEST框架如何促進自動測試? Jun 19, 2025 am 01:10 AM

Python的unittest和pytest是兩種廣泛使用的測試框架,它們都簡化了自動化測試的編寫、組織和運行。 1.二者均支持自動發(fā)現(xiàn)測試用例並提供清晰的測試結構:unittest通過繼承TestCase類並以test\_開頭的方法定義測試;pytest則更為簡潔,只需以test\_開頭的函數(shù)即可。 2.它們都內置斷言支持:unittest提供assertEqual、assertTrue等方法,而pytest使用增強版的assert語句,能自動顯示失敗詳情。 3.均具備處理測試準備與清理的機制:un

Python如何處理函數(shù)中的可變默認參數(shù),為什麼這會出現(xiàn)問題? Python如何處理函數(shù)中的可變默認參數(shù),為什麼這會出現(xiàn)問題? Jun 14, 2025 am 12:27 AM

Python的函數(shù)默認參數(shù)在定義時只被初始化一次,若使用可變對象(如列表或字典)作為默認參數(shù),可能導致意外行為。例如,使用空列表作為默認參數(shù)時,多次調用函數(shù)會重複使用同一個列表,而非每次生成新列表。此行為引發(fā)的問題包括:1.函數(shù)調用間數(shù)據(jù)意外共享;2.後續(xù)調用結果受之前調用影響,增加調試難度;3.造成邏輯錯誤且難以察覺;4.對新手和有經(jīng)驗開發(fā)者均易產(chǎn)生困惑。為避免問題,最佳實踐是將默認值設為None,並在函數(shù)內部創(chuàng)建新對象,例如使用my_list=None代替my_list=[],並在函數(shù)中初始

將Python應用程序部署到生產(chǎn)環(huán)境中的考慮因素是什麼? 將Python應用程序部署到生產(chǎn)環(huán)境中的考慮因素是什麼? Jun 10, 2025 am 12:14 AM

部署Python應用到生產(chǎn)環(huán)境需關注穩(wěn)定、安全和可維護。首先,使用Gunicorn或uWSGI替代開發(fā)服務器以支持並發(fā)處理;其次,配合Nginx做反向代理以提升性能;第三,按CPU核心數(shù)配置進程數(shù)量以優(yōu)化資源;第四,使用虛擬環(huán)境隔離依賴並凍結版本確保一致性;第五,啟用詳細日誌、集成監(jiān)控系統(tǒng)並設置報警機制便於運維;第六,避免root權限運行應用、關閉調試信息並配置HTTPS保障安全;最後,通過CI/CD工具實現(xiàn)自動化部署減少人為錯誤。

如何將Python與微服務體系結構中的其他語言或系統(tǒng)集成? 如何將Python與微服務體系結構中的其他語言或系統(tǒng)集成? Jun 14, 2025 am 12:25 AM

Python可以很好地與其他語言和系統(tǒng)在微服務架構中協(xié)同工作,關鍵在於各服務如何獨立運行並有效通信。 1.使用標準API和通信協(xié)議(如HTTP、REST、gRPC),Python通過Flask、FastAPI等框架構建API,並利用requests或httpx調用其他語言服務;2.借助消息代理(如Kafka、RabbitMQ、Redis)實現(xiàn)異步通信,Python服務可發(fā)布消息供其他語言消費者處理,提升系統(tǒng)解耦、可擴展性和容錯性;3.通過C/C 擴展或嵌入其他語言運行時(如Jython),實現(xiàn)性

列表,字典和集合綜合如何改善Python中的代碼可讀性和簡潔性? 列表,字典和集合綜合如何改善Python中的代碼可讀性和簡潔性? Jun 14, 2025 am 12:31 AM

Python的列表、字典和集合推導式通過簡潔語法提升代碼可讀性和編寫效率。它們適用於簡化迭代與轉換操作,例如用單行代碼替代多行循環(huán)實現(xiàn)元素變換或過濾。 1.列表推導式如[x2forxinrange(10)]能直接生成平方數(shù)列;2.字典推導式如{x:x2forxinrange(5)}清晰表達鍵值映射;3.條件篩選如[xforxinnumbersifx%2==0]使過濾邏輯更直觀;4.複雜條件亦可嵌入,如結合多條件過濾或三元表達式;但需避免過度嵌套或副作用操作,以免降低可維護性。合理使用推導式能在減少

如何將Python用於數(shù)據(jù)分析和與Numpy和Pandas等文庫進行操作? 如何將Python用於數(shù)據(jù)分析和與Numpy和Pandas等文庫進行操作? Jun 19, 2025 am 01:04 AM

pythonisidealfordataanalysisionduetonumpyandpandas.1)numpyExccelSatnumericalComputationswithFast,多dimensionalArraysAndRaysAndOrsAndOrsAndOffectorizedOperationsLikenp.sqrt()

如何使用__ITER__和__NEXT __在Python中實現(xiàn)自定義迭代器? 如何使用__ITER__和__NEXT __在Python中實現(xiàn)自定義迭代器? Jun 19, 2025 am 01:12 AM

要實現(xiàn)自定義迭代器,需在類中定義__iter__和__next__方法。 ①__iter__方法返回迭代器對象自身,通常為self,以兼容for循環(huán)等迭代環(huán)境;②__next__方法控制每次迭代的值,返回序列中的下一個元素,當無更多項時應拋出StopIteration異常;③需正確跟蹤狀態(tài)並設置終止條件,避免無限循環(huán);④可封裝複雜邏輯如文件行過濾,同時注意資源清理與內存管理;⑤對簡單邏輯可考慮使用生成器函數(shù)yield替代,但需結合具體場景選擇合適方式。

See all articles