文章目录
P.S. 目前国内还是很缺AI人才的,希望更多人能真正加入到AI行业,共同促进行业进步,增强我国的AI竞争力。想要系统学习AI知识的朋友可以看看我精心打磨的教程 http://blog.csdn.net/jiangjunshow,教程通俗易懂,高中生都能看懂,还有各种段子风趣幽默,从深度学习基础原理到各领域实战应用都有讲解,我22年的AI积累全在里面了。注意,教程仅限真正想入门AI的朋友,否则看看零散的博文就够了。
前言
做鸿蒙端AI智能体开发的兄弟,大概率都踩过同一个大坑,今天掰开揉碎跟大家唠唠我实操落地的一套方案。
一、先吐槽传统写死工具模式有多反人类
咱先代入一下日常开发场景,后端加个新工具,前端开发直接原地emo。
后端:我新增了个接口巡检工具http_check,上线了。
鸿蒙前端:收到,我去ArkUI页面硬编码加个按钮,写死参数、写死风险提示。
过两天后端改描述、升级风险等级,前端又要拉分支改代码,一套流程走下来,改个小功能比写业务逻辑还费时间。
说真的,这种耦合写法,跟每次上新菜都要重新焊一遍菜单牌子有啥区别?饭店老板都知道打印一张新菜单就行,咱们写代码反而倒退了。
更头疼的隐性问题:端侧完全不了解工具规则。工具要传什么参数、调用会不会删数据、需不需要用户确认,全靠前后端口头同步,传话必出错,线上事故全是这么攒出来的。
我的解决思路很直白:在本机Agent Gateway统一维护一份动态能力注册表,鸿蒙端页面全部动态读取,不写死任何工具按钮。
二、注册表核心:一套两端都能读懂的标准化说明
2.1 注册表到底存了哪些关键信息?
普通接口文档只告诉你地址,注册表直接把工具完整约束写全,每个工具固定携带这几个字段:名称、功能描述、入参规则、风险等级、是否需要用户确认。
拿接口巡检工具举个直观例子:
{
"name": "http_check",
"description": "检查HTTP地址连通性,发布前做接口巡检",
"riskLevel": "medium",
"needConfirm": true,
"inputSchema": {
"required": ["url"]
}
}
这几个字段相当于给每个工具办了身份证。riskLevel是危险分级,needConfirm是访问门槛,inputSchema是入场安检。
模型调用工具也被锁死范围,只能从注册表清单里挑选,想凭空捏造不存在的工具?门都没有,相当于网吧上网必须出示身份证,无证人员直接拦在门外。
2.2 Gateway统一收口,密钥隔离更安全
所有AI模型密钥只存在Gateway环境变量,鸿蒙端不会接触任何敏感凭证,只单纯请求网关的/tools接口拉取工具清单。
不用前端猜后端新增了什么能力,一切规则由注册表统一下发,天然消除信息差。
三、五层安全拦截,把工具调用风险焊死
3.1 第一层:低风险工具放行,但全程留痕
time_now查询当前时间、local_status读取设备状态,属于纯只读操作,不会修改任何数据,定义为低风险工具,允许直接执行。
每次调用自动生成唯一requestId,终端、页面、网关日志三端统一标识。
别觉得只读工具就不用记日志,上次排查线上报错,两个操作时间只差3秒,没唯一ID根本分不清是谁触发的,蹲机房查了俩小时日志,加班到深夜,谁遭谁知道。
requestId就是每一次调用的快递单号,出问题直接溯源,不用对着时间盲猜。
划重点:低风险≠跳过校验,网关依旧会校验工具合法性、参数合规性,页面按钮只是交互入口,真正的安全防线永远在服务端。
3.2 第二层:不存在的工具,直接一刀切拒绝
故意调用完全没注册的删除工具delete_everything,网关直接返回TOOL_NOT_FOUND,不做模糊匹配,不丢给模型自由发挥。
很多智能体系统翻车,就是模型脑补出不存在的工具,后端兜底执行,轻则删数据,重则泄露整机信息。
注册表相当于游乐园准入白名单,名单里没有的项目,不管游客怎么嚷嚷,都不让进,杜绝模型“自作主张”闯祸。
3.3 第三层:服务端强制参数校验,杜绝前端绕过漏洞
检索工具note_search强制要求传入query查询参数,不传直接返回ARGUMENT_MISSING报错,补齐参数才能正常运行。
千万别把参数校验只写在ArkUI页面里,前端限制全是纸老虎。懂点调试的用户抓包改请求,轻轻松松绕过页面校验直打网关,数据安全直接裸奔。
服务端统一校验相当于小区大门闸机,单元楼门禁再好,大门没安检等于形同虚设。
3.4 第四层:鸿蒙端动态渲染控制台,自动区分工具状态
页面抛弃硬编码工具数组,核心方法loadTools()请求/tools接口,将返回工具列表存入状态变量,循环渲染列表。
控制台自带统计面板:工具总数、可直接执行数量、需确认工具数量,全部通过注册表数据实时计算,没有一个写死常量。
页面自动划分三类工具展示:
- 低风险无需确认:可直接点击执行
- 普通低风险:只读锁定,暂不开放
- 中高风险:锁定状态,强制确认流程
以前新增工具,前端要改数组、加统计数字、写单独UI逻辑,现在后端注册表更新,页面刷新自动适配,改代码的工作量直接砍到零。
好比外卖商家上新菜品,只需要更新后台菜单库,用户小程序自动刷新,不用程序员每次上新改前端代码。
3.5 第五层:端侧额外白名单,保守兜底不抢跑
哪怕注册表标记7个低风险工具,页面依旧只开放经过完整验证的time_now、local_status,其余低风险工具统一展示为只读。
canRun(tool: ToolItem): boolean {
return !tool.needConfirm && (tool.name === 'time_now' || tool.name === 'local_status')
}
风险等级只是后端给出的参考建议,端侧再加一层管控,宁可少开放工具,绝不提前放行未验证功能。
跟奶茶店新品试饮一个道理,后厨觉得配方没问题,前厅还是只给内测顾客试喝,不直接全店上架,稳字当头。
四、执行闭环:结果统一面板展示,交互丝滑不跳转
点击工具执行按钮,页面拼接带时间戳的requestId,调用/tools/call接口发起请求,底部固定区域展示完整返回JSON,页面不弹窗、不跳转。
time_now返回简短时间信息,适合快速验证流程;local_status返回磁盘占用、系统架构等整机数据,用来校验设备读取能力。
之前做的版本每次执行工具新开弹窗,切换页面之后找不到历史结果,用户反馈找执行记录比查聊天记录还麻烦。
统一面板相当于收银台小票打印区,每一笔操作结果都留在原地,随时对照查看。
五、最终落地价值:彻底固化能力边界,降低迭代成本
整套注册表方案落地后,整套系统的能力边界彻底清晰:
- 模型调用范围被白名单锁死,无法调用未注册工具
- 参数统一由服务端schema校验,不存在绕过漏洞
- 风险分级、确认规则标准化,前后端认知统一
- 新增、修改工具仅更新注册表,鸿蒙端无需改动ArkTS代码
没做注册表之前,后端加一个工具,前后端各改一次代码,迭代效率对半砍;现在只改一份注册表配置,一处修改全端生效。
从“前后端双向同步改代码”变成“单配置文件统一管控”,相当于以前出门办事跑两个部门,现在一站式窗口搞定,开发幸福感直接拉满。
这套自研注册表不需要复杂发布流程,轻量化部署在本机Gateway,补齐了AI工具开发最容易忽略的标准化、安全、迭代问题,做鸿蒙端Agent开发的朋友可以直接落地复用。
P.S. 目前国内还是很缺AI人才的,希望更多人能真正加入到AI行业,共同促进行业进步,增强我国的AI竞争力。想要系统学习AI知识的朋友可以看看我精心打磨的教程 http://blog.csdn.net/jiangjunshow,教程通俗易懂,高中生都能看懂,还有各种段子风趣幽默,从深度学习基础原理到各领域实战应用都有讲解,我22年的AI积累全在里面了。注意,教程仅限真正想入门AI的朋友,否则看看零散的博文就够了
839

被折叠的 条评论
为什么被折叠?



