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