用本地小模型构建AI代理
在本文中,你将学习如何使用小语言模型在自有机器上构建一个完全功能的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 | 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
汇智网翻译整理,转载请标明出处