首頁 後端開發 Python教學 創建您自己的 AI RAG 聊天機器人:LangChain 的 Python 指南

創建您自己的 AI RAG 聊天機器人:LangChain 的 Python 指南

Oct 20, 2024 pm 02:15 PM

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

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

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

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

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

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

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

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

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


設定專案環境

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

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

1. 建立專案資料夾和虛擬環境

先建立專案資料夾與虛擬環境:

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
登入後複製
登入後複製
登入後複製

現在,安裝這些相依性:

pip install -r requirements.txt
登入後複製
登入後複製
登入後複製

3. 設定 API 金鑰

我們將使用 OpenAIGeminiFireworks 來產生聊天機器人的回應。您可以根據自己的喜好選擇其中任何一個。

如果您正在嘗試,請不要擔心,Fireworks 免費提供價值 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 依使用情況收費。


文件處理和分塊

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

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 個字元的較小區塊,並有少量重疊,以確保區塊之間不會遺失上下文。處理完成後,文件就可以嵌入並建立索引了。


建立嵌入和索引

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

1.創建embedding_indexer.py

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

pip install -r requirements.txt
登入後複製
登入後複製
登入後複製

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


實施檢索和回應生成

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

1.創建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
登入後複製

在這裡,我們根據您提供的 API 金鑰在 OpenAIGeminiFireworks 之間進行選擇。 RAG 鏈將檢索前 3 個最相關的文檔,並使用語言模型產生回應。

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


建構聊天機器人介面

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

1.創建chatbot.py

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

mkdir rag-chatbot
cd rag-chatbot
python -m venv venv
source venv/bin/activate
登入後複製
登入後複製
登入後複製

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


建立 Streamlit UI

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

1.創建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
登入後複製
登入後複製
登入後複製

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


優化效能

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

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


總結

恭喜!您已成功創建自己的基於 RAG 的聊天機器人。現在,可能性是無限的:

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


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

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

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

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

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

AI Clothes Remover

AI Clothes Remover

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

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

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

熱門文章

<🎜>:泡泡膠模擬器無窮大 - 如何獲取和使用皇家鑰匙
3 週前 By 尊渡假赌尊渡假赌尊渡假赌
北端:融合系統,解釋
3 週前 By 尊渡假赌尊渡假赌尊渡假赌

熱工具

記事本++7.3.1

記事本++7.3.1

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

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

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

熱門話題

Java教學
1664
14
CakePHP 教程
1423
52
Laravel 教程
1320
25
PHP教程
1269
29
C# 教程
1249
24
Python vs.C:申請和用例 Python vs.C:申請和用例 Apr 12, 2025 am 12:01 AM

Python适合数据科学、Web开发和自动化任务,而C 适用于系统编程、游戏开发和嵌入式系统。Python以简洁和强大的生态系统著称,C 则以高性能和底层控制能力闻名。

2小時的Python計劃:一種現實的方法 2小時的Python計劃:一種現實的方法 Apr 11, 2025 am 12:04 AM

2小時內可以學會Python的基本編程概念和技能。 1.學習變量和數據類型,2.掌握控制流(條件語句和循環),3.理解函數的定義和使用,4.通過簡單示例和代碼片段快速上手Python編程。

Python:遊戲,Guis等 Python:遊戲,Guis等 Apr 13, 2025 am 12:14 AM

Python在遊戲和GUI開發中表現出色。 1)遊戲開發使用Pygame,提供繪圖、音頻等功能,適合創建2D遊戲。 2)GUI開發可選擇Tkinter或PyQt,Tkinter簡單易用,PyQt功能豐富,適合專業開發。

Python與C:學習曲線和易用性 Python與C:學習曲線和易用性 Apr 19, 2025 am 12:20 AM

Python更易學且易用,C 則更強大但複雜。 1.Python語法簡潔,適合初學者,動態類型和自動內存管理使其易用,但可能導致運行時錯誤。 2.C 提供低級控制和高級特性,適合高性能應用,但學習門檻高,需手動管理內存和類型安全。

Python和時間:充分利用您的學習時間 Python和時間:充分利用您的學習時間 Apr 14, 2025 am 12:02 AM

要在有限的時間內最大化學習Python的效率,可以使用Python的datetime、time和schedule模塊。 1.datetime模塊用於記錄和規劃學習時間。 2.time模塊幫助設置學習和休息時間。 3.schedule模塊自動化安排每週學習任務。

Python vs.C:探索性能和效率 Python vs.C:探索性能和效率 Apr 18, 2025 am 12:20 AM

Python在開發效率上優於C ,但C 在執行性能上更高。 1.Python的簡潔語法和豐富庫提高開發效率。 2.C 的編譯型特性和硬件控制提升執行性能。選擇時需根據項目需求權衡開發速度與執行效率。

Python:自動化,腳本和任務管理 Python:自動化,腳本和任務管理 Apr 16, 2025 am 12:14 AM

Python在自動化、腳本編寫和任務管理中表現出色。 1)自動化:通過標準庫如os、shutil實現文件備份。 2)腳本編寫:使用psutil庫監控系統資源。 3)任務管理:利用schedule庫調度任務。 Python的易用性和豐富庫支持使其在這些領域中成為首選工具。

Python標準庫的哪一部分是:列表或數組? Python標準庫的哪一部分是:列表或數組? Apr 27, 2025 am 12:03 AM

pythonlistsarepartofthestAndArdLibrary,herilearRaysarenot.listsarebuilt-In,多功能,和Rused ForStoringCollections,而EasaraySaraySaraySaraysaraySaraySaraysaraySaraysarrayModuleandleandleandlesscommonlyusedDduetolimitedFunctionalityFunctionalityFunctionality。

See all articles