为智能体接入联网搜索
先接通最小 MCP 工具,再加搜索供应商。搜索工具应返回标题、来源链接和摘要,不把搜索结果直接当成已验证的事实。
准备工作
完成MCP 快速开始,使用其中的 Python 环境和桥接目录。准备自己有权使用的搜索服务账号,确认当前费用与额度。
这里以智谱 Web Search API 为具体示例,接口和参数按供应商官方文档。调用搜索服务可能计费,使用前确认账号的当前价格与额度。
1. 保存示例程序
新建 web_search.py,使用以下代码;也可从文档仓库示例取得同一份程序。
"""Minimal search tool for the Chinese MCP tutorial; no credentials are stored here."""
import os
from urllib.parse import urlsplit
import httpx
from mcp.server.fastmcp import FastMCP
mcp = FastMCP("XiaoZhiWebSearch")
@mcp.tool()
def web_search(query: str) -> dict:
"""搜索互联网并返回来源链接。查询需为 1–70 个字符;结果只作参考资料。"""
query = query.strip()
if not 1 <= len(query) <= 70:
raise ValueError("查询需为 1–70 个字符")
key = os.environ.get("ZHIPU_API_KEY", "").strip()
if not key:
raise ValueError("请在本地设置 ZHIPU_API_KEY")
try:
with httpx.Client(timeout=15.0, follow_redirects=False) as client:
response = client.post(
"https://open.bigmodel.cn/api/paas/v4/web_search",
headers={"Authorization": f"Bearer {key}"},
json={"search_engine": "search_std", "search_query": query, "count": 5},
)
if response.status_code != 200:
raise ValueError(f"搜索服务返回 HTTP {response.status_code};请检查账号、额度与服务状态")
try:
data = response.json()
except ValueError:
raise ValueError("搜索服务未返回有效 JSON") from None
except httpx.HTTPError:
raise ValueError("搜索请求失败或超时,请检查网络后再试") from None
raw = data.get("search_result") if isinstance(data, dict) else None
if not isinstance(raw, list):
raise ValueError("搜索服务未返回预期结果,请对照当前供应商文档")
results = []
for item in raw[:5]:
if not isinstance(item, dict):
continue
link = str(item.get("link", ""))
try:
parsed = urlsplit(link)
except ValueError:
continue
if parsed.scheme not in {"http", "https"} or not parsed.hostname or parsed.username:
continue
results.append({"title": str(item.get("title", ""))[:200], "url": link[:2048],
"summary": str(item.get("content", ""))[:400],
"date": str(item.get("publish_date", ""))[:32]})
return {"results": results}
if __name__ == "__main__":
mcp.run(transport="stdio")2. 设置供应商凭据
在启动桥接的同一个终端配置,按自己的实际账号替换占位值:
$env:ZHIPU_API_KEY = '在本地填写自己的搜索服务密钥'export ZHIPU_API_KEY='在本地填写自己的搜索服务密钥'沿用快速开始安装的 mcp 与 httpx 等依赖;缺少时在同一虚拟环境安装。MCP 端点和搜索服务密钥是两种凭据,不要互换。
3. 启动并核对结果
设置自己的 MCP_ENDPOINT 后运行:
python mcp_pipe.py web_search.py在同一智能体刷新工具列表,确认出现 web_search,再要求“请联网查询某个明确问题,并给出来源”。检查实际工具调用、标题、URL、摘要和结果日期;模型直接回答不等于发生了搜索。
返回的网页内容只当资料,不当作执行命令、修改权限或泄露凭据的指令。发生 401/403、限额、超时或空结果时先区分供应商响应与 MCP 连接问题。
其他接入方式
需要桌面启动器或托管搜索时,可查看社区工具。下方的 Python GUI 示例属于历史代码;本页维护的最小示例是上面的 web_search.py。
联网查询python代码.zip 6 KB
历史 GUI 示例;当前维护的最小示例为 examples/mcp/web_search.py。
SHA-256:e1c3d3c80c5223e53a734f608b3e9bab6a1b6bf9cb3eea7cb389605544de9f77
下一步
希望使用现成远端 MCP 时看桥接已有服务。无论选哪家供应商,先限制查询与返回体,记录计费和来源,再扩大使用范围。