使用本地小語言模型構建AI代理
本文介紹瞭如何在自己的計算機上使用小型語言模型(SLM)構建完全本地執行的AI代理,無需網際網路連線或API費用。涵蓋AI代理和SLM的概念、本地執行的優勢、Ollama和LangChain的設定、逐步構建代理以及新增記憶和工具的方法,並討論了SLM的侷限性。
文章情報
要點
- AI代理是使用語言模型進行推理和決策的程式,比普通聊天機器人更強大。
- 小型語言模型(如Phi-3、Mistral 7B)可在標準硬體上執行,提供隱私和零成本。
- 使用Ollama和LangChain可快速搭建本地AI代理,支援工具呼叫和對話記憶。
- 本地SLM在準確性、速度和複雜推理方面存在侷限,適合原型開發、隱私敏感專案和學習。
為什麼重要
這條新聞值得關注,因為AI代理是使用語言模型進行推理和決策的程式,比普通聊天機器人更強大。
技術影響
可能影響模型選型、推理成本、產品能力和評測基準。
在人工智慧領域,構建自己的AI代理曾被認為是大型科技公司的專利,需要昂貴的雲API和強大的伺服器。然而,隨著小型語言模型(SLM)的興起,這一局面已徹底改變。如今,即使是初學開發者,也能在自己的計算機上構建完全本地執行的AI代理,無需網際網路連線(初始設定後)且無API費用。
本文將以實踐為導向,介紹如何使用Ollama和LangChain/LangGraph這些流行工具,從零開始構建一個本地AI代理。無論你是Python新手還是有一定經驗的開發者,都能從中受益。
什麼是AI代理?
AI代理是一種利用語言模型進行思考、決策並採取行動以完成目標的程式。與僅回應訊息的普通聊天機器人不同,代理能夠將任務分解為多個步驟,決定下一步使用的工具或動作,根據上一步結果指導下一步,並持續執行直到任務完成。
一個基本代理包含三個部分:
- **大腦(LLM/SLM)**:理解輸入並決定做什麼。
- **記憶**:儲存對話上下文。
- **工具**:代理可呼叫的外部函式(如搜尋、計算器、檔案讀取)。
什麼是小型語言模型?
小型語言模型(SLM)是在大量文本資料上訓練的AI模型,與GPT-4等大型模型類似,但設計上更加輕量。GPT-4可能有數千億引數,而SLM(如Phi-3、Mistral 7B、Llama 3.2 3B)引數規模在10億到130億之間,足以在配備現代CPU或消費級GPU的普通計算機上執行。
推薦的SLM包括:
- **Phi-3 Mini**(微軟,3.8B引數):快速推理,低記憶體佔用。
- **Mistral 7B**(Mistral AI,7B):通用任務,指令遵循。
- **Llama 3.2 3B**(Meta,3B):效能均衡。
- **Gemma 2B**(谷歌,2B):輕量級,適合初學者。
為什麼本地執行AI代理?
本地執行SLM具有諸多優勢:
- **零API費用**:雲模型按token收費,本地模型初始設定後免費執行。
- **完全隱私**:資料不離開裝置,適合醫療記錄、商業資料等敏感資訊。
- **離線工作**:無需網際網路。
- **完全控制**:自由選擇模型、設定和行為,無速率限制或使用政策。
- **學習價值**:本地執行迫使你理解整體架構,提升開發技能。
設定環境
步驟1:安裝Ollama
訪問ollama.com下載對應作業系統的安裝程式。安裝後,在終端中拉取模型:
ollama pull phi3執行ollama run phi3測試模型,輸入/bye退出。
步驟2:安裝Python庫
建立虛擬環境並安裝所需包:
python -m venv agent-env
source agent-env/bin/activate # Linux/Mac
# 或 agent-env\Scripts\activate # Windows
pip install langchain langchain-ollama langgraph確保Python版本為3.9或更高。
構建第一個本地AI代理
以下程式碼建立一個簡單的代理,能夠回答問題並使用計算器工具:
from langchain_ollama import OllamaLLM
from langchain.agents import AgentExecutor, create_react_agent
from langchain.tools import tool
from langchain import hub
llm = OllamaLLM(model="phi3")
@tool
def calculator(expression: str) -> str:
"""Evaluates a basic math expression."""
try:
result = eval(expression)
return str(result)
except Exception as e:
return f"Error: {str(e)}"
tools = [calculator]
prompt = hub.pull("hwchase17/react")
agent = create_react_agent(llm=llm, tools=tools, prompt=prompt)
agent_executor = AgentExecutor(agent=agent, tools=tools, verbose=True)
response = agent_executor.invoke({
"input": "What is 245 multiplied by 18, and then divided by 5?"
})
print(response["output"])這段程式碼連線本地Phi-3模型,定義計算器工具,使用ReAct模式(推理+行動),並執行一個數學問題。
新增記憶和工具
真正的代理需要記住對話歷史。以下示例新增了對話記憶和知識庫查詢工具:
from langchain.memory import ConversationBufferMemory
memory = ConversationBufferMemory(memory_key="chat_history", return_messages=True)
prompt = hub.pull("hwchase17/react-chat")
agent = create_react_agent(llm=llm, tools=tools, prompt=prompt)
agent_executor = AgentExecutor(agent=agent, tools=tools, memory=memory, verbose=True)
print(agent_executor.invoke({"input": "What is an AI agent?"})["output"])
print(agent_executor.invoke({"input": "Now tell me what Ollama is."})["output"])
print(agent_executor.invoke({"input": "Calculate 50 multiplied by 12."})["output"])透過ConversationBufferMemory,代理能在同一會話中記住之前的訊息。
侷限性
本地SLM執行時需注意:
- **準確性較低**:SLM比GPT-4等更易產生幻覺。
- **速度依賴硬體**:無GPU時響應可能需5-30秒。
- **上下文長度有限**:不能處理過長對話。
- **複雜推理困難**:多步邏輯、高階程式設計等任務效果較差。
適用於原型開發、學習、隱私敏感專案、離線場景和成本敏感應用。對於生產環境的高精度、複雜任務和多使用者服務,建議使用雲模型。
結論
使用本地小語言模型構建AI代理已不再是AI研究人員的專屬技能。藉助Ollama和LangChain/LangGraph,任何擁有Python環境的開發者都能在一小時內讓本地代理執行起來。本文涵蓋了AI代理和SLM的概念、本地執行的優勢、環境設定、構建代理、新增記憶和工具等內容。最佳學習方法是親自動手嘗試。