您是否嘗試過構建自己的大型語言模型 (LLM) 應用程式?您是否想過人們是如何透過構建自己的 LLM 應用程式來提高工作效率的?LLM 應用程式已被證明在各個方面都非常有用。如今,構建 LLM 應用程式已變得觸手可及。這要歸功於 AI 模型和強大框架的普及。在本教程中,我們將以儘可能簡單的方式構建我們的第一個 LLM 應用程式。讓我們開始這個過程。我們將逐一深入探討從構思到程式碼再到部署的每個流程。
為什麼LLM應用如此重要?
LLM 應用的獨特之處在於它們使用自然語言來處理使用者問題,並以自然語言進行響應。此外,LLM 應用能夠感知使用者查詢的上下文並進行相應的回答。LLM 應用的常見用例包括聊天機器人、內容生成和問答代理。它透過整合對話式 AI(當今 AI 領域的驅動力)顯著提升使用者體驗。
LLM應用的關鍵元件
建立 LLM 應用涉及建立 LLM 應用不同元件的步驟。最終,我們將使用這些元件構建一個功能齊全的應用程式。讓我們逐一瞭解這些元件,以全面理解每個元件。
- 基礎模型:這涉及選擇將在應用程式後端使用的基礎 AI 模型或 LLM。您可以將其視為應用程式的大腦。
- 快速工程:這是最重要的元件,它為您的 LLM 應用提供上下文。這包括定義你的 LLM 的語氣、個性和角色,以便它能夠做出相應的回答。
- 編排層:像 Langchain、LlamaIndex 這樣的框架充當編排層,處理所有 LLM 呼叫並輸出到你的應用程式。這些框架將你的應用程式與 LLM 繫結,以便你可以輕鬆訪問 AI 模型。
- 工具:工具是構建 LLM 應用程式時最重要的元件。LLM 通常使用這些工具來執行 AI 模型無法直接執行的任務。
選擇合適的工具
選擇合適的工具是建立 LLM 應用程式最重要的任務之一。人們經常跳過這一步,直接使用任何可用的工具從頭開始構建 LLM 應用程式。這種方法非常模糊。在進入開發階段之前,應該有效地定義工具。讓我們來定義我們的工具。
- 選擇 LLM:LLM 是你應用程式背後的核心。選擇合適的 LLM 是至關重要的一步,需要考慮成本和可用性引數。您可以使用 OpenAI、Groq 和 Google 的 LLM。您必須從他們的平臺獲取 API 金鑰才能使用這些 LLM。
- 框架:框架充當您的應用程式和 LLM 之間的整合。它幫助我們簡化對 LLM 的提示,連結定義應用程式工作流程的邏輯。像 Langchain 和 LlamaIndex 這樣的框架被廣泛用於建立 LLM 應用程式。Langchain 被認為是最適合初學者且最容易使用的框架。
- 前端庫:Python 為以儘可能少的程式碼為您的應用程式構建前端提供了良好的支援。Streamlit、Gradio 和 Chainlit 等庫能夠以最少的程式碼為您的 LLM 應用程式提供漂亮的前端。
分步實施
我們已經介紹了構建 LLM 應用程式的所有基本先決條件。讓我們開始實際實施,並從頭開始編寫開發 LLM 應用程式的程式碼。在本指南中,我們將建立一個 LLM 應用程式,該應用程式接收查詢作為輸入,將查詢分解為多個子部分,搜尋網際網路,然後將結果編譯成美觀的 Markdown 報告,幷包含所使用的參考文獻。
1. 設定Python及其環境
第一步是從 Python 官方網站下載並安裝 Python 直譯器。安裝時,請記得勾選/選擇“Add PATH VARIABLE to the system”選項。
此外,請在命令列中輸入 python
來確認您已安裝 Python。
2. 安裝所需的依賴項
此步驟將庫依賴項安裝到您的系統中。開啟終端並輸入以下命令來安裝依賴項。
pip install streamlit dotenv langchain langchain-openai langchain-community langchain-core
此命令將執行終端並安裝執行應用程式所需的所有依賴項。
3. 匯入所有依賴項
安裝依賴項後,轉到 IDE 程式碼編輯器(例如 VS Code),並在所需路徑中開啟它。現在,建立一個 Python 檔案“app.py”,並將以下匯入語句貼上到檔案中
import streamlit as st import os from dotenv import load_dotenv from langchain_openai import ChatOpenAI from langchain_community.tools.tavily_search import TavilySearchResults from langchain.agents import AgentExecutor, create_tool_calling_agent from langchain_core.prompts import ChatPromptTemplate, MessagesPlaceholder from langchain_core.messages import AIMessage, HumanMessage
4. 環境設定
我們為 LLM 和其他工具建立一些環境變數。為此,請在同一目錄中建立一個“.env”檔案,並使用環境變數將 API 金鑰貼上到其中。例如,在我們的 LLM 應用程式中,我們將使用兩個 API 金鑰:一個用於 LLM 的 OpenAI API 金鑰(可從此處訪問);以及一個用於即時搜尋網際網路的 Tavily API 金鑰(可從此處訪問)。
OPENAI_API_KEY="Your_API_Key" TAVILY_API_KEY="Your_API_Key"
現在,在你的 app.py 中,編寫以下程式碼。此程式碼將把所有可用的環境變數直接載入到你的工作環境中。
# --- ENVIRONMENT SETUP --- load_dotenv() OPENAI_API_KEY = os.getenv("OPENAI_API_KEY") TAVILY_API_KEY = os.getenv("TAVILY_API_KEY") if not OPENAI_API_KEY: st.error("🚨 OpenAI API key not found. Please set it in your .env file (OPENAI_API_KEY='sk-...')") if not TAVILY_API_KEY: st.error("🚨 Tavily API key not found. Please set it in your .env file (TAVILY_API_KEY='tvly-...')") if not OPENAI_API_KEY or not TAVILY_API_KEY: st.stop()
5. 代理設定
所有環境變數都已載入完畢。接下來,讓我們建立代理工作流,在使用 LLM 應用程式時,每個查詢都會經過該工作流。這裡我們將建立一個工具,即 Tavily 搜尋,用於搜尋網際網路。此外,我們還將建立一個代理執行器,用於使用工具執行代理。
# --- AGENT SETUP --- @st.cache_resource def get_agent_executor(): """ Initializes and returns the LangChain agent executor. """ # 1. Define the LLM llm = ChatOpenAI(model="gpt-4o-mini", temperature=0.2, api_key=OPENAI_API_KEY) # 2. Define Tools (simplified declaration) tools = [ TavilySearchResults( max_results=7, name="web_search", api_key=TAVILY_API_KEY, description="Performs web searches to find current information" ) ] # 3. Updated Prompt Template (v0.3 best practices) prompt_template = ChatPromptTemplate.from_messages( [ ("system", """ You are a world-class research assistant AI. Provide comprehensive, accurate answers with Markdown citations. Process: 1. Decomplexify questions into sub-queries 2. Use `web_search` for each sub-query 3. Synthesize information 4. Cite sources using Markdown footnotes 5. Include reference list Follow-up questions should use chat history context. """), MessagesPlaceholder("chat_history", optional=True), ("human", "{input}"), MessagesPlaceholder("agent_scratchpad"), ] ) # 4. Create agent (updated to create_tool_calling_agent) agent = create_tool_calling_agent(llm, tools, prompt_template) # 5. AgentExecutor with modern configuration return AgentExecutor( agent=agent, tools=tools, verbose=True, handle_parsing_errors=True, max_iterations=10, return_intermediate_steps=True )
這裡我們使用了一個提示模板,用於指導 GPT-4O-mini LLM 的學習,包括如何進行搜尋部分以及如何編寫包含參考文獻的報告。此部分負責你的 LLM 申請的所有後端工作。此部分的任何更改都將直接影響你的 LLM 申請結果。
6. Streamlit UI
我們已經為 LLM 申請設定了所有後端邏輯。現在,讓我們為應用程式建立 UI,它將負責應用程式的前端檢視。
# --- STREAMLIT UI --- st.set_page_config(page_title="AI Research Agent 📚", page_icon="🤖", layout="wide") st.markdown(""" <style> .stChatMessage { border-radius: 10px; padding: 10px; margin-bottom: 10px; } .stChatMessage.user { background-color: #E6F3FF; } .stChatMessage.assistant { background-color: #F0F0F0; } </style> """, unsafe_allow_html=True) st.title("📚 AI Research Agent") st.caption("Your advanced AI assistant to search the web, synthesize information, and provide cited answers.") if "chat_history" not in st.session_state: st.session_state.chat_history = [] for message_obj in st.session_state.chat_history: role = "user" if isinstance(message_obj, HumanMessage) else "assistant" with st.chat_message(role): st.markdown(message_obj.content) user_query = st.chat_input("Ask a research question...") if user_query: st.session_state.chat_history.append(HumanMessage(content=user_query)) with st.chat_message("user"): st.markdown(user_query) with st.chat_message("assistant"): with st.spinner("🧠 Thinking & Researching..."): try: agent_executor = get_agent_executor() response = agent_executor.invoke({ "input": user_query, "chat_history": st.session_state.chat_history[:-1] }) answer = response["output"] st.session_state.chat_history.append(AIMessage(content=answer)) st.markdown(answer) except Exception as e: error_message = f"😕 Apologies, an error occurred: {str(e)}" st.error(error_message) print(f"Error during agent invocation: {e}")
在本節中,我們將定義應用程式的標題、標題、描述和聊天記錄。Streamlit 提供了許多自定義功能來定製我們的應用程式。我們在這裡使用了少量的自定義選項,以降低應用程式的複雜性。您可以根據自己的需求自由定製應用程式。
7. 執行應用程式
我們已經定義了應用程式的所有部分,現在可以啟動了。讓我們直觀地檢視我們建立的內容並分析結果。
開啟終端並輸入
streamlit run app.py
這將初始化您的應用程式,並且您將被重定向到您的預設瀏覽器。
這是您的 LLM 應用程式的 UI:
讓我們對我們的LLM應用程式進行測試
查詢:“What is the latest langchain documentation version?”
查詢:“How langchain is changing the game of AI?”
從輸出結果中,我們可以看到我們的 LLM 應用程式顯示出了預期的結果。詳細的結果包含參考連結。任何人都可以點選這些參考連結,訪問我們的 LLM 程式解答問題的上下文。至此,我們成功建立了我們的第一個 LLM 應用程式。您可以隨意修改此程式碼,並以此程式碼為參考,建立一些更復雜的應用程式。
小結
建立 LLM 應用程式比以往任何時候都更容易。如果您正在閱讀本文,則意味著您擁有足夠的知識來建立自己的 LLM 應用程式。在本指南中,我們介紹了環境設定、程式碼編寫、代理邏輯、應用程式 UI 定義,以及將其轉換為 Streamlit 應用程式。這涵蓋了開發 LLM 應用程式的所有主要步驟。您可以嘗試使用提示模板、LLM 鏈和 UI 自定義,根據您的需求個性化您的應用程式。這僅僅是個開始;更豐富的 AI 工作流正在等著您,包括代理、記憶體和特定領域任務。
常見問題解答
Q1. 我需要從頭開始訓練模型嗎?
A. 不需要,您可以從預訓練的 LLM(例如 GPT 或開源 LLM)開始,專注於提示設計和應用邏輯。
Q2. 為什麼要使用像 LangChain 這樣的框架?
A. 它們簡化了連結提示、記憶體處理和工具整合,而無需重新設計輪子。
Q3. 如何新增對話記憶體?
A. 在框架(例如 LangChain)中使用緩衝記憶體類或整合向量資料庫進行檢索。
Q4. 什麼是 RAG?為什麼要使用它?
A. 檢索增強生成 (RAG) 將外部資料引入模型的上下文中,從而提高特定領域查詢的響應準確性。
Q5. 我可以在哪裡部署我的 LLM 應用?
A. 首先使用 Gradio 進行本地演示,然後使用 Hugging Face Spaces、Streamlit Cloud、Heroku、Docker 或雲平臺進行擴充套件。
評論留言