從0開始:用 Streamlit + LangChain 搭建個(gè)簡(jiǎn)易ChatGPT
流式傳輸允許實(shí)時(shí)接收生成的文本,隨著文本的生成而接收。這樣,您就不必等到整個(gè)文本準(zhǔn)備好后才能開始向用戶展示。我們將使用 LangChain 與LLM進(jìn)行流式交互,并使用 Streamlit 創(chuàng)建應(yīng)用的前端。
原標(biāo)題:從0開始:用 Streamlit + LangChain 搭建個(gè)簡(jiǎn)易ChatGPT
文章來源:AI取經(jīng)路
內(nèi)容字?jǐn)?shù):7711字
構(gòu)建實(shí)時(shí)流式AI應(yīng)用:Streamlit與LangChain的完美結(jié)合
在人工智能飛速發(fā)展的今天,構(gòu)建一個(gè)流暢、高效的機(jī)器人應(yīng)用已成為許多開發(fā)者的目標(biāo)。本文將詳細(xì)介紹如何利用Streamlit和LangChain這兩個(gè)強(qiáng)大的Python庫,構(gòu)建一個(gè)具有實(shí)時(shí)流式輸出功能的AI應(yīng)用。該應(yīng)用能夠記住歷史,并提供友好的用戶交互體驗(yàn)。
一、項(xiàng)目概述
本項(xiàng)目旨在創(chuàng)建一個(gè)基于OpenAI大型語言模型(LLM)的機(jī)器人應(yīng)用。其核心功能包括:實(shí)時(shí)流式輸出AI回復(fù),利用LangChain簡(jiǎn)化與LLM的交互,使用Streamlit快速構(gòu)建用戶界面,以及記住并顯示歷史記錄。
二、核心技術(shù)詳解
2.1 Streamlit:簡(jiǎn)化Web應(yīng)用開發(fā)
Streamlit是一個(gè)Python庫,它讓開發(fā)者能夠用極少的代碼快速構(gòu)建交互式Web應(yīng)用。無需編寫HTML、CSS或JavaScript,只需專注于應(yīng)用的邏輯即可。Streamlit自動(dòng)刷新界面,支持各種交互組件,并能輕松集成數(shù)據(jù)可視化庫,非常適合AI項(xiàng)目。
2.2 LangChain:構(gòu)建強(qiáng)大的語言處理系統(tǒng)
LangChain是一個(gè)強(qiáng)大的框架,它允許開發(fā)者以模塊化的方式構(gòu)建復(fù)雜的語言處理系統(tǒng)。它提供了一系列預(yù)構(gòu)建的組件,例如模型、提示模板、向量數(shù)據(jù)庫等,開發(fā)者可以將這些組件組合起來,快速構(gòu)建各種AI應(yīng)用。LangChain簡(jiǎn)化了與LLM的交互,并提供了許多高級(jí)功能,例如記憶管理和代理。
2.3 流式輸出:提升用戶體驗(yàn)
傳統(tǒng)的AI應(yīng)用通常需要等待模型生成完整的回復(fù)后再顯示。流式輸出則不同,它允許模型邊生成邊顯示文本,就像人類打字一樣,極大地提升了用戶體驗(yàn),減少了等待時(shí)間,讓交互更自然流暢。
三、代碼實(shí)現(xiàn)
以下代碼展示了如何一步步構(gòu)建我們的流式AI應(yīng)用。請(qǐng)確保已安裝必要的庫:pip install streamlit langchain langchain-openai
3.1 導(dǎo)入庫和初始化模型
首先,導(dǎo)入必要的庫并初始化OpenAI的模型:
import os
import streamlit as st
from langchain_openai.chat_models import ChatOpenAI
# 設(shè)置OpenAI API密鑰 (請(qǐng)?zhí)鎿Q為你的API密鑰)
OPENAI_API_KEY = 'YOUR_OPENAI_API_KEY'
os.environ['OPENAI_API_KEY'] = OPENAI_API_KEY
# 初始化ChatOpenAI模型
llm = ChatOpenAI(model="gpt-3.5-turbo",temperature=0)
3.2 創(chuàng)建Streamlit UI
使用Streamlit創(chuàng)建簡(jiǎn)單的用戶界面:
st.title("實(shí)時(shí)流式AI")
st.write("輸入你的問題,AI將實(shí)時(shí)回答!")
3.3 流式輸出函數(shù)
定義流式輸出函數(shù),使用yield
逐步返回模型生成的文本:
def chat_stream(prompt):
for chunk in llm.stream(prompt):
if chunk.content:
yield chunk.content
3.4 管理歷史和顯示記錄
使用Streamlit的session state管理歷史,并顯示歷史記錄:
if "history" not in st.session_state:
st.session_state.history = []
for message in st.session_state.history:
with st.chat_message(message["role"]):
st.write(message["content"])
3.5 獲取用戶輸入和生成AI回復(fù)
獲取用戶輸入,并使用流式輸出顯示AI回復(fù):
if prompt := st.chat_input("請(qǐng)輸入你的問題"):
with st.chat_message("user"):
st.write(prompt)
st.session_state.history.append({"role": "user","content": prompt})
with st.chat_message("assistant"):
full_response = ""
for chunk in st.write_stream(chat_stream(prompt)):
full_response += chunk
st.session_state.history.append({"role": "assistant","content": full_response})
四、運(yùn)行項(xiàng)目
保存代碼為app.py
,然后運(yùn)行streamlit run app.py
即可啟動(dòng)應(yīng)用。
五、總結(jié)
本文提供了一個(gè)構(gòu)建實(shí)時(shí)流式AI應(yīng)用的完整教程。通過結(jié)合Streamlit和LangChain,我們可以快速構(gòu)建一個(gè)功能強(qiáng)大且用戶友好的AI應(yīng)用。希望本文能夠幫助開發(fā)者快速入門,并進(jìn)一步探索AI應(yīng)用開發(fā)的無限可能。
聯(lián)系作者
文章來源:AI取經(jīng)路
作者微信:
作者簡(jiǎn)介:踏上取經(jīng)路,比抵達(dá)靈山更重要! AI技術(shù)、 AI知識(shí) 、 AI應(yīng)用 、 人工智能 、 大語言模型