使用本地小语言模型构建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的概念、本地运行的优势、环境设置、构建代理、添加记忆和工具等内容。最佳学习方法是亲自动手尝试。