使用本地小語言模型構建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的概念、本地運行的優勢、環境設置、構建代理、添加記憶和工具等內容。最佳學習方法是親自動手嘗試。