開發一個能理解自然語言、執行任務的 AI 人工智慧助理,一直是開發者們的夢想。如今,結合 LangChain 和 Streamlit,這個夢想變得觸手可及。本文中,我將引導你逐步建構一個 AI 人工智慧助理,並深入剖析 LangChain 的核心概念、實務應用和佈署策略。

Streamlit 與 LangChain 的協奏曲

Streamlit 以其簡潔易用的特性,成為快速構建互動式網頁應用程式的首選。LangChain 則提供了一套強大的工具,讓開發者能輕鬆駕馭大語言模型(LLM)。兩者結合,便能創造出功能強大的 AI 應用程式。

import os
import streamlit as st
from langchain.chains import LLMChain
from langchain.prompts import ChatPromptTemplate, HumanMessagePromptTemplate
from langchain.chat_models import ChatOpenAI
from dotenv import load_dotenv

load_dotenv()
openai_api_key = os.getenv("OPENAI_API_KEY")

if openai_api_key is None:
    openai_api_key = st.text_input("請輸入您的 OpenAI API 金鑰:", type="password")
    if openai_api_key:
        os.environ["OPENAI_API_KEY"] = openai_api_key

st.title("AI 人工智慧助理:與玄貓對話")
user_query = st.text_input("請輸入您的問題:")

if 'chat_history' not in st.session_state:
    st.session_state['chat_history'] = []

for chat in st.session_state['chat_history']:
    st.write(f"問: {chat['question']}")
    st.write(f"答: {chat['answer']}")
    st.write("---")

if user_query and openai_api_key and st.button("提交"):
    try:
        llm = ChatOpenAI(temperature=0.7, model_name='gpt-3.5-turbo')
        prompt = ChatPromptTemplate.from_messages([
            HumanMessagePromptTemplate.from_template("{query}")
        ])
        chain = LLMChain(llm=llm, prompt=prompt)
        response = chain.run(query=user_query)

        st.session_state['chat_history'].append({"question": user_query, "answer": response})
        st.write("答:")
        st.write(response)

    except Exception as e:
        st.error(f"發生錯誤:{e}")

elif openai_api_key is None:
    st.warning("請先設定 OpenAI API 金鑰。")
else:
    st.info("請輸入問題並點選提交。")

這段程式碼首先載入必要的函式庫,並從環境變數中取得 OpenAI API 金鑰。接著,它建立 Streamlit 介面,接收使用者輸入,並使用 LangChain 建立與 OpenAI API 的連線。最後,它將使用者的問題傳送給 LLM,並將 LLM 的回覆顯示在介面上。錯誤處理機制確保程式碼的穩定性,而會話狀態管理則保留了聊天歷史記錄。

  graph LR
    B[B]
    C[C]
    G[G]
    A[使用者輸入] --> B{Streamlit};
    B --> C{LangChain};
    C --> D[OpenAI API];
    D --> E[LLM];
    E --> F[回覆];
    F --> G{Streamlit 顯示};

此流程圖清晰地展現了使用者輸入、Streamlit 介面、LangChain 處理、OpenAI API 呼叫、LLM 回應以及 Streamlit 顯示回覆的完整流程。

  classDiagram
    class StreamlitUI {
        +display_chat_history()
        +get_user_input()
        +display_response()
    }
    class LangChainManager {
        +llm: ChatOpenAI
        +process_input(input: str): str
    }
    class OpenAIInterface {
        +api_key: str
        +query_llm(prompt: str): str
    }
    StreamlitUI -- LangChainManager : 使用
    LangChainManager -- OpenAIInterface : 呼叫

此類別圖展示了應用程式中主要類別及其關係。StreamlitUI 負責使用者介面和互動,LangChainManager 負責處理使用者輸入並且 OpenAIInterface 互動,OpenAIInterface 負責與 OpenAI API 進行通訊。這種模組化設計提升了程式碼的可讀性和可維護性。

LangChain:AI 應用開發的利器

LangChain 的模組化設計是其核心優勢。它將 LLM 互動過程分解成代理、鏈、提示工程和記憶體管理等元件,讓開發者能像搭積木一樣靈活組合,滿足各種應用需求。

安全性至上:環境變數的應用

在開發過程中,保護 API 金鑰等敏感資訊至關重要。我強烈建議使用環境變數儲存這些資訊,並將 .env 檔案加入 .gitignore,避免敏感資訊洩露。

佈署的藝術:選擇合適的平台

LangChain 應用程式佈署方式多元,從 Streamlit Cloud 到 LangServe、Heroku、AWS、Google Cloud Run 等平台,皆可根據專案需求選擇。

選擇佈署平台時,應考量專案規模、團隊技術能力、預算和維護成本等因素。我建議初期可選擇 Streamlit Cloud 等簡單易用的平台快速上手,隨著專案發展再逐步探索更進階的佈署方案。

透過本文的介紹,相信你已經對如何使用 LangChain 和 Streamlit 建構 AI 人工智慧助理有了更深入的理解。持續學習,不斷探索,你將在 AI 應用開發的道路上走得更遠。

解鎖LLM潛能:LangChain核心元件深度解析

LangChain如同一個精密的儀器,其核心元件相互協作,賦予大語言模型(LLM)與外部世界互動和執行複雜任務的能力。我將深入剖析這些核心元件,並以實際案例展示如何運用LangChain構建強大的AI應用。

LangChain:橋接LLM與外部世界

想像一下,鏈就像一座橋樑,將LLM的智慧與外部資料和操作連線起來。透過鏈,LLM不再是一個孤立的個體,它可以取得即時資訊、執行特定指令,並將結果回饋給使用者。

from langchain.chains import LLMChain
from langchain.llms import OpenAI
from langchain.prompts import PromptTemplate

llm = OpenAI(temperature=0.9)  # 設定溫度引數,控制創造力
prompt = PromptTemplate(
    input_variables=["產品名稱"],
    template="請生成一篇關於 {產品名稱} 的Twitter推文。",
)
chain = LLMChain(llm=llm, prompt=prompt)

產品名稱 = "新一代智慧型手機"
print(chain.run(產品名稱))

這段程式碼示範瞭如何使用LLMChain生成Twitter推文。首先,初始化一個OpenAI語言模型,並設定temperature引數為0.9,以提升推文的創造性。接著,定義一個提示範本,指示LLM生成關於指定產品的推文。最後,將LLM和提示範本組裝成一個鏈,並執行以生成推文。這個例子展示了鏈如何將LLM與外部需求(生成推文)連線起來。

提示工程:引導LLM生成高品質內容

提示工程如同一位技藝精湛的工匠,它雕琢著LLM的輸出,使其更精確、更符合預期。一個精心設計的提示可以引導LLM理解使用者的意圖,並生成更具體、更相關的內容。

記憶體:賦予LLM上下文理解能力

記憶體機制賦予LLM上下文理解能力,如同為其增加了記憶功能。LLM可以記住之前的互動,並在後續對話中運用這些資訊,使互動更自然、更流暢。

LangChain實戰應用:探索無限可能

LangChain的應用場景廣泛,涵蓋智慧客服、問答系統、程式碼生成等眾多領域。它為開發者提供了一個功能豐富的工具箱,簡化AI應用構建流程,提升開發效率。

LangChain不僅僅是一個工具函式庫,更是一個蓬勃發展的生態系統。它不斷演進,融合新技術和理念,為AI應用開發帶來無限可能。隨著技術的進步,LangChain將在未來扮演更重要的角色,推動AI應用的普及和發展,並在各個領域發揮更大的作用。

LangChain將持續發展,整合更多先進技術,為開發者提供更強大的工具和更便捷的開發體驗。它將在推動AI技術發展和應用落地方面發揮越來越重要的作用。