
1. “agent-skills”不是新名词而是能力建模的临界点“agent-skills”这个词乍看像某个开源库的包名、某次技术分享的副标题或是某份招聘JD里被加粗的模糊要求。但如果你最近半年深度参与过至少两个中等复杂度的智能体Agent开发项目——比如一个能自动拆解用户模糊需求、调用3类外部API、在失败时主动回溯重试的客服辅助系统又或者一个需协调5个异构工具链、动态评估执行路径可信度的内部运营提效Bot——你大概率已经在代码注释、设计文档甚至团队白板上反复写过这个词agent_skills。它不指代某个具体框架也不是LLM厂商推出的官方能力集而是一套正在快速收敛的工程化共识当智能体不再满足于“能调用工具”而是必须“知道何时调用、为何调用、调用失败后如何重构意图”它的能力就必须被显式建模、可验证、可组合、可演进。这正是agent-skills的真实分量。我最早在某高校实验室的模拟项目X中接触这个概念。当时团队试图让一个基于LLM的科研助手自主完成文献综述初稿它需要先检索数据库、再筛选高相关论文、提取方法论段落、最后按逻辑链组织成文。初期版本总在第二步卡死——模型反复生成看似合理但实际不存在的DOI或对“高相关”的判断完全偏离领域常识。我们花了三周时间调试提示词效果甚微。直到把整个流程拆解为原子能力单元search_papers_by_keyword带学术数据库字段约束、filter_by_citation_threshold硬性阈值领域关键词白名单、extract_methodology_section基于Section标题正则语义相似度双校验……每个单元独立测试、标注失败模式、定义输入/输出契约。这时“skills”才从抽象描述落地为可调试、可替换、可灰度发布的代码模块。这不是语法糖是工程复杂度跃升后的必然抽象。提示别被“skill”这个词的轻量感误导。一个生产级agent-skill的交付标准往往比一个传统微服务更严苛——它必须同时满足① 输入容错能处理LLM生成的非结构化、含歧义、带幻觉的参数② 执行鲁棒性网络抖动、API限流、返回格式漂移时有降级策略③ 输出可验证结果需附带置信度分数、溯源路径、原始响应快照④ 调用上下文感知同一技能在不同对话阶段应触发不同行为。这四条缺一不可。当前行业对agent-skills的认知存在明显断层。前端开发者可能认为它只是“给函数加个description字符串”后端工程师则容易陷入过度设计陷阱试图用Kubernetes编排每个技能的生命周期。真实场景中最有效的实践恰恰在中间地带用轻量契约定义能力边界用可观测性代替强一致性用组合编排替代单点优化。接下来我会以一个真实复现过的电商客服Agent为例逐层拆解这套能力建模体系是如何从概念走向可运行代码的——不讲理论只呈现那些在凌晨三点debug时真正救命的细节。2. 技能契约为什么90%的Agent失败始于第一行函数签名在模拟项目X的电商客服Agent中我们定义的第一个技能是resolve_return_request。表面看它只需接收用户ID和订单号返回处理状态。但实际部署后日志显示该技能在23%的调用中抛出KeyError: order_id。排查发现LLM生成的参数字典里有时是{order_id: ORD-789}有时是{orderNumber: ORD-789}甚至出现{id: ORD-789, user: U-123}这种混合结构。问题根源不在模型而在技能契约的缺失。我们重新设计了技能契约包含四个强制层2.1 输入规范层拒绝“自然语言友好”的幻觉from pydantic import BaseModel, Field from typing import Optional, Literal class ReturnRequestInput(BaseModel): user_id: str Field( ..., description用户唯一标识符格式为U-{数字}如U-456, patternr^U-\d$ ) order_id: str Field( ..., description订单唯一标识符格式为ORD-{数字}如ORD-789, patternr^ORD-\d$ ) reason: Literal[defective, wrong_item, not_as_described, other] Field( ..., description退货原因必须从指定枚举中选择 ) evidence_images: Optional[list[str]] Field( defaultNone, description用户上传的证据图片URL列表最多3张 )关键点在于所有字段必须带pattern或Literal约束且description需精确到格式示例。LLM的参数解析器如LangChain的ToolCallingParser会严格校验输入。当模型传入{orderNumber: ORD-789}时解析器直接返回结构化错误而非让技能函数去处理脏数据。实测后KeyError归零且LLM在后续调用中会主动学习使用order_id字段——因为错误反馈足够明确。2.2 执行契约层定义“成功”的最小可行标准技能函数本身不负责兜底只做确定性操作def resolve_return_request(input: ReturnRequestInput) - dict: # 步骤1查询订单状态必须存在且未完成 order db.query_order(input.order_id) if not order or order.status ! shipped: raise SkillExecutionError( codeORDER_NOT_ELIGIBLE, messagef订单{input.order_id}状态为{order.status}不支持退货 ) # 步骤2检查用户退货额度调用风控服务 quota risk_service.check_quota(input.user_id) if quota.remaining 50: raise SkillExecutionError( codeQUOTA_EXCEEDED, messagef用户{input.user_id}本月退货额度已用尽 ) # 步骤3创建退货工单幂等操作 ticket return_service.create_ticket( order_idinput.order_id, reasoninput.reason, imagesinput.evidence_images or [] ) return { ticket_id: ticket.id, estimated_refund: ticket.refund_amount, next_step: 等待物流取件 }这里的关键设计是所有异常必须继承自SkillExecutionError且携带标准化code和message。Agent调度层捕获此异常后可直接将code映射为用户友好的提示如ORDER_NOT_ELIGIBLE→“您的订单尚未发货暂不支持退货”而非暴露技术细节。我们统计过统一异常契约使客服话术生成准确率提升67%因为LLM不再需要从杂乱的错误堆栈中提取关键信息。2.3 输出验证层用Schema反向约束LLM技能返回的字典必须通过输出Schema校验class ReturnRequestOutput(BaseModel): ticket_id: str Field(description退货工单ID格式TCK-{数字}) estimated_refund: float Field(gt0, description预估退款金额大于0) next_step: str Field(description下一步操作指引不超过20字) # 在技能执行后强制校验 output_dict resolve_return_request(input) validated_output ReturnRequestOutput(**output_dict).model_dump()这步看似多余实则关键。某次上线后return_service.create_ticket因缓存穿透返回了None导致ticket.id为None。若无此校验技能会静默返回{ticket_id: None, ...}LLM可能将其渲染为“工单ID空”引发客诉。而Schema校验会在技能层立即抛出ValidationError触发重试或降级逻辑。2.4 上下文感知层让技能“读懂”对话历史纯函数式技能无法应对多轮场景。例如用户说“上次那个退货物流还没来取件”此时resolve_return_request需理解这是对前序工单的状态查询。我们在输入契约中增加隐式字段class ReturnRequestInput(BaseModel): # ...原有字段... context: Optional[dict] Field( defaultNone, description当前对话上下文包含前序交互ID、已生成工单ID等 )Agent调度层在调用前注入上下文# 从对话历史提取关键实体 context { previous_ticket_id: extract_ticket_id(last_user_message), conversation_id: current_convo_id } input_with_context ReturnRequestInput(**raw_input_dict, contextcontext)技能函数内即可据此切换逻辑if input.context and input.context.get(previous_ticket_id): # 查询工单状态 status ticket_service.get_status(input.context[previous_ticket_id]) return {status: status, next_step: get_next_action(status)}这种设计避免了技能内部维护状态又赋予其必要的场景感知力。我们对比过启用上下文感知后多轮退货咨询的首次解决率FCR从58%提升至82%。注意技能契约不是越重越好。我们曾为search_products技能设计过包含12个字段的输入Schema结果LLM解析失败率高达41%。后来精简为query: str, category: Optional[str], max_price: Optional[float]三个核心字段失败率降至3%。经验是契约字段数≤5且必须覆盖80%以上的高频场景。剩余长尾需求通过技能组合如先调get_user_preferences再调search_products实现。3. 技能注册中心如何让Agent“认识”你的能力而不依赖硬编码在模拟项目X初期所有技能都通过硬编码注册到Agent# ❌ 反模式硬编码注册 agent.add_tool(search_products) agent.add_tool(resolve_return_request) agent.add_tool(get_tracking_info)这导致三个严重问题① 新增技能需重启Agent服务② 同一技能在不同环境测试/预发/生产配置不同如测试环境用Mock API③ 无法动态启停技能如大促期间关闭非核心技能保稳定性。我们最终构建了一个轻量级技能注册中心核心是三层解耦。3.1 配置驱动YAML定义技能元数据每个技能对应一个YAML文件存于skills/目录# skills/resolve_return_request.yaml name: resolve_return_request description: 处理用户退货请求生成退货工单 version: 1.2.0 enabled: true environment: production: service_url: https://api.return-service.prod/v1 timeout: 5.0 staging: service_url: https://api.return-service.staging/v1 timeout: 10.0 input_schema: skills/schemas/return_request_input.json output_schema: skills/schemas/return_request_output.json error_codes: - ORDER_NOT_ELIGIBLE: 订单状态不支持退货 - QUOTA_EXCEEDED: 用户退货额度不足 - SERVICE_UNAVAILABLE: 退货服务暂时不可用关键创新在于environment块它允许同一技能在不同环境使用不同配置且无需修改Python代码。Agent启动时读取当前环境变量如ENVproduction自动加载对应配置。3.2 运行时注册动态加载与热更新注册中心核心逻辑class SkillRegistry: def __init__(self, config_dir: str, environment: str): self.config_dir config_dir self.environment environment self.skills: Dict[str, Skill] {} self._load_all_skills() def _load_all_skills(self): for yaml_file in Path(self.config_dir).glob(*.yaml): config yaml.safe_load(yaml_file.read_text()) if not config.get(enabled, True): continue # 动态导入技能函数 module_path fskills.impl.{config[name]} skill_func importlib.import_module(module_path).execute # 绑定环境配置 env_config config[environment][self.environment] bound_skill functools.partial(skill_func, **env_config) self.skills[config[name]] Skill( nameconfig[name], descriptionconfig[description], versionconfig[version], functionbound_skill, input_schemaself._load_schema(config[input_schema]), output_schemaself._load_schema(config[output_schema]), error_codesconfig[error_codes] ) def get_skill(self, name: str) - Optional[Skill]: return self.skills.get(name) def reload_skill(self, name: str): # 支持热更新 if name in self.skills: config self._load_config(name) # 重新绑定函数并更新实例 self.skills[name] self._create_skill_from_config(config)Agent初始化时registry SkillRegistry(config_dirskills/, environmentos.getenv(ENV)) agent Agent(registryregistry) # 注册中心注入Agent这样新增技能只需① 编写YAML配置② 实现Python函数③ 放入对应目录。无需重启服务registry会自动扫描加载。我们实测过在生产环境热更新一个技能配置如调整timeout耗时200ms且不影响其他技能调用。3.3 健康检查网关让Agent“信任”技能可用性注册中心不只管理元数据还承担健康检查职责。每个技能启动时注册心跳class SkillHealthMonitor: def __init__(self): self.health_status: Dict[str, dict] {} def report_health(self, skill_name: str, is_healthy: bool, latency_ms: float, error_rate: float): self.health_status[skill_name] { is_healthy: is_healthy, latency_ms: latency_ms, error_rate: error_rate, last_reported: time.time() } def should_route_to_skill(self, skill_name: str) - bool: status self.health_status.get(skill_name) if not status: return True # 首次调用默认允许 # 熔断策略错误率5%或延迟2s暂停路由5分钟 if (status[error_rate] 0.05 or status[latency_ms] 2000) and \ time.time() - status[last_reported] 300: return False return TrueAgent在调用技能前先询问健康网关if not health_monitor.should_route_to_skill(resolve_return_request): # 降级到备用技能或返回兜底话术 return {fallback: 退货服务暂时繁忙请稍后再试}这套机制使我们在一次第三方物流API大规模超时事件中自动将92%的get_tracking_info调用降级到缓存数据避免了连锁故障。3.4 权限沙箱防止技能“越权”访问技能注册时声明所需权限# skills/get_user_profile.yaml permissions: - user:read:basic # 读取用户基础信息 - order:read:history # 读取订单历史Agent调度层在调用前校验def execute_skill(self, skill_name: str, input_data: dict, user_context: UserContext): skill self.registry.get_skill(skill_name) # 检查用户是否有对应权限 for perm in skill.permissions: if not user_context.has_permission(perm): raise PermissionDenied(f用户无权限执行{skill_name}缺少{perm}) # 执行技能 return skill.function(input_data)这解决了安全审计的核心痛点所有技能调用都有权限追溯且权限粒度可细化到字段级如user:read:email。某次安全扫描中我们发现一个被遗忘的debug_dump_all_data技能未设权限立即通过YAML禁用全程5分钟内完成。提示注册中心不是银弹。我们曾尝试集成Consul做分布式注册结果因网络抖动导致技能状态不一致。最终回归本地文件GitOps所有YAML变更走PR流程合并后自动触发CI/CD部署。简单即可靠尤其在技能数量50的中小规模Agent中。4. 技能可观测性从“黑盒调用”到“白盒诊断”的完整链路在模拟项目X上线首周客服团队反馈“用户说退货申请没反应但后台日志显示技能执行成功”。我们花了两天时间手动比对172条日志才发现问题resolve_return_request返回了{ticket_id: TCK-999, next_step: 等待物流取件}但LLM生成的回复却是“您的退货已受理请耐心等待”。它完全忽略了next_step字段因为提示词中未强调“必须原样复述next_step”。这暴露了agent-skills最大的盲区技能执行成功 ≠ 用户体验成功。可观测性必须覆盖全链路而非仅技能函数内部。4.1 四维埋点定义技能调用的黄金指标我们在每个技能入口/出口注入统一埋点import time from opentelemetry import trace def instrumented_skill(func): def wrapper(*args, **kwargs): tracer trace.get_tracer(__name__) with tracer.start_as_current_span(fskill.{func.__name__}) as span: # 维度1输入指纹脱敏后哈希 input_fingerprint hashlib.md5( json.dumps(kwargs, sort_keysTrue).encode() ).hexdigest()[:8] span.set_attribute(input.fingerprint, input_fingerprint) # 维度2执行耗时 start_time time.time() try: result func(*args, **kwargs) # 维度3输出质量校验Schema后计算字段完整性 output_quality calculate_output_quality(result) span.set_attribute(output.quality_score, output_quality) # 维度4LLM调用反馈是否被正确使用 llm_feedback get_llm_usage_feedback(result, kwargs.get(context, {})) span.set_attribute(llm.feedback, llm_feedback) span.set_status(trace.Status(trace.StatusCode.OK)) return result except Exception as e: span.set_status(trace.Status(trace.StatusCode.ERROR)) span.record_exception(e) raise finally: span.set_attribute(execution.latency_ms, (time.time() - start_time) * 1000) return wrapper instrumented_skill def resolve_return_request(input: ReturnRequestInput) - dict: # ...原有逻辑...这四个维度构成诊断基石input.fingerprint相同输入的多次调用可聚合分析识别LLM参数生成的稳定性execution.latency_ms定位慢技能如某次发现search_products平均耗时1.8s远超SLA的500ms经查是ES查询未加索引output.quality_score量化输出合规性如next_step字段缺失则扣分驱动LLM提示词优化llm.feedback标记LLM是否有效利用了输出如next_step被忽略则记为ignored。4.2 技能调用图谱可视化依赖与瓶颈我们导出OpenTelemetry traces到Grafana构建技能调用图谱技能名称调用次数平均延迟错误率关键依赖LLM使用率resolve_return_request1,247420ms1.2%db.query_order,risk_service.check_quota98%正确使用next_stepget_tracking_info8921,150ms0.8%logistics_api.get_status63%常忽略estimated_deliverysearch_products2,0561,780ms0.3%es.search,cache.get41%极少使用category过滤这张表直接指导优化优先级search_products虽错误率低但延迟最高且LLM使用率最低说明提示词或技能设计有问题get_tracking_info的LLM使用率低需强化提示词中对estimated_delivery字段的强调。我们据此重写了get_tracking_info的描述“返回物流状态必须原样包含estimated_delivery字段到用户回复中”LLM使用率一周内升至89%。4.3 失败根因分类告别“技能报错就重启”技能失败不能只看异常类型。我们定义了五类根因每类对应不同处理策略根因类别典型表现自动化处理人工介入点LLM解析失败pydantic.ValidationError输入字段缺失/格式错误返回结构化错误引导用户重述分析高频错误字段优化提示词服务依赖失败requests.TimeoutConnectionError触发熔断降级到缓存或兜底话术检查下游服务SLA扩容或优化业务规则拒绝SkillExecutionError(codeORDER_NOT_ELIGIBLE)直接返回用户友好提示审视业务规则合理性如是否过于严格输出验证失败pydantic.ValidationError返回字段缺失/类型错误记录告警技能函数需修复审查技能实现补充缺失逻辑LLM滥用输出日志显示技能返回next_step但LLM回复中未体现触发提示词重训任务重写提示词增加字段强调权重某天凌晨resolve_return_request错误率突增至15%。图谱显示全是ORDER_NOT_ELIGIBLE错误。我们立刻查看根因分类表确认属“业务规则拒绝”。进一步分析发现92%的失败请求来自新上线的“预售商品”订单而规则order.status ! shipped未覆盖pre_sold状态。问题定位耗时3分钟修复后10分钟内恢复。若无此分类我们可能先花1小时排查数据库连接再花2小时检查LLM解析。4.4 技能健康度仪表盘用数据驱动迭代最终我们构建了技能健康度仪表盘核心指标可用性Availability(成功调用数 - 熔断调用数) / 总调用数目标≥99.5%有效性EffectivenessLLM正确使用关键输出字段的次数 / 总调用数目标≥95%效率Efficiency平均延迟 ≤ SLA * 1.2SLA由业务方定义适应性Adaptability7天内新输入模式fingerprint占比反映LLM泛化能力仪表盘每日自动生成报告如search_products健康度可用性99.8%↑0.2%有效性41%↓3%效率不合格SLA 500ms实测1780ms适应性72%新query类型增多。建议① 优化ES查询性能② 重写提示词强调category字段③ 对高频新query类型如“适合送妈妈的礼物”添加预置模板。这套机制让技能迭代从“凭感觉”变为“看数据”。过去三个月resolve_return_request的有效性从78%提升至96%get_tracking_info的效率达标率从33%提升至100%。注意可观测性不是堆监控。我们砍掉了所有“技能CPU占用率”“内存峰值”等无关指标——技能是IO密集型这些数据毫无意义。聚焦业务价值指标才能让工程师真正用起来。5. 技能组合引擎超越单点调用的协同智能当agent-skills积累到20个时单纯“调用技能A再调用技能B”会迅速失控。在模拟项目X中用户问“帮我查下上周买的蓝牙耳机如果还没发货就取消已发货就查物流”。这需要串行调用get_order_history→query_order_status→条件分支→cancel_order或get_tracking_info。若每个步骤都由LLM决策错误率极高。我们构建了技能组合引擎让Agent具备“规划-执行-验证”的闭环能力。5.1 原子技能 vs 组合技能明确分层边界我们严格区分两类技能原子技能Atomic Skill单一、无状态、幂等的操作如query_order_status(order_id: str) - OrderStatus。它是能力的最小单位可独立测试、部署、监控。组合技能Composite Skill由原子技能按DAG有向无环图编排而成如handle_order_query(user_id: str, query: str) - dict。它不包含业务逻辑只定义执行流程。组合技能用JSON Schema定义{ name: handle_order_query, description: 根据用户查询意图协调多个原子技能完成订单相关操作, input_schema: { type: object, properties: { user_id: {type: string}, query: {type: string} } }, workflow: [ { id: step1_get_orders, skill: get_order_history, input_mapping: {user_id: $.user_id} }, { id: step2_filter_relevant, skill: filter_orders_by_keywords, input_mapping: { orders: $.step1_get_orders.output, keywords: $.query } }, { id: step3_decision, type: conditional, condition: $.step2_filter_relevant.output[0].status shipped, then: { id: step3a_track, skill: get_tracking_info, input_mapping: {order_id: $.step2_filter_relevant.output[0].order_id} }, else: { id: step3b_cancel, skill: cancel_order, input_mapping: {order_id: $.step2_filter_relevant.output[0].order_id} } } ] }关键设计是input_mapping用JSONPath语法从上游输出提取参数避免硬编码。$.step1_get_orders.output表示步骤1的输出$.query表示原始输入。这使组合逻辑完全声明式可被静态分析、可视化、版本化。5.2 执行时编排动态DAG与错误传播组合引擎运行时解析Workflowclass CompositeSkillExecutor: def execute(self, workflow: dict, input_data: dict) - dict: execution_context {input: input_data, steps: {}} for step in workflow[workflow]: try: # 解析input_mapping获取实际参数 resolved_input self._resolve_input_mapping( step[input_mapping], execution_context ) # 调用原子技能 skill_result self.skill_registry.get_skill(step[skill]).function(resolved_input) # 存储结果供后续步骤使用 execution_context[steps][step[id]] { output: skill_result, status: success } except Exception as e: # 错误传播记录错误但不中断整个流程除非是critical步骤 execution_context[steps][step[id]] { error: str(e), status: failed } # 若是条件分支的条件步骤失败执行默认分支 if step.get(type) conditional and step.get(id) step3_decision: execution_context[steps][step3a_track] {output: {error: 无法判断订单状态}} return self._build_final_output(execution_context)这种设计保证了韧性即使filter_orders_by_keywords因超时失败引擎仍会尝试执行get_tracking_info用默认订单ID而非整个组合崩溃。我们统计过组合技能的总体成功率比LLM直连原子技能高42%因为错误被隔离在单个步骤内。5.3 可视化编排器让非工程师也能“画”出智能体为降低组合技能创建门槛我们开发了Web可视化编排器左侧拖拽原子技能图标如get_order_history到画布右键连线定义数据流向get_order_history.output → filter_orders_by_keywords.orders双击节点配置条件分支如status shipped保存后自动生成上述JSON Schema并提交到Git仓库。某次客服主管直接在编排器中创建了handle_refund_dispute组合技能她将get_payment_record、check_refund_policy、escalate_to_human三个技能连成DAG并设置了refund_amount 500的升级条件。整个过程耗时12分钟无需开发介入。上线后该技能处理了37%的高价值客诉首次解决率FCR达89%。5.4 组合技能的版本演进从“改代码”到“改流程”组合技能的变更必须可追溯、可灰度。我们采用GitOps模式每个组合技能对应一个Git分支如composites/handle_order_query-v2PR中需包含① Workflow JSON变更② 影响分析哪些原子技能被新增/删除③ 测试用例模拟输入验证输出CI流水线自动执行测试并生成影响报告“v2版本新增cancel_order调用预计增加0.8%的订单取消率”。某次我们想为handle_order_query增加“推荐相似商品”能力。旧版v1只有3个步骤新版v2在末尾加入{ id: step4_recommend, skill: recommend_similar_products, input_mapping: {product_id: $.step2_filter_relevant.output[0].product_id} }PR合并后系统自动灰度5%流量到v2监控recommend_similar_products的调用成功率和用户点击率。72小时后数据显示点击率仅12%远低于预期我们立即回滚全程无人工干预。提示组合引擎不是取代LLM而是赋能LLM。LLM的角色从“执行者”变为“规划者”它只需决定调用哪个组合技能如handle_order_query而不用操心内部步骤。这大幅降低了LLM的推理负担使其更专注意图理解。在压力测试中启用组合引擎后Agent的QPS提升3倍而LLM token消耗下降65%。6. 技能治理当Agent能力成为核心资产随着模拟项目X的agent-skills库膨胀至87个新的挑战浮现谁来审核新技能的上线如何确保技能不重复建设老技能废弃后如何通知所有使用者我们意识到agent-skills已不仅是代码而是组织级能力资产需要正式治理。6.1 技能生命周期管理从创建到归档的全流程我们定义了技能的五阶段生命周期阶段触发条件关键动作负责人SLADraft开发者提交PR自动运行单元测试、契约校验、安全扫描开发者24hReviewPR通过CI技能委员会3人评审业务必要性、契约合理性、安全合规技能委员会3工作日StagingReview通过部署到预发环境运行A/B测试5%流量SRE48hProductionA/B测试达标成功率≥95%全量发布更新文档通知依赖方发布经理1hDeprecated使用率0.1%持续30天标记为DeprecatedAPI返回警告头文档置顶提示技能委员会7天关键创新是A/B测试阶段新技能上线不直接全量而是与旧技能并行。例如search_products_v2上线时5%请求走v295%走v1对比指标v2.success_ratevsv1.success_ratev2.llm_utilization_rateLLM正确使用输出字段的比例v2.latency_msvsv1.latency_ms某次get_user_profile_v2在A/B测试中显示llm_utilization_rate为91%高于v1的78%但latency_ms高出40%。技能委员会判定用户体验提升显著批准上线同时安排优化延迟。6.2 技能血缘图谱看清“谁在用我的技能”我们构建了技能依赖图谱自动解析所有组合技能的Workflow JSONgraph LR A[handle_order_query] -- B[get_order_history] A -- C[filter_orders_by_keywords] C -- D[query_order_status] D -- E[db.query_order] A -- F[get_tracking_info] F -- G[logistics_api.get_status]注此处为文字描述实际系统中为交互式图谱图谱提供两大能力影响分析当db.query_order需升级时图谱显示影响handle_order_query、resolve_return_request
锦
锦皓数字建站
深耕本土企业品牌数字化升级,专注原创端正雅致商务官网,从视觉设计到稳定运维全程保驾护航。