实战:用LangGraph实现“任务拆解→分步执行→结果校验“闭环
算销量增长率为什么要用图把任务拆成检索、计算、校验三个节点用条件边让校验失败的流程自动回头重查。附已实跑验证的完整代码与真实日志。§1 问题背景为什么一个函数写不完销量增长率分析「手机X 的 2024Q2 销量环比增长率」第一版我用一个函数就写完了。跑第一次就翻车数据查回来缺了上季基数增长率算成 None。然后呢函数没有回头路。这种活至少会以三种方式翻车数据查错或缺失RAG 返回的销量数据缺字段算不出数算出来离谱上季基数缺失导致除零增长率越界结果不可信没有校验错误答案直接交付单函数是直通管道数据错一次答案就错到底。更麻烦的是流程问题错误答案看起来有模有样交付就是事故。要救回来流程得能回头。查错了重查算错了重算校验不过不交付。这就是本文要搭的闭环任务拆解分步执行结果校验。三个环节各司其职缺一个都不闭环。§2 节点把任务拆成可独立重试的三个单元LangGraph 把流程拆成离散节点。节点就是做一件具体事的函数里面可以放 LLM也可以只是普通代码。节点之间不直接调用只通过共享 State 协作官方一句话概括nodes do the work, edges tell what to do next。整个图只有两种元素框和箭头框是节点箭头是边。先把闭环拆成三个节点检索查数据计算算增长率校验判合理性。这层隔离是能独立重试的前提retrieve 重跑一次不会把 compute 的脏中间结果带进来。三个节点函数如下def retrieve(state: SalesState) - dict: attempts state[attempts] 1 # 节点内读改写自增计数 data mock_rag(state[product], attempts) msg f[检索] 第{attempts}次调用RAG拿到销量数据: {data} print(msg) return {sales_data: data, attempts: attempts, trace: [msg]} def compute(state: SalesState) - dict: d state[sales_data] # 只读别人写好的字段 if d.get(previous) in (None, 0): msg [计算] 上季基数缺失无法计算增长率growth_rateNone print(msg) return {growth_rate: None, trace: [msg]} rate (d[current] - d[previous]) / d[previous] msg f[计算] 增长率 ({d[current]} - {d[previous]}) / {d[previous]} {rate:.2%} print(msg) return {growth_rate: rate, trace: [msg]} def validate(state: SalesState) - dict: rate state[growth_rate] attempts state[attempts] if rate is None or rate -1.0 or rate 5.0: if attempts 2 and rate is not None: # 重试上限兜底防死循环 msg f[校验] 第{attempts}次仍不通过({rate:.2%})已达重试上限强制放行并告警 print(msg) return {validation: valid, trace: [msg]} msg f[校验] 增长率 {rate} 不合理(缺失或越界)判 invalid → 回检索重试 print(msg) return {validation: invalid, trace: [msg]} msg f[校验] 增长率 {rate:.2%} 合理判 valid → 输出结果 print(msg) return {validation: valid, trace: [msg]}图上的每个框对应代码里的一个函数。retrieve 写 sales_data 和 attemptscompute 读 sales_data 写 growth_ratevalidate 读 growth_rate 写 validation。字段交接就是数据流。compute 拿到脏数据不自己回头只把 growth_rate 写成 None把判断权交给校验。节点不越权才能被独立替换、独立重试。§3 State节点间的共享状态设计State 是所有节点共享的状态容器一个 TypedDict所有跨节点的数据都从这里过。官方给了两条设计原则要跨步骤保留的才进 State能从别处推导的不存。存原始数据不存格式化文本格式化在节点内做。本例的读写规则如下字段类型写入节点读取节点questionstr输入数据检索sales_datadict数据检索计算、校验growth_ratefloat计算校验validationstr校验条件边(router)attemptsint数据检索(自增)校验(限流)final_answerstrEND 前汇总—代码里的 TypedDict 长这样class SalesState(TypedDict): question: str # 原始问题输入数据检索节点读 product: str # 目标产品 sales_data: dict # 销量数据数据检索写计算/校验读 growth_rate: float # 增长率计算写校验读 validation: str # valid/invalid校验写条件边读 attempts: int # 检索/重试计数检索自增限流防死循环 trace: Annotated[list[str], add] # 状态流转日志累加 reducer表里的读写规则与 TypedDict 一一对应真实代码比表多一个 product 字段检索节点实际用产品名查库少一个 final_answer 汇总字段最小实现里 END 直接收尾不单独汇总。字段交接即数据流。State 的合并规则三条就能说清默认 reducer 是覆盖节点返回什么字段就变成什么attempts 在节点内读改写返回 attempts 1不引入额外 reducertrace 用 Annotated[list[str], add] 累加每步日志追加进列表历史不丢为什么不存格式化文本增长率永远从 sales_data 现算不单独存格式化字符串。存了格式化文本数据一变就得同步改两处。State 只放真相不放展示层。§4 条件边用校验结果驱动重试回环普通边是 A 永远去 B。条件边不同一个路由函数读当前 State返回目标节点名可以配一张映射字典。条件边挂在校验节点之后因为 validation 由校验产出。为什么不挂计算节点因为 validation 还没写出来路由函数没东西可读。route_after_validate 读 state[“validation”]valid 去 ENDinvalid 回 retrieve 重查。灵魂代码只有三行def route_after_validate(state: SalesState) - str: # 路由函数读当前 State返回目标节点名 return state[validation] builder.add_conditional_edges( validate, # 条件边挂在校验节点之后 route_after_validate, # 路由函数读 validation 字段 {valid: END, invalid: retrieve}, # valid 结束invalid 回检索重试 )add_conditional_edges 的第三个参数是映射表。路由函数的返回值是键映射表告诉引擎该去哪。不传映射表返回值直接当节点名。返回值与节点名解耦想改去向只动映射表。防死循环有双保险节点内 attempts 上限超过 2 次强制放行并告警graph 级 recursion_limit默认 1000 步超出抛 GraphRecursionErrorrecursion_limit 是全局护栏attempts 是局部护栏两层都设脏数据拖不垮流程。生产环境可以把 recursion_limit 调小让失败来得快一点。共享状态里的 validation 字段加上条件边就是 agent 的纠错能力。§5 代码实现完整闭环与真实运行日志把节点、State、条件边三块拼起来就是下面的完整闭环。核心盯住 validation它是整条闭环的方向盘写在 State 里条件边只读它决定去向。如何跑安装依赖pip install langgraph。mock RAG 是本地销量库不依赖外部 API、密钥。换真实 RAG 时只替换 mock_rag 一个函数把上面代码原样存成 closed_loop.py运行python closed_loop.py预期输出首轮脏数据 → invalid → 回检索 → 二轮正确 → valid → END退出码 0完整代码langgraph 1.2.10 下实跑验证退出码 0 实战闭环用 LangGraph 实现 任务拆解 → 分步执行 → 结果校验 的最小闭环 场景分析某产品季度销量增长率 数据流检索(RAG) → 计算增长率 → 校验合理性 → 不合法则回检索重试 依赖pip install langgraph 说明本例用 mock 本地销量库模拟 RAG无需外部 API / 密钥可直接复现。 第一次检索故意返回脏数据(缺上季基数)以演示闭环自愈重试后返回正确数据。 from typing import TypedDict, Annotated from operator import add from langgraph.graph import StateGraph, START, END import json # ---------- 1. State 设计共享内存各节点只通过它协作---------- class SalesState(TypedDict): question: str # 原始问题输入数据检索节点读 product: str # 目标产品 sales_data: dict # 销量数据数据检索节点写计算/校验读 growth_rate: float # 增长率计算节点写校验节点读 validation: str # 校验结果 valid/invalid校验节点写条件边读 attempts: int # 检索/重试计数数据检索节点自增限流防死循环 trace: Annotated[list[str], add] # 状态流转日志累加 reducer观察每一步 # mock RAG本地销量库。第一次(attempt1)返回脏数据缺上季基数 # 重试(attempt2)返回正确数据以演示闭环自愈。 SALES_DB {手机X: {2024Q1: 1200, 2024Q2: 1500}} # 本季1500, 上季1200 → 增长率25% def mock_rag(product: str, attempts: int) - dict: if attempts 1: # 第一次查脏数据只拿到本季上季缺失 return {product: product, current: SALES_DB[product][2024Q2], previous: None} # 重试后正确数据 return { product: product, current: SALES_DB[product][2024Q2], previous: SALES_DB[product][2024Q1], } # ---------- 2. 三个节点 ---------- def retrieve(state: SalesState) - dict: attempts state[attempts] 1 data mock_rag(state[product], attempts) msg f[检索] 第{attempts}次调用RAG拿到销量数据: {data} print(msg) return {sales_data: data, attempts: attempts, trace: [msg]} def compute(state: SalesState) - dict: d state[sales_data] if d.get(previous) in (None, 0): # 上季基数缺失 → 无法计算增长率记 None交给校验节点判无效 msg [计算] 上季基数缺失无法计算增长率growth_rateNone print(msg) return {growth_rate: None, trace: [msg]} rate (d[current] - d[previous]) / d[previous] msg f[计算] 增长率 ({d[current]} - {d[previous]}) / {d[previous]} {rate:.2%} print(msg) return {growth_rate: rate, trace: [msg]} def validate(state: SalesState) - dict: rate state[growth_rate] attempts state[attempts] # 校验规则增长率必须可计算且在合理区间 [-100%, 500%] if rate is None or rate -1.0 or rate 5.0: # 超过 2 次仍不通过则强制放行并告警防死循环兜底 if attempts 2 and rate is not None: msg f[校验] 第{attempts}次仍不通过({rate:.2%})已达重试上限强制放行并告警 print(msg) return {validation: valid, trace: [msg]} msg f[校验] 增长率 {rate} 不合理(缺失或越界)判 invalid → 回检索重试 print(msg) return {validation: invalid, trace: [msg]} msg f[校验] 增长率 {rate:.2%} 合理判 valid → 输出结果 print(msg) return {validation: valid, trace: [msg]} # ---------- 3. 条件边用 validation 驱动闭环 ---------- def route_after_validate(state: SalesState) - str: # 返回 valid / invalid由下方映射决定去向 return state[validation] # ---------- 4. 组装图 ---------- builder StateGraph(SalesState) builder.add_node(retrieve, retrieve) builder.add_node(compute, compute) builder.add_node(validate, validate) builder.add_edge(START, retrieve) builder.add_edge(retrieve, compute) builder.add_edge(compute, validate) # 校验节点之后挂条件边valid→END(输出)invalid→回 retrieve(重试) builder.add_conditional_edges(validate, route_after_validate, {valid: END, invalid: retrieve}) graph builder.compile() # ---------- 5. 运行 ---------- if __name__ __main__: init { question: 分析手机X的2024Q2销量环比增长率, product: 手机X, attempts: 0, } print( 初始状态 ) print(json.dumps({k: v for k, v in init.items()}, ensure_asciiFalse)) print( 运行stream_modevalues 观察每一步 State 快照) for step in graph.stream(init, {recursion_limit: 10}, stream_modevalues): print(--- State 快照 ---) print(json.dumps(step, ensure_asciiFalse)) print( 运行结束 ) final graph.invoke(init, {recursion_limit: 10}) print(最终增长率:, final.get(growth_rate))真实运行日志主编实跑留底中间快照省略重复字段。stream_modevalues 会把每一步 State 快照打出来这是观察图流转的标准姿势照着自己跑一遍应该逐行一致[检索] 第1次调用RAG拿到销量数据: {product: 手机X, current: 1500, previous: None} [计算] 上季基数缺失无法计算增长率growth_rateNone [校验] 增长率 None 不合理(缺失或越界)判 invalid → 回检索重试 --- State 快照 --- {..., growth_rate: null, validation: invalid, attempts: 1, trace: [...]} [检索] 第2次调用RAG拿到销量数据: {product: 手机X, current: 1500, previous: 1200} [计算] 增长率 (1500 - 1200) / 1200 25.00% [校验] 增长率 25.00% 合理判 valid → 输出结果 --- State 快照 --- {..., growth_rate: 0.25, validation: valid, attempts: 2, trace: [...]} 最终增长率: 0.25读日志看闭环怎么自愈第一次循环脏数据缺 previouscompute 写 growth_rateNone校验判 invalid条件边指回 retrieve第二次循环数据到位算出 0.25判 valid流向 ENDattempts 从 1 变 2validation 从 invalid 变 valid就是一次自愈的全过程。mock_rag 的 attempts1 分支是故意的故障注入先喂一次脏数据验证闭环真会自愈。这种注入测试比读文档管用。§6 原理与边界三类错误来源与适用场景6.1 三类错误从哪来这套拆解思路有出处。Plan-and-Solve 论文指出Zero-shot-CoT 的推理结果有三类错误计算错误、缺失步骤、语义误解。解法是先把大任务 plan 成子任务再按序 solve。论文在 GPT-3 上评测十个数据集Plan-and-Solve 全面超过 Zero-shot-CoT在数学推理任务上与 8-shot CoT 相当。Despite the success of Zero-shot-CoT, it still suffers from three pitfalls: calculation errors, missing-step errors, semantic misunderstanding errors.—— Plan-and-Solve PromptingarXiv:2305.04091论文提的三类错误对应到本文是三处拦截计算错误 → 计算节点先判基数缺失就不硬算缺失步骤 → 校验判 invalid强制回检索补齐语义误解 → 校验的合理区间拦下越界值LangChain 官方博客把同一思想做成 plan-and-execute 架构planner 拆计划executor 按计划执行。ReAct 每走一步都要调一次大模型plan-and-execute 只在拆计划和收尾时调ReAct 一次只规划一个子问题plan-and-execute 先想清楚整条路径executor 执行完planner 再被叫回来决定收尾还是改计划。校验节点 三类错误的兜底拦截器。数据不对就重查算错就重算不让错误答案直接交付。6.2 什么时候别用图反过来也要知道边界一次函数能算完的事别上图。图的收益来自「要回头重试」的场景自检有代价。官方明说 reflection 耗时长低延迟应用不合适适合质量优先的知识密集任务更重的兜底interrupt 人机回环、checkpointer 持久化、多智能体留待下篇判断标准就一条流程里有没有「要回头」的决策点。没有就别上图的复杂度。数据质量越差、越需要自检的任务图的收益越大。§7 小结拆解、执行、校验的三段式条件边加共享状态等于让 agent 拥有纠错能力。全文可归结为一个三段式任务拆解 → 三个节点retrieve / compute / validate分步执行 → State 字段交接sales_data → growth_rate → validation结果校验 → 条件边回环invalid 回 retrievevalid 到 END学AI大模型的正确顺序千万不要搞错了2026年AI风口已来各行各业的AI渗透肉眼可见超多公司要么转型做AI相关产品要么高薪挖AI技术人才机遇直接摆在眼前有往AI方向发展或者本身有后端编程基础的朋友直接冲AI大模型应用开发转岗超合适就算暂时不打算转岗了解大模型、RAG、Prompt、Agent这些热门概念能上手做简单项目也绝对是求职加分王给大家整理了超全最新的AI大模型应用开发学习清单和资料手把手帮你快速入门学习路线:✅大模型基础认知—大模型核心原理、发展历程、主流模型GPT、文心一言等特点解析✅核心技术模块—RAG检索增强生成、Prompt工程实战、Agent智能体开发逻辑✅开发基础能力—Python进阶、API接口调用、大模型开发框架LangChain等实操✅应用场景开发—智能问答系统、企业知识库、AIGC内容生成工具、行业定制化大模型应用✅项目落地流程—需求拆解、技术选型、模型调优、测试上线、运维迭代✅面试求职冲刺—岗位JD解析、简历AI项目包装、高频面试题汇总、模拟面经以上6大模块看似清晰好上手实则每个部分都有扎实的核心内容需要吃透我把大模型的学习全流程已经整理好了抓住AI时代风口轻松解锁职业新可能希望大家都能把握机遇实现薪资/职业跃迁这份完整版的大模型 AI 学习资料已经上传CSDN朋友们如果需要可以微信扫描下方CSDN官方认证二维码免费领取【保证100%免费】

相关新闻

亚马逊运营高效工具链与实战资源全解析

亚马逊运营高效工具链与实战资源全解析

1. 亚马逊运营资源全解析:从入门到精通的必备工具箱做亚马逊运营这些年,我收集整理了大量实用资源,今天把这些压箱底的干货一次性分享给大家。这份资源合集不是简单的链接堆砌,而是经过实战验证、能真正提升运营效率的工具和方法论…

2026/8/5 1:55:52 阅读更多 →
千牛客服系统:夜间全自动客服,3分钟内回复率100%

千牛客服系统:夜间全自动客服,3分钟内回复率100%

千牛客服系统:夜间全自动客服,3分钟内回复率100% 电商这行没有护城河,唯一壁垒就是自动化程度。千牛的自动回复与客服,是店群运营中最耗人力也最容易出错的环节。 店群客服是纯人力消耗战。一个店日均50条咨询,20个店…

2026/8/5 1:55:52 阅读更多 →
PyQt5 UI自适应与缩放:从布局管理到高DPI支持的完整实现方案

PyQt5 UI自适应与缩放:从布局管理到高DPI支持的完整实现方案

1. 项目概述:为什么UI自适应与缩放是PyQt5开发的必修课在桌面应用开发领域,尤其是使用PyQt5这类成熟框架时,开发者常常会遇到一个看似基础却极易被忽视的挑战:如何让精心设计的用户界面(UI)在不同尺寸、不同…

2026/8/5 1:55:52 阅读更多 →

最新新闻

Docker存储卷核心原理与生产环境实践指南

Docker存储卷核心原理与生产环境实践指南

1. Docker存储卷的本质与核心价值当我们在本地开发环境运行一个MySQL容器时,所有数据默认存储在容器内部的可写层。这个设计带来了两个致命问题:一是容器删除后数据随之丢失,二是数据无法在宿主机和容器间共享。这正是Docker存储卷(Volume)要…

2026/8/5 2:41:12 阅读更多 →
Kimi Code CLI:Windows与WSL2下的AI编程助手命令行工具

Kimi Code CLI:Windows与WSL2下的AI编程助手命令行工具

1. 项目概述Kimi Code CLI 是一款面向开发者的命令行工具,它允许用户直接在终端环境中与 Kimi Code 的 AI 编程助手进行交互。这个工具特别适合需要在 Windows 系统(包括 WSL2 环境)下进行快速代码生成、调试和优化的开发者。我最近在自己的 …

2026/8/5 2:41:12 阅读更多 →
技术实践分享:novel-downloader如何解决网络小说保存难题

技术实践分享:novel-downloader如何解决网络小说保存难题

技术实践分享:novel-downloader如何解决网络小说保存难题 【免费下载链接】novel-downloader 一个可扩展的通用型小说下载器。 项目地址: https://gitcode.com/gh_mirrors/no/novel-downloader 在数字阅读时代,我们经常面临一个令人沮丧的问题&am…

2026/8/5 2:41:12 阅读更多 →
中国海警南海执法现场分析:警告用语、法律依据与媒体记录视角

中国海警南海执法现场分析:警告用语、法律依据与媒体记录视角

这次我们来看一个关于中国海警在南海执法的现场记录视频。这个视频由CNN记者克瓦莱里奥(Valerio)在菲律宾船只上拍摄,全程记录了中国海警船对菲方船只进行警告和驱离的过程。视频的核心看点在于中国海警的执法流程、专业用语以及现场态势&…

2026/8/5 2:40:11 阅读更多 →
TicWatch Pro刷入国际版Wear OS固件:解锁完整智能手表体验

TicWatch Pro刷入国际版Wear OS固件:解锁完整智能手表体验

1. 项目缘起:为什么要在2020年折腾一块“老”手表?如果你手上有一块2018年发布的TicWatch Pro,到了2020年,可能会和我有一样的感受:原生的Wear OS by Google(当时还叫Wear OS)系统,在…

2026/8/5 2:40:11 阅读更多 →
Unity脚本开发入门:从MonoBehaviour到实战游戏制作

Unity脚本开发入门:从MonoBehaviour到实战游戏制作

1. 项目概述:为什么Unity脚本是游戏开发的灵魂如果你刚接触Unity,可能会被它强大的编辑器界面和丰富的资源商店所吸引,觉得拖拖拽拽就能做出游戏。但当你真正想实现一个“按下空格键让角色跳跃”或者“碰到金币分数增加”这样的功能时&#x…

2026/8/5 2:40:11 阅读更多 →

日新闻

Java缓存框架:JetCache

Java缓存框架:JetCache

TOC 一、简介 JetCache 是一个 Java 缓存抽象框架,为不同的缓存解决方案提供了统一的使用方式。 它提供的注解比 Spring Cache 更加强大。 JetCache 的注解支持原生 TTL、两级缓存以及在分布式环境中的自动刷新功能,同时你也可以通过代码直接操作 Cach…

2026/8/5 0:00:43 阅读更多 →
AD 铺铜设置十字连接,过孔全连接,新版AD的简单设置

AD 铺铜设置十字连接,过孔全连接,新版AD的简单设置

需求:通孔焊盘 十字花;过孔 Via 实心直连;贴片焊盘按需设置 AD 测试版本AD24 很多工程师踩坑:全部统一十字,导致接地过孔阻抗高、大电流发热! 一、快捷键打开规则 PCB 界面按下:D R 展开…

2026/8/5 0:00:43 阅读更多 →
AI素描转换技术深度拆解(2024最新论文+工业级落地代码):从Stable Diffusion ControlNet到LoRA微调全链路解析

AI素描转换技术深度拆解(2024最新论文+工业级落地代码):从Stable Diffusion ControlNet到LoRA微调全链路解析

更多请点击: https://kaifayun.com 第一章:AI生成素描效果 AI生成素描效果是计算机视觉与风格迁移技术融合的典型应用,其核心在于将彩色照片或RGB图像转换为具有手绘质感、明暗对比强烈、边缘清晰的单色素描图像。该过程通常依赖于深度学习模…

2026/8/5 0:00:43 阅读更多 →

周新闻

最大流算法详解:从水管网络到Ford-Fulkerson与Dinic实战

最大流算法详解:从水管网络到Ford-Fulkerson与Dinic实战

1. 从水管网络到最大流:一个核心问题的诞生想象一下,你是一个城市供水系统的总工程师。你的城市有多个水源(水库),需要通过一个复杂的地下管道网络,将水输送到各个居民区。每条管道都有其最大通水能力&…

2026/8/4 13:24:41 阅读更多 →
基于Springboot的企业门户网站(源码+LW+调试文档+讲解)

基于Springboot的企业门户网站(源码+LW+调试文档+讲解)

温馨提示:本人主页置顶文章(点我)开头有 CSDN 平台官方提供的学长联系方式的名片! 温馨提示:本人主页置顶文章(点我)开头有 CSDN 平台官方提供的学长联系方式的名片! 温馨提示:本人主页置顶文章(点我)开头有 CSDN 平台…

2026/8/4 11:41:39 阅读更多 →
MATLAB xcorr函数详解:从互相关原理到四大实战应用

MATLAB xcorr函数详解:从互相关原理到四大实战应用

1. 从一次信号“找茬”说起:为什么我们需要互相关几年前,我在处理一组声学传感器数据时遇到了一个棘手的问题。我有两个麦克风记录了一段相同的音频信号,理论上它们接收到的声音波形应该非常相似,只是由于麦克风位置不同&#xff…

2026/8/4 5:26:40 阅读更多 →

月新闻

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

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

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

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

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

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

2026/8/4 11:09:16 阅读更多 →
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/4 13:38:40 阅读更多 →