ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

Strands Harness Python 包开发指南:`strands-harness` 的架构、构建约定与代码规范

Strands Harness Python 包开发指南:`strands-harness` 的架构、构建约定与代码规范 人工智能大模型AI AgentAgent 框架多智能体工具调用MCP 服务【免费下载链接】harness-sdkBuild an agent harness and control it end-to-end. Open-source SDK for production AI agents in Python TypeScript - any model, any cloud.项目地址https://gitcode.com/GitHub_Trending/sdkpython13/harness-sdk点击查看免费下载本文是面向 AI 编码助手与人类贡献者的harness-py包开发指南。strands-harness导入名strands_harness是 Strands 生态中「一次调用即可得到预配置 Agent」的 Python 库层它把模型解析、系统提示词、内置工具、上下文管理与可选的会话持久化组合成一个普通的strands.Agent。读完本文你将掌握create_harness()工厂的组装原理与全部可覆盖默认值、内置工具与插件的挂载方式、开发环境搭建与提交前检查流程以及该包独有的 Python 风格约定导入规范、显式优先透传、effort 映射、Ruff 规则等。本文内容以 harness-py/AGENTS.mdharness-py/CLAUDE.md 指向的包内开发指南为主体骨架并结合harness-py/下的源码、测试与配置逐层展开验证。包定位一个薄组合层而非又一个 Agent 框架strands-harness的设计哲学在 harness-py/AGENTS.md 中一句话讲透它是一个预配置的 Strands Agent一次调用即可完成组装。它不是一个独立的 Agent 框架而是位于strands-agentsSDK 之上的薄组合层thin composition layer把「解析好的模型 官方系统提示词 内置工具 上下文管理 可选会话持久化」接入一个普通的strands.Agent。三个关键特性决定了这个包的边界每个默认值都可覆盖从模型、effort 到会话目录所有默认值都通过create_harness()的关键字参数暴露返回值是普通Agent调用者拿到的是标准的strands.Agent实例构造之后仍可继续修改、扩展或替换 harness 组装好的任何部分纯库无 CLIstrands终端命令位于strands-cli/TypeScript本包不提供命令行入口。从源码结构看这一「薄」定位直接体现在包内模块划分上——每个文件只承担一个职责harness-py/ ├── src/strands_harness/ │ ├── agent.py # create_harness(): 一次调用完成组装的工厂 │ ├── models.py # resolve_model(): provider/name - Model按 provider 映射 effort推理配置 │ ├── prompt.py # HARNESS_CONTRACT build_system_prompt() │ ├── defaults.py # 默认模型、effort、上下文管理器、工具、会话/skills/记忆目录 │ ├── tools/ # harness 自研内置工具file_tools.py读/写/改、web_fetch.py │ └── plugins/ # 内置功能插件todos.py、environment.py ├── tests/ # pytest 测试套件与模块布局一一对应 └── pyproject.toml # 构建配置、依赖、包内工具设置开发环境搭建与质量检查安装与开发依赖创建虚拟环境并以开发模式安装含[dev]额外依赖python -m venv .venv source .venv/bin/activate pip install -e .[dev][dev]额外依赖会拉取可选的模型 providerOpenAI、Anthropic、Gemini因此完整测试套件无需额外配置即可运行。从 harness-py/pyproject.toml 可以看到dev集合中还包含pytest、pytest-asyncio、ruff以及全部可选 providerstrands-agents[openai,anthropic,gemini,ollama,litellm]MCP 测试夹具则固定在mcp1.23.0,2.0.0因为夹具使用 mcp v1 的 FastMCP API而 SDK 允许的 mcp 2.x 已重命名该 API。提交前检查打开 Pull Request 之前运行三项检查ruff format . # 格式化 ruff check . # 代码检查 pytest # 运行测试套件Ruff 的规则集在 harness-py/pyproject.toml 中定义行宽 120启用Epycodestyle 错误、FPyflakes、Iisort 导入排序、UPpyupgrade、Bbugbear五组规则。配置是包内独立的仓库根目录另有一份共享副本*.md被排除在格式化之外与 TypeScript 侧 prettier 只检查src/test而不碰 README 的做法对称。create_harness()一次调用组装一个完整 Agent工厂函数create_harness()定义在 harness-py/src/strands_harness/agent.py是整个包的入口。它只接受关键字参数签名覆盖了模型、effort、指令、工具、插件、MCP 服务器、内置工具、后台任务、缓存、上下文管理、会话、skills、记忆、内置插件、干预等多个维度并把任何未识别关键字通过**agent_kwargs原样透传给Agent。组装流程源码级从create_harness的实现agent.py可以看到组装顺序setup_telemetry()—— 按OTEL_TRACES_EXPORTER环境变量一次性接线导出器见下文「遥测」小节归一化builtin_tools_normalize_builtin_tools、session_session_config、memory_memory_config判定web_search服务方式exa/ 模型原生 / 关闭_web_search_mode解析模型resolve_model并把system_prompt写入agent_kwargs除非调用者显式传了system_prompt组装消费方工具 MCP 服务器加载的工具 内置工具按需挂载 offloader 插件、skills 插件、内置插件todos/environment解析记忆管理器resolve_memory执行工具名冲突预检_check_name_collisions解析后台任务策略_resolve_background_tasks构造Agent并移除沙箱自带工具_drop_sandbox_tools返回。返回值与显式优先返回的Agent是标准 SDK 对象可继续修改。create_harness(**agent_kwargs)会把未识别的关键字直接透传给Agent且显式值永远优先于其对应的 harness 默认值——例如传入session_manager、memory_manager或system_prompt时这些显式值胜出。这是该包的核心约定之一扩展新选项时须保持。模型参数model、effortmodel接受四类值Model或ModelRouter实例原样使用provider/name字符串如anthropic/claude-fable-5裸的 Bedrock 模型 id自动归属bedrockproviderNone使用 harness 默认模型bedrock/global.anthropic.claude-opus-5见 harness-py/src/strands_harness/defaults.py。effort推理强度默认auto可取off、minimal、low、medium、high、xhigh、max。它在 harness-py/src/strands_harness/models.py 中被映射到各 provider 自己的请求字段并在 harness 内做本地校验——不支持的级别在 harness 就报错而不是等下游请求失败Anthropic 系列direct 与 Bedrock 上映射为 thinking 块adaptive/extended_CLAUDE_MAX_TOKENS按型号家族钳制max_tokens如claude-opus-128k、claude-haiku-64k_CLAUDE_MAX_TOKENS_BY_VERSION对 4-5/4.5 版本固定 64kOpenAIResponses API映射为params[reasoning] {effort: ...}级别集为minimal/low/medium/high/xhigh/noneGemini 映射为thinking_config.thinking_levelBedrock 按模型家族细分GPT-5.6/6-astra、gpt-oss、qwen、xai 各有独立级别集见_BEDROCK_GPT_LEVELS等无推理级别集的 provider如 ollama只接受auto与off否则抛错。注意当model是Model/ModelRouter实例时非auto的effort会被忽略并记录警告应在实例上直接配置推理因为实例的 provider 未知。系统提示词instructions、system_promptharness-py/src/strands_harness/prompt.py 提供HARNESS_CONTRACT模型无关的行为契约与build_system_prompt()。契约强调四条行为准则有足够信息就行动不重复求证已确立的事实、先探索再改动理解上下文与约定后再改、完成前必须验证做不到验证就明说、不可逆/越界操作先确认。instructions是追加在契约之后的领域块身份、范围、任务策略context_parts追加在最后如时间戳、请求级提示。传入完整system_prompt时instructions被忽略。契约不声明身份或领域这属于消费方的instructions。内置工具builtin_tools默认启用集合定义在 defaults.py(shell, read, write, edit, web_fetch, web_search, programmatic_tool_caller, subagent)builtin_tools接受列表或映射两种形态归一化逻辑在 options.py列表 精确固定只启用列出的名字[]全部关闭映射 在默认集合上编辑False移除、True添加、配置字典「添加并配置」*键默认True是起始集合写False表示从零开始逐个启用。例如{subagent: False}是「默认集减去 subagent」{*: False, read: True}是精确固定为只读工具。各可配置工具的配置键在 types/agent.py 中定义为*ConfigTypedDict工具配置键说明readmedia: bool是否把图片/二进制文档作为可视媒体返回默认取决于模型是否支持媒体块False时始终以文本描述shelldescription: str展示给模型的工具描述省略用 SDK 默认web_fetchmodel、transportmodel指定摘要模型Model/ModelRouter实例或provider/nametransport为curl默认在 agent 沙箱内执行 curl或direct从 harness 进程用标准库直连绕过沙箱programmatic_tool_callerallowed_tools: list[str] \| None、timeout: float \| None限定代码可调用的其他工具名单次运行的墙钟超时含工具调用None不限时subagentmax_depth: int子代理可继续委派的层数上限默认 2web_search三种状态见 agent.pyFalse关闭exa换成 Exa 托管的搜索工具任何模型可用第三方服务会接收查询无 key 可用EXA_API_KEY可解除限流开启时会打警告日志默认/True启用模型原生 web 搜索——OpenAI、Anthropic、GoogleGemini以及 bedrock-mantle 上的 GPT-5/GPT-6 模型支持见models.py中Provider.web_search标志与_has_web_search对 Mantle 的收窄Bedrock Converse 与其它 Mantle 模型无此机制在那些模型上显式点名web_search会抛ValueError。subagent工具通过build_default_subagent(create_harness, parent_config, ...)构造子代理是完整的 harness 成员继承模型、内置工具、内置插件、skills、干预策略与消费方plugins/hooks/tools可收窄、不可放宽工具集委派深度有界DEFAULT_SUBAGENT_MAX_DEPTH 2且subagent调用始终在后台运行_ALWAYS_BACKGROUND_TOOL_NAMES。插件plugins、builtin_pluginsplugins传入消费方 SDK 插件先运行builtin_plugins选择内置功能插件默认[todos, environment]todosplugins/todos.py提供todo_write工具把结构化任务列表写入agent.state并通过ContextInjectoreveryTurn触发在每个模型调用前以system-reminder形式临时回显列表——注入是瞬态的、永不进入持久历史因此多步工作中列表始终保持可见environmentplugins/environment.py每次用户轮次前注入平台、当前日期、工作目录、项目AGENTS.md全文截断上限 16,000 字符以及向下两级目录发现的其它AGENTS.md/README.md链接链接而非内容保持块小巧。日期每轮重算其余发现结果按 agent 记忆化所有读取都走 agent 的 sandbox 通道uname -s、pwd因此对本地、Docker、SSH 沙箱一致有效。_SKIP_DIRS跳过node_modules、dist、build、__pycache__等依赖/构建/VCS 目录。MCP 服务器mcp_servers接受标准的mcpServers配置JSON 文件路径或映射本身扁平{name: {...}}映射或放在mcpServers键下的映射。每台服务器的工具被发现并加入工具列表SDK 管理连接与生命周期。默认按服务器名加前缀server_tool防止冲突服务器启动失败只产生「无工具」而不使构造失败需用continue_on_error: false使失败致命prefix: 可去掉前缀。加载后的 MCP 客户端会作为消费方工具参与名称冲突检查并会被提供给subagent委派。会话、skills 与记忆session、skills、memory三者默认全部开启且都是文件后端session默认True通过SnapshotSessionManager把运行快照写入./.agent/sessions{id: ..., dir: ...}可指定 id 与根目录id 会被清洗为[a-z0-9_-]。不自动跨运行恢复无id时每次运行新建会话要续接从返回的agent.session_id读出 id 并在下次传入session{id: ...}。False/None关闭对话仅存内存卸载产物进入临时目录skills默认True通过AgentSkills插件做渐进式披露progressive disclosure。True在./.agent/skills目录存在时加载之否则是 no-opSkillSources技能目录、父目录、SKILL.md、https://URL 或解析后的Skill原样透传AgentSkills实例原样使用文件系统来源经 agent 沙箱读取memory默认True通过MemoryManager把 Agent 学到的持久事实蒸馏为 markdown 文件默认./.agent/memory每轮搜索并注入命中项独立于会话持久化跨会话存活。{dir: ...}移动存储目录{stores: [...]}换成自有存储harness 仍保有注入策略注入开启、search_memory开启、无add_memory写工具子代理委派共享只读视图_ReadOnlyStore包装见 memory.py。蒸馏用与web_fetch摘要相同的小模型异步执行每几轮一次短运行可能来不及触发——用async with agent:作用域或调用agent.shutdown()异步代码await agent.shutdown_async()在关闭边界刷盘。上下文管理与缓存context_manager、cachingcontext_manager默认auto接受策略名auto/agentic、ContextManagerConfig映射自动转成ContextManager(**config)、ContextManager实例或False/None关闭。开启时大型工具结果还会卸载到磁盘上下文中保留预览与引用让 Agent 能在压缩前跑得更久。caching默认开启DEFAULT_CACHING autoBedrock 与 Anthropic direct 由 harness 设置缓存点并缓存工具定义CacheConfig(strategyauto, tools_ttlTrue)OpenAI、Gemini2.5 及更新型号、bedrock-mantle、litellm 服务端自动缓存。False/None关闭 harness 配置的部分在不支持的 provider 上显式开启会抛错对预构建Model实例则警告并忽略须在实例上配置。干预interventions与后台任务background_tasksinterventions默认None关闭所有调用直接执行interventions.py 用确定性字符串文法不做内容嗅探解析ask每个工具调用都请求批准HumanInTheLoop(ask...)smart由 SDK 的 LLM 风险分类器标记危险调用任意其它字符串作为自然语言风险策略成为分类器的提示词以.cedar结尾的路径加载CedarAuthorization策略需pip install strands-agents[cedar]HumanInTheLoop/CedarAuthorization实例或它们的列表完全自控同类处理器的名称冲突会在构造期抛出每种类型一个Cedar 一个人工门可共存。subagent子代理继承干预策略无法绕过门禁。background_tasks默认None模型可为任何兼容工具选择后台执行subagent始终后台运行False关闭或传BackgroundTasksConfig策略控制其它工具、并发、完成与超时。工具名冲突预检_check_name_collisionsagent.py在构造期检查内置工具、消费方tools、插件产出工具、记忆工具四类来源-/_仅差别的名字视为冲突与 SDK 工具注册表一致冲突立即抛ValueError并点名落败来源而不是让某个工具静默消失。MCP 工具名要等客户端连接后才可知故跳过预检但其默认加前缀降低了冲突概率。遥测OTEL 追踪接线telemetry.py 是 harness 在遥测上的唯一职责只接线导出器且仅在要求时。它读取标准OTEL_TRACES_EXPORTER选择器otlp/console/none逗号分隔未设置或为none时完全不做任何事——不遵循 OTEL 规范默认的otlp避免静默立起指向localhost:4318的导出器拖慢进程退出。端点、头与协议通过常规OTEL_EXPORTER_OTLP_*变量配置。追踪是进程级的provider 挂在 OpenTelemetry 全局 API 上因此每个进程最多设置一次_configured标志多次构造 Agent 或generalist每调用构造一个 Agent 都不会堆叠重复导出器。Python 风格约定速览harness-py/AGENTS.md 列出本包专属约定与根 AGENTS.md 中的跨包规则与harness-ts/的公开面一致性、共享默认值、单一系统提示词产物、evergreen 注释规则互补导入置于文件顶部绝不在函数内内联——唯一例外是重的可选依赖必须保持惰性models.py的各 provider builder 函数内部导入模型类保证未安装某 provider extra 时strands-harness仍可安装使用核心strands依赖session manager、offloader、skills 插件始终可用在agent.py顶部照常导入显式优先透传explicit-wins passthroughcreate_harness(**agent_kwargs)把未识别关键字直通Agent显式值优先于对应默认值Provider effort 配置models.py把统一的一个effort级别映射到各 provider 自己的请求字段并做本地校验让不支持的级别在 harness 内失败而非下游报错校验保持在本地Ruff 约束样式行宽 120E、F、I、UP、B规则配置在包内pyproject.toml仓库根目录有共享副本公开函数带类型注解包随附py.typedpy.typed文件存在于 harness-py/src/strands_harness/ 下。跨包规则统一在根 AGENTS.md 陈述一次本包文件只展示 Python 惯用法与 Python 专属规则当规则同时适用于两个包时改根文件而非本包文件。测试体系与模块布局一一对应tests/目录镜像src/strands_harness/的模块布局pyproject.toml中testpaths [tests]、asyncio_mode auto。测试覆盖包括tests/test_agent.py工厂组装、默认值覆盖、冲突预检等tests/test_config.py、tests/test_models.py、tests/test_prompt.py配置归一化、模型解析、系统提示词拼接tests/test_interventions.py、tests/test_memory.py、tests/test_telemetry.py干预文法、记忆解析、遥测环境变量行为tests/plugins/todos 与 environment 插件的注入行为tests/tools/文件工具、web_fetch、web_search、programmatic tool caller 等内置工具含 echo_mcp_server.py 等 MCP 测试服务器tests_integ/端到端集成测试如 test_e2e.py命中真实模型可用pip install -e .[integ]自足安装后以pytest tests_integ --reruns 2运行pytest-rerunfailures重试偶发 LLM 偏差。小结harness-py的价值在于把「生产级 Agent 的琐碎组装」收敛为一次调用同时把每个旋钮都暴露出来。开发者在 harness-py/src/strands_harness/agent.py 的create_harness签名上就能看清全部可配置面想深入某一机制原生搜索、thinking 映射、记忆蒸馏、干预文法对应源码文件都有精确的 docstring 与实现可循。遵循本文的开发命令与约定pip install -e .[dev]ruff format/checkpytest以及导入、透传、effort 校验、类型注解五条约定即可与这个包的维护节奏保持一致。赞分享人工智能大模型AI AgentAgent 框架多智能体工具调用MCP 服务【免费下载链接】harness-sdkBuild an agent harness and control it end-to-end. Open-source SDK for production AI agents in Python TypeScript - any model, any cloud.项目地址https://gitcode.com/GitHub_Trending/sdkpython13/harness-sdk点击查看免费下载相关推荐Strands Agents 上手指南用 create_harness() 构建端到端可控的 AI Agent HarnessStrands Agents 上手指南用 create_harness 构建端到端可控的 AI Agent Harness 本文以 harness sdk 仓人工智能大模型AI AgentAgent 框架多智能体工具调用MCP 服务MongoDB 分片集合 $group 下推Pushdown行为解析基于 query_golden_sharding 黄金测试的全面验证MongoDB 分片集合 $group 下推Pushdown行为解析基于 query_golden_sharding 黄金测试的全面验证 本文以 Mong人工智能大模型AI AgentAgent 框架多智能体工具调用MCP 服务harness-sdk strands-review 技能全解析用 Task Reviewer SOP 在本地预演 /strands review 的代码审查harness sdk strands review 技能全解析用 Task Reviewer SOP 在本地预演 /strands review 的代码审查人工智能大模型AI AgentAgent 框架多智能体工具调用MCP 服务上一篇Vue Mini 安装与配置完全指南下一篇Qwen2系列模型技术报告解读从0.5B到72B的完整架构演进指南创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表