GLM 5.2 联网搜索:函数调用实现实时浏览
Jul 31, 2026

GLM 5.2 联网搜索:函数调用实现实时浏览

如何用函数调用为 GLM 5.2 开启实时联网搜索——用 Python 代码示例和智谱原生搜索工具,构建一个联网感知的 AI 助手。

GLM 5.2(经智谱 AI API 以 glm-4-plus 提供)是一款 753B 参数的专家混合(MoE)模型,拥有 100 万 token 的上下文窗口。它开箱即用地支持代码、视觉、结构化输出与流式。但有一件事再多的预训练也无法彻底解决:发生在训练截止时间之后的事件。

本教程教你两种给 GLM 5.2 接上实时网络访问的方法——智谱原生的 web_search 工具(最快的路径)和一套自定义函数调用方案,可以接任意搜索 API(SerpAPI、Brave、Tavily 等)。两种方式都与 OpenAI SDK 兼容,如果你已经集成过这个模型,配置成本极低。

学完你将拥有一个能回答实时问题的可用 Python 脚本——当前股价、突发新闻、最新库更新日志——不需要任何浏览器自动化或爬虫。


痛点

每个大语言模型都凝固在时间里。GLM 5.2 的训练数据有截止点,意味着它无法回答关于昨天的财报、最新框架发布、或任何发生在其互联网快照之后的事件。

对许多生产用例来说,这是致命伤。引用过时退货政策的客服机器人、引用已废弃文档的研究助手、用陈旧价格数据的金融工具——都会立刻侵蚀用户信任。对私有文档做 RAG 流水线能帮助内部知识,但解决不了「今天发生了什么」的问题。

标准解法是让模型在查询时搭配实时网络搜索:模型判断自己需要最新信息,调用搜索工具,读取结果,把它们揉进一个有据可依的回答。GLM 5.2 原生支持这种模式。


GLM 5.2 联网搜索如何工作

GLM 5.2 的 API 端点(https://open.bigmodel.cn/api/paas/v4/)兼容 OpenAI。这意味着标准的 tools / 函数调用接口可用,而且智谱新增了一个第一方 web_search 工具类型,托管模型已经知道怎么用它。

调用流程是:

  1. 你在请求里带上 web_search 工具。
  2. GLM 5.2 根据用户的问题判断是否需要实时搜索。
  3. 如果需要,智谱后端抓取搜索结果并注入模型上下文。
  4. 模型返回一个引用或融入了这些结果的最终答案。

第 3、4 步在原生工具下由服务端完成,这让集成变成单次请求操作。而自定义函数调用方案里,第 3、4 步由你的 Python 代码显式处理,让你完全掌控用哪家搜索服务商和什么排序逻辑。


方法 1:智谱原生 web_search 工具

智谱的 API 暴露了一个 web_search 工具类型,模型可以自动调用。启用它只需要在 tools 列表里多一项。不需要单独的搜索 API key。

from openai import OpenAI

client = OpenAI(
    api_key="YOUR_ZHIPU_API_KEY",
    base_url="https://open.bigmodel.cn/api/paas/v4/",
)

response = client.chat.completions.create(
    model="glm-4-plus",
    messages=[
        {
            "role": "user",
            "content": "What are the top AI news stories from the past 24 hours?"
        }
    ],
    tools=[
        {
            "type": "web_search",
            "web_search": {
                "enable": True
            }
        }
    ],
)

print(response.choices[0].message.content)

这就是完整的集成。模型自己判断问题是否需要联网查证。如果用户问的东西模型能用训练数据回答,它就直接回答。如果问题需要当前信息——新闻、实时价格、最近的软件发布——模型触发搜索、读取结果,并在一次 API 往返内返回有据回答。

你还可以针对特定轮次关闭搜索,把 "enable" 设为 False 即可。当你想要确定性、纯参数式答案时很有用(比如基于已经加载进上下文的检索数据生成结构化输出时)。


方法 2:用搜索 API 做自定义函数调用

原生工具是最快的路径,但有些场景你需要更多掌控:指定的搜索服务商、自定义排序、按日期或域名过滤,或者想在结果进入模型之前检查并记录原始结果。这时就把搜索实现为标准的 OpenAI 兼容函数调用。

五步循环是:定义函数结构、传给 GLM 5.2、收到模型的工具调用请求、在你的代码里执行真实搜索、把结果发回去让模型写出最终答案。

import json
import requests
from openai import OpenAI

client = OpenAI(
    api_key="YOUR_ZHIPU_API_KEY",
    base_url="https://open.bigmodel.cn/api/paas/v4/",
)

# --- Define the search tool schema ---
tools = [
    {
        "type": "function",
        "function": {
            "name": "web_search",
            "description": (
                "Search the web for current information. "
                "Use this for recent events, live pricing, or the latest documentation."
            ),
            "parameters": {
                "type": "object",
                "properties": {
                    "query": {
                        "type": "string",
                        "description": "The search query to execute."
                    },
                    "num_results": {
                        "type": "integer",
                        "description": "Number of results to return (default 5).",
                        "default": 5
                    }
                },
                "required": ["query"]
            }
        }
    }
]


def run_search(query: str, num_results: int = 5) -> list[dict]:
    """
    Execute a real web search using your preferred provider.
    Replace this stub with a call to SerpAPI, Brave Search, or Tavily.
    """
    # Example stub — replace with your actual search provider:
    # serpapi_key = "YOUR_SERPAPI_KEY"
    # url = "https://serpapi.com/search"
    # params = {"q": query, "num": num_results, "api_key": serpapi_key}
    # data = requests.get(url, params=params).json()
    # return [{"title": r["title"], "snippet": r["snippet"], "url": r["link"]}
    #         for r in data.get("organic_results", [])[:num_results]]

    # Placeholder response for demonstration:
    return [
        {
            "title": f"Search result for: {query}",
            "snippet": "Live snippet from the web would appear here.",
            "url": "https://example.com"
        }
    ]


def chat_with_search(user_message: str) -> str:
    messages = [{"role": "user", "content": user_message}]

    # First turn: model may request a tool call
    response = client.chat.completions.create(
        model="glm-4-plus",
        messages=messages,
        tools=tools,
        tool_choice="auto",
    )

    choice = response.choices[0]

    # If the model wants to search, execute it and send results back
    if choice.finish_reason == "tool_calls":
        tool_call = choice.message.tool_calls[0]
        args = json.loads(tool_call.function.arguments)

        search_results = run_search(
            query=args["query"],
            num_results=args.get("num_results", 5)
        )

        # Append the assistant's tool-call message and our results
        messages.append(choice.message)
        messages.append({
            "role": "tool",
            "tool_call_id": tool_call.id,
            "content": json.dumps(search_results)
        })

        # Second turn: model writes final answer using search results
        final_response = client.chat.completions.create(
            model="glm-4-plus",
            messages=messages,
        )
        return final_response.choices[0].message.content

    # Model answered directly without searching
    return choice.message.content


if __name__ == "__main__":
    answer = chat_with_search(
        "What is the current Python version and when was it released?"
    )
    print(answer)

这个实现里的关键点:

  • tool_choice="auto" 让模型自己决定何时搜索;如果总想让模型先搜索,就设成 "required"
  • 工具调用之后,你以 "role": "tool" 的消息把搜索结果发回去——这是标准的 OpenAI 函数调用协议,在 GLM 5.2 上完全相同地工作。
  • GLM 5.2 的 1M token 上下文窗口意味着你可以轻松传递几十条搜索结果(整页文本,不只是摘要片段)而不触达上限。

怎么选

想要最快集成、且不需要检查或控制搜索结果时,用原生 web_search 工具。智谱处理搜索后端,没有额外的 API key 或结果解析步骤。

当你需要指定搜索服务商(出于域名覆盖、地理过滤或价格原因)、想记录原始结果供审计、需要在模型看到结果之前按日期范围过滤、或者正在构建把搜索当作众多工具之一的智能体循环时,用自定义函数调用方案。

两种方法都支持流式——你可以在 create() 调用里加 stream=True,然后迭代 response.choices[0].delta.content 获得逐 token 输出,即便工具调用还在进行中。


真实用例

实时新闻摘要。 丢一个主题,让 GLM 5.2 总结最新报道。借助 1M 上下文窗口,你可以塞进完整文章文本而不是截断的片段,摘要质量大幅提升。

实时价格与可用性。 电商或旅行助手可以查询实时产品或航班数据,让模型格式化一份干净对比——不需要专门的爬虫流水线。

最新文档查询。 让模型去查某个库的最新 API 更新日志。模型抓取发布说明页面、阅读内容,并解释自你正在用的版本以来发生了什么变化。

金融数据查询。 对需要当前汇率、指数值或大宗商品价格的应用,查询时的一次搜索工具调用比把陈旧数据写进 system prompt 更可靠。


竞争差异化

好几款领先模型都支持函数调用,因此都可以搭配联网搜索工具。GLM 5.2 在这个用例上值得考虑,是三个因素叠加的结果。

第一,原生 web_search 工具不需要额外 API key、不需要搜索服务商账号、不需要结果解析代码。集成就是在 tools 列表里加一个 JSON 对象——相比那些必须自己搭建整个搜索循环的模型,这是实打实的接入摩擦削减。

第二,1M token 上下文窗口(截至撰写时是生产 API 模型里最大的)意味着你不必被迫截断搜索结果。你可以把 20 个完整网页塞进一个上下文,让模型综合它们——这在 128K 甚至 200K token 下都是不现实的。

第三,按每百万输入 token $1.40 计算,即使每轮注入几千 token 的搜索结果,联网增强查询也依然便宜。同样工作流在 $15/百万输入 token 的昂贵模型上,规模下成本约为十倍。

想深入了解 API 配置——鉴权、流式、JSON 模式与完整端点参考——参见 GLM 5.2 API 集成指南,那里覆盖了完整的开发者接入流程。


开始使用

如果你想在写任何代码之前测试 GLM 5.2 的联网搜索,glm5.app 让你直接在浏览器里对模型跑提示词。在投入后端集成之前,这是验证某个查询是否真的触发搜索工具、并看看有据回答长什么样的快捷方式。

准备好动手之后,跟着本教程走:最快的配置是启用原生 web_search 工具;想完全掌控结果,就用自定义函数调用模式接入你偏好的搜索服务商。无论哪条路,推理和综合都由 GLM 5.2 负责——你只需要提供实时数据。

正在评估 GLM 5.2 用于生产的团队,glm5.app 还提供了一个 playground:可以测试边界用例、对比不同 system prompt 的输出、在投入 API 预算前估算 token 成本。


Sources

立即开始使用 GLM 5

免费试用 GLM 5 — 推理、编程、智能体和图像生成,一个平台全搞定。