从提示工程到驭缰工程:构建安全可控的AI Agent基础设施

发布时间:2026/8/14 3:12:01

从提示工程到驭缰工程:构建安全可控的AI Agent基础设施
1. 项目概述从“提示”到“驭缰”的工程思维进化最近在AI Agent的开发和落地实践中我越来越频繁地听到一个词Harness Engineering中文可以翻译为“驭缰工程”或“缰绳工程”。乍一听这似乎是“Prompt Engineering”提示工程的一个新马甲但深度参与几个开源项目后我发现这远不止是术语的迭代而是一次根本性的工程范式跃迁。如果说Prompt Engineering是教AI“如何理解一句话”那么Harness Engineering就是在为AI这匹“千里马”设计和建造一套完整的“马鞍、缰绳和跑道系统”。它关注的不是单次对话的“灵光一现”而是如何让AI Agent在复杂、长期、多步骤的任务中保持稳定、可靠、可控的运行。这对于任何希望将AI Agent从演示Demo转化为实际生产应用的朋友来说都是一个必须理解和掌握的关键领域。简单来说Harness Engineering是一套包裹在AI Agent核心推理逻辑通常是大语言模型之外的基础设施层和工程实践。它不负责替代Agent的“思考”能力而是为Agent的“行动”提供支撑、约束、监控和保障。想象一下你有一个能力很强的AI助手它能写代码、查资料、操作软件。但如果你直接让它去执行一个“修复线上Bug”的任务它可能会中途跑偏、陷入死循环、或者执行一些危险操作。Harness Engineering要解决的就是如何为这个助手设定清晰的边界、提供趁手的工具、实时监控它的状态并在它“脱缰”时能安全地拉回来。这个领域目前正处于开源社区爆发的前夜涌现了大量优秀的项目和框架为我们提供了绝佳的实践蓝本。2. 核心需求解析为什么单纯的“提示工程”不够用了要理解Harness Engineering为何兴起我们必须先看清Prompt Engineering的局限性。Prompt Engineering的核心是通过精心设计的文本输入来引导模型输出更符合预期的结果。这在单轮对话、内容创作、简单问答等场景下效果显著。然而当我们进入AI Agent的领域面临的需求发生了质变2.1 任务从“单次交互”变为“长期运行”一个客服Agent可能需要7x24小时在线处理成千上万个会话一个自动化编程Agent可能需要连续工作数小时迭代修改代码。Prompt Engineering关注的是单次请求-响应的质量而长期运行涉及状态管理、记忆持久化、会话恢复等问题这超出了提示语的设计范畴。2.2 环境从“封闭文本”变为“开放工具”真正的Agent需要与外部世界交互调用API、查询数据库、操作文件系统、控制浏览器等。如何安全、高效地管理这些工具如何控制工具调用的权限和频率如何解析非结构化的工具输出并将其转化为Agent能理解的上下文这些都是复杂的工程问题。2.3 目标从“输出质量”变为“过程可控”对于一次代码生成我们可能只关心最终代码是否正确。但对于一个自动化部署Agent我们必须关心它的每一步操作是否在正确的环境是否遵循了变更流程有没有执行高危命令过程的可观测性Observability、可审计性Auditability和可中断性Interruptibility变得至关重要。2.4 评估从“主观评判”变为“客观验证”“这段文案写得好不好”是主观的。“这个Agent是否在5分钟内成功完成了数据提取、清洗并入库且数据准确率超过99%”是客观的。Agent任务的完成度需要一套自动化的验证和评估体系这需要基础设施的支持。正是这些复杂需求催生了Harness Engineering。它旨在构建一个“安全围栏”让Agent的能力得以充分发挥同时将其风险和行为约束在可接受的范围内。接下来我们将深入一个具体的开源项目实例拆解Harness Engineering的核心构成。3. 开源项目实例拆解AI Agent“驭缰”基础设施长什么样为了不让讨论流于空泛我们以一个典型的、蕴含Harness Engineering思想的开源项目结构为例进行拆解。请注意以下并非某一个特定项目而是综合了如LangChain、AutoGen、CrewAI等主流框架以及一些新兴专项工具如用于评估的LangSmith替代方案、用于安全监控的专用中间件的共同模式。我们将其抽象为一个概念性的“Agent-Harness”框架项目。3.1 项目核心架构分层一个完整的Harness Engineering框架通常包含以下层次Agent Core智能核心层这是传统Prompt Engineering主要发挥作用的领域即大语言模型本身及其提示词模板、思维链CoT设计等。它负责理解和规划。Harness Layer驭缰层/基础设施层这是我们关注的重点。它进一步细分工具管理Toolkit Registry所有外部工具的集中注册、描述、权限管理。例如一个工具需要声明“我是什么name怎么用descriptionparameters谁能用permission调用一次消耗多少‘成本’rate_limit”工作流引擎Workflow Orchestrator定义和管理复杂的多步骤任务。它可以是顺序、并行、条件分支或循环。例如“先搜索最新资料再总结最后发邮件”就是一个简单工作流。引擎负责状态推进和错误处理。记忆与状态管理Memory State Management短期会话记忆、长期知识存储、任务执行状态的持久化。确保Agent在中断重启后能接续工作。安全与护栏Safety Guardrails输入/输出过滤、内容安全审查、工具调用前校验、执行超时控制、危险操作拦截如rm -rf /。这是“缰绳”最核心的部分。可观测性套件Observability Suite日志记录、链路追踪Trace、指标监控Metrics。记录Agent的每一次思考、每一次工具调用、每一次状态变更便于调试和复盘。评估与测试框架Evaluation Testing提供自动化测试工具用于评估Agent在特定任务上的成功率、耗时、成本等。3.2 一个关键模块的深度剖析工具管理与安全护栏让我们深入“工具管理”和“安全护栏”这两个模块看看Harness Engineering如何落地。注意直接让LLM生成并执行代码或系统命令是极度危险的。Harness Engineering的首要原则就是“不信任”即默认不执行任何来自Agent的未经检查和约束的指令。工具注册的代码示例概念性class ToolHarness: def __init__(self): self.tool_registry {} self.execution_history [] def register_tool(self, tool_name, tool_func, permission_requiredNone, rate_limitNone, pre_execution_checkNone): 注册一个工具并附加安全策略 self.tool_registry[tool_name] { function: tool_func, permission: permission_required, # 例如read_file, write_db, execute_shell rate_limit: rate_limit, # 例如{calls: 10, per_seconds: 60} pre_check: pre_execution_check # 一个函数用于在执行前校验参数 } def execute_tool(self, agent_id, tool_name, **kwargs): 执行工具的核心方法包含全套安全检查 # 1. 检查工具是否存在 if tool_name not in self.tool_registry: return {error: fTool {tool_name} not registered.} tool_info self.tool_registry[tool_name] # 2. 权限检查 if tool_info[permission] and not self._check_permission(agent_id, tool_info[permission]): return {error: fAgent {agent_id} lacks permission {tool_info[permission]} for tool {tool_name}.} # 3. 速率限制检查 if tool_info[rate_limit] and not self._check_rate_limit(agent_id, tool_name, tool_info[rate_limit]): return {error: fRate limit exceeded for tool {tool_name}.} # 4. 参数预检 if tool_info[pre_check]: check_result tool_info[pre_check](kwargs) if check_result is not True: return {error: fPre-execution check failed: {check_result}} # 5. 执行并记录 try: result tool_info[function](**kwargs) self.execution_history.append({ agent_id: agent_id, tool: tool_name, args: kwargs, result: str(result)[:500], # 截断避免日志过大 timestamp: time.time() }) return {success: True, data: result} except Exception as e: self.execution_history.append({ agent_id: agent_id, tool: tool_name, args: kwargs, error: str(e), timestamp: time.time() }) return {error: fTool execution error: {e}}这段伪代码展示了一个高度简化的工具管理核心。在实际开源项目中如LangChain的Tool类会通过tool装饰器、StructuredTool等提供更丰富的描述和类型校验。安全护栏则可能作为一个独立的中间件Middleware或回调Callback系统在Agent的每一步动作思考、工具调用、输出前后进行拦截和审查。3.3 工作流引擎从线性脚本到可编排的DAGHarness Engineering的另一个标志是引入了工作流Workflow或任务图Task Graph的概念。不再是写一个线性的脚本让Agent执行而是将任务分解为多个节点Node并定义节点间的依赖关系DAG有向无环图。例如一个“市场调研报告生成”Agent的工作流可能包括节点A关键词生成根据主题生成搜索关键词。节点B网络搜索使用搜索引擎工具并行搜索多组关键词。节点C内容提取与总结从搜索结果中提取核心信息并总结。节点D报告撰写基于总结的内容生成结构化的报告。节点E报告格式化将报告转换为指定格式如Markdown、PDF。节点B依赖于节点A的输出节点C依赖于节点B以此类推。工作流引擎负责调度这些节点的执行处理节点失败的重试或降级策略并管理整个流程的上下文传递。这极大地增强了复杂任务的可靠性和可维护性。4. 实操指南如何为你的AI Agent项目引入“驭缰工程”理解了概念和架构我们来看看如何在实际项目中应用Harness Engineering。这个过程不是一蹴而就的可以遵循“由简入繁”的路径。4.1 第一阶段从工具安全化开始如果你的Agent已经开始调用外部API或执行命令这是最迫切的起点。行动项建立工具注册表不要让你的Agent直接调用requests.get()或subprocess.run()。将所有工具函数包装起来集中到一个注册中心管理。实施权限模型为每个工具定义最小权限。例如“读取日志文件”工具只需要read权限而“重启服务”工具需要admin权限。为不同的Agent或用户角色分配不同的权限集。添加参数校验在每个工具执行前强制校验输入参数。例如文件路径是否在允许的目录内SQL查询是否只读命令是否在白名单中实现执行日志记录每一次工具调用的详细信息谁、何时、调用什么、参数、结果/错误。这是事后审计和问题排查的生命线。实操心得初期可以使用一个简单的全局字典或配置文件来管理工具和权限。重点在于养成“所有外部交互都必须经过受控网关”的思维习惯。4.2 第二阶段引入状态管理与可观测性当你的Agent需要处理多轮交互或长时间任务时状态管理变得关键。行动项选择状态存储根据复杂度可以从内存字典简单升级到Redis高性能、分布式或数据库持久化。设计会话上下文为每个会话或任务实例创建一个唯一的上下文对象存储当前目标、已完成步骤、中间结果、用户偏好等。集成结构化日志使用像structlog这样的库将日志从简单的print语句升级为包含会话ID、步骤ID、时间戳、级别的结构化数据。添加关键指标定义并收集业务指标如“任务平均完成时间”、“工具调用成功率”、“用户满意度评分如有”。这些是衡量Agent健康度的关键。避坑指南状态序列化时要小心。直接将复杂的Python对象如LLM响应对象存入数据库或Redis可能会遇到问题。最好设计一个轻量级的、可序列化的状态表示结构。4.3 第三阶段构建工作流与评估体系当任务逻辑变得复杂且你需要确保Agent表现稳定时进入此阶段。行动项采用或构建工作流引擎评估现有框架如Airflow、Prefect的轻量级用法或LangChain的LangGraph。如果任务简单也可以自己实现一个基于状态机的调度器。定义评估数据集为你的核心任务创建一批高质量的测试用例输入和期望输出。这可以是单元测试的扩展。实现自动化评估流水线定期如每次代码更新后在评估数据集上运行你的Agent自动计算成功率、质量分数等。这能有效防止回归。设计降级与人工接管流程当Agent连续失败、或触发高风险警报时系统应能自动暂停任务并通知人类操作员介入。4.4 工具选型参考根据项目阶段和团队规模可以考虑以下开源方案需求阶段推荐工具/框架说明快速原型LangChain, LlamaIndex提供了丰富的工具集成、记忆管理和链式调用能快速搭建具备基础Harness能力的Agent。复杂工作流LangGraph (LangChain), CrewAI专门为编排多Agent协作和复杂工作流设计内置了角色分配、任务分解等模式。企业级管控自研中间件 FastAPI在成熟框架之上根据企业特定安全合规要求自研强化安全护栏、审计日志和权限管理系统。可观测性OpenTelemetry, LangSmith (商业/类似开源)使用OpenTelemetry标准来收集追踪和指标数据集成到现有的监控栈如Prometheus, Grafana。评估测试pytest, 自建评估框架使用pytest组织评估用例结合LLM-as-a-Judge用大模型评估输出质量或规则匹配进行自动化评分。5. 常见问题与实战排坑记录在实际构建Harness的过程中我踩过不少坑也总结了一些经验。5.1 工具调用失控Agent陷入循环或调用错误工具现象Agent反复调用同一个工具或调用了一个完全不相关的工具。根因通常是由于提示词中对工具的描述不够清晰或者LLM本身在长上下文中出现了“注意力漂移”。解决方案工具描述优化为每个工具编写精确、无歧义的描述并举例说明输入输出格式。例如不只是说“搜索网络”而是说“使用此工具根据关键词查询最新资讯。输入应为JSON格式{\query\: \你的搜索关键词\}。输出为包含标题和摘要的列表。”强制结构化输出要求LLM必须以指定格式如JSON返回工具调用请求并在Harness层进行严格解析和校验格式错误则要求重试。设置调用预算在Harness中为每个任务或会话设置最大工具调用次数达到上限后强制结束或转入人工流程。5.2 状态管理混乱会话数据丢失或污染现象用户第二次提问时Agent忘记了之前的对话或者不同用户会话的数据混在了一起。根因没有正确区分和持久化会话上下文使用了全局变量或不当的缓存策略。解决方案会话隔离为每个独立的对话或任务生成唯一IDUUID所有状态都以此ID为键进行存储。显式状态设计设计一个清晰的SessionState数据类明确包含conversation_history,task_goal,intermediate_results等字段避免使用模糊的字典。存储后端选型对于生产环境使用Redis等外部存储并设置合理的TTL生存时间。对于开发或轻量场景可以使用像diskcache这样的库进行简单的文件缓存。5.3 性能瓶颈Agent响应变慢吞吐量低现象随着功能增加Agent处理单个请求的时间变长系统并发能力下降。根因Harness层引入了过多的同步检查、日志写入或网络IO工具调用是串行的。解决方案异步化改造将工具调用、日志记录、状态保存等IO密集型操作改为异步Async模式。Python的asyncio库和aiohttp是好朋友。并行工具调用分析工作流将彼此没有依赖关系的工具调用改为并行执行。工作流引擎应支持这种模式。缓存策略对于频繁调用且结果变化不快的工具如某些信息查询引入缓存层避免重复调用。监控与 profiling使用性能分析工具如cProfile,py-spy定位热点函数进行针对性优化。5.4 评估标准难以量化如何知道Agent变好了还是变坏了现象更新了提示词或Harness逻辑后感觉Agent有时更好有时更差缺乏客观依据。根因缺乏系统性的、自动化的评估基准。解决方案构建黄金测试集收集100-200个真实、有代表性的用户请求和期望的理想输出。这是评估的基石。设计多维评分不要只用一个“好/坏”判断。可以从“任务完成度”、“回答相关性”、“信息准确性”、“安全性”、“耗时”等多个维度打分。自动化评估流水线将测试集的运行和评分集成到CI/CD流程中。评分可以结合规则关键词匹配、模型判断使用另一个LLM作为裁判和人工抽查。建立数据驱动文化任何改动模型、提示词、Harness逻辑都需要通过评估流水线的检验确保核心指标不下降。从“提示语工程”到“驭缰工程”的转变标志着AI应用开发正从早期的“技巧探索”阶段迈入“系统工程”阶段。它要求开发者不仅是一个会与模型对话的“魔法师”更要成为一个懂得构建可靠、安全、可扩展系统的“工程师”。这个过程充满挑战但开源社区蓬勃发展的各类项目为我们提供了丰富的组件和思路。我的体会是尽早地在你的AI Agent项目中引入Harness思维哪怕是从最简单的工具权限管理开始都能为未来的稳定性和可维护性打下坚实基础。这不再是可选项而是构建真正有价值、可交付的AI应用的必由之路。

相关新闻

ChatGPT、Codex实战:Local任务做到一半想切Worktree怎么办?Thread Handoff最容易踩的5个坑

ChatGPT、Codex实战:Local任务做到一半想切Worktree怎么办?Thread Handoff最容易踩的5个坑

2026/8/14 3:02:00

Codex做长任务时,经常会出现一种很现实的情况:一开始只是想让它:在当前项目里改几个文件。所以直接从Local开始。但任务做到一半以后,范围越来越大:读取项目 ↓ 修改几个文件 ↓ 发现还要继续重构 ↓ 测试时间越来越长…

解决Paramiko SSH协议横幅读取错误:从原理到实战排查指南

解决Paramiko SSH协议横幅读取错误:从原理到实战排查指南

2026/8/14 3:02:00

1. 问题引入:一个看似简单的连接失败 如果你在自动化运维、批量部署或者远程服务器管理中使用过 Python 的 Paramiko 库,那么对 paramiko.ssh_exception.SSHException: Error reading SSH protocol banner 这个异常信息一定不会陌生。这个错误就像一个…

ChatGPT、Codex实战:主任务还在跑,又想继续提问怎么办?Side Chat为什么比硬塞上下文更稳

ChatGPT、Codex实战:主任务还在跑,又想继续提问怎么办?Side Chat为什么比硬塞上下文更稳

2026/8/14 3:02:00

使用Codex做长任务时,经常会遇到一种非常典型的场景: 主任务还在运行。 比如: 帮我定位这个接口偶发超时的问题,修改代码并跑完相关测试。 Codex已经开始: 读取Repository ↓ 分析调用链 ↓ 检查日志 ↓ 修改代码 ↓…

揭秘网站建设包括哪些内容从0到1的全流程解析与避坑指南

揭秘网站建设包括哪些内容从0到1的全流程解析与避坑指南

2026/8/14 4:12:13

很多人以为,建个网站就像搭积木,找个模板套一下,买个域名填进去,完事了。如果真这么简单,那世界上早就没有烂尾项目了。作为在这个行业里摸爬滚打多年的老兵,我见过太多老板或市场负责人,兴冲冲地拿着几万块钱预算来找我,结果做出来的东西惨不忍睹,不仅没用,反而成了…

一招告别卡顿:Mem Reduct 3.5.2 免费内存清理工具完整使用教程

一招告别卡顿:Mem Reduct 3.5.2 免费内存清理工具完整使用教程

2026/8/14 4:12:13

一招告别卡顿:Mem Reduct 3.5.2 免费内存清理工具完整使用教程 【免费下载链接】memreduct Lightweight real-time memory management application to monitor and clean system memory on your computer. 项目地址: https://gitcode.com/gh_mirrors/me/memreduct…

SQL进阶:掌握WHERE、GROUP BY与HAVING,实现高效数据查询与分析

SQL进阶:掌握WHERE、GROUP BY与HAVING,实现高效数据查询与分析

2026/8/14 4:12:13

如果你刚开始学 SQL,可能会觉得它很简单——不就是 SELECT * FROM table 吗?但当你真正面对一个业务系统,需要从海量数据里快速、准确地找到关键信息,或者需要设计一个既能支撑业务增长又易于维护的数据库结构时,你会…

XXL-Job 分布式任务调度平台从零到一完整配置与集成指南

XXL-Job 分布式任务调度平台从零到一完整配置与集成指南

2026/8/14 4:12:13

在分布式系统中,定时任务的管理一直是个痛点。传统的单机定时任务在应用水平扩展时,容易导致任务重复执行;而分散在各服务中的任务又难以统一监控和管理。XXL-Job 作为一款开源的分布式任务调度平台,以其轻量级、易用和强大的调度…

基于AI Agent的自动化开发流水线:从CI/CD到智能运维的实践

基于AI Agent的自动化开发流水线:从CI/CD到智能运维的实践

2026/8/14 4:12:13

1. 从“手动救火”到“自动巡航”:一个全自动开发流水线的诞生那天晚上十一点,我正打算关电脑,一个紧急的生产环境Issue弹了出来。用户反馈某个核心功能按钮点击无效,日志里一片祥和,没有任何错误。接下来的两个小时&a…

深度学习文本分析实战:从BERT微调到情感分类系统构建

深度学习文本分析实战:从BERT微调到情感分类系统构建

2026/8/14 4:02:12

1. 项目概述:从“看字”到“懂意”的跨越“用深度学习分析文本数据”,这个标题听起来挺技术范儿的,但说白了,就是教机器怎么像人一样“读懂”文字。这可不是简单的关键词匹配或者统计词频,而是让机器理解文字背后的情感…

比较好的亚太EMBA,问了6位校友师资差别真的挺大

比较好的亚太EMBA,问了6位校友师资差别真的挺大

2026/8/13 11:01:28

比较好的亚太EMBA核心差异先看什么?对于希望兼顾工作与系统管理能力提升的亚太区高管而言,筛选匹配度高的EMBA项目时,师资配置是决定学习体验与实际收获的核心要素之一。我们结合3-4个公开信息透明、办学历史较长的亚太区主流EMBA项目特点&am…

备考3个月对比6份资料 海外游学的亚洲EMBA面试注意点

备考3个月对比6份资料 海外游学的亚洲EMBA面试注意点

2026/8/11 8:44:43

备考海外游学的亚洲EMBA面试,核心要围绕项目国际化设计逻辑、个人跨文化管理经验匹配度两个维度准备,避免把游学模块等同于普通旅游参访的认知偏差。不少备考者花3个月对比6份资料,却容易忽略面试官对“国际视野落地能力”的考察——比如香港…

比较好的国内EMBA,问了二十位校友聊透人脉价值

比较好的国内EMBA,问了二十位校友聊透人脉价值

2026/8/13 17:17:06

比较好的国内EMBA核心差异体现在哪些方面?比较好的国内EMBA的核心长期价值,很大程度上依托于校友网络的连接质量与资源生态的活跃度,这也是不少高管在择校时优先考量的因素。我们结合3-4个市场关注度较高的项目公开信息,从课程、师…

大连网站建设找简维科技:为您打造懂业务更懂用户的数字化转型引擎

大连网站建设找简维科技:为您打造懂业务更懂用户的数字化转型引擎

2026/8/14 0:01:53

在这个数字化浪潮席卷全球的今天,企业想要在激烈的市场竞争中站稳脚跟,拥有一张好看的“数字名片”已经远远不够了。很多老板在刚开始接触互联网业务时,都有一个共同的困惑:为什么我花了钱建的网站,就像是在真空中自嗨?访客进来转了两圈就跑了,线索石沉大海,甚至连客服…

临沂网站建设铭镇:深耕本土数字生态,以匠心铸就企业品牌核心竞争力

临沂网站建设铭镇:深耕本土数字生态,以匠心铸就企业品牌核心竞争力

2026/8/14 0:01:54

在这个流量为王、视觉至上的互联网时代,对于临沂乃至整个山东乃至全国的传统中小企业来说,拥有一张精美的“数字名片”早已不再是可选项,而是生存的必答题。每当夜幕降临,沂河两岸灯火辉煌,物流之都的喧嚣逐渐沉淀为对未来的思考。我们常常听到老板们在茶余饭后探讨:为什…

Flutter与OpenHarmony实现剧本杀组队表单开发实战

Flutter与OpenHarmony实现剧本杀组队表单开发实战

2026/8/14 0:01:54

1. 项目概述在移动应用开发领域,跨平台框架Flutter因其高效的开发体验和出色的性能表现,已经成为众多开发者的首选。而OpenHarmony作为新兴的操作系统平台,其开放性和灵活性为开发者提供了全新的可能性。本文将聚焦于一个实际应用场景——剧本…

摆脱论文困扰!盘点2026年全网爆红的的AI论文写作工具

摆脱论文困扰!盘点2026年全网爆红的的AI论文写作工具

2026/8/8 5:07:31

一天写完毕业论文在2026年已不再是天方夜谭。2026年最炸裂、实测能大幅提速的AI论文写作工具,覆盖选题构思、文献整理、内容生成、格式排版等核心场景,真正帮你高效搞定论文难题。 一、全流程王者:一站式搞定论文全链路(一天定稿首…

导师推荐!2026最新AI论文工具测评与实用推荐

导师推荐!2026最新AI论文工具测评与实用推荐

2026/8/9 13:42:46

2026年真正好用的AI论文工具,核心看生成的论文质量、低AI味、格式正确、学术适配四大指标。综合实测,千笔AI、ThouPen、豆包、DeepSeek、Grammarly 是当前最值得推荐的梯队,覆盖从免费到付费、从中文到英文、从文科到理工的全场景需求。 一、…

告别游戏崩溃:XCOM 2模组管理器的智能革命

告别游戏崩溃:XCOM 2模组管理器的智能革命

2026/8/8 2:30:15

告别游戏崩溃:XCOM 2模组管理器的智能革命 【免费下载链接】xcom2-launcher The Alternative Mod Launcher (AML) is a replacement for the default game launchers from XCOM 2 and XCOM Chimera Squad. 项目地址: https://gitcode.com/gh_mirrors/xc/xcom2-lau…