news 2026/10/2 1:55:18

Open WebUI 工具调用从零搭建:20 分钟让模型自己会办事

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Open WebUI 工具调用从零搭建:20 分钟让模型自己会办事

Open WebUI 工具调用从零搭建:20 分钟让模型自己会办事

【免费下载链接】open-webuiUser-friendly AI Interface (Supports Ollama, OpenAI API, ...)项目地址: https://gitcode.com/GitHub_Trending/op/open-webui

你问模型"查一下最近三天 AI 圈有什么新闻",它多半会凭印象编一段,你还分不清真假。Open WebUI 的工具调用就是为了解决这事:把一组工具挂给模型,由它自己决定调哪个、参数怎么填,你只管读结论。这篇文章带你部署环境、调起内置工具、再写出自己的第一个自定义工具。

🧩 机制讲解:模型是怎么选工具的

读完这三步,你就掌握了工具调用的全貌:

  • 输入:你的消息、工具清单、每个工具的描述卡(OpenAPI 规格)一起发给模型。
  • 识别:模型对照描述判断该调哪个工具、传什么参数,产出一条结构化指令。
  • 响应:后端执行工具代码,结果交回模型,模型整理成自然语言回复你。

可以把它想成一份岗位说明书:你(HR)把公司每个档口的职责说明发给新人(模型),来了活儿,新人自己对号入座找到该去的档口,干完再把成品交回给你。全程不用你指派。

🐳 Open WebUI 部署:两条命令起容器

这一节你能得到一台跑起来的 Open WebUI 实例,后面所有操作都从这里开始。克隆仓库后直接起容器:

git clone https://gitcode.com/GitHub_Trending/op/open-webui docker compose up -d

起完后打开本地对应端口,看到聊天界面就说明环境就绪。

🛠️ 如何创建自定义工具:先调内置,再写自己的

这一节你能验证两件事:机制确实在工作,以及模型能调你自己的接口。

  1. 让模型调内置工具。在对话框发"查一下最近三天 AI 领域的新动态,整理成三条要点",模型会自行调用内置的网页搜索和网页抓取工具取回内容,再输出整理好的摘要。全程不用你指定工具。
  2. 建自己的工具。打开 工作区 → 工具,点新建,命名如"查询天气",粘贴一段 Python 函数和配套的 OpenAPI 规格,保存。
  3. 回来验证。问"杭州今天天气如何",模型应自动命中你刚建的这个工具。

记住一点:规格是模型选工具的依据,描述写得越准,调用越准。

🗺️ 源码导航:五个文件看懂工具调用

这一节你能拿到一张改代码、排故障都够用的分层地图:

  • 存储:backend/open_webui/models/tools.py,工具的数据模型,定义源码、规格、配置参数落库的字段。
  • 接口:backend/open_webui/routers/tools.py,前端增删改查的接口层,权限校验从这里过。
  • 执行:backend/open_webui/utils/tools.py,加载工具代码、真正跑一次调用、对接工具服务器。
  • 内置:backend/open_webui/tools/builtin.py,代码执行、网页搜索、记忆存取等内置工具集。
  • 前端:src/lib/apis/tools/index.ts,工具页面拉取和管理数据用的 API 封装。

💼 落地案例:两个能直接照搬的用法

这一节你能看到工具调用在团队里长什么样,一个是查知识,一个是做巡检。

案例一:内网 wiki 检索(团队 FAQ)

  • 背景:运维手册躺在内网 wiki,新人每问一次发布流程,你得手动搜一遍。
  • 怎么问:"生产发布流程是什么?"
  • 发生什么:模型调你接好的 wiki 检索工具,自己填好查询词,后端取回命中段落。
  • 拿到什么:发布步骤加原文链接,每个问题省下几分钟人工检索。

案例二:监控系统晨报

  • 背景:每天早上要打开监控面板,肉眼确认前一天有没有任务失败。
  • 怎么问:"查一下监控系统,昨天有没有失败的任务?"
  • 发生什么:模型调接了监控 API 的工具,把"昨天"作为时间参数传入,接口返回失败列表。
  • 拿到什么:带任务名和时间的失败清单,转发到群里即可。

❓ 排错 FAQ:四个高频问题

这一节能帮你在卡住时最快定位原因。

问:我建的工具,别人为什么看不到? 答:工具默认只对创建者和管理员可见,去工具设置里给相应用户组授权。

问:模型不调工具,只会口头回答? 答:先确认所用模型支持函数调用,再把描述改写成"何时使用 + 返回什么";描述越模糊,模型越瞎猜。

问:工具调用超时怎么办? 答:网页抓取、第三方接口受全局超时限制,要么缩短工具内部耗时,要么把大工具拆成几个小工具。

问:改了工具代码不生效? 答:工具模块有缓存,保存后刷新页面或重启后端再验证。

📈 更进一步:三个扩展方向

这一节能让你的工具体系从个人用到团队用。

  • 接现成系统:在"添加工具服务器"页面填入 OpenAPI 文档地址或 MCP 服务,服务上的工具会自动列出来直接用,不用写 Python。
  • 按用户组分发:把"查询账单"只授权给财务组,其他用户的聊天里根本看不到它。
  • 控制工具数量:工具一多,模型选错率就上升,保持每个工具单一职责,同类能力合并成一个带参数的入口。

工具调用好不好用,最后落在两件事上:描述写清楚,权限发合理。环境配置和其他可选项,翻一下仓库根目录的 README.md 就有答案。

【免费下载链接】open-webuiUser-friendly AI Interface (Supports Ollama, OpenAI API, ...)项目地址: https://gitcode.com/GitHub_Trending/op/open-webui

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/10/2 1:54:27

双RTX 3090 + vLLM 部署 Qwen2.5-14B 低成本私有化推理实践

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华
网站建设 2026/10/2 1:54:08

SpringBoot+Vue3+MyBatis实战:革命文物征集管理系统开发全解析

直接说结论:这套“SpringBootVue3MyBatis的红色革命文物征集管理系统”,本质上就是一个典型的Java全栈前后端分离项目,但它落地的业务场景——革命文物征集,比普通的CRUD系统多了一层“流程管控”和“档案严谨性”的硬要求。收藏单…

作者头像 李华
网站建设 2026/10/2 1:52:15

手写SVM实现:从数学推导到可调试、可部署的NumPy版本

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华
网站建设 2026/10/2 1:51:32

艾思控RS485驱动器:工业现场物理层稳定性的关键保障

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华
网站建设 2026/10/2 1:48:32

Python旅游情感分析系统:基于Django与RNCC的文本分类实战

简介:这份资源围绕 Python 旅游景点方面级别情感分析,提供了完整的毕业设计实现方案,包含 Django Python MySQL 搭建的语料库标注系统及基于 RNCC 模型的文本分类功能,适合计算机相关专业学生用于毕业设计参考、课程项目复现或情…

作者头像 李华
网站建设 2026/10/2 1:47:29

直流无刷电机Simulink仿真:模型搭建、六步换相与调试指南

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华