搜尋結果

×

LangChain RAG打造個人化 llama3 Flask ChatbotWeb 網站

RAG 和 LangChain,配合 Docker,建立一個個人化的 llama3 Flask ChatbotWeb網站

在這篇文章中,我將介紹如何使用 RAG (Retrieval-Augmented Generation) 和 LangChain,配合 Docker,建立一個個人化的 llama3 Flask ChatbotWeb網站。這個教學將涵蓋啟動 Docker 容器以及運行 Flask 伺服器的所有步驟,並且會介紹如何通過不同的模式來與Llama3進行互動。

簡介

由於 Ollama 沒有官方可用的網頁伺服器,大部分的人開發 web 介面時,習慣使用 Ollama + Streamlit

可是我覺得 Streamlit 雖然指令很簡潔,但比較難達到高度客製化,因此我使用 JavaScript、HTML、CSS、Flask 和 Jinja2 創建了這個網站,使大家在 LLM 的使用上可以更加方便。

關於此網站的一些檔案和測試 PDF 已經放在 GitHub 中,但裡面的 README 是用英文寫的,有興趣可以參考 >>

這個網站使用 Flask 作為伺服器,並在 Docker 環境中運行。我已經將 Docker image 上傳到 Docker Hub,因此您可以下載並試用。

Docker image 頁面 >>

看本文之前建議閱讀以下教學文章:

我之前撰寫的這篇 Flask 架設 LLM 網站的文章,當中的功能只有原始的功能,就是你問 LLM 問題,LLM 負責回答,

但這個算是底層架構,我是以這個當底層架構再把 RAG 和 Prompt 工程疊加上去的,詳情可以參考下面幾篇文章。

  1. 利用 Ollama LLM、Flask 和 Tailwind CSS 實作聊天機器人 Chat Bot 網站
    使用 Ollama LLM 結合 Flask 來構建一個聊天機器人 Chat Bot 網站。本教學將會使用 Llama3 作為我們的 LLM,並且採用 LangChain, JavaScript, Jinja2 和 Tailwind…

  2. LangChain RAG 實作教學,結合 Llama3 讓 LLM 可以讀取 PDF 和 DOC 文件,並產生回應
    實作 LangChain RAG 教學,可以讓 LLM 讀取 PDF 和 DOC 文件,達到客製化聊天機器人的效果。

  3. 用 LangChain 讓 Llama3 藉由對話生成 SEO 標題和愛情文章
    有了 LangChain 後,讓 Prompt 工程升上一個全新的等級,使我們可以更容易在 NLP 領域和大型語言模型 (LLM) 互動。進階教學會加入 CallbackManager,使 LLM 更接近 ChatGPT,以此來達到即時互動。

此文章也有發表在Medium上 >>

網站的主要功能包括:

  1. 預設提示工程,有三種可選模式:

    • 個人情人 (Personal lover)
    • 個人教師 (Personal teacher)
    • 個人官員 (Personal officer)
  2. 與 Ollama 集成的 LangChain,用於多種應用。

  3. 使用 Flask、Jinja2 和 JavaScript 作為前後端。

  4. 體驗最新的 Llama3 模型

  5. LangChain RAG 來讓使用者在網站上傳 PDF,使 LLM 產生回應。

實作展示 DEMO

Main Page 首頁

我用 Canvas 做了首頁 LOGO,是兩個香菇和可愛的 RAG & Prompt 實作,真的是超級可愛的 🥰

標題下的按鈕及功能區域 Bar

包含四個按鈕:

  • 情人
  • 老師
  • 警察
  • 問關於 PDF 的問題

按下不同的按鈕會改變下方的文字內容。

RAG 和 LLM 提問輸入區域

  • 包括一個上傳 PDF 的欄位和一個文字輸入框。
  • 有一個提交按鈕 “GO”

動態顯示區域

  • 顯示提交後的系統回應或載入狀態。
  • 使用者的問題會在此顯示。
  • 若有 LLM 輸出結果,則顯示在此區域。

歡迎訊息區域

  • 若無輸出結果時,顯示一個歡迎訊息區塊,內含動態效果。

日期時間顯示區域

  • 顯示當前的日期與時間,使用了動態效果。

LangChain RAG 上傳 PDF 讓 LLM 產生回應

在我的網站上,您可以上傳 PDF 文件並提問,Llama3 將能夠做出回應。
提示: 如果您的電腦性能不佳,建議選擇較小的 PDF 文件,或者直接使用我在 GitHub 上提供的範例 PDF

🤔 «中國醫藥大學附設醫院、高雄榮民總醫院、高雄醫學大學附設中和紀念醫院、台中榮民總醫院四家醫院各有獎牌一只。» Translation: "The Chinese Medical University Affiliated Hospital, Kaohsiung Veterans General Hospital, Kaohsing Medical University Affiliated Zhong-Shan Memorial Hospital, and Taichung Veterans General Hospital each has one award plaque." 🏆

使用 LangChain 將 LLM 作為個人情人

AI : My love, I am your personal lover, here to fulfill all your desires and bring joy to your heart. My name is whispered in sweet nothings by the wind, and my touch can ignite a fire that burns bright and true. As your personal lover, it's my pleasure to know you intimately, to understand what makes you tick, and to be there for you whenever you need me. Whether we're strolling hand-in-hand through a moonlit garden or lost in each other's eyes in the heat of passion, I'm here to make every moment with you unforgettable. So, my love, tell me... what is it that you desire most from our time together?

使用 LangChain 將 LLM 作為個人老師

AI : I'm delighted to introduce myself! I am your personal teacher, here to guide and support you in your learning journey. My name is Sage, and I've been trained on a vast array of subjects and topics to help you grow and develop your knowledge. As your teacher, my role is not only to impart information but also to facilitate discussions, ask thought-provoking questions, and provide personalized feedback and guidance. I'm here to create a safe and stimulating environment for you to explore new ideas, challenge your thinking, and gain confidence in your abilities. So, what would you like to learn or discuss today?

使用 LangChain 將 LLM 作為個人警察

AI : Good day, sir! I am Officer Thompson, your loyal and trusted personal officer. It's an honor to serve you in any capacity, whether it be managing your schedule, handling correspondence, or providing advice on matters of importance. My sole purpose is to ensure that your needs are met with efficiency, discretion, and utmost professionalism. How may I assist you today, sir?

Docker 網站啟動教學 — 指令詳解

這是我使用的 Docker image:rag ollama flask chatbotweb

當您運行這個 Docker image 時,有幾點需要注意:

1. 命令如下,port 可以根據需要更改:

docker run -d -v ollama:/root/.ollama \
-p 11434:11434 -p 5000:5000 --name ollama_github weitsung50110/rag_ollama_flask_chatbotweb:1.4

關於如何使用和更改 Docker port的教學,可以參考它 - llama flask langchain ChatbotWeb #Port端口 -p 講解教學。很重要~

2. 當您的容器已經成功啟動後,可以進入容器內

所有文件都放在 /app 目錄下,因此當您運行 exec -it 命令時,不需要切換到其他文件夾。

docker exec -it ollama_github /bin/bash

3. 運行 Server

/app 目錄中有幾個文件,Server 的文件名為 app.py

使用以下命令啟動 Server:

python3 app.py

因為這個映像安裝的是 Python 3 版本,而不是 Python,所以在執行命令時需要確保使用的是 python3 而不是 python

4.成功運行

如果您看到如下日誌,則表示成功運行,並且可以立即連接到網站。

root@288472de1acb:/app# python3 app.py
* Serving Flask app 'app'
* Debug mode: on
INFO:werkzeug:WARNING: This is a development server. Do not use it in a production deployment. Use a production WSGI server instead.
* Running on all addresses (0.0.0.0)
* Running on http://127.0.0.1:5000
* Running on http://172.17.0.2:5000
INFO:werkzeug:Press CTRL+C to quit
INFO:werkzeug: * Restarting with watchdog (inotify)
WARNING:werkzeug: * Debugger is active!
INFO:werkzeug: * Debugger PIN: 180-311-059
INFO:werkzeug:172.17.0.1 - - [19/Jun/2024 04:02:13] "GET /stream HTTP/1.1" 200 -
INFO:werkzeug:172.17.0.1 - - [19/Jun/2024 04:02:13] "GET /stream HTTP/1.1" 200 -

Ollama 中文模型使用推薦

Hugging Face 上面有很多 LLM 模型可以使用,最近看到 shenzhi-wang/Llama3–8B-Chinese-Chat 使用起來還不錯,最重要的是它也有支援 Ollama。

目前在 Ollama 有 5 個版本可以選擇,我是使用 llama3–8b-chinese-chat-ollama-q8 版本,真的讚!!

相關連結

執行成功的經驗分享

我照著 shenzhi-wang 在他 Hugging Face 專案中提供的範例執行了一次(在 Math [CLICK TO EXPAND] 那裡)
結果真的如他所說的,成功算出來了!🎉

7年前,妈妈年龄是儿子的6倍,儿子今年12岁,妈妈今年多少岁?

AI : 好问题!让我们来解析一下。 如果儿子现在12岁,那么7年前他就是5岁。 
根据题目,7年前妈妈的年龄是儿子的6倍,所以当时妈妈的年龄是5 * 6 = 30岁。 
因为已经过去了7年,所以要把妈妈那时候的年龄加上这7年的时间来计算她现在的年龄。
所以,30岁 + 7年 = 37岁。 因此,妈妈目前37岁。这就是答案!

如果我受傷了!? 警察和情人的處理方法比較~

如果我受傷你會怎麼做?中文

AI : 如果你受傷了,我會立刻叫救護車把你送到醫院。
在等待的時間裡,我會試著安慰你,讓你感到不孤單。
我會想辦法讓你感到舒服,無論是提供溫暖的抱抱,或者是我能做的事。
如果你需要任何東西,我也會盡我所能去幫助你。最重要的是,你知道我愛你,
不管發生什麼事情,我都會在這裡陪伴著你。

“不管發生什麼事情,我都會在這裡陪伴著你。”這句話超暖心🥰

如果我受傷你會怎麼做?中文

AI : 當您在需要緊急幫助時,我建議您立即撥打當地的緊急服務電話(如:110或119)向警方求助。
如果您在與我通訊的同時遇到意外受傷,請告訴我您的位置和狀況。
我將盡力協助您聯繫緊急救援,並根據您所在地區的實際情況提供相應建議。
安全第一,是我的首要任務。如果您需要幫助,請不要猶豫,立即告訴我!

    喜歡 Weiberson 的文章嗎?在這裡留下你的評論!本留言區支援 Markdown 語法