AI News HubLIVE
站内改写

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