用本地小模型构建AI代理

在本文中,你将学习如何使用小语言模型在自有机器上构建一个完全功能的AI代理,无需互联网连接,也无需API费用。

用本地小模型构建AI代理
AI模型价格对比 | AI工具导航 | ONNX模型库 | Vibe Coding教程 | Tripo 3D | Meshy AI | ElevenLabs | KlingAI | ArtSpace | Phot.AI | InVideo

在本文中,你将学习如何使用小语言模型在自有机器上构建一个完全功能的AI代理,无需互联网连接,也无需API费用。

我们将涵盖的主题包括:

  • 什么是AI代理和小语言模型,以及为什么在本地运行它们是一个实用且注重隐私的选择。
  • 如何设置Ollama和所需的Python库,以便在自己的硬件上运行语言模型。
  • 如何逐步构建本地AI代理,添加工具和对话记忆使其真正有用。

1、简介

构建自己的AI代理曾经让人觉得只有大型科技公司才能做到。你需要昂贵的云端API、大型服务器和深厚的资金。这个局面已经彻底改变了。

今天,包括刚入门的开发者在内的所有人,都可以在自己的电脑上构建完全功能的AI代理,无需互联网连接(初始设置和配置之后)且无需担心API账单。这得益于新一代小语言模型(SLM):紧凑、高效的AI模型,具有足够的推理、规划和响应能力,同时又足够轻量,可以在标准笔记本电脑或台式机上运行。

在本文中,你将学习如何使用流行的工具Ollama和LangChain/LangGraph从零开始构建本地AI代理。无论你是刚开始熟悉Python的初学者,还是探索AI的中级开发者,这篇文章都是为你而写的。

2、什么是AI代理?

AI代理是一个使用语言模型来思考、做出决策并采取行动以完成目标的程序。与只回复消息的普通聊天机器人不同,代理可以:

  • 将任务分解为更小的步骤
  • 决定下一步使用哪个工具或行动
  • 用一个步骤的结果来指导下一步
  • 持续运行直到任务完成

把它想象成计算器和助手之间的区别。计算器等待你的输入。助手思考你的目标,想出步骤,并逐一执行。

一个基本的代理有三个部分:

部分 功能
大脑(LLM/SLM) 理解输入并决定做什么
记忆 存储对话中较早的上下文
工具 代理可以调用的外部函数(如搜索、计算器、文件读取器)

3、什么是小语言模型?

小语言模型(SLM)是在大量文本数据上训练的AI模型——类似于GPT-4等大型模型——但被设计为更轻量化。

GPT-4可能有数千亿个参数,而Phi-3、Mistral 7B或Llama 3.2(3B)等SLM的参数量在10亿到130亿之间。这使它们足够小,可以在配备现代CPU或消费级GPU的普通计算机上运行。

以下是一些值得了解的流行SLM:

模型 开发者 大小 最适合
Phi-3 Mini 微软 3.8B 快速推理,低内存
Mistral 7B Mistral AI 7B 通用任务,指令遵循
Llama 3.2 (3B) Meta 3B 平衡的性能
Gemma 2B Google 2B 轻量级,对初学者友好

如果你不确定从哪个模型开始,选择Phi-3 Mini或Llama 3.2(3B)。它们文档齐全,对初学者友好,在本地机器上表现良好。

4、为什么要本地运行AI代理?

你可能会想:为什么不直接用OpenAI API或Google Gemini?

好问题。以下是本地SLM值得你关注的原因:

  • 无API费用。 基于云的模型按token或按请求收费。如果你的代理运行数千次查询,费用会快速累积。本地模型在设置后免费运行。
  • 完全隐私。 当你将数据发送到云端API时,数据会离开你的机器。对于医疗记录、私人业务数据或个人文件等敏感数据,这是一个真正的风险。本地模型将所有数据保留在你的设备上。
  • 离线工作。 没有互联网?没问题。你的代理继续运行。
  • 你掌控一切。 你选择模型、设置和行为。没有速率限制,没有使用策略阻碍你。
  • 适合学习。 在本地运行模型迫使你理解所有东西如何协同工作,这会让你成为一个更好的开发者。

5、你将使用的工具

以下是本指南使用的三个工具的简要概述:

Ollama

Ollama是一个免费的开源工具,可以用一条命令下载和运行本地机器上的语言模型。它在后台处理所有复杂的设置,让你专注于构建。

LangChain / LangGraph

LangChain是一个流行的语言模型应用构建框架。LangGraph是LangChain的扩展,帮助你构建代理工作流,使用基于图的结构定义代理如何逐步思考和行动。

6、设置环境

在编写代理代码之前,你需要设置工具。

第一步:安装Ollama

前往 ollama.com 下载适合你操作系统的安装程序(Windows、Mac或Linux)。安装完成后,打开终端并拉取模型:

ollama pull phi3

这会将Phi-3 Mini模型下载到你的机器上。要确认它工作正常,运行:

ollama run phi3

你应该看到一个可以直接与模型对话的提示符。输入 /bye 退出。

第二步:安装Python库

创建虚拟环境并安装所需的包:

python -m venv agent-env

对于Linux/Mac:

source agent-env/bin/activate

在Windows上:

agent-env\Scripts\activate

安装所需的库:

pip install langchain langchain-ollama langgraph

你需要Python 3.9或更高版本。用以下命令检查版本:

python --version

7、构建你的第一个本地AI代理

现在到了激动人心的部分。让我们构建一个可以回答问题并使用基本工具——计算器的简单代理。

在你的 agent.py 文件中,粘贴以下代码:

from langchain_ollama import OllamaLLM
from langchain.agents import AgentExecutor, create_react_agent
from langchain.tools import tool
from langchain import hub

# Step 1: Load the local model via Ollama
llm = OllamaLLM(model="phi3")

# Step 2: Define a simple tool -- a calculator
@tool
def calculator(expression: str) -> str:
    """Evaluates a basic math expression. Input should be a valid Python math expression."""
    try:
        result = eval(expression)
        return str(result)
    except Exception as e:
        return f"Error: {str(e)}"

# Step 3: Bundle tools together
tools = [calculator]

# Step 4: Load a ReAct prompt template (Reason + Act pattern)
prompt = hub.pull("hwchase17/react")

# Step 5: Create the agent
agent = create_react_agent(llm=llm, tools=tools, prompt=prompt)

# Step 6: Wrap in an executor to handle the agent loop
agent_executor = AgentExecutor(agent=agent, tools=tools, verbose=True)

# Step 7: Run the agent
response = agent_executor.invoke({
    "input": "What is 245 multiplied by 18, and then divided by 5?"
})

print("\n--- Agent Response ---")
print(response["output"])

以下是发生的事情:

  • OllamaLLM 类连接到你本地运行的Phi-3模型。
  • @tool 装饰器将一个普通的Python函数转换为代理可以调用的工具。
  • create_react_agent 函数使用ReAct模式——一种代理推理问题然后使用工具行动的方法,反复执行,直到得到答案。
  • AgentExecutor 管理推理、行动和观察结果的循环。

运行脚本:

python agent.py

你将在终端中看到代理的思考过程,然后是最终答案。

8、为代理添加记忆和工具

一个真正的代理需要记住对话中早些时候说过的话。以下是如何添加对话记忆和第二个工具——一个简单的知识库查找。

在你的 agent_with_memory.py 文件中:

from langchain_ollama import OllamaLLM
from langchain.agents import AgentExecutor, create_react_agent
from langchain.tools import tool
from langchain.memory import ConversationBufferMemory
from langchain import hub

llm = OllamaLLM(model="phi3")

# Tool 1: Calculator
@tool
def calculator(expression: str) -> str:
    """Evaluates a basic math expression."""
    try:
        return str(eval(expression))
    except Exception as e:
        return f"Error: {str(e)}"

# Tool 2: Simulated knowledge base lookup
@tool
def knowledge_base(query: str) -> str:
    """Looks up information from a local knowledge base."""
    kb = {
        "python": "Python is a beginner-friendly programming language widely used in AI and data science.",
        "ai agent": "An AI agent is a program that uses a language model to reason and take actions.",
        "ollama": "Ollama is a tool for running language models locally on your computer.",
    }
    for key in kb:
        if key in query.lower():
            return kb[key]
    return "No information found for that query."

tools = [calculator, knowledge_base]

# Add memory to track conversation history
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
)

# Multi-turn conversation
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"])

注意: 这里使用 eval() 仅用于教学目的,在生产代码中绝不能对不受信任的输入使用。

通过 ConversationBufferMemory,代理在同一会话中记住你之前的消息。这使它表现得更像一个真正的助手,而不是无状态的聊天机器人。

9、需要了解的局限性

使用SLM在本地运行AI代理很强大,但诚实地看待权衡也很重要:

  • 较小的模型犯更多错误。 SLM不如GPT-4或Claude那样强大。它们更容易产生幻觉——自信地给出错误答案——尤其是在复杂任务上。
  • 速度取决于你的硬件。 如果你没有GPU,模型可能运行缓慢。根据你的机器,预期每次响应5-30秒。
  • 上下文长度有限。 大多数SLM只能处理较短的对话,然后就会"忘记"早期消息。这是小模型的已知限制。
  • 复杂推理更困难。 多步骤逻辑、高级编码任务或细微的指令可能不如大型云模型那样有效。

何时使用本地SLM: 用于原型设计、学习、注重隐私的项目、离线使用场景,以及云端API成本令人担忧的应用。

何时使用云模型: 用于需要高准确率、处理复杂任务或同时服务许多用户的生产应用。

10、结束语

使用本地小语言模型构建AI代理不再是AI研究人员的专有技能。借助Ollama和LangChain/LangGraph等工具,任何拥有正常工作的Python环境的开发者都可以在一小时内让本地代理运行起来。

深入学习这个领域的最佳方式是动手构建。从本指南中的代码示例开始,换一个不同的模型(我建议你接下来尝试Mistral 7B),不断添加工具,直到你的代理能为你做一些真正有用的事情。


原文链接:Building AI Agents with Local Small Language Models

汇智网翻译整理,转载请标明出处