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

- 姓名
- 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)周期上。要构建一个研究智能体,我们需要四个核心组件:
- 大脑 (LLM):通过 Ollama 运行的 Gemma 2(9B 或 27B 版本)。
- 框架:OpenAI 的 Agents SDK(或 Swarm),用于处理状态管理和工具编排。
- 工具:Tavily,专为 LLM 优化的高质量搜索引擎。
- 桥梁:一个兼容 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 托管您的智能体工作流,您可以获得:
- 统一 API 接口:从本地 Ollama 迁移到云端托管模型时,无需修改任何代码逻辑。
- 极致性价比:以全球最低的价格接入最强大的模型集群。
- 企业级稳定性:具备自动故障转移能力和高并发支持,确保智能体 7x24 小时在线。
总结
将本地 LLM 转化为具备工具调用能力的智能体,是构建真正自主 AI 系统的第一步。通过利用 Gemma 2、Ollama 和 OpenAI SDK,开发者可以在自己的硬件上原型化复杂的研究工具。然而,为了实现规模化应用和企业级性能,集成一个强大的 API 服务商是必不可少的。
立即在 n1n.ai 获取免费 API 密钥。