ChatGPT大模型系統實戰-原型系統:開源工具自建AI大模型底座

2024年2月6日 20点热度 0人点赞

今天,我們就結合實戰例子,帶你學習怎麼通過開源工具組建一個極簡應用,讓智能體來替你回答工作問題,並讓它作為你的專屬助理,對你定期進行專題匯報。

如果你想要直接學習如何使用工具,也可以根據自己的需求,選擇目錄中感興趣的內容直接學習。另外需要註意,在這節課的第四部分,我會教你如何搭建一個自主可控的大模型(LLM)底座,所以即使你的工作環境不允許使用 OpenAI API 也沒關系。

今天這節課不會繞彎子,會直接告訴你每個工具的核心價值,讓你即學即用。話不多說,我們開始吧!

鏈式調用黏合劑(Langchain)

首先,我們來為你的原型系統搭建一個“調度中心”。這個調度中心將幫助 大語言模型(LLM) 連接到我們之前學到的各種生態組件,如計劃組件、記憶組件和工具組件等等。

目前最主流的做法是采用鏈式調用。鏈式調用可以讓你的編碼更高效,隻需少量代碼,就能讓用戶、LLM和組件之間進行復雜的互動。

接下來,我將使用Langchain,基於OpenAI的LLM制作一個簡易的ChatGPT。ChatGPT你應該並不陌生,它 是一個基於大語言模型的應用程序,可以與人類進行多輪對話。

為了讓大語言模型能夠實現與人類友好的多輪對話,我們需要額外引入兩個組件。

第一個是ConversationBufferMemory,它將幫助LLM記錄我們的對話過程。

第二個是ConversationChain,它會幫我們管理整個會話過程,通過調取BufferMemory中的對話信息,讓無狀態的LLM了解我們的對話上下文。

同時,ConversationChain還會通過補充一些“提示語”,確保LLM知道它在與人類進行交流。

from langchain.llms import OpenAI
from langchain.chains import ConversationChain
from langchain.memory import ConversationBufferMemory
import os
os.environ["OPENAI_API_KEY"] = '...'
llm = OpenAI(temperature=0)
mem = ConversationBufferMemory()
# Here it is by default set to "AI"
conversation = ConversationChain(llm=llm, verbose=True, memory=mem)
conversation.predict(input="Hi there!")

Entering new ConversationChain chain…
Prompt after formatting:
The following is a friendly conversation between a human and an AI. The AI is talkative and provides lots of specific details from its context. If the AI does not know the answer to a question, it truthfully says it does not know.
Current conversation:
Human: Hi there!
AI:
Finished chain.
Out[1]:
" Hi there! It’s nice to meet you. How can I help you today?"

在這個例子中,我們直接使用了ConversationChain的封裝。以下是它的核心代碼,可以看到整個流程非常簡單。ConversationChain隻是對你的對話內容進行了格式化的封裝,告訴了LLM它正在和人類進行對話,並將歷史聊天內容提供給LLM,讓LLM更好地與用戶進行交流。

推薦全套完整AI大模型訓練及ChatGPT相關學習教程資料,AI大模型系統訓練開發實戰

from langchain.prompts.prompt import PromptTemplate
DEFAULT_TEMPLATE = """The following is a friendly conversation between a human and an AI. The AI is talkative and provides lots of specific details from its context. If the AI does not know the answer to a question, it truthfully says it does not know.
Current conversation:
{history}
Human: {input}
AI:"""
PROMPT = PromptTemplate(input_variables=["history", "input"], template=DEFAULT_TEMPLATE)

你完全也可以根據自己的需求定制自己任務的 Chain。當然,代碼示例中可以看出 Langchain對LLM生態組件提供了良好的支持,針對常見應用場景也進行了鏈式封裝,這一點做的非常友好。

比如,SQL Database Chain 就能通過對話來與數據庫互動,根據你的需求生成數據報告,這裡我也留了一道相關的課後作業。我建議,你在面對這類任務時,優先選擇官方的實現,快速完成編碼。

零代碼快速搭建(Flowise)

在學習更高級的用法之前, 先給你一個學習加速包,讓你“無痛”地進行下面的過程。這個加速包叫做Flowise,用於零代碼搭建LLM應用平臺。通過使用它,你可以在一分鐘內搭建起剛才的應用。

首先是Flowise的安裝,在安裝完成後通過下面的指令啟動Flowise服務(推薦用Linux/Mac)。

$ npm install -g flowise
$ npx flowise start --FLOWISE_USERNAME=user --FLOWISE_PASSWORD=1234

進入瀏覽器打開 http://localhost:3000,輸入用戶名和密碼。如果能看到下圖中的Flowise界面,恭喜你已經搭建成功了。現在,我們開始搭建ChatGPT的例子。

推薦全套完整AI大模型訓練及ChatGPT相關學習教程資料,AI大模型系統訓練開發實戰,請留言私我。

這裡如下圖,在 Chat Models 中找到 ChatOpenAI 組件,拖入我們的應用中,填入剛剛獲得的OpenAI Api Key,它對應代碼是後面這樣。

llm = OpenAI(temperature=0)

隨後,如下圖所示,在 Memory 組件中找到 Buffer Memory組件,拖入到我們的應用中。

它背後對應的代碼是後面這樣。

mem = ConversationBufferMemory()

最後,我們拖入LLM Chain組件,這個動作對應前面Langchain這段對代碼。

conversation = ConversationChain(llm=llm, verbose=True, memory=mem)

鏈式調用程序特別適合圖形化搭建,接下來,我們點擊右上角的會話按鈕,就可以和LLM對話了。

相信你在剛才的搭建過程中,已經看到了 Flowise 提供的豐富的組件庫。這些組件可以幫助你快速搭建原型系統,提升開發效率。如果有興趣,可以課後研究一下每個組件的用途,以便在未來的開發中靈活運用。

對於從第二部分開始看的同學,如果你沒有 Langchain 的基礎知識,建議還是快速通讀一下第一部分“鏈式調用黏合劑”的內容。當然,你也可以根據你的學習習慣,選擇先閱讀後面的內容,快速建立整體的認識。