AI Agent 开发实战(八):输出 Schema 约束与结构化输出
上一篇我们用 Harness Engineering 把 LLM 的行为范围框住但还有一类问题没解决输出格式。LLM 默认吐的是自由文本而下游系统要的是 JSON、枚举、数组——格式不对整条链路就断了。今天聊输出 Schema 约束让 LLM 的输出像 API 返回值一样可预测。一、为什么需要结构化输出先看一个没有约束的 Agent 输出用户帮我查一下某市的租房补贴政策 Agent好的某市的租房补贴政策如下 1. 补贴标准本科500元/月硕士800元/月博士1200元/月 2. 申请条件需要在本区就业并缴纳社保满3个月... 3. 申请方式通过人才服务中心官网在线申请看起来没问题但对下游系统来说这是一坨文本不是数据。前端没法渲染成卡片数据库没法存入字段。我们真正想要的是{subsidy:{bachelor:500,master:800,doctor:1200},requirements:[本区就业,社保满3个月],applyUrl:https://...}结构化输出的核心价值让 LLM 的输出从文本变成数据下游可直接消费。二、结构化输出的三种策略结构化输出策略 │ ├── 1. Prompt 约束最弱 │ ├── 在 Prompt 中要求返回 JSON │ ├── 给出 JSON 示例 │ └── 问题LLM 可能不听话格式不稳定 │ ├── 2. 函数调用 / Tool Use中等 │ ├── 利用 LLM 的 function calling 能力 │ ├── 输出自然就是结构化的 │ └── 问题不是所有场景都适合伪装成工具调用 │ └── 3. 输出 Schema 约束最强 ├── 强制 LLM 按 Schema 输出 ├── 支持 JSON Schema、Pydantic、Zod 等 └── 原理引导采样过程 输出校验 自动重试策略约束强度兼容性实现复杂度典型框架Prompt 约束弱所有模型低无需框架函数调用中需模型支持中OpenAI / Spring AISchema 约束强需模型或框架支持高Instructor / Spring AI Structured三、Prompt 约束最基础的方式# 在 Prompt 中要求返回 JSONprompt请分析以下文本的情感倾向以 JSON 格式返回。 要求 - sentiment: 正面/负面/中性 - confidence: 0-1 之间的浮点数 - keywords: 关键词数组 示例输出 {sentiment: 正面, confidence: 0.85, keywords: [好, 优秀]} 待分析文本{text}问题在哪可能出现的意外输出 │ ├── 1. 输出前后多了解释文字 │ 好的分析结果如下\n{\sentiment\: ...}\n希望对你有帮助 │ ├── 2. JSON 格式不规范 │ {sentiment: 正面, confidence: 0.85, keywords: [好, 优秀],} ← 末尾多了逗号 │ ├── 3. 字段名不一致 │ {emotion: 正面, score: 0.85} ← 你要的是 sentiment它给了 emotion │ └── 4. 嵌套结构错误 {result: {sentiment: ...}} ← 多包了一层Prompt 约束的本质是请求而非要求。LLM 大部分时候会配合但你无法保证 100%。四、函数调用借力 Tool Use利用 LLM 原生的 function calling 能力让输出天生就是结构化的// Spring AI 方式BeanpublicChatClientchatClient(ChatClient.Builderbuilder){returnbuilder.build();}// 定义函数描述Description(分析文本情感返回结构化结果)publicrecordSentimentAnalysis(Description(情感倾向正面、负面、中性)Stringsentiment,Description(置信度 0-1)Doubleconfidence,Description(关键词列表)ListStringkeywords){}// 调用varresponsechatClient.prompt().user(分析这段文本的情感今天天气真好).functions(sentimentAnalysis).call().entity(SentimentAnalysis.class);函数调用的局限函数调用的局限 │ ├── 1. 语义不匹配 │ 帮我分析情感不是调用工具而是返回结果 │ 强行用 tool call 表达语义上有点别扭 │ ├── 2. 不是所有模型都支持 │ 开源模型如 Qwen、DeepSeek对 function calling 支持参差不齐 │ ├── 3. 只能返回单层结构 │ 复杂嵌套 Schema 用 function call 描述起来很别扭 │ └── 4. 一次只能调一个函数 多个输出字段需要拆成多个函数不合理五、Schema 约束终极方案5.1 核心原理Schema 约束的底层机制 │ ├── 1. Schema 转化为 Prompt 引导 │ ├── JSON Schema → 自然语言描述注入 System Prompt │ ├── 告诉 LLM 必须按以下格式输出 │ └── 相当于 Prompt 约束的工程化版本 │ ├── 2. 约束解码Constrained Decoding │ ├── 某些框架/模型支持在 token 采样时强制合法 │ ├── 例如当 Schema 要求整数采样时只允许数字 token │ ├── 效果100% 格式合规如果模型支持 │ └── 实现llama.cpp 的 GBNF 语法、Outlines 的 FSM │ └── 3. 输出校验 自动重试 ├── 解析 LLM 输出校验是否符合 Schema ├── 不符合则将错误信息拼回 Prompt 重试 └── 最多重试 N 次兜底返回错误5.2 JSON Schema 示例{type:object,properties:{subsidy:{type:object,properties:{bachelor:{type:integer,description:本科补贴元/月},master:{type:integer,description:硕士补贴元/月},doctor:{type:integer,description:博士补贴元/月}},required:[bachelor,master,doctor]},requirements:{type:array,items:{type:string},description:申请条件列表},applyUrl:{type:string,format:uri,description:申请链接}},required:[subsidy,requirements,applyUrl]}5.3 Spring AI 结构化输出Spring AI 从 1.0.0 开始支持结构化输出底层是 JSON Schema 自动映射// 定义输出结构publicrecordSubsidyInfo(JsonProperty(requiredtrue)Description(各学历补贴标准)SubsidyDetailsubsidy,Description(申请条件列表)ListStringrequirements,Description(申请链接)StringapplyUrl){}publicrecordSubsidyDetail(intbachelor,intmaster,intdoctor){}// 使用varresultchatClient.prompt().user(查询某市租房补贴政策).call().entity(SubsidyInfo.class);// ← 一行搞定Spring AI 的.entity()做了什么.entity() 内部流程 │ ├── 1. 将 SubsidyInfo.class 转换为 JSON Schema │ ├── 2. 将 Schema 注入 Prompt作为格式要求 │ ├── 3. 调用 LLM获取文本输出 │ ├── 4. 尝试将输出解析为 SubsidyInfo 对象 │ ├── 解析成功 → 返回 │ └── 解析失败 → 拼入错误信息重试 │ └── 5. 重试 N 次后仍失败 → 抛出异常六、约束解码从引导到强制Prompt 引导 重试只是软约束。真正的硬约束是约束解码Constrained Decoding。6.1 原理常规解码自由采样 │ ├── 每步从词表中采样一个 token ├── 任何 token 都可能被选中 └── 输出可能是任意文本 约束解码Constrained Decoding │ ├── 根据 Schema 构建一个有限状态机FSM或文法Grammar ├── 每步只允许生成 FSM 当前状态合法的 token ├── 例如Schema 要求整数 → 只允许 0-9 token ├── 例如Schema 要求布尔 → 只允许 true/false token └── 输出 100% 符合 Schema在模型支持的前提下6.2 实现方案对比方案语言原理支持模型接入方式OutlinesPythonFSM 约束解码本地模型Python 库llama.cpp GBNFC文法约束GGUF 模型API 参数InstructorPythonSchema 重试OpenAI 兼容 APIPython 库Spring AIJavaSchema 注入 重试任何模型Java 框架OpenAI Structured OutputsAPI约束解码GPT-4o 等API 参数6.3 OpenAI Structed Outputs 示例fromopenaiimportOpenAIfrompydanticimportBaseModelclassSubsidyDetail(BaseModel):bachelor:intmaster:intdoctor:intclassSubsidyInfo(BaseModel):subsidy:SubsidyDetail requirements:list[str]apply_url:strclientOpenAI()responseclient.beta.chat.completions.parse(modelgpt-4o,messages[{role:user,content:查询某市租房补贴政策}],response_formatSubsidyInfo,# ← 直接传 Pydantic 类)# 输出 100% 符合 SubsidyInfo 结构七、实战多层 Schema 设计真实 Agent 的输出往往不是扁平的 JSON而是多层嵌套结构。7.1 一个商机分析 Agent 的输出 SchemapublicrecordOpportunityAnalysis(Description(商机基本信息)BasicInfobasicInfo,Description(风险评估)RiskAssessmentrisk,Description(推荐动作)ListActionactions,Description(综合评分 0-100)intscore){}publicrecordBasicInfo(Description(客户行业)Stringindustry,Description(预计预算万元)doublebudget,Description(决策周期天)intdecisionCycle){}publicrecordRiskAssessment(Description(风险等级低/中/高)Stringlevel,Description(风险因素列表)ListStringfactors,Description(风险说明)Stringdescription){}publicrecordAction(Description(动作类型联系/跟进/放弃/升级)Stringtype,Description(动作描述)Stringdescription,Description(优先级 1-5)intpriority){}7.2 枚举约束// 使用枚举限制取值范围publicenumRiskLevel{LOW,MEDIUM,HIGH}publicenumActionType{CONTACT,FOLLOW_UP,ABANDON,ESCALATE}publicrecordRiskAssessment(RiskLevellevel,// ← 只能是四个值之一ListStringfactors,Stringdescription){}publicrecordAction(ActionTypetype,// ← 只能是四个值之一Stringdescription,Min(1)Max(5)intpriority// ← 限制范围){}枚举约束的效果没有枚举约束 ├── risk.level 比较危险 ← 不在预期范围内 ├── action.type 打电话 ← 下游系统无法识别 └── score 150 ← 超出 0-100 范围 有枚举约束 ├── risk.level MEDIUM ← 严格限定 ├── action.type CONTACT ← 严格限定 └── score 75 ← 范围限定八、Schema 约束的代价结构化输出不是免费的有三个关键代价8.1 推理质量下降自由输出 vs 结构化输出 │ ├── 自由输出 │ 经过分析这个商机值得跟进但预算可能需要调整 │ 建议先与客户技术负责人建立联系... │ → 表达丰富推理自然 │ └── 结构化输出 │ {score: 75, risk: {level: MEDIUM, ...}} │ → 表达受限推理被压缩进字段 │ → 某些微妙判断可能丢失缓解策略在 Schema 中加reasoning或explanation字段让 LLM 先推理再输出结构。publicrecordOpportunityAnalysis(Description(推理过程先思考再给结论)Stringreasoning,// ← 给 LLM 一个思考空间BasicInfobasicInfo,RiskAssessmentrisk,ListActionactions,intscore){}8.2 Token 消耗增加自由输出~200 tokens 结构化输出~500 tokensJSON key 语法 枚举值 增加约 2-3 倍 token 消耗8.3 延迟增加自由输出1-2 秒 结构化输出 ├── 首次调用 解析2-3 秒 ├── 重试 1 次2-3 秒 └── 重试 2 次2-3 秒 最差情况7-9 秒代价总结代价幅度缓解方式推理质量下降 5-15%加 reasoning 字段Token 消耗增加 2-3 倍精简 Schema少用嵌套延迟增加 1-3 秒限制重试次数选快速模型九、Schema 约束 vs Harness 约束互补而非替代上一篇讲的 Harness Engineering 和这篇的 Schema 约束两者互补约束体系 │ ├── Harness 约束行为层面 │ ├── 限制可用工具 │ ├── 限制执行流程 │ ├── 限制输入范围 │ └── 解决Agent 能做什么、不能做什么 │ └── Schema 约束输出层面 ├── 限制输出格式 ├── 限制字段取值 ├── 限制嵌套结构 └── 解决Agent 输出什么、怎么输出实战中的组合// Harness限制工具和流程varagentChatAgent.builder().tools(List.of(searchTool,calculatorTool))// 只允许两个工具.maxSteps(5)// 最多 5 步.build();// Schema限制输出格式varresultagent.run(分析这个商机).entity(OpportunityAnalysis.class);// 输出必须是这个结构完整约束链 │ ├── 输入约束Harness 限制可接收的用户输入范围 │ ├── 工具约束Harness 限制可用工具集 │ ├── 流程约束Harness 限制执行路径和步骤数 │ └── 输出约束Schema 限制输出格式和字段取值 ├── 格式约束必须是 JSON ├── 字段约束字段名、类型、必填 ├── 取值约束枚举、范围、正则 └── 嵌套约束对象引用、递归结构十、框架实战对比10.1 InstructorPythonimportinstructorfromopenaiimportOpenAIfrompydanticimportBaseModel clientinstructor.from_openai(OpenAI())classAnalysis(BaseModel):score:intreason:strresultclient.chat.completions.create(modelgpt-4o-mini,messages[{role:user,content:分析这段文本}],response_modelAnalysis,# ← 核心参数max_retries3,# ← 自动重试次数)特点Pydantic 定义 自动重试 流式支持Python 生态最成熟的方案。10.2 Spring AIJavavarresultchatClient.prompt().user(分析这段文本).call().entity(Analysis.class);// ← 一行搞定特点Java 生态最简洁的方案但底层是 Prompt 注入 重试非约束解码。10.3 LangChainPython/JSfromlangchain_core.output_parsersimportPydanticOutputParser parserPydanticOutputParser(pydantic_objectAnalysis)promptChatPromptTemplate.from_messages([(system,按以下格式输出\n{format_instructions}),(human,{input})])chainprompt|model|parser resultchain.invoke({input:分析这段文本,format_instructions:parser.get_format_instructions()})特点Parser 模式灵活但啰嗦适合已有 LangChain 链的项目。十一、选择建议如何选择结构化输出方案 │ ├── 场景一只需要简单字段容忍偶尔格式错误 │ └── Prompt 约束就够了 │ ├── 场景二需要稳定的 JSON 输出Python 生态 │ └── Instructor首选或 LangChain Pydantic │ ├── 场景三需要稳定的 JSON 输出Java 生态 │ └── Spring AI .entity() │ ├── 场景四需要 100% 格式保证使用 OpenAI API │ └── OpenAI Structured Outputs │ └── 场景五需要 100% 格式保证使用本地模型 └── Outlines 或 llama.cpp GBNF十二、最佳实践 Checklist#实践说明1优先用 Schema 约束而非 Prompt 约束工程化 提示词技巧2给 Schema 的每个字段加 DescriptionLLM 看到 description 才知道该填什么3枚举字段用 enum 而非 string避免 LLM 自由发挥4加 reasoning 字段保留推理质量让 LLM 先思考再结构化输出5限制重试次数建议 2-3 次避免无限重试浪费 token6监控 Schema 校验失败率失败率高说明 Schema 设计有问题7嵌套不超过 3 层太深 LLM 容易出错8Schema 和 Harness 配合使用输入约束 输出约束 完整约束9用 Min/Max 限制数值范围防止 LLM 输出离谱的数值10输出校验失败时降级为文本给用户兜底体验下一篇我们聊Grill Me 反问式规划Agent 不是应该什么都听用户的而是要学会反问——在动手之前先搞清楚需求边界、风险点和遗漏信息。这是一套让 Agent 从执行者变成协作者的关键模式。本文是 AI Agent 开发实战系列第 8 篇系列目录AI Agent 核心概念与架构三大基石之 LLM 调用与 Prompt 工程三大基石之记忆系统三大基石之工具调用Java 生态 Agent 框架横评用 Spring AI 搭建第一个 AgentHarness Engineering 与约束管理本文输出 Schema 约束与结构化输出

相关新闻

BBDown完整使用手册:让哔哩哔哩视频下载变成一行命令的事

BBDown完整使用手册:让哔哩哔哩视频下载变成一行命令的事

BBDown完整使用手册:让哔哩哔哩视频下载变成一行命令的事 【免费下载链接】BBDown Bilibili Downloader. 一个命令行式哔哩哔哩下载器. 项目地址: https://gitcode.com/gh_mirrors/bb/BBDown 周末想躺在沙发上把追了一个月的纪录片一口气看完,结果…

2026/8/21 0:44:43 阅读更多 →
一边按停自家前沿模型、一边上线青少年版:OpenAI 8月连发两条看似拧巴的新闻里的同一个焦虑

一边按停自家前沿模型、一边上线青少年版:OpenAI 8月连发两条看似拧巴的新闻里的同一个焦虑

一边按停自家前沿模型、一边上线青少年版:OpenAI 8月连发两条看似拧巴的新闻里的同一个焦虑 把"GPT-6 Astra"按暂停键的那帮人和上线"ChatGPT青少年版"的那帮人,坐在同一栋楼里办公。 8月18日,腾讯新闻、财联社、无矩AI同…

2026/8/19 22:15:36 阅读更多 →
分布式多智能体系统安全最优输出一致性:理论与工程实现

分布式多智能体系统安全最优输出一致性:理论与工程实现

1. 从“各自为战”到“协同共治”:多智能体系统安全最优输出一致性问题引述 在分布式机器人编队、智能电网协同控制、无人车集群调度这些前沿领域,我们常常面临一个核心挑战:一群独立的智能体(Agent)如何在不进行全局信…

2026/8/21 4:03:58 阅读更多 →

最新新闻

AI如何自动识别资格承诺函能替代证明材料废标风险?智能评审项目实践

AI如何自动识别资格承诺函能替代证明材料废标风险?智能评审项目实践

这里写自定义目录标题欢迎使用Ma rkdown编辑器新的改变功能快捷键合理的创建标题,有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants创建一个自定义列表如何创建一个…

2026/8/21 6:38:20 阅读更多 →
AI模型期望的享乐跑步机:如何应对用户期望的指数级增长

AI模型期望的享乐跑步机:如何应对用户期望的指数级增长

这次我们来看一个名为“模型期望的享乐跑步机”的项目。这个名字听起来有些抽象,但它指向了当前AI模型发展,特别是大语言模型(LLM)和生成式AI领域一个非常核心且现实的问题:随着模型能力的飞速提升,用户对模…

2026/8/21 6:38:20 阅读更多 →
免费AI工具在职场的高效应用:从选型到集成与风险管控

免费AI工具在职场的高效应用:从选型到集成与风险管控

1. 先搞清楚“免费版AI”在职场到底解决了什么问题如果你关注过美国职场AI的使用情况,可能会发现一个有趣的现象:很多团队和个人,尤其是初期探索阶段,大量依赖的是免费版本的AI工具。这背后反映的,不是一个简单的“省钱…

2026/8/21 6:38:20 阅读更多 →
卡车-无人机协同配送建模与优化:从VRP到混合车队路径规划

卡车-无人机协同配送建模与优化:从VRP到混合车队路径规划

1. 问题引入:当无人机飞入数学建模赛场五一数学建模联赛的B题,每年都是兵家必争之地。今年,题目把目光投向了物流配送这个既传统又充满科技感的领域,并且引入了一个关键变量:无人机。题目叫“具有无人机的物流配送问题…

2026/8/21 6:38:20 阅读更多 →
强化学习稳定性优化:群体策略与可靠性导向的ProGPO方法解析

强化学习稳定性优化:群体策略与可靠性导向的ProGPO方法解析

1. 项目概述:面向进展与可靠性的群体策略优化最近在强化学习社区里,一个挺有意思的讨论点就是“智能体强化学习”怎么才能更“稳”。我们训练一个智能体,比如让它在一个模拟厨房里完成“做一杯咖啡”的任务,它可能偶尔能成功&…

2026/8/21 6:38:20 阅读更多 →
AI面试系统核心技术解析与2026年布局趋势

AI面试系统核心技术解析与2026年布局趋势

1. 为什么2026年必须布局AI面试?最近三年,我帮47家企业部署过智能招聘系统,亲眼见证AI面试从"锦上添花"变成"不可或缺"。去年某互联网大厂HR总监告诉我:"现在筛100份简历,人工需要8小时&…

2026/8/21 6:37:20 阅读更多 →

日新闻

机场边检旅客定位系统国产化白皮书:算法、硬件、底座平台全程自主

机场边检旅客定位系统国产化白皮书:算法、硬件、底座平台全程自主

前言随着国家数字基础设施信创替代、关键技术自主可控战略持续深化,口岸智慧安防、边检智能管控领域正全面进入国产化、自主化、安全可控升级周期。当前国内机场边检旅客识别与定位体系长期依赖国外商用视觉算法、进口成像硬件、闭源通用计算平台,存在核…

2026/8/21 0:00:42 阅读更多 →
别再把“数字孪生”当空间智能了!镜像视界揭开四维时空的真正面纱

别再把“数字孪生”当空间智能了!镜像视界揭开四维时空的真正面纱

别再把“数字孪生”当空间智能了!镜像视界揭开四维时空的真正面纱当下数字化建设浪潮中,很多项目将三维可视化、视频贴图叠加的数字孪生等同于空间智能。传统数字孪生更多停留在三维场景复刻,擅长把物理世界“画出来、展示出来”,…

2026/8/21 0:00:42 阅读更多 →
105、车载温度范围-40°C到85°C的影像质量一致性——ISP参数温漂补偿与产线标定策略

105、车载温度范围-40°C到85°C的影像质量一致性——ISP参数温漂补偿与产线标定策略

105、车载温度范围-40C到85C的影像质量一致性——ISP参数温漂补偿与产线标定策略 去年冬天在北方某车厂做A样评审,凌晨四点的黑河试验场,零下三十三度。客户拿了一台冷启动的车,中控屏上倒车影像全是雪花噪点,暗部细节直接糊成一片。我第一反应是sensor温度没上来,暗电流…

2026/8/21 0:00:42 阅读更多 →

周新闻

基于阿里云与通义千问(Qwen)构建AI应用:从模型调用到生产部署的完整实践指南

基于阿里云与通义千问(Qwen)构建AI应用:从模型调用到生产部署的完整实践指南

如果你是一名开发者,最近可能已经感受到了AI大模型正在从“玩具”变成“生产力工具”的强烈信号。从代码补全到智能Agent,从本地部署到云端API,我们正处在一个技术栈快速重构的节点。然而,面对层出不穷的模型、框架和工具&#xf…

2026/8/21 3:21:33 阅读更多 →
工业通信系统底层逻辑:04 反射——高频能量撞墙之后会发生什么?

工业通信系统底层逻辑:04 反射——高频能量撞墙之后会发生什么?

第四篇:反射——高频能量撞墙之后会发生什么? —— 你以为信号已经过去了,其实它正在回来打你 老Q的现场笔记 第五季,我们正式进入工业神经系统层。这里不再是单个设备的战斗,而是整个工厂“经脉”层面的秩序之战。从这一篇开始,你将第一次看清:看似简单的信号传播,背…

2026/8/21 0:02:09 阅读更多 →
【文章复现】非线性值迭代自适应动态规划(ADP):离散时间非线性系统的策略迭代自适应动态规划算法研究附Matlab代码

【文章复现】非线性值迭代自适应动态规划(ADP):离散时间非线性系统的策略迭代自适应动态规划算法研究附Matlab代码

✅作者简介:热爱科研的Matlab仿真开发者,擅长毕业设计辅导、数学建模、数据处理、建模仿真、程序设计、完整代码获取、论文复现及科研仿真。🍎 往期回顾关注个人主页:Matlab科研工作室👇 关注我领取海量matlab电子书和…

2026/8/21 6:07:56 阅读更多 →

月新闻

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南 【免费下载链接】BaiduNetdiskPlugin-macOS For macOS.百度网盘 破解SVIP、下载速度限制~ 项目地址: https://gitcode.com/gh_mirrors/ba/BaiduNetdiskPlugin-macOS 还在为百度网盘macOS版的龟速下…

2026/8/20 6:11:08 阅读更多 →
终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换

终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换

终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换 【免费下载链接】ncmdump 项目地址: https://gitcode.com/gh_mirrors/ncmd/ncmdump 还在为网易云音乐下载的NCM格式文件无法在其他播放器播放而烦恼吗?ncmdump解密工具帮你轻松解决这个困…

2026/8/20 21:46:49 阅读更多 →
HarmonyOS 应用开发《掌上英语》第81篇: 智能体卡片:为英语学习 App 打造桌面级学习助手

HarmonyOS 应用开发《掌上英语》第81篇: 智能体卡片:为英语学习 App 打造桌面级学习助手

AgentCard 智能体卡片:为英语学习 App 打造桌面级学习助手适用平台:HarmonyOS 7.0 (API 26 Beta)一、引言 HarmonyOS 7.0(API 26 Beta)新增了 AgentCard 智能体卡片能力,这是继 HMAF(鸿蒙智能体框架&#x…

2026/8/21 0:14:22 阅读更多 →