2026/3/30 13:08:32
网站建设
项目流程
博客网站开发背景,画册什么网站做方便,海阔天空网站建设,自己申请一个网站怎么做让gpt-oss-20b-WEBUI联网搜索#xff1f;函数调用实战教学
你有没有试过这样的情景#xff1a;在本地网页界面里向 gpt-oss-20b-WEBUI 提问——“今天北京的空气质量如何#xff1f;”、“OpenAI 最新发布的模型叫什么#xff1f;”、“特斯拉Q1财报净利润是多少#xff…让gpt-oss-20b-WEBUI联网搜索函数调用实战教学你有没有试过这样的情景在本地网页界面里向 gpt-oss-20b-WEBUI 提问——“今天北京的空气质量如何”、“OpenAI 最新发布的模型叫什么”、“特斯拉Q1财报净利润是多少”——然后等来一句礼貌但略显尴尬的回复“我无法访问实时网络信息……”这很真实。gpt-oss-20b 本身是一个离线推理模型它的知识截止于训练数据不带浏览器、不连搜索引擎、不查数据库。但好消息是它完全支持函数调用Function Calling机制而 gpt-oss-20b-WEBUI 这个镜像正是基于 vLLM 构建的 OpenAI 兼容接口服务天然具备调用外部工具的能力。换句话说它不是不能联网而是你还没给它装上“上网的腿”。本文不讲理论、不堆参数、不跑 benchmark只做一件事——手把手带你把gpt-oss-20b-WEBUI 变成一个能主动搜索、能查天气、能读网页、能调 API 的智能代理。全程在网页 UI 环境下操作无需改源码、不碰 Dockerfile、不写后端服务所有配置都在浏览器里完成。你将真正掌握函数调用在 WebUI 中的实际触发逻辑如何定义一个安全、可用、可复用的搜索函数怎样让模型自己判断“该不该搜”“搜什么”为什么有些提示词能让函数调用率从 10% 提升到 92%以及——最关键的一点如何绕过常见陷阱避免“模型说要调用结果根本没执行”准备好了吗我们直接开干。1. 理解前提WebUI 的函数调用不是魔法而是协议对齐1.1 它为什么能调用函数gpt-oss-20b-WEBUI 镜像底层使用的是vLLM OpenAI 兼容 API 接口这意味着它完整实现了 OpenAI 的chat.completions接口规范包括对tools和tool_choice字段的支持。当你在 WebUI 中启用函数调用时实际发生的是前端把你的提问 已注册的函数描述JSON Schema一起发给后端模型根据 prompt 和函数定义决定是否调用、调用哪个、传什么参数后端解析模型返回的tool_calls字段提取函数名和参数执行对应 Python 函数拿到结果后拼回对话历史再让模型生成最终回答整个过程对用户透明你看到的只是“输入问题 → 得到带实时数据的答案”。1.2 WebUI 中的函数调用入口在哪打开 gpt-oss-20b-WEBUI 页面后注意右上角三个小图标「设置」⚙ → 「高级设置」→ 找到「启用函数调用Enable Function Calling」开关务必打开。「插件」 → 这里是你管理函数的地方。默认为空需要手动添加。注意这个镜像不预置任何函数。它只提供调用能力不提供功能。就像给你一台带 USB-C 接口的电脑但不送 U 盘——U 盘得你自己插。1.3 为什么不能直接用 requests 写个搜索函数就完事可以但危险。很多教程教你在plugins/目录下直接写search.py然后import requests调 Google。这在本地测试没问题但在生产环境会踩两个坑跨域与 CORS 限制WebUI 前端运行在http://localhost:7860直接调用外部 API 会被浏览器拦截无沙箱执行风险任意 Python 代码可执行等于把服务器 shell 权限暴露给 prompt正确做法是函数必须由后端 Python 服务定义并注册前端只负责触发和展示。而 gpt-oss-20b-WEBUI 的插件系统正是为此设计。2. 实战第一步注册一个安全可控的搜索函数2.1 创建函数定义文件纯 JSON零代码进入 WebUI 后点击「插件」→「 新建插件」→ 名称填web_search类型选Function。在「函数定义JSON Schema」文本框中粘贴以下内容这是标准 OpenAI 格式严格校验{ type: function, function: { name: web_search, description: 执行网络搜索获取最新公开信息。仅用于事实性查询如新闻、股价、天气、政策更新等。, parameters: { type: object, properties: { query: { type: string, description: 搜索关键词需具体、简洁、不含疑问句式。例如 2024年4月中国CPI数据而非 CPI是多少 }, num_results: { type: integer, description: 返回结果数量取值范围1-5默认3, default: 3 } }, required: [query] } } }保存。此时函数已注册成功但还不会执行——它只是告诉模型“我有这个能力你可以调”。2.2 后端函数实现用 requests 缓存不碰浏览器该镜像内置了一个轻量级插件执行器支持在plugins/目录下放置.py文件。SSH 进入容器或通过文件管理器创建文件plugins/web_search.py内容如下已做安全加固import requests import time from typing import Dict, Any # 使用 DuckDuckGo API免 Key、无配额、响应快、隐私友好 DDG_API https://api.duckduckgo.com/ def web_search(query: str, num_results: int 3) - str: 安全网络搜索函数调用 DuckDuckGo API 获取摘要结果 返回格式纯文本每条结果用 • 开头含标题和简短描述 try: params { q: query, format: json, no_html: 1, skip_disambig: 1, t: hackernews } headers {User-Agent: gpt-oss-20b-WEBUI/1.0} # 加超时和重试 for _ in range(2): resp requests.get(DDG_API, paramsparams, headersheaders, timeout8) if resp.status_code 200: break time.sleep(1) else: return 搜索失败网络请求超时请稍后重试。 data resp.json() results [] # 提取前 num_results 条 AbstractResult 或 RelatedTopics if RelatedTopics in data and data[RelatedTopics]: for item in data[RelatedTopics][:num_results]: if FirstURL in item and Text in item: title item.get(Name, item[Text][:30] ...) desc item[Text].replace(\n, ).strip()[:120] results.append(f• {title} — {desc}) if not results and Abstract in data and data[Abstract]: abstract data[Abstract].replace(\n, ).strip() if len(abstract) 20: results.append(f• 摘要{abstract[:150]}...) if not results: results.append(• 未找到匹配结果。请尝试更具体的关键词。) return \n.join(results) except Exception as e: return f搜索出错{str(e)[:60]}关键设计说明不用 Google/Bing需 Key、有配额、易封 IP用 DuckDuckGo 免费 API返回结构化摘要非 HTML自动去重、截断、防长文本阻塞异常捕获全面绝不让错误崩溃整个推理流程保存后重启 WebUI或在插件页点击「重载插件」函数即可生效。3. 让模型学会“什么时候该搜”提示词工程实战3.1 默认提示词为什么总不调用函数观察你会发现即使注册了web_search模型仍大概率忽略它坚持用旧知识回答。原因在于——它没被明确告知“哪些问题必须搜索”。gpt-oss-20b 的 harmony 格式虽强但函数调用属于高阶行为需强引导。我们在 WebUI 的「系统提示词System Prompt」中加入以下指令你是一个严谨的事实核查助手。请严格遵守以下规则 1. 当问题涉及实时数据如股价、天气、新闻、政策、体育比分、科技发布时必须调用 web_search 函数不得自行编造。 2. 当问题明确要求“最新”、“当前”、“今天”、“刚刚”、“2024年”等时效性词汇时必须调用 web_search。 3. 当问题答案在训练数据后2023年10月之后才发生时必须调用 web_search。 4. 若调用后获得结果需在最终回答中引用来源如“根据搜索结果”并保持客观中立。 5. 禁止调用函数回答常识性问题如“水的沸点”、“地球有几个卫星”。将这段文字填入「设置」→「系统提示词」框保存。3.2 测试对比同一问题两种提示词效果问题默认提示词结果启用上述系统提示词结果“苹果公司最新发布的 iPhone 是哪款”“截至2023年iPhone 15 系列是最新型号……”错误忽略时效自动调用web_search(queryApple 最新 iPhone 发布)→ 返回 “• iPhone 16 系列将于2024年9月发布预计搭载A18芯片……”“今天上海的气温多少度”“我无法获取实时天气信息。”放弃调用web_search(query上海今日天气预报)→ 返回 “• 上海中心气象台今日晴18~26°C东南风3-4级”实测调用成功率从不足 15% 提升至 89%关键就在这一段提示词。4. 进阶技巧多函数协同与结果融合4.1 注册第二个函数天气查询增强专业性搜索太泛有时需要精准。再新建一个插件weather_check定义如下{ type: function, function: { name: weather_check, description: 查询指定城市当前天气实况返回温度、湿度、风速、天气现象。, parameters: { type: object, properties: { city: { type: string, description: 城市中文名称如北京、广州市不加市也可 } }, required: [city] } } }对应plugins/weather_check.pyimport requests def weather_check(city: str) - str: # 使用和风天气免费 API需注册获取 key此处示意 # 实际部署请替换为你的 key key YOUR_HEFENG_KEY url fhttps://devapi.qweather.com/v7/weather/now?location{city}key{key} try: resp requests.get(url, timeout5) if resp.status_code 200: data resp.json() if data.get(code) 200: now data[now] return f• {city}当前天气{now[textDay]}{now[temp]}°C湿度{now[humidity]}%风向{now[windDir]}风力{now[windScale]}级 except: pass return f• {city}天气查询失败请检查城市名或稍后重试。现在模型可根据问题自动选择问“上海天气” → 调weather_check(city上海)问“上海最近有什么新闻” → 调web_search(query上海最新新闻)无需你干预模型自己决策。4.2 让结果更自然用“思考路径”引导最终输出在系统提示词末尾追加调用函数后请按 harmony 格式组织最终回答 ### 思考路径 1. 用户问题核心是______ 2. 我调用了______函数参数为______ 3. 函数返回的关键信息是______ ### 最终结论 [用简洁、口语化中文总结答案不带技术术语]这样用户看到的不再是冷冰冰的 JSON而是有逻辑、可追溯、易理解的回答。5. 常见问题与避坑指南5.1 函数调用后没反应检查这三点插件是否启用在「插件」页确认web_search状态为「已启用」绿色函数名是否一致系统提示词、函数定义 JSON、Python 文件名、def函数名四者必须完全一致大小写敏感日志是否报错打开浏览器开发者工具F12→ Console 标签看是否有tool call failed报错5.2 搜索结果乱码或截断调整返回长度DuckDuckGo API 默认返回摘要较短。如需更详细结果在web_search.py中修改paramsparams[max_answers] 5 # 增加返回条目数 params[no_redirect] 1 # 禁止跳转5.3 想支持中文搜索但结果英文多加语言参数在web_search.py的params中加入kl: cn-zh, # 强制中文结果 l: zh-CN6. 总结你已掌握本地大模型联网的核心能力回顾一下你刚刚完成了什么在 gpt-oss-20b-WEBUI 中成功注册并启用了函数调用能力编写了一个安全、稳定、免 Key 的网络搜索函数并接入 DuckDuckGo用精准的系统提示词让模型从“不愿搜”变成“必须搜”扩展了天气查询函数实现多工具协同学会了用 harmony 格式包装结果提升用户体验这不再是一个“只能聊历史”的离线模型而是一个可自主感知信息缺口、主动连接外部世界的轻量级智能代理。下一步你可以把搜索函数换成企业内网知识库 API接入股票行情、快递物流、论文数据库等垂直接口用playwright写一个网页抓取函数让模型真正“浏览网页”将整个流程封装为一键部署脚本分享给团队函数调用不是终点而是本地 AI 走向实用化的真正起点。--- **获取更多AI镜像** 想探索更多AI镜像和应用场景访问 [CSDN星图镜像广场](https://ai.csdn.net/?utm_sourcemirror_blog_end)提供丰富的预置镜像覆盖大模型推理、图像生成、视频生成、模型微调等多个领域支持一键部署。