首页/新闻资讯/正文详情

VoltAgent 接入 Ollama 实战:用 Zod 定义工具并让 llama3.2 完成 JSON Schema 驱动的函数调用

发布时间:2026/9/24 16:01:52 来源:云帆数科 栏目:资讯中心
VoltAgent 接入 Ollama 实战:用 Zod 定义工具并让 llama3.2 完成 JSON Schema 驱动的函数调用
人工智能AI AgentAgent 框架后端多智能体RAG工具调用Agent 记忆【免费下载链接】voltagentAI Agent Engineering Platform built on an Open Source TypeScript AI Agent Framework项目地址https://gitcode.com/gh_mirrors/vo/voltagent点击查看免费下载导读本文基于开源仓库 voltagent 中的 examples/with-ollama 示例讲解如何让 VoltAgent 通过ollama-ai-provider-v2连接本地 Ollama 服务并借助 Zod 定义类型安全的工具Tool使模型在推理过程中依据 JSON Schema 自动调用工具并返回正确参数。读完本文你将掌握 Ollama 环境准备、示例启动、REST API 调用以及工具调用链路的完整验证方法并理解createTool在框架底层的实现原理。1. 示例概览Ollama 工具调用演示with-ollama是 VoltAgent 仓库中一个最小可运行的示例核心目标只有一个验证 Ollama 模型能够收到 VoltAgent 生成的 JSON Schema 工具定义并在需要时以正确的参数触发工具执行。示例中注册了一个名为get_current_weather的天气查询工具当向 Agent 提问“What is the weather in Madrid right now?”时模型应当识别出需要调用该工具服务端控制台会打印Weather tool invoked日志从而证明整条工具调用链路Agent → JSON Schema → Ollama → 工具执行 → 结果回填是畅通的。完整源码位于 examples/with-ollama/src/index.ts全文件约 47 行是理解 VoltAgent Agent Tool Server 三者关系的绝佳入口。2. 环境要求与准备2.1 安装并运行 Ollama需要先在本机安装并启动 Ollama 服务拉取一个支持工具调用tool calling的模型示例默认使用llama3.2ollama pull llama3.2提示工具调用能力依赖模型本身务必选择具备 function/tool calling 能力的模型llama3.2是示例验证过的默认选择。2.2 配置自定义 Ollama 地址可选默认情况下示例连接http://localhost:11434/api。如果你的 Ollama 部署在远程主机或自定义端口可通过.env文件覆盖OLLAMA_HOSThttp://localhost:11434/api这一点在源码中体现为对环境变量的显式读取见 examples/with-ollama/src/index.tsconst ollama createOllama({ baseURL: process.env.OLLAMA_HOST ?? http://localhost:11434/api, });即设置了OLLAMA_HOST就用它作为 baseURL否则回退到本地默认地址。同时package.json 中的start/dev脚本使用了--env-file.env自动加载环境变量见 examples/with-ollama/package.json。3. 安装与启动3.1 安装依赖pnpm install由于本仓库是 pnpm monorepo也可以在仓库根目录只安装该示例及其依赖链pnpm install --filter voltagent-example-with-ollama...示例的依赖清单见 examples/with-ollama/package.json主要包括依赖作用voltagent/coreAgent、Tool、VoltAgent 核心框架voltagent/logger基于 Pino 的结构化日志voltagent/server-honoHono HTTP 服务器提供 REST APIollama-ai-provider-v2连接 Ollama 的模型 Providerzod工具参数的运行时校验与 Schema 推导voltagent/cliVoltAgent CLI 工具volt命令3.2 启动服务pnpm start默认情况下 HTTP 服务器监听3144端口。如需修改端口设置PORT环境变量即可。另外 package.json 还提供了dev脚本tsx watch --env-file.env ./src/index.ts修改源码后会自动重启适合开发调试。4. 调用 Agent 并验证工具调用服务启动后向 VoltAgent 的 REST API 发送文本请求curl -X POST http://localhost:3144/agents/ollama-tool-agent/text \ -H Content-Type: application/json \ -d {input:What is the weather in Madrid right now?}预期会看到两个结果HTTP 响应返回模型基于工具执行结果生成的最终回答例如 Madrid 当前的温度、天气状况控制台日志打印Weather tool invoked证明 Ollama 收到了 JSON Schema 定义并以正确参数触发了工具。其中ollama-tool-agent是 Agent 的名字/text表示文本输入端点input字段携带用户消息。5. 逐行拆解示例源码以下源码完整取自 examples/with-ollama/src/index.ts我们按模块拆解。5.1 导入与日志import { Agent, VoltAgent, createTool } from voltagent/core; import { createPinoLogger } from voltagent/logger; import { honoServer } from voltagent/server-hono; import { createOllama } from ollama-ai-provider-v2; import { z } from zod; const logger createPinoLogger({ name: with-ollama, level: info, });日志级别为info工具调用的确认日志Weather tool invoked正由此 logger 输出。5.2 创建 Ollama Providerconst ollama createOllama({ baseURL: process.env.OLLAMA_HOST ?? http://localhost:11434/api, });createOllama来自ollama-ai-provider-v2返回一个可被 VoltAgent 直接使用的模型工厂函数。后续通过ollama(llama3.2:latest)即可指定具体模型。5.3 用 Zod 定义工具const getCurrentWeather createTool({ name: get_current_weather, description: Fetch the current weather conditions for a given city, parameters: z.object({ location: z.string().describe(City or location to inspect), unit: z.enum([celsius, fahrenheit]).default(celsius), }), execute: async ({ location, unit }) { return { location, temperature: unit fahrenheit ? 72 : 22, condition: Partly cloudy with light winds, unit, }; }, });要点说明name工具名Ollama 会收到这个名字对应的 JSON Schema 函数定义description工具用途描述帮助模型判断何时调用parametersZod Schemalocation为字符串unit为celsius | fahrenheit枚举且默认celsius。Zod 会自动把该 Schema 序列化为 JSON Schema 下发到模型端execute工具被调用时执行的实际逻辑。示例中为演示返回了固定数据摄氏 22 度 / 华氏 72 度多云微风在实际项目中这里应替换为真实的 API 调用。5.4 组装 Agentconst agent new Agent({ name: ollama-tool-agent, instructions: You are a helpful assistant, model: ollama(llama3.2:latest), tools: [getCurrentWeather], logger, });Agent的tools字段接受Tool或Toolkit数组见 packages/core/src/agent/agent.ts 的AgentOptions定义instructions作为系统提示词注入模型。5.5 启动 VoltAgent 服务new VoltAgent({ agents: { agent }, logger, server: honoServer(), });VoltAgent把 Agent 注册到 HTTP 服务器上。honoServer()来自voltagent/server-hono是一个返回IServerProvider的工厂函数见 packages/server-hono/src/index.ts负责承载 REST API即上文的/agents/ollama-tool-agent/text端点。6. 源码级原理createTool 与 JSON Schema 的生成6.1 createTool 的底层实现createTool是voltagent/core提供的工具工厂函数定义于 packages/core/src/tool/index.tsexport function createToolT extends ToolSchema, O extends ToolSchema | undefined undefined( options: ToolOptionsT, O, ): ToolT, O { return new ToolT, O(options); }其核心是Tool类构造函数见 packages/core/src/tool/index.ts它强制校验并存储工具的元数据name为必填缺失直接抛错parametersZod Schema为必填缺失同样抛错description缺失时仅记录警告execute会被保存为可执行函数如果没有提供execute工具会被判定为客户端侧工具isClientSide()返回 true。此外createTool还有一个别名tool见 packages/core/src/tool/index.ts二者等价可按喜好选择。6.2 从 Zod 到 JSON Schema 再到 Ollama从源码结构看VoltAgent 将Tool的parametersZod Schema序列化为 JSON Schema并随模型请求一并发送给 Providerollama-ai-provider-v2Ollama 再将该 Schema 作为函数定义提供给模型。模型在推理过程中若判定需要获取天气信息就会按 Schema 生成形如{location: Madrid, unit: celsius}的调用参数框架随后触发execute并把返回值回填给模型生成最终回答。这也解释了为什么示例 README 强调“Ollama receives the JSON Schema definition and calls it with the correct arguments”——控制台中的Weather tool invoked日志正是这一链路端到端打通的直接证据。6.3 相关扩展Toolkit如果工具数量较多还可以使用createToolkit将多个工具归组并附带共享指令见 packages/core/src/tool/toolkit.tscreateToolkit({ name: weather-tools, description: 天气相关工具集合, tools: [getCurrentWeather], });Toolkit支持instructions与addInstructions字段后者为 true 时会把共享指令自动注入 Agent 的系统提示词详见 packages/core/src/tool/toolkit.ts 的类型注释便于管理同域工具的提示与组织。7. 常见问题排查连接失败确认 Ollama 服务已启动且OLLAMA_HOST默认http://localhost:11434/api可达模型不触发工具确认拉取的模型支持 tool calling示例默认llama3.2可通过ollama pull llama3.2确保模型存在端口冲突默认端口3144被占用时设置PORT环境变量切换端口看不到Weather tool invoked日志检查 logger 级别是否为info示例默认即info并确认请求确实命中了ollama-tool-agentAgent。8. 总结with-ollama示例展示了 VoltAgent 与本地 Ollama 集成的最小闭环createOllama连接模型、createTool Zod 定义类型安全的工具、Agent组装指令与工具、VoltAgenthonoServer()暴露 REST API。通过一次curl请求和控制台日志即可完整验证 JSON Schema 驱动的工具调用链路为后续将真实业务工具查询数据库、调用外部 API 等接入 Agent 提供了可直接照搬的模板。赞分享人工智能AI AgentAgent 框架后端多智能体RAG工具调用Agent 记忆【免费下载链接】voltagentAI Agent Engineering Platform built on an Open Source TypeScript AI Agent Framework项目地址https://gitcode.com/gh_mirrors/vo/voltagent点击查看免费下载相关推荐AutoGen.NET 函数调用实战为 OpenAIChatAgent 接入工具调用能力FunctionCallMiddleware 与类型安全函数定义AutoGen.NET 函数调用实战为 OpenAIChatAgent 接入工具调用能力FunctionCallMiddleware 与类型安全函数定义人工智能AI AgentAgent 框架多智能体大模型工具调用使用 langchaingo 与 Ollama 实现函数调用Function Calling从工具定义到多轮对话的完整实战使用 langchaingo 与 Ollama 实现函数调用Function Calling从工具定义到多轮对话的完整实战 导读 本篇文章围绕 langc人工智能大模型AI AgentRAG后端Composio JSON Schema转换自动化生成Zod类型定义Composio JSON Schema转换自动化生成Zod类型定义 在现代JavaScript/TypeScript开发中数据验证和类型安全是确保应用稳定人工智能AI Agent工具调用MCP 服务MCP Clients上一篇Go 高性能结构化日志库 zap 实战指南快速上手、配置体系与源码级原理Loki 仓库 vendored v1.28.0 视角下一篇终极音乐解锁神器ncmdumpGUI一键释放被锁音乐实现跨设备自由播放创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

相关推荐

Tkinter Designer 韩文使用指南:从 Figma 设计稿到 Python GUI 的完整实战手册
Tkinter Designer 韩文使用指南:从 Figma 设计稿到 Python GUI 的完整实战手册

开发工具代码生成低代码 【免费下载链接】Tkinter-Designer An easy and fast way to create a Python GUI 🐍 项目地址: https://gitcode.com/gh_mirrors/tk/Tkinter-Designer 点击查看 免费下载 本篇技术指南以 Tkinter-Designer 仓库中的韩文版官方使… · 2026/9/24 16:01:52

Erlang/OTP Crashdump Viewer(cdv)使用指南:从崩溃转储到问题定位的可视化分析
Erlang/OTP Crashdump Viewer(cdv)使用指南:从崩溃转储到问题定位的可视化分析

Erlang/OTP Crashdump Viewer(cdv)使用指南:从崩溃转储到问题定位的可视化分析 【免费下载链接】otp Erlang/OTP 项目地址: https://gitcode.com/gh_mirrors/ot/otp 导读 本文介绍 Erlang/OTP Observer 应用中的 Crashdump Viewer&am… · 2026/9/24 16:01:52

【Dify】自动化多主题研究与深度报告工作
【Dify】自动化多主题研究与深度报告工作

深度研究与多主题分析需求日益增长,自动化工具成为提升效率与报告质量的关键。结构化研究流程和智能内容生成方案受到编程自学者关注。 本篇介绍Dify自动化多主题研究与深度报告的完整工作流,实现主题拆解、子问题分析、AI模型驱动内容生成,以及高质量研究成果的系统输出。… · 2026/9/24 16:01:45

文化课教培数字化:课时自动核算 + 家校互动提升续费率完整方案
文化课教培数字化:课时自动核算 + 家校互动提升续费率完整方案

前言中小教培机构数字化转型,很多校长最先想到的功能是排课、消课,但在长期运营过程中,两个痛点会持续消耗机构大量人力成本:一是每月教师课时薪酬核算,二是老生续课留存。 尤其是文化课学科机构,课程类型复… · 2026/9/24 16:33:27

Sure 仓库的 AI 指令适配层:多 Harness 指令入口的统一维护实战
Sure 仓库的 AI 指令适配层:多 Harness 指令入口的统一维护实战

金融科技后端前端移动开发桌面应用AI 应用 【免费下载链接】sure The personal finance app for everyone (by everyone) 项目地址: https://gitcode.com/gh_mirrors/sure5/sure 点击查看 免费下载 本篇技术指南围绕 Sure(个人财务管理应用)… · 2026/9/24 16:33:20

CSP-S 2026 初赛试题解析(第二部分:阅读程序题(第一题))精讲
CSP-S 2026 初赛试题解析(第二部分:阅读程序题(第一题))精讲

2026 CSP-S 第一轮真题第二部分阅读程序第 1 题:《二进制除法》答案是:16:对✅️,17:对✅️,18:错❌️;19:C,20:B,21:C。一… · 2026/9/24 16:33:20

Visual C++ 6.0 MFC 单文档工程的多语言实现方案
Visual C++ 6.0 MFC 单文档工程的多语言实现方案

1. 引言 在 Visual C++ 6.0 时代,MFC(Microsoft Foundation Classes)是 Windows 桌面应用程序开发的主流框架。然而,其单文档工程(SDI)存在一个显著的限制:一个工程只能关联一个资源文件(.rc)。这意味着编译生成的可执行文件(.exe)默认只能包含一种语言的界面资源(… · 2026/9/24 16:33:14

四路can转4G在现场应用中有什么问题?
四路can转4G在现场应用中有什么问题?

一、现场使用 SG‑CAN‑4G‑410 网关,电脑通过网口配置设备,配置软件搜索不到设备,需要从哪些方面排查处理。 首先确认设备供电正常,PWR 电源灯常亮,RUN 系统指示灯处于闪烁运行状态;电脑网线连接设备 LAN … · 2026/9/24 16:33:14

AI Agent酒店预订:为什么大多数Demo都停在“推荐”这一步?
AI Agent酒店预订:为什么大多数Demo都停在“推荐”这一步?

开篇:AI Agent能聊会道,但90%的酒店预订Demo卡在"推荐"阶段 2026年,AI Agent的浪潮席卷企业服务市场。携程商旅与艾瑞咨询联合发布的《2025-2026商旅管理市场白皮书》显示,59%的企业有意向或正在尝试将AI能力与企业管理… · 2026/9/24 16:33:14

基于YOLOv8的渔船作业监控系统:从环境搭建到边缘部署全流程
基于YOLOv8的渔船作业监控系统:从环境搭建到边缘部署全流程

简介:这是一套面向计算机、人工智能、自动化等专业学生与教师的毕业设计级项目资源,围绕YOLOv8实现渔船作业监控系统,可用于毕设、课程设计、大作业或项目立项演示。压缩包共97个文件,约24.21MB,以70个Python源码文件为… · 2026/9/24 0:00:13

1D-CNN时间序列建模实战:从Conv1d原理到工业落地
1D-CNN时间序列建模实战:从Conv1d原理到工业落地

简介:面向时间序列数据建模的一维卷积神经网络完整实现,适合深度学习入门者及需要快速验证时序模型的研究者,能够从音频、文本、传感器或股价等序列中挖掘局部特征与时间依赖。压缩包体积很小,只有3KB,内含3个Python脚… · 2026/9/24 0:00:26

柔软的L:汉语语流中被忽视的舌肌张力控制
柔软的L:汉语语流中被忽视的舌肌张力控制

1. 这个“L”不是字母表里的L,而是舌尖上的L最近在几个方言群和语音教学社群里,反复看到有人发一句:“也说字母L:柔软的长舌”。初看以为是英语发音课笔记,点开才发现全是方言爱好者、播音系学生、语言康复师甚至戏曲演… · 2026/9/24 0:00:44

了解更多?预约专属演示

我们的顾问将为您一对一讲解产品与方案

企业微信二维码