FEATURED · 精选文章

AI Agent 跑 Function-Calling 调鸿蒙设备,TaoToken 只供 Key 行不行?

发布时间 / 2026/9/20 0:34:56
来源 / 创域科博编辑部
栏目 / 资讯中心
AI Agent 跑 Function-Calling 调鸿蒙设备,TaoToken 只供 Key 行不行? 当 ReActAgent 反复调self.llm.chat失败时先别怀疑工具在 OpenHarmony 设备控制页里跑“语音控制智能家居”的 Agent最容易踩的坑不是control_device写错而是 ReAct 主循环里self.llm.chat这一层模型通道没配稳。多工具编排、多轮推理时query_weather、query_device_status、control_device会被反复触发只要模型 Base URL 或 Key 分散在不同文件里一次 401 或超时就足以让整条链路断掉最后表现成“工具调用失败”。这篇就按原文的 ReActAgent 结构把模型通道收敛到 TaoToken官网https://taotoken.net/?utm_sourcetaotoken_aicg_blog_endutm_mediumcsdnutm_campaignrewriteutm_content 只提供 Key 和统一 Base URL不替 Agent 执行工具也不控制device_id。一、原问题与场景多工具编排时模型通道和 Key 分散原文的ReActAgent.run()是一个典型的 Thought → Action → Observation 循环用户说“今天天气怎么样帮我调整一下家里的设备”Agent 先让模型产出query_weather的tool_calls拿到 Observation 后再决定是否调control_device最后把结果回填到鸿蒙设备控制页。问题出在self.llm.chat(messages..., tools...)这一步——很多项目里llm_client的初始化散落在react_loop.py、secure_agent.py、甚至AgentService里Key 和 Base URL 各写一份。一旦模型通道抖动response.tool_calls为空或直接抛异常_execute_tool根本没机会执行但日志里看到的却是“工具没返回”。这就是把模型调用失败误判成工具本身有问题的根源。把llm_client的初始化统一改到 TaoToken 拿 Key、填 Base URL能让 ReAct 循环里的模型层先稳定下来再去排查control_device的参数校验。二、TaoToken 前置只供 Key 和统一 Base URLTaoToken 在这个链路里的角色很明确提供 API Key 和统一的 Base URL让self.llm.chat有一个稳定的模型入口。它不参与工具执行不解析tool_calls也不碰device_id和鸿蒙分布式 KV。换句话说Agent 的编排逻辑、白名单、Pydantic 校验、超时重试全都留在你自己的SecureAgent里。前置动作只有两步去 https://taotoken.net/?utm_sourcetaotoken_aicg_blog_endutm_mediumcsdnutm_campaignrewriteutm_content 注册并创建 Key回到 Agent 侧把模型 Base URL 填https://taotoken.net/api。Key 用YOUR_API_KEY占位实际替换成你创建的那串。这样react_loop.py里的llm_client就不再依赖某个本地代理或临时地址。三、可复制配置把 llm_client 指向 TaoToken原文初始化llm_client的步骤改成从 TaoToken 拿 Key 和 Base URL。下面这段可以直接放进react_loop.py或独立的llm_client.py保持self.llm.chat的调用签名不变# llm_client.py - 统一模型通道供 ReActAgent 使用 import os from openai import OpenAI TAOTOKEN_API_KEY os.getenv(TAOTOKEN_API_KEY, YOUR_API_KEY) TAOTOKEN_BASE_URL https://taotoken.net/api def build_llm_client(): 构建模型客户端Base URL 统一指向 TaoToken return OpenAI( api_keyTAOTOKEN_API_KEY, base_urlTAOTOKEN_BASE_URL, ) # react_loop.py 中注入 # from llm_client import build_llm_client # agent ReActAgent(llm_clientbuild_llm_client(), toolsregistry._tools)如果你用的是 CLI 方式管理模型通道也可以先装再跑npm i -g taotoken/taotoken taotoken cc -k YOUR_API_KEY -u https://taotoken.net/api -m MODEL_ID注意-u后面跟的是 API 地址不带 UTM。Agent 侧仍然用build_llm_client()返回的客户端去调self.llm.chat工具注册表registry._tools和_build_tool_schemas()完全不用改。四、验证请求跑通 query_weather 和 control_device 的 tool_calls配置完成后继续用原文的验证语句“今天天气怎么样帮我调整一下家里的设备”。观察ReActAgent.run()的循环日志重点看三件事第一轮self.llm.chat返回的response.tool_calls里应该出现query_weatherfunc_args包含city和date_execute_tool执行后Observation 回填到messages。第二轮模型基于天气结果决定调control_devicetool_calls里出现device_id、action、value比如light_livingset_brightness70。第三轮如果没有新的tool_callsresponse.content作为 Final Answer 返回鸿蒙设备控制页拿到这段文本并展示。成功结果不是“模型说了什么”而是query_weather和control_device都真实出现在tool_calls里且_execute_tool返回的{success: True}被写回messages。如果只看到文本回复、没有tool_calls说明模型通道虽然通了但工具 Schema 没传对回到_build_tool_schemas()检查func._tool_schema是否存在。五、本篇常见错排查错1self.llm.chat报 401 或超时但日志显示“工具执行失败”。这是最典型的误判。先确认TAOTOKEN_API_KEY是否替换了YOUR_API_KEYBase URL 是否为https://taotoken.net/api。模型层没通时response.tool_calls根本不会产生_execute_tool也不会被调用。错2tool_calls里出现未注册的工具名。比如模型幻觉出send_email_to_boss。这跟 TaoToken 无关是白名单机制没生效。检查registry.get_tool(name)是否在_execute_tool前做了PermissionError拦截。错3control_device参数类型不一致。模型可能返回value八十而不是80。在DeviceControlParams里用 Pydantic 的preTrue校验器做中文数字转换别让类型错误伪装成设备控制失败。错4多轮推理时messages丢失tool_call_id。回填 Observation 时必须带tool_call_id否则下一轮self.llm.chat无法把工具结果和调用关联起来模型会重复调同一个工具。错5鸿蒙设备控制页拿不到返回结果。检查AgentService.processQuery是否把result.response和result.tool_calls都传回 UI。模型通道稳定后这一步通常是前端状态更新问题不是 Key 问题。六、语义一致 CTA如果你正在排障self.llm.chat的接入问题或者需要统一管理 Key 和 Base URL先去 API Keys 页面创建并核对配置再对照接入文档检查base_url和模型 IDhttps://taotoken.net/api-keys?utm_sourcetaotoken_aicg_blog_endutm_mediumcsdnutm_campaignrewriteutm_content 和 https://taotoken.net/doc?utm_sourcetaotoken_aicg_blog_endutm_mediumcsdnutm_campaignrewriteutm_content 。想先验证模型通道是否正常、tool_calls能否稳定产生可以直接在模型对话里发一条带工具描述的请求https://taotoken.net/chat?utm_sourcetaotoken_aicg_blog_endutm_mediumcsdnutm_campaignrewriteutm_content 。如果你要把这套 ReActAgent 长期跑在鸿蒙设备控制场景里多工具、多轮推理、长会话会持续消耗模型通道建议用 Coding Plan 把模型调用和 Agent 编排分开管理https://taotoken.net/coding-plan?utm_sourcetaotoken_aicg_blog_endutm_mediumcsdnutm_campaignrewriteutm_content 。拿到 Key 后先配通 Agent 的模型调用再按原文链路完成鸿蒙设备控制。
RELATED — 相关阅读

相关资讯

LATEST — 最新资讯

最新发布

TODAY — 本日精选

新闻

WEEKLY — 本周精选

新闻

MONTHLY — 本月精选

新闻