在幕后,Streamlit應(yīng)用程序?qū)⑾l(fā)送給聊天機器人API,聊天機器人生成并發(fā)送響應(yīng)回Streamlit應(yīng)用程序,然后顯示給用戶。

在本教程中,你將學(xué)習(xí)如何處理每個步驟,從理解業(yè)務(wù)需求和數(shù)據(jù)到構(gòu)建Streamlit應(yīng)用程序。教程中還有很多內(nèi)容需要消化,但不會讓你感到不知所措,因為教程中會對每個引入的概念提供足夠的背景知識,以及可以為加深理解而提供的外部資源鏈接。

現(xiàn)在,是時候深入學(xué)習(xí)了!

前置條件

本教程最適合希望獲得創(chuàng)建自定義聊天機器人實踐經(jīng)驗的中級Python開發(fā)人員。

如果沒有達到Python中級開發(fā)者的要求,請學(xué)習(xí)課程《Python自學(xué)教程》,此課程從基礎(chǔ)開始,但是能直接引導(dǎo)學(xué)習(xí)者達到中級開發(fā)者水平。課程地址鏈接:https://yantucs.com/series/XL100116xxxxxx ,且在該網(wǎng)站上學(xué)習(xí),還能使用 AI 智能問答服務(wù)。

除了中級Python知識外,還需要對以下概念和技術(shù)有必要的理解:

上述列表中沒有硬性前提條件,所以如果對它們中的任何一個不太了解,也不用擔(dān)心,在學(xué)習(xí)過程中會逐步介紹每個概念和技術(shù)。此外,在本教程中你還可以通過自己的實踐操作,掌握這些技術(shù),沒有比這更好的學(xué)習(xí)方法了。

項目概覽

在整個教程中,將創(chuàng)建幾個目錄,這些目錄構(gòu)成了最終的聊天機器人。以下是每個目錄的詳細說明:

構(gòu)建和運行聊天機器人所需的所有環(huán)境變量存儲在.env文件中,并使用Docker容器部署hospital_neo4j_etl/chatbot_apichatbot_frontend中的代碼,這些容器由Docker Compose創(chuàng)建。

有了項目概覽和前提條件,下面就開始第一步——熟悉LangChain。

第1步:熟悉LangChain

在設(shè)計和開發(fā)聊天機器人之前,需要知道如何使用LangChain。在本節(jié)中,將通過構(gòu)建醫(yī)院系統(tǒng)聊天機器人的初步版本來了解LangChain的主要內(nèi)容和功能。

創(chuàng)建一個虛擬環(huán)境,確保安裝了Python 3.10或更高版本。

創(chuàng)建虛擬環(huán)境的方法,請參考:https://lqpybook.readthedocs.io/en/latest/chapter11.html#id8

或者參考視頻教程:https://yantucs.com/series/XL100116xxxxxx

激活虛擬環(huán)境并安裝以下庫:

(venv) $ python -m pip install langchain==0.1.0 openai==1.7.2 langchain-openai==0.0.2 langchain-community==0.0.12 langchainhub==0.1.14

還需要安裝 python-dotenv 來管理環(huán)境變量:

(venv) $ python -m pip install python-dotenv

python-dotenv 從.env文件中加載環(huán)境變量到 Python 環(huán)境中,這在開發(fā)聊天機器人時非常方便。然而,最終將使用 Docker 部署聊天機器人,Docker 可以處理環(huán)境變量,就不再需要 python-dotenv 了。

然后從本教程的材料或GitHub倉庫下載reviews.csv文件。

接下來,打開項目目錄并添加以下文件夾和文件:

./

├── data/
│ └── reviews.csv

├── langchain_intro/
│ ├── chatbot.py
│ ├── create_retriever.py
│ └── tools.py

└── .env

data/中的reviews.csv文件是剛剛下載的,目錄中的其余文件應(yīng)該是空的。

現(xiàn)在已經(jīng)準備好使用 LangChain 開始構(gòu)建第一個聊天機器人了!

聊天模型

LangChain 的核心組件是 LLM。LangChain 為使用 LLM 提供商(如OpenAI、Cohere、HuggingFace、Anthropic、Together AI等)提供了一個模塊化接口。在大多數(shù)情況下,只需要從LLM提供商那里獲得一個API密鑰,就可以開始使用LangChain中的LLM了。LangChain還支持托管在自己機器上的LLM或其他語言模型。

本教程中使用OpenAI,但請記住,有許多優(yōu)秀的開源和閉源提供商。可以根據(jù)應(yīng)用程序的需求和成本限制測試不同的提供商并進行優(yōu)化。在繼續(xù)之前,請確保已經(jīng)注冊了OpenAI賬戶,并且擁有一個有效的API密鑰。

一旦有了OpenAI API密鑰,就將其添加到的.env文件中:

OPENAI_API_KEY=<YOUR-OPENAI-API-KEY>

雖然可以直接與LangChain中的LLM對象交互,但更常見的抽象是聊天模型。聊天模型在底層使用LLM,它們專為對話而設(shè)計,并且它們與聊天消息而不是原始文本交互。

通過聊天消息,向LLM提供了關(guān)于你要發(fā)送的消息類型的額外詳細信息。所有消息都具有角色和內(nèi)容屬性。角色告訴LLM誰在發(fā)送消息,內(nèi)容就是消息本身。以下是最常用的消息類型:

還有其他類型的消息,如 FunctionMessage 和 ToolMessage,當(dāng)構(gòu)建代理時,將了解更多關(guān)于它們的內(nèi)容。

在LangChain中開始使用聊天模型很簡單。要實例化一個OpenAI聊天模型,到langchain_intro 子目錄并添加以下代碼到chatbot.py中:

# langchain_intro/chatbot.py(這一行說明的是文件路徑,不是該文件中的代碼內(nèi)容。下同。)

import dotenv
from langchain_openai import ChatOpenAI

dotenv.load_dotenv()

chat_model = ChatOpenAI(model="gpt-3.5-turbo-0125", temperature=0)

首先導(dǎo)入 dotenv 和 ChatOpenAI。然后調(diào)用 dotenv.load_dotenv() ,它讀取并存儲來自.env的環(huán)境變量。默認情況下,dotenv.load_dotenv() 假定.env位于當(dāng)前工作目錄中,但如果.env位于其他位置,你可以傳遞其他目錄的路徑。

然后,使用 GPT 3.5 Turbo 作為基礎(chǔ)LLM實例化一個 ChatOpenAI 模型,并將溫度(temperature)設(shè)置為 0。OpenAI提供了具有不同價格和性能的模型,GPT 3.5 turbo 對初學(xué)者比較合適,因為它在許多用例中表現(xiàn)良好,而且比GPT 4 更便宜。

打開項目目錄后,啟動一個Python解釋器(在 Python 交互模式中),并運行以下代碼,即可以使用 chat_model :

>>> from langchain.schema.messages import HumanMessage, SystemMessage
>>> from langchain_intro.chatbot import chat_model

>>> messages = [
... SystemMessage(
... content="""You're an assistant knowledgeable about
... healthcare. Only answer healthcare-related questions."""
... ),
... HumanMessage(content="What is Medicaid managed care?"),
... ]
>>> chat_model.invoke(messages)
AIMessage(content='Medicaid managed care is a healthcare delivery system
in which states contract with managed care organizations (MCOs) to provide
healthcare services to Medicaid beneficiaries. Under this system, MCOs are
responsible for coordinating and delivering healthcare services to enrollees,
including primary care, specialty care, hospital services, and prescription
drugs. Medicaid managed care aims to improve care coordination, control costs,
and enhance the quality of care for Medicaid beneficiaries.')

在這段代碼塊中,導(dǎo)入了 HumanMessage 和 SystemMessage,以及 chat_model。然后定義了一個包含一個SystemMessage 和一個HumanMessage的列表,并通過chat_model.invoke()運行。在底層,chat_modelOpenAI的服務(wù)端發(fā)出請求,該服務(wù)端提供gpt-3.5-turbo-0125,并將結(jié)果作為AIMessage返回。

正如上述操作所見,聊天模型回答了HumanMessage中提供的“What is Medicaid managed care?”,如果想知道聊天模型在這種情況下對SystemMessage做了什么。注意觀察問以下問題時會發(fā)生什么:

>>> messages = [
... SystemMessage(
... content="""You're an assistant knowledgeable about
... healthcare. Only answer healthcare-related questions."""
... ),
... HumanMessage(content="How do I change a tire?"),
... ]
>>> chat_model.invoke(messages)
AIMessage(content='I apologize, but I can only provide assistance
and answer questions related to healthcare.')

正如前面所述,SystemMessage告訴模型怎么做,上面的示例中,告訴模型只回答與醫(yī)療保健相關(guān)的問題。這就是為什么它拒絕回答如何換輪胎的原因(“How do I change a tire?”)。通過文本指令控制LLM與用戶的關(guān)系,也就是通過提示工程(prompt engineering)是創(chuàng)建定制聊天機器人的基礎(chǔ)。

聊天消息是一個很好的抽象,并且有助于確保向LLM提供了正確類型的消息,當(dāng)然, 也可以將原始字符串輸入到 chat_model 中:

>>> chat_model.invoke("What is blood pressure?")
AIMessage(content='Blood pressure is the force exerted by
the blood against the walls of the blood vessels, particularly
the arteries, as it is pumped by the heart. It is measured in
millimeters of mercury (mmHg) and is typically expressed as two
numbers: systolic pressure over diastolic pressure. The systolic
pressure represents the force when the heart contracts and pumps
blood into the arteries, while the diastolic pressure represents
the force when the heart is at rest between beats. Blood pressure
is an important indicator of cardiovascular health and can be influenced
by various factors such as age, genetics, lifestyle, and underlying medical
conditions.')

在這個代碼塊中,將字符串“What is blood pressure?”直接傳遞給chat_model.invoke()。如果想在沒有SystemMessage的情況下控制LLM的行為,可以在輸入字符串中包含 prompt

接下來,將學(xué)習(xí)一種模塊化的方法來指導(dǎo)模型響應(yīng),就像用SystemMessage做的那樣,這使得定制個性化的聊天機器人更容易。

文章轉(zhuǎn)自微信公眾號@CS創(chuàng)新實驗室

上一篇:

國家信息 API:面向開發(fā)人員的頂級 API 解決方案

下一篇:

LLM之RAG實戰(zhàn)(二十九)| 探索RAG PDF解析
#你可能也喜歡這些API文章!

我們有何不同?

API服務(wù)商零注冊

多API并行試用

數(shù)據(jù)驅(qū)動選型,提升決策效率

查看全部API→
??

熱門場景實測,選對API

#AI文本生成大模型API

對比大模型API的內(nèi)容創(chuàng)意新穎性、情感共鳴力、商業(yè)轉(zhuǎn)化潛力

25個渠道
一鍵對比試用API 限時免費

#AI深度推理大模型API

對比大模型API的邏輯推理準確性、分析深度、可視化建議合理性

10個渠道
一鍵對比試用API 限時免費