近年来,大型语言模型(LLM)技术取得了飞速发展,为我们带来了前所未有的智能应用。本文将引导你使用 Python 语言和 Ollama 工具,从零开始构建一个简单的 AI Agent,并将其与本地 LLM 集成,实现自然语言交互和工具调用。通过本文,你将了解到如何利用本地 LLM 的能力,打造一个完全离线、可定制的 AI 助手。

1. 本地 LLM 驱动的 AI Agent 的优势

传统的 AI Agent 通常依赖于云端的 LLM 服务,这存在一定的局限性,例如需要稳定的网络连接、数据隐私风险以及潜在的成本问题。而基于本地 LLM 的 AI Agent 则可以有效解决这些问题。

  • 隐私保护: 所有数据和模型都存储在本地,避免了敏感数据泄露的风险。
  • 离线可用: 即使没有网络连接,AI Agent 仍然可以正常工作。
  • 成本控制: 无需支付云端服务的费用,降低了使用成本。
  • 定制化: 可以根据自己的需求选择和定制 LLM 模型,以满足特定的应用场景。

2. 核心工具:Ollama 的安装与使用

Ollama 是一个强大的工具,它允许你在本地轻松运行 LLM 模型。Ollama 简化了 LLM 的部署和管理,让你无需复杂的配置即可快速上手。

安装 Ollama:

根据 Ollama 官方网站(https://ollama.com/)的指引,下载并安装适合你操作系统的版本。安装完成后,在终端中运行 ollama --version 命令,验证是否安装成功。

拉取并运行 LLM 模型:

Ollama 提供了丰富的 LLM 模型选择。为了使我们的 AI Agent 具备工具调用能力,建议选择支持该功能的模型。例如,我们可以使用 qwen2.5:14b 模型。在终端中运行以下命令:

ollama pull qwen2.5:14b

该命令会将 qwen2.5:14b 模型下载到本地。下载完成后,可以使用以下命令运行该模型:

ollama run qwen2.5:14b

现在,你就可以与本地运行的 LLM 模型进行交互了。例如,你可以输入 “现在几点了?” 来测试模型的理解能力。 尽管模型可能无法直接给出准确的答案,但我们可以通过集成工具来弥补这一不足。

3. Python 环境搭建与 Langchain 库的集成

接下来,我们需要搭建 Python 环境,并安装必要的库,包括 ollamalangchainlangchain_community

创建 Python 虚拟环境:

为了隔离项目依赖,建议创建一个 Python 虚拟环境。可以使用 venvconda 等工具创建虚拟环境。

安装所需库:

激活虚拟环境后,在终端中运行以下命令:

pip install ollama
pip install langchain
pip install langchain_community

这些库将为我们提供与 Ollama 集成、构建 AI Agent 和定义工具的能力。

4. 使用 Langchain 构建 AI Agent

Langchain 是一个强大的框架,它简化了 LLM 应用的开发过程。我们可以使用 Langchain 定义 AI Agent 的行为、集成工具和管理对话流程。

定义工具 (Tools):

首先,我们需要定义 AI Agent 可以使用的工具。工具是 AI Agent 与外部世界交互的桥梁。例如,我们可以定义一个 local_time_tool 工具,用于获取本地时间。

import asyncio
from mcp import ClientSession, StdioServerParameters
from mcp.client.stdio import stdio_client

async def call_mcp_tool(tool_name, tool_args=None):
    server_params = StdioServerParameters(
        command="python",
        args=["mcp-server.py"]
    )
    async with stdio_client(server_params) as (read, write):
        async with ClientSession(read, write) as session:
            await session.initialize()
            result = await session.call_tool(tool_name, tool_args or {})
            return result.content[0].text

def local_time_tool(_: str = "") -> str:
    return asyncio.run(call_mcp_tool("local_time"))

def reversed_echo_tool(input_text: str) -> str:
    return asyncio.run(call_mcp_tool("reversed_echo", {"message": input_text}))

这里假设你已经有一个 mcp-server.py 文件,它定义了 local_timereversed_echo 这两个工具。 mcp-server.py可以参考原文中前一篇或者前两篇文章。
创建 Tool 列表:

将定义的工具添加到工具列表中,以便 AI Agent 可以使用它们。

from langchain.agents import Tool

tools = [
    Tool(
        name="LocalTimeTool",
        func=local_time_tool,
        description="Returns the local time"
    ),
    Tool(
        name="ReversedEchoTool",
        func=reversed_echo_tool,
        description="Echoes the given message in reverse"
    )
]

description 字段非常重要,它告诉 AI Agent 每个工具的作用,帮助它选择合适的工具来解决问题。

初始化 LLM 和 Agent:

使用 Ollama 类初始化 LLM,并使用 initialize_agent 函数创建 AI Agent。

from langchain.llms import Ollama
from langchain.agents import initialize_agent, AgentType

llm = Ollama(model="qwen2.5:14b")

agent = initialize_agent(
    tools,
    llm,
    agent=AgentType.ZERO_SHOT_REACT_DESCRIPTION,
    verbose=True
)

AgentType.ZERO_SHOT_REACT_DESCRIPTION 指定了 AI Agent 的类型。这种类型的 Agent 会根据工具的描述和当前的任务,选择合适的工具来执行。verbose=True 可以打印 Agent 的执行过程,方便调试。

5. 创建交互界面

为了方便与 AI Agent 交互,我们可以创建一个简单的终端界面。

if __name__ == "__main__":
    while True:
        prompt = input("Enter your prompt: ")
        if prompt.lower() in ["exit", "quit", "q"]:
            break
        print(agent.run(prompt))

这段代码会循环等待用户输入,并将用户输入作为 prompt 传递给 AI Agent。AI Agent 会根据 prompt 选择合适的工具来执行,并将结果返回给用户。

6. 运行 AI Agent

将以上代码保存为 ai-agent.py 文件,并在终端中运行它:

python ai-agent.py

现在,你就可以与你的 AI Agent 交互了。例如,你可以输入 “现在几点了?” 或 “你好, 请倒序输出这句话”。

7. mcp-server.py文件 (Model Context Protocol) 的实现

为了让 ai-agent.py 能够调用 local_time_toolreversed_echo_tool,我们需要实现 mcp-server.py 文件。 这个文件充当一个服务器,接收来自 ai-agent.py 的请求,并执行相应的工具。

# mcp-server.py
import asyncio
import datetime
from typing import Dict
from mcp.server.base import ToolServer
from mcp.server.stdio import StdioServer

class MyToolServer(ToolServer):
    async def local_time(self, args: Dict) -> str:
        """Returns the current local time."""
        now = datetime.datetime.now()
        return f"现在时间是 {now.strftime('%Y-%m-%d %H:%M:%S')}"

    async def reversed_echo(self, args: Dict) -> str:
        """Reverses the given message."""
        message = args.get("message", "")
        return message[::-1]

async def main():
    server = StdioServer(MyToolServer())
    await server.start()

if __name__ == "__main__":
    asyncio.run(main())

这个脚本创建了一个 MyToolServer 类,它继承自 ToolServerMyToolServer 类实现了 local_timereversed_echo 两个工具。StdioServer 类用于启动一个基于标准输入/输出的服务器,它会监听来自 ai-agent.py 的请求,并调用相应的工具。

在运行 ai-agent.py 之前,需要先运行 mcp-server.py。 确保两个文件在同一目录下。

python mcp-server.py

8. 拓展你的 AI Agent

现在,你已经成功构建了一个基于本地 LLM 的 AI Agent。你可以根据自己的需求拓展它的功能。

  • 集成更多工具: 可以集成更多工具,例如天气查询、新闻摘要、代码生成等。
  • 优化 Agent 的行为: 可以调整 Agent 的类型和参数,以优化其性能。
  • 添加记忆功能: 可以让 Agent 记住之前的对话,使其更具上下文理解能力。
  • 使用更强大的 LLM 模型: 可以尝试使用更强大的 LLM 模型,以提高 Agent 的智能水平。

例如,你可以添加一个工具来控制你的智能家居设备。你可以使用 Python 的 requests 库与智能家居设备的 API 进行交互,并创建一个工具来控制灯光、温度等。

# 假设你有一个控制灯光的 API
def control_light(status: str) -> str:
    """Controls the light."""
    # 使用 requests 库与智能家居设备的 API 进行交互
    import requests
    try:
        response = requests.post("your_light_api_endpoint", json={"status": status})
        response.raise_for_status()  # 检查请求是否成功
        return f"Light turned {status} successfully."
    except requests.exceptions.RequestException as e:
        return f"Error controlling light: {e}"

然后,你可以将这个工具添加到工具列表中:

tools.append(
    Tool(
        name="ControlLight",
        func=control_light,
        description="Controls the light.  Use 'on' to turn on the light, and 'off' to turn off the light."
    )
)

现在,你可以告诉 AI Agent “Turn on the light” 或 “Turn off the light”,它会自动调用 control_light 工具来控制你的灯光。 注意描述中详细描述工具的使用方法,这样LLM才能更好的理解,并合理使用。

9. 总结与展望

通过本文,我们学习了如何使用 Python 和 Ollama 从零开始构建一个基于本地 LLM 的 AI Agent。 这种方案不仅保护了数据隐私,还降低了使用成本。 我们可以将这个 AI Agent 集成到各种应用场景中,例如智能助手、自动化脚本等。随着 LLM 技术的不断发展,本地 LLM 的应用前景将更加广阔。未来,我们可以期待更多开源的 LLM 模型和更强大的工具,这将使构建 AI Agent 变得更加容易和高效。 我们可以利用Langchain 的强大功能,结合 Ollama 提供的本地 LLM 能力,创建出更加智能、个性化的 AI 应用。希望本文能帮助你入门 AI Agent 开发,并激发你探索更多 AI 应用的可能性。

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注