从本地 LLM 到工具调用智能体:使用 Gemma 2、Ollama 和 OpenAI Agents SDK 构建研究助手

作者
  • avatar
    姓名
    Nino
    职业
    Senior Tech Editor

大语言模型(LLM)的演进正迅速从简单的聊天界面转向能够使用工具、浏览网页并执行复杂工作流的自主智能体(Agents)。虽然 GPT-4o 或 Claude 3.5 Sonnet 等云端模型是高推理任务的标准,但随着 Gemma 2 等强大开源权重的出现,在本地构建复杂、私密且具有成本效益的智能体已成为可能。

在本教程中,我们将探讨如何通过结合 Ollama、OpenAI Agents SDK 以及通过模型上下文协议(MCP)实现的 Tavily 搜索功能,弥合本地 LLM 与功能性“工具调用智能体”之间的鸿沟。当您的本地资源遇到瓶颈或需要生产级的稳定性时,n1n.ai 等平台提供了必要的扩展基础设施,以无缝支持这些智能体工作流。

现代智能体的架构

传统的 LLM 应用遵循线性的“提示-响应”模式。而智能体则运行在“循环-推理-行动”(Loop-Reason-Act)周期上。要构建一个研究智能体,我们需要四个核心组件:

  1. 大脑 (LLM):通过 Ollama 运行的 Gemma 2(9B 或 27B 版本)。
  2. 框架:OpenAI 的 Agents SDK(或 Swarm),用于处理状态管理和工具编排。
  3. 工具:Tavily,专为 LLM 优化的高质量搜索引擎。
  4. 桥梁:一个兼容 OpenAI 的 API 层,允许 SDK 与本地模型通信。

第一步:使用 Ollama 设置本地大脑

Ollama 已成为本地运行模型的行业标准。对于智能体工作流,Gemma 2 是一个极佳的选择,因为它具有极高的“指令遵循”能力,这对于准确调用工具至关重要。

首先,安装 Ollama 并下载模型:

ollama pull gemma2:9b
ollama serve

默认情况下,Ollama 在 http://localhost:11434/v1 提供兼容 OpenAI 的 API。这一点至关重要,因为它允许我们直接使用 OpenAI Agents SDK,而无需修改底层的通信逻辑。

第二步:集成 OpenAI Agents SDK

OpenAI Agents SDK 旨在简化不同专业智能体之间的移交(Handoff)。即使使用本地模型,该 SDK 也提供了一个清晰的抽象层来定义模型可以调用的“函数”(工具)。

安装必要的依赖包:

pip install openai tavily-python python-dotenv

第三步:实现搜索工具 (Tavily)

智能体的能力上限取决于它能获取的信息。虽然本地 LLM 的知识库是静态的,但 Tavily 提供了专为 AI 打造的搜索引擎,返回的是干净的 Markdown 内容,而非杂乱的 HTML。

以下是为我们的智能体定义搜索工具的代码:

from tavily import TavilyClient
import os

tavily = TavilyClient(api_key=os.environ["TAVILY_API_KEY"])

def web_search(query: str):
    """在网络上搜索有关主题的最新信息。"""
    print(f"[工具] 正在搜索: {query}...")
    response = tavily.search(query=query, search_depth="advanced")
    # 提取并格式化结果
    return "\n".join([f"来源: {r['url']}\n内容: {r['content']}" for r in response['results']])

第四步:编排智能体逻辑

现在,我们将所有组件连接起来。我们将初始化 OpenAI 客户端,使其指向本地的 Ollama 实例,并定义一个拥有 web_search 函数访问权限的智能体。

from openai import OpenAI

# 指向本地 Ollama 实例
client = OpenAI(
    base_url="http://localhost:11434/v1",
    api_key="ollama" # Ollama 不需要 API Key,但 SDK 要求填写
)

def run_research_agent(user_prompt):
    messages = [
        {"role": "system", "content": "你是一个得力的研究助手。请使用 web_search 工具查找事实并回答问题。"},
        {"role": "user", "content": user_prompt}
    ]

    # 注意:本地模型调用工具需要模型本身支持 Tool Calling 格式
    # Gemma 2 在提示词中显式定义工具 Schema 时表现最佳
    response = client.chat.completions.create(
        model="gemma2:9b",
        messages=messages,
        tools=[{
            "type": "function",
            "function": {
                "name": "web_search",
                "description": "搜索互联网以获取实时信息",
                "parameters": {
                    "type": "object",
                    "properties": {
                        "query": {"type": "string", "description": "搜索关键词"}
                    },
                    "required": ["query"]
                }
            }
        }]
    )
    return response

专业建议:处理上下文限制与延迟

在本地运行智能体时,您可能会遇到性能瓶颈。像 Gemma 2 9B 这样的模型上下文窗口通常有限(约为 8k token)。如果搜索结果过大,智能体可能会解析失败。

优化策略:

  • 摘要化 (Summarization):在将搜索结果反馈给智能体之前,先调用一次轻量级模型对内容进行摘要处理。
  • 混合执行 (Hybrid Execution):对于敏感数据使用本地模型,而对于需要大上下文窗口或极速推理的复杂任务,则路由至 n1n.ai
  • 温度控制:在进行工具调用时,将 temperature 设置为 0,以确保生成的 JSON 格式稳定一致。

迈向云端:n1n.ai 的优势

虽然本地构建非常适合开发和测试,但生产环境通常需要比本地 GPU 更高的可用性和更低的延迟。n1n.ai 作为一个高速 API 聚合器,允许您使用同一个 API 密钥在本地风格的开源模型(如 Llama 3.1、DeepSeek)和旗舰模型(如 GPT-4o)之间自由切换。

通过 n1n.ai 托管您的智能体工作流,您可以获得:

  1. 统一 API 接口:从本地 Ollama 迁移到云端托管模型时,无需修改任何代码逻辑。
  2. 极致性价比:以全球最低的价格接入最强大的模型集群。
  3. 企业级稳定性:具备自动故障转移能力和高并发支持,确保智能体 7x24 小时在线。

总结

将本地 LLM 转化为具备工具调用能力的智能体,是构建真正自主 AI 系统的第一步。通过利用 Gemma 2、Ollama 和 OpenAI SDK,开发者可以在自己的硬件上原型化复杂的研究工具。然而,为了实现规模化应用和企业级性能,集成一个强大的 API 服务商是必不可少的。

立即在 n1n.ai 获取免费 API 密钥。