资讯动态

华为云Flexus+DeepSeek征文|从部署到Bocha·AI Search插件工作流搭建:Browser SimuSearcher·网行者实战拆解

发布时间:2026/10/21 8:17:41 来源:尧图企业网站定制
1. 从 Flexus 部署到 Bocha 插件网行者工作流到底解决什么问题华为云 Flexus 云服务器上跑通 DeepSeek 之后很多人会卡在同一个地方模型能聊天但它不知道今天发生了什么。你问它“最近 C 有什么新特性讨论”它只能凭训练数据里的旧知识回答给不出真实网页里的内容。Browser SimuSearcher·网行者这套工作流要解决的就是让 DeepSeek 具备“主动去全网找资料再回答”的能力。具体来说这条链路分三段第一段是在华为云 Flexus 上把 Dify 跑起来并接好 DeepSeek 模型第二段是安装 Bocha·AI Search 插件让工作流拥有联网检索节点第三段是用 ChatFlow 把“用户提问 → AI Search 检索 → 代码节点提取网页正文 → 模型总结”串成一条可复用的自动化流程。适合谁适合已经在华为云上部署了 Dify、想让自己的 AI 应用具备实时搜索能力的开发者也适合正在做 RAG 但发现知识库更新太慢、想补一层联网检索的团队。我实测下来整条链路最容易被忽略的不是模型对接而是 Bocha 返回的 JSON 结构提取。AI Search 节点吐出来的数据嵌套层级比较深直接丢给模型会被截断或丢失关键字段必须加一个代码执行节点把 webpage 内容抽出来格式化成纯文本。这一步做对了后面模型总结的质量会明显不一样。下面按“环境准备 → 插件配置 → 工作流搭建 → 端到端验证 → 报错排查”的顺序拆开讲每一步都给可复制的配置和参数。2. 华为云 Flexus 上 Dify 环境初始化与 DeepSeek 模型对接Flexus 云服务器部署 Dify 的过程在华为云控制台已经高度模板化。进入“资源编排”服务选择 Dify 单机部署模板默认配置直接下一步即可。版本选择上我选的是 015.2密码按规则设置回滚设置打开能提高调试效率。整个部署大约 10 分钟完成后在“输出”里拿到弹性公网 IP这就是后面登录 Dify 的地址。登录 Dify 之后第一件事是接模型。点击右上角设置 → 模型供应商 → 找到 OpenAI 兼容接口那一项添加模型。这里需要三个值名称、地址、密钥。名称和地址从华为云 ModelArts Studio 控制台的“在线推理”页面获取点击“调用说明”再点“Open AI”就能看到 Base URL 和模型名称。密钥在 ModelArts Studio 底部的“API 管理”里创建注意密钥只显示一次创建后立刻复制。把这三个值填进 Dify 的模型配置里保存后如果显示“已连接”就说明对接成功。这一步的关键是 Base URL 要带对路径通常以/v1结尾不要多写也不要少写。模型 ID 填DeepSeek-R1或DeepSeek-V3取决于你在 ModelArts Studio 开通的是哪个版本。环境初始化完成后建议先在 Dify 的“模型”页面发一条测试消息确认 DeepSeek 能正常返回。如果这里就报 401说明密钥或地址有问题先解决再往下走不然后面工作流调试会被干扰。3. Bocha·AI Search 插件安装与可复制配置清单Bocha 插件的安装入口在 Dify 的“插件”页面。点击“前往插件广场”搜索“博查”或“Bocha”找到 AI Search 插件后点击安装。安装前有一个容易踩的坑如果你的 Dify 是部署在 Flexus 上的插件安装时的网络出口需要能访问外网否则会卡在下载阶段。确认 Flexus 绑定了弹性公网 IP 并且安全组放行了出方向流量。安装完成后需要授权。点击插件详情里的“授权”会跳转到 Bocha 官网获取 API Key。在 Bocha 控制台点击“创建 API”复制生成的 Key粘贴回 Dify 的授权框里。授权成功后插件状态会变成“已授权”。下面是工作流中 AI Search 节点的可复制配置片段以 JSON 形式给出你可以直接对照填写{ node_type: ai_search, provider: bocha, api_key: sk-xxxxxxxxxxxxxxxxxxxxxxxx, query: {{query}}, search_type: web, count: 10, summary: true, freshness: oneWeek }参数说明query绑定用户输入变量search_type可选web、video、image做网行者工作流时先用webcount控制返回条数10 条足够覆盖大部分场景summary打开后 Bocha 会返回 AI 总结的答案和追问问题freshness控制时效性oneWeek表示只搜最近一周的内容做实时检索时建议打开。如果你用的是 Cline MCP 或 Claude Code 这类工具来管理配置需要写全三件套Base URL 填https://taotoken.net/apiKey 填 Bocha 的 API KeyModel ID 填bocha-ai-search。这三项缺一不可少填 Model ID 会导致节点初始化失败。插件配置完成后建议先在 Dify 的插件测试页面单独调一次 AI Search输入一个简单 query 比如“CSDN C 最新文章”确认能返回结果。这一步通过后再进工作流编排能省掉很多排查时间。4. Browser SimuSearcher·网行者工作流搭建与端到端验证工作流搭建从 Dify 的“工作流”页面开始点击“创建空白应用”选择 ChatFlow 类型设置一个昵称比如“网行者”。创建完成后进入编排界面左侧是节点面板右侧是画布。第一步添加“开始”节点设置输入变量query类型为文本这是用户提问的入口。第二步添加 AI Search 节点把它连接到开始节点后面。在 AI Search 节点的配置里query字段绑定{{query}}其他参数按上一节的 JSON 片段填写。这个节点负责去全网检索返回一个结构化的 JSON里面包含webpage字段嵌套在data或webPages.value下面。第三步添加“代码执行”节点连接到 AI Search 后面。这个节点的作用是提取 JSON 里的webpage内容并格式化成纯文本。输入变量选择上一个节点的输出命名为arg1。输出变量命名为result。代码用下面这段import json def extract_webpage_content(data): if isinstance(data, dict): if webpage in data: return data[webpage] possible_paths [ data.get(data, {}).get(webpage), data.get(webPages, {}).get(value), ] for content in possible_paths: if content is not None: return content for value in data.values(): result extract_webpage_content(value) if result is not None: return result elif isinstance(data, list): for item in data: result extract_webpage_content(item) if result is not None: return result return None def format_structured_content(content, indent_level0): indent * indent_level result if isinstance(content, dict): for key, value in content.items(): if key in [sitelcon, id, datePublished]: continue if isinstance(value, (dict, list)): result f{indent}【{key}】\n result format_structured_content(value, indent_level 1) else: if key name: result f{indent}【{value}】\n elif key content: result f{indent}{value}\n else: formatted_value str(value).replace(\n, \n indent ) result f{indent}- {key}: {formatted_value}\n elif isinstance(content, list): for i, item in enumerate(content): if isinstance(item, (dict, list)): result f{indent}【条目 {i1}】\n result format_structured_content(item, indent_level 1) else: result f{indent}- {item}\n elif isinstance(content, str): try: parsed json.loads(content) result format_structured_content(parsed, indent_level) except: result f{indent}{content}\n else: result f{indent}{str(content)}\n return result def main(arg1) - dict: try: if isinstance(arg1, str): data json.loads(arg1) else: data arg1 content extract_webpage_content(data) if content is None: return {result: 未找到可识别的webpage字段} formatted_result format_structured_content(content) return {result: formatted_result} except Exception as e: return { result: ( f提取webpage内容时出错: f{type(e).__name__}: {str(e)} ) }第四步添加“LLM”节点连接到代码执行后面。模型选择你之前接好的 DeepSeek提示词可以这样写你是一个联网搜索助手。根据以下检索到的网页内容回答用户的问题。 用户问题{{query}} 检索内容 {{result}} 请基于以上内容给出准确、简洁的回答并标注信息来源。第五步添加“回答”节点连接到 LLM 后面输出变量绑定 LLM 的回复。整条链路是开始 → AI Search → 代码执行 → LLM → 回答。发布工作流后在对话界面输入测试 query比如“CSDN 上 C 相关的热门文章”观察返回结果。如果 LLM 的回答里引用了具体网页内容说明整条链路跑通了。端到端验证的判读方法看三个地方。第一AI Search 节点是否返回了非空的 JSON第二代码执行节点的输出是否包含格式化的网页正文而不是“未找到可识别的webpage字段”第三LLM 的回答是否引用了检索内容而不是凭空生成。三个都通过工作流就算验证成功。5. 常见报错排查401、local proxy failed、reading choices、OAuth工作流跑起来之后最容易遇到的报错集中在几个地方。下面按真实报错信息对照排查。401 Unauthorized出现在 AI Search 节点或 LLM 节点。如果是 AI Search 报 401说明 Bocha 的 API Key 无效或过期去 Bocha 控制台重新创建 Key 并更新授权。如果是 LLM 报 401说明 ModelArts Studio 的密钥有问题检查密钥是否复制完整、Base URL 是否以/v1结尾。local proxy failed这个报错通常出现在 Flexus 上的 Dify 调用外部 API 时。原因是 Flexus 的安全组没有放行出方向流量或者 NAT 网关配置有问题。检查安全组出方向规则是否允许 HTTPS确认 NAT 网关绑定了正确的子网。如果 Flexus 没有绑定弹性公网 IP也需要先绑定。reading choices这个报错出现在 LLM 节点通常是模型返回格式不符合预期。检查 Dify 里模型供应商的配置确认模型 ID 填写正确。如果用的是 OpenAI 兼容接口确认 Base URL 没有多写/chat/completionsDify 会自动拼接路径。OAuth 授权失败出现在 Bocha 插件授权环节。检查 Dify 的插件安装是否完整有时候网络中断会导致插件文件损坏。重新安装插件确保安装过程中网络稳定。如果用的是 Claude Code 或 Cline MCP 来管理配置确认settings.json里的 Base URL 填的是https://taotoken.net/apiKey 和 Model ID 都填全。代码节点报 KeyError说明 Bocha 返回的 JSON 结构和你代码里写的路径不匹配。在代码节点里加一行print(arg1)把原始数据打出来对照实际结构修改possible_paths里的路径。不同版本的 Bocha 插件返回结构可能略有差异以实际打印结果为准。工作流执行超时AI Search 节点默认超时时间可能不够尤其是检索条数设得比较多的时候。把count降到 5或者在节点配置里把超时时间调到 30 秒。Flexus 单机部署的资源有限并发高的时候也会超时建议先单条测试再批量跑。排查顺序建议先单独测 AI Search 节点再单独测 LLM 节点最后串起来测。分段排查比整条链路一起调效率高很多。6. 从验证到复用把网行者工作流接入你的实际场景工作流验证通过之后下一步是把它变成可复用的能力。Dify 的工作流支持发布为 API你可以在“访问 API”页面拿到接口地址和密钥然后在自己的应用里调用。调用方式和 OpenAI 兼容接口类似把query作为输入传进去拿到 LLM 的回答。如果你想让网行者工作流支持更多检索类型可以在 AI Search 节点里把search_type改成video或image配合代码节点里的格式化逻辑就能处理抖音视频链接或图片搜索结果。我试过用video类型搜抖音链接Bocha 返回的 JSON 里会包含视频标题和描述代码节点提取后模型能给出不错的总结。长期跑的话建议把工作流和 Coding Plan 结合使用。Coding Plan 适合需要持续调用模型进行编码或 Agent 任务的场景网行者工作流负责检索Coding Plan 负责后续的代码生成或任务执行两者配合能覆盖从“找资料”到“写代码”的完整链路。API Keys 和接入文档在https://taotoken.net/api-keys和https://taotoken.net/doc可以找到模型对话入口在https://taotoken.net/model-chat需要长期编码或 Agent 任务的话看https://taotoken.net/coding-plan。最后说一个实用技巧在代码节点的format_structured_content函数里我特意跳过了sitelcon、id、datePublished这几个字段因为它们对模型总结没有帮助反而会占用 token。如果你发现检索内容太长导致模型截断可以进一步精简格式化逻辑只保留name和content两个字段。这样既能保证信息密度又能控制 token 消耗。

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价 →
↑