在Dify中实现“今天北京天气怎么样”或“最新iPhone 15 Pro价格”这类依赖实时信息的问答功能,核心步骤就是接入百度搜索API。这并非简单粘贴一个链接就能完成——需要将搜索结果以结构化数据形式喂给大语言模型(LLM),让模型基于真实的网页内容生成答案,才能打通Dify的联网检索能力,实现真正的实时信息查询。

注册百度搜索开放平台并获取API密钥
正式开始之前,需要先申请API密钥。具体路径如下:访问 https://developer.baidu.com/ → 登录百度账号 → 进入「百度搜索开放平台」→ 点击「创建应用」→ 应用类型选择「Web端」→ 填写应用名称(例如“Dify-百度检索”)和简介 → 提交审核。审核通常在1–2小时内通过,通过后立即进入「应用详情页」,找到「API Key」和「Secret Key」这两串字符——务必第一时间复制并妥善保存,Secret Key仅显示一次,丢失后需要重新申请。
需要提醒:百度搜索API不直接开放免费调用额度,通常需要联系商务或开通「搜索资源平台」的企业认证账户。如果仅用于测试,可以申请「体验版」接口,限制条件为QPS≤1,每日总调用量不超过100次。申请路径:「控制台 → 搜索服务 → 搜索资源平台 → 申请体验权限」。
在Dify中配置自定义工具节点(Web Search API)
获取密钥后,进入配置环节。提供两种方式,可根据自身技术偏好选择。
方法一:直接使用Dify内置工具(推荐,上手简单)
进入Dify工作流编辑页面 → 添加节点 → 选择「Tool」→ 搜索并选中「Web Search API」→ 点击「配置」→ 在「Provider」下拉菜单中选择「Baidu」→ 将上一步获取的API Key粘贴到「API Key」字段,Secret Key填入「Secret Key」字段 → 「Search Endpoint」留空(Dify已预置百度接口地址)→ 如需调试原始JSON返回,可开启「Return raw results」,否则保持关闭 → 保存即可。
方法二:自行编写Python节点(灵活但需一定编码能力)
添加节点 → 选择「Custom Node」→ 语言选择Python → 粘贴以下代码(已适配百度搜索v1接口):
import requests
import json
import hmac
import hashlib
import base64
import time
def run(query: str):
api_key = os.getenv("BAIDU_API_KEY")
secret_key = os.getenv("BAIDU_SECRET_KEY")
timestamp = str(int(time.time()))
sign_str = f"{api_key}{timestamp}"
signature = base64.b64encode(hmac.new(secret_key.encode(), sign_str.encode(), hashlib.sha256).digest()).decode()
headers = {
"x-bce-date": timestamp,
"authorization": f"bce-auth-v1/{api_key}/{timestamp}/3600/{signature}"
}
params = {"q": query, "rn": 5}
resp = requests.get("https://api.baidu.com/search/v1", headers=headers, params=params)
if resp.status_code == 200:
data = resp.json()
results = []
for item in data.get("result", [])[:3]:
results.append({
"title": item.get("title", ""),
"link": item.get("url", ""),
"snippet": item.get("snippet", "")
})
return {"text": json.dumps(results, ensure_ascii=False)}
else:
return {"error": f"HTTP {resp.status_code}: {resp.text}"}
然后在「Environment Variables」中新增两行:
BAIDU_API_KEY = 你的API Key
BAIDU_SECRET_KEY = 你的Secret Key
保存节点即可。
编排工作流:触发→搜索→整合→输出
节点配置完成后,需要将它们串联起来。流程并不复杂,分为四步:
第一步:拖入一个「Start」节点,设置输入变量名为query,类型选择Text。
第二步:在「Start」节点后面连接「Web Search API」节点,将Start节点的query传递给该搜索节点作为input参数。
第三步:关键步骤——添加一个「LLM」节点。模型推荐使用deepseek-r1:8b,或您部署的其他支持思考机制的模型。SYSTEM提示词可编写如下:
“你是一个严谨的信息整合助手。用户提问:{query}。以下是来自百度搜索的前三条结果:
{web_search_api.text}
请严格依据上述结果作答,禁止编造、推测或引用未出现的内容。若结果中无明确答案,回复‘未在百度搜索结果中找到相关信息’。”
第四步:连接「End」节点,输出变量设为LLM节点的text字段。
提醒:正式运行前,请务必点击右上角的「Test」按钮,输入“上海迪士尼今日营业时间”进行测试,观察Web Search API节点是否返回了包含title/link/snippet的JSON数组——这一步能帮助您提前发现配置问题。
验证与调试:检查返回结构是否被LLM正确识别
运行一次测试请求,点击「Trace」查看各节点输出。重点检查Web Search API节点的output字段是否为标准JSON格式——不能是HTML或乱码。
如果显示“{'error': 'HTTP 401...'}”,说明API Key或Secret Key填写错误或已过期,请返回平台重新核对。
如果返回空数组[],可能是query被百度过滤(例如包含敏感词或过短),可更换关键词尝试。
如果LLM输出中引用了不存在的链接,说明SYSTEM提示词未生效,请检查LLM节点的上下文绑定是否勾选了web_search_api.text。
