构建 Agent Harness:打造可靠 AI Agent 的核心控制层
Prompt Engineering、Context Engineering以及现在的 Harness Engineering。Prompt engineering 随着 2022 年底 ChatGPT 的发布进入公众视野定义了与大型语言模型高效交互的方式。Context engineering 则在去年2025 年走到台前构建者们尝试在上下文窗口限制内将尽可能多的有用信息塞进 prompt。Harness engineering 则成为今年的热点话题构建者优化模型周边的“脚手架”以确保 agent 能正确处理任务请求并尽可能给出最佳响应。LangChain https://www.langchain.com/blog/improving-deep-agents-with-harness-engineering 探讨如何通过 harness engineering 改进 deep agents展示了在不更换底层模型的前提下通过调整 system prompts、tool 使用以及 middleware 来优化 agent 性能。尤其是中间的 middleware 层注入了目录上下文以加速 agent 上手、验证输出以进行质量校验并强制执行时间预算以在合理时限内完成工作。这表明agent 构建者不必一味等待下一个模型版本来提升质量而是可以“站在前沿实验室的肩膀上”取得更好的结果。Birgitta Böckeler 在一篇面向编码类 agent 用户的文章中提出了一个简单公式来定义 harness engineeringagent model harness。她这样阐述一个良好 harness 的目标一个构建良好的外部 harness 有两个目标它提高 agent 一开始“就做对”的概率并在结果到达人类视线之前提供尽可能多的问题自我纠正反馈回路。AWS 也刚刚为 AgentCore 推出 了全新的托管 agent harness用简单的基于配置的部署取代了前期繁琐的 agent 构建流程。在这篇博客中我将分享在我的 agent 平台原型 Loom 中构建 agent harness 的持续探索并介绍如何集成 AgentCore 的新 harness 作为另一种构建 agent 的选项。注为保证专业性与可对照性文中的专业名词如 agent harness、harness engineering、AgentCore、middleware、MCP、A2A、CLI、Bedrock、boto3、JWT、RFC 8693 等均保留英文原文必要处在首次出现时辅以中文解释。走进 Loom 的引擎盖之下在 Loom 的介绍文章中我提出了客户挑战 #4软件部署需要严格测试尤其是 AI 生成代码。因此我使用预写的 agent并通过 feature flags 启用 memory、tools、与其他 agents 的集成。这样既能进行标准化的代码扫描也无需为不受信任的代码执行准备隔离环境。通过配置注入构建预写的 agent为此我注入了一个名为AGENT_CONFIG_JSON的环境变量其负载如下{ system_prompt: persona, instructions, guidelines, model_id: us.amazon.nova-2-lite-v1:0, max_tokens: 16384, integrations: { mcp_servers: [ { name: utilities, enabled: true, transport: streamable_http, endpoint_url: https://example.heeki.cloud/mcp, auth: { type: oauth2, credential_provider_name: agentcore-credential-provider-for-utilities, well_known_endpoint: https://cognito-idp.region.amazonaws.com/cognito-pool-id/.well-known/openid-configuration, scopes: utilities/invoke ... } } ], a2a_agents: [ { name: agentforce-assistant, enabled: true, endpoint_url: https://api.salesforce.com/einstein/ai-agent/a2a/agent-identifier, auth: { type: oauth2, credential_provider_name: agentcore-credential-provider-for-agentforce-assistant, well_known_endpoint: https://organization-id.develop.my.salesforce.com/.well-known/openid-configuration } } ], memory: { enabled: true, resources: [ { name: demo_employee_assistant, memory_id: demo_employee_assistant-RNDrSHC2P5, arn: arn:aws:bedrock-agentcore:region:account-id:memory/demo_employee_assistant-RNDrSHC2P5 } ] } }}system_prompt参数将 persona、instructions、guidelines 这几项输入合并用于初始化 agent。agent Agent( system_promptconfig.system_prompt, modelmodel, toolstools, hookshooks,)model_id与max_tokens参数用于配置 Bedrock 模型。后续我计划扩展以支持其他 3p第三方模型提供方。model BedrockModel( model_idconfig.model_id, max_tokensconfig.max_tokens, streamingTrue,)integrations.mcp_servers与integrations.a2a_agents用于按条件定义 agent 的工具列表。下面的代码为了简洁做了轻微简化。if config.integrations.mcp_servers: enabled_servers [s for s in config.integrations.mcp_servers if s.enabled] if enabled_servers: mcp_clients build_mcp_clients(config.integrations.mcp_servers) tools.extend(mcp_clients) logger.info(Loaded %d MCP tool client(s), len(mcp_clients))if config.integrations.a2a_agents: enabled_agents [a for a in config.integrations.a2a_agents if a.enabled] if enabled_agents: a2a_clients create_a2a_clients(config.integrations.a2a_agents) if a2a_clients: tools.extend(a2a_clients) logger.info(Loaded %d A2A client(s), len(a2a_clients))integrations.memory参数用于决定是否在生命周期事件中接入与 memory 交互的 hook。if config.integrations.memory.enabled: memory_store_id None if config.integrations.memory.resources: memory_store_id config.integrations.memory.resources[0].memory_id memory_hook MemoryHook(memory_store_idmemory_store_id) hooks.append(memory_hook) logger.info(Enabled AgentCore Memory hook (store_id%s), memory_store_id)这种方式允许在部署时对 agent 进行配置并可根据具体用例的需要选择性地设置上述各项配置。但如果我想在运行时变更 agent 配置怎么办允许终端用户选择偏好的模型很常见在与 agent 交互途中追加工具集成也很常见。部署时配置 vs 运行时配置如何实现部署时配置作为默认设置运行时配置允许用户用自己的选择覆盖这些默认值。默认的部署配置与可在运行时覆盖的配置invoke 的负载支持在运行时覆盖模型、并新增 connectorstools 或其他 agents。这在InvokeRequest类中有定义。{ prompt: What is the weather in New York?, session_id: existing-session-id-or-null, model_id: us.amazon.nova-2-lite-v1:0, credential_id: 1, bearer_token: your-bearer-token, connector_ids: [3, 7]}prompt必填用户消息session_id复用现有会话省略则创建新会话model_id覆盖 agent 的默认模型必须在allowed_model_ids中credential_id用于令牌生成的内部授权方标识bearer_token手动生成的 bearer tokenconnector_ids本次调用要附加的内部 connector id例如我可以为某个 agent 配置一组可选模型终端用户只能从中选择。管理员视图为终端用户选择允许的模型然后终端用户即可选择自己的偏好模型。终端用户视图选择偏好模型如果用户选择了另一个模型该选择会随 invoke 请求一并传入随后 agent 会使用该模型进行处理。运行时添加工具在运行时更新模型相对容易因为这只是 agent 里多处理一个参数。而在运行时新增工具则有些“弯”需要格外注意。运行时启用 connector 的界面在介绍文中我提出了客户挑战 #6需要在委托的 actor 链条中管理身份传递。我建议用有意的架构约束将其简化为单跳。这也是许多 agent 式用户界面今天采取的方式——用户可按需启用连接。这种方式的关键好处在于当用户切换打开一个新的 connector 时顺势捕获用户凭证。我推测在这一刻采集凭证会带来“最小化”的用户授权疲劳因为用户此时强烈意图与该集成交互。等到真正需要时才去采集凭证并不合理因为用户可能已离开去处理一个长时任务。比如这就像你在 Claude Code 中启动了一个长时任务、转身离开回来后发现它在你离开 10 秒后就暂停执行了并请求你授权访问某个目录或读取某个文件。请注意这是一种“简化”而不是 agent 身份与权限委托问题的最终解。RFC 8693 是一个 token exchange 的提案它通过在 JWT 中携带 actor claim 的方式帮助进行委托。在上面的示例截图中我在 exa.ai/mcp 上注册并创建了一个 API key在免费档位下每月可发出 1000 次请求足以满足基础原型需求。虽然我可以在管理员层面配置 MCP server但这样做会导致每位启用该 connector 的用户都共用这把 API key。有的场景没问题但也有的场景需要“按用户”的 API key。MCP connectors 的按用户 API key我选择了后者。因此当用户启用该 connector 时会弹出一个对话框提示用户输入个人 API key。之后在请求 MCP server 时就使用这把个人 key。需要注意的是在我写下这段内容时AgentCore 的 credential providers 还不支持按用户的 API key。因此我是在 agent 请求里注入请求头而不是使用 credential provider。在 Loom 中集成托管的 agent harness为了达到目前的状态我进行了相当多的迭代。一方面自建 agent harness 让我学到了很多也带来了极大的灵活性比如为遥测与成本估算添加自定义日志。另一方面这可能比一个人愿意为 agent 平台投入的工程量更多。Harness for AgentCore 刚刚发布目标是简化 agent 的部署以及与各类上下文提供方的集成。我尤其喜欢托管 agent harness 的一点是它在部署时与运行时都同时支持模型选择与工具集成。比如在部署阶段我可以这样配置以 CLI 为例aws bedrock-agentcore-control create-harness \ --region us-east-1 \ --harness-name loom-harness-example \ --execution-role-arn arn:aws:iam::${ACCOUNT_ID}:role/loom-harness-role \ --system-prompt persona, instructions, guidelines \ --model us.amazon.nova-2-lite-v1:0 \ --max-iterations 75 \ --max-tokens 16384 \ --tools [{type: remote_mcp, name: exa, config: {remoteMcp: {url: https://mcp.exa.ai/mcp}}}] \ --memory {optionalValue: {agentCoreMemoryConfiguration: {arn: arn:aws:bedrock-agentcore:${REGION}:${ACCOUNT_ID}:memory/${MEMORY_ID}}}}同样地在运行时我也可以覆盖模型与工具选项例如response client.invoke_harness( harnessArnHARNESS_ARN, runtimeSessionIdSESSION_ID, messages[ { role: user, content: [ {text: Whats the weather in New York City?} ], } ], model{ bedrockModelConfig: { modelId: us.anthropic.claude-sonnet-4-6 } }, tools[ { type: remote_mcp, name: exa, config: {remoteMcp: {url: https://mcp.exa.ai/mcp}} } ])对于构建 agent 的全托管、serverless 体验而言这节省了大量时间而且部署过程相当轻快我的自定义 agent 大约需要 1 分钟harness 部署只需约 20 秒在 Loom 中使用 AgentCore 新 harness 创建的 agent我也已经将托管的 agent harness 集成进 Loom并在版本 1.3.0 中提供。请注意你需要将boto3升级到1.42.94版本以使用新的 harness 方法。另请注意对于需要 OAuth2 access tokens 的远程 MCP servers目前似乎还不支持 credential providers需要自行添加自定义授权请求头。{ harnessArn: arn:aws:bedrock-agentcore:region:account-id:harness/harness-id, runtimeSessionId: 552bb0ed-f268-46e6-9db9-53df37b149f0, messages: [ { role: user, content: [ { text: Whats the weather in New York City? } ] } ], tools: [ { type: remote_mcp, name: utilities, config: { remoteMcp: { url: https://mcp-server-endpoint/mcp, headers: { Authorization: Bearer } } } } ], actorId: admin}结语随着各组织同时追求效率与响应质量harness engineering 正当其时。构建一个 agent harness 并非难事但确实需要仔细权衡与设计。AWS 刚刚发布了全托管的 agent harness显著简化了在云端构建与部署 agent 的体验。AWS 控制台还提供了 playground 体验让测试变得非常轻松。学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%免费】

相关新闻

Windows系统wpsystem文件夹解析:安卓子系统数据管理与清理指南

Windows系统wpsystem文件夹解析:安卓子系统数据管理与清理指南

1. 项目概述:揭开“wpsystem”文件夹的神秘面纱如果你在Windows电脑的某个磁盘根目录下,突然发现一个名为“wpsystem”的文件夹,并且它顽固地占据着不小的空间,还无法轻易删除,心里是不是会咯噔一下?这玩意…

2026/6/20 2:12:21阅读更多 →
3步快速解决华硕笔记本色彩配置文件丢失问题:G-Helper免费修复指南

3步快速解决华硕笔记本色彩配置文件丢失问题:G-Helper免费修复指南

3步快速解决华硕笔记本色彩配置文件丢失问题:G-Helper免费修复指南 【免费下载链接】g-helper Lightweight Armoury Crate alternative for Asus laptops with nearly the same functionality. Works with ROG Zephyrus, Flow, TUF, Strix, Scar, ProArt, Vivobook,…

2026/6/20 1:30:05阅读更多 →
告别“改代码式”运维!eBPF 技术如何实现全语言、零侵入的应用可观测?

告别“改代码式”运维!eBPF 技术如何实现全语言、零侵入的应用可观测?

作者:古琦 背景 在云原生与微服务架构下,一套生产系统往往横跨 Go、Java、Python、Node.js 等多种语言运行时,部署形态又散落在容器、Kubernetes、Serverless 之间。要在这样的异构环境里建立统一的可观测性,传统做法是为每种语…

2026/6/20 1:55:57阅读更多 →
在线图像隐写分析:三分钟掌握StegOnline的核心价值

在线图像隐写分析:三分钟掌握StegOnline的核心价值

在线图像隐写分析:三分钟掌握StegOnline的核心价值 【免费下载链接】StegOnline A web-based, accessible and open-source port of StegSolve. 项目地址: https://gitcode.com/gh_mirrors/st/StegOnline 图像隐写技术、数据隐藏分析、在线安全工具——这些听…

2026/6/20 3:48:04阅读更多 →
Playwright实战:构建工业级科幻电影Top50数据采集管道

Playwright实战:构建工业级科幻电影Top50数据采集管道

1. 项目概述:从“拉取数据”到“构建数据管道”“用 Playwright 拉取科幻电影排名前50”,这个标题听起来像是一个简单的自动化脚本任务。但如果你像我一样,在数据抓取这个领域摸爬滚打了十几年,就会明白,任何一个看似简…

2026/6/20 3:48:04阅读更多 →
Midscene.js实战:基于多模态大模型的AI自动化测试解决方案

Midscene.js实战:基于多模态大模型的AI自动化测试解决方案

1. 项目概述:为什么我们需要 Midscene.js?最近在跟几个测试团队的朋友聊天,发现大家普遍有个痛点:传统的自动化测试脚本,维护成本太高了。页面元素一变,脚本就得跟着改,一个回归测试跑下来&…

2026/6/20 3:48:04阅读更多 →
Simulink变尺寸信号在雷达多目标跟踪仿真中的核心实现与应用

Simulink变尺寸信号在雷达多目标跟踪仿真中的核心实现与应用

1. 项目概述:雷达跟踪与变尺寸信号在雷达信号处理与目标跟踪的仿真领域,Simulink一直是一个核心工具。传统的Simulink模型在处理数据流时,通常假设信号的尺寸(如向量长度、矩阵维度)在仿真运行期间是固定不变的。这符合…

2026/6/20 3:48:04阅读更多 →
构建稳健的股票数据管道:从yfinance/AkShare到自动化更新

构建稳健的股票数据管道:从yfinance/AkShare到自动化更新

1. 项目概述:从零开始构建你的股票数据工具箱“Download Stock Data”,这个标题听起来简单直接,但背后蕴含的是一个数据驱动时代下,无论是量化研究员、金融分析师,还是个人投资者,都绕不开的核心技能&#…

2026/6/20 3:48:04阅读更多 →
SPI协议原理与MC9S08SG32实战:从时钟模式到寄存器配置详解

SPI协议原理与MC9S08SG32实战:从时钟模式到寄存器配置详解

1. SPI协议核心原理与工作模式解析SPI,全称Serial Peripheral Interface,是一种在嵌入式世界里几乎无处不在的同步串行通信协议。它不像UART那样需要事先约定波特率,也不像I2C那样需要复杂的地址寻址和应答机制。SPI的核心思想极其简洁&#…

2026/6/20 3:43:03阅读更多 →
【课程设计/毕业设计】基于 Web 的高校县志馆藏信息综合管理系统设计与实现 基于Django的青岛滨海学院特色文献捐赠流转管理系统的设计与实现【附源码、数据库、万字文档】

【课程设计/毕业设计】基于 Web 的高校县志馆藏信息综合管理系统设计与实现 基于Django的青岛滨海学院特色文献捐赠流转管理系统的设计与实现【附源码、数据库、万字文档】

博主介绍:✌️码农一枚 ,专注于大学生项目实战开发、讲解和毕业🚢文撰写修改等。全栈领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围:&am…

2026/6/20 0:02:40阅读更多 →
MC68HC908RF2A定时器PWM生成原理与实战:无缓冲与缓冲模式详解

MC68HC908RF2A定时器PWM生成原理与实战:无缓冲与缓冲模式详解

1. 项目概述与核心价值在嵌入式开发,尤其是电机驱动、LED调光、开关电源这些需要精确控制“能量”的领域,脉冲宽度调制(PWM)技术是工程师手中的一把瑞士军刀。它的本质很简单:用一个固定频率的方波,通过改变…

2026/6/20 0:02:40阅读更多 →
在银河麒麟V10桌面(2205版本)上实战部署软RAID 1:从模块黑名单到自动挂载

在银河麒麟V10桌面(2205版本)上实战部署软RAID 1:从模块黑名单到自动挂载

1. 银河麒麟V10桌面系统与软RAID 1基础认知 第一次在银河麒麟V10桌面上折腾软RAID 1时,我踩了不少坑。这个国产操作系统基于Linux内核,但2205版本对软RAID模块做了特殊处理,需要额外操作才能正常使用。软RAID 1其实就是磁盘镜像技术&#xff…

2026/6/20 0:02:40阅读更多 →