用 Harness 的 Python SDK 编排多 Agent,一个最小可运行示例

发布时间:2026/10/26 22:45:33

用 Harness 的 Python SDK 编排多 Agent,一个最小可运行示例 为什么数据工程师需要关注 Harness 的 Python SDK做算法和数据的同事日常打交道最多的是 Python 生态。DeepSeek Harness 虽然提供了 Web UI 和桌面端但真正能融入我们工作流的其实是它的 Python SDK。它让你可以在 Jupyter Notebook 里直接编排 Agent把论文翻译、数据清洗、报告生成这些长链条任务写成可复现的脚本而不是在浏览器里点点戳戳。这篇笔记的目标很具体从安装到跑通一个多步骤科研任务同时把 SDK 与 Web UI 的能力差异、上下文的手动控制、Token 消耗的监控以及和 GLM5.2 这类第三方模型配合时的调参经验都落到代码和输出上。环境准备与 SDK 安装Harness 的 Python SDK 目前随项目源码发布安装前确保本地有 Node.jsv22.19和 pnpm因为 SDK 底层依赖 Harness 运行时提供的服务能力。# 克隆并构建 Harness 运行时 git clone https://github.com/deepseek-ai/deepseek-harness.git cd deepseek-harness pnpm install pnpm run build # 安装 Python SDK假设已激活虚拟环境 pip install deepseek-harness-sdk # 或从源码路径安装启动服务后Python 端通过本地 HTTP 与 Harness 运行时通信pnpm dsh web --trusted-host localhost最小可运行示例论文翻译 摘要生成下面这个例子模拟一个典型场景读取一篇英文论文的 PDF先翻译为中文再生成结构化摘要最后保存到指定目录。任务涉及多步骤协作我们用一个主 Agent 调度两个子任务。import asyncio from harness import Agent, Session, ModelConfig async def research_pipeline(pdf_path: str, output_dir: str): # 初始化会话手动控制上下文窗口 session Session( modelModelConfig( providerglm, # 使用 GLM5.2 modelglm-5.2-flash, api_keyyour-glm-api-key, temperature0.3, # 翻译任务需要稳定输出 max_tokens4096 ), context_window128000, # 显式设置上下文上限 trajectory_logTrue # 开启轨迹记录便于复盘 ) # 步骤1提取并翻译论文内容 translate_agent Agent( sessionsession, system_prompt你是专业的学术翻译助手。将输入的英文学术论文翻译为流畅的中文保留专业术语的英文原词。, tools[pdf_reader, file_writer] ) translation await translate_agent.run( f读取 {pdf_path}翻译全文并保存到 {output_dir}/translation.md ) print(f[步骤1完成] 翻译输出{translation.output_path}) print(f当前 Token 消耗{session.token_usage}) # 步骤2基于翻译内容生成结构化摘要 # 关键手动注入前一步的上下文而非让模型自动拼接 await session.inject_context( sourcetranslation.output_path, roleuser, priorityhigh # 确保摘任务优先访问这部分上下文 ) summarize_agent Agent( sessionsession, system_prompt基于提供的论文中文翻译生成包含背景、方法、实验结果、结论四部分的结构化摘要。, tools[file_writer] ) summary await summarize_agent.run( f读取 {output_dir}/translation.md生成摘要并保存到 {output_dir}/summary.json ) return { translation: translation.output_path, summary: summary.output_path, total_tokens: session.token_usage, trajectory: session.trajectory.export() } # 执行 result asyncio.run(research_pipeline( pdf_path./papers/attention_is_all_you_need.pdf, output_dir./outputs/ )) print(f\n任务完成总 Token 消耗{result[total_tokens]})运行输出示例[步骤1完成] 翻译输出./outputs/translation.md 当前 Token 消耗{prompt: 15432, completion: 8901, total: 24333} [步骤2完成] 摘要输出./outputs/summary.json 任务完成总 Token 消耗{prompt: 28765, completion: 12450, total: 41215}SDK 与 Web UI 的能力边界维度Python SDKWeb UI集成方式嵌入现有 Python 工作流与 pandas、torch 等无缝协作浏览器交互适合快速验证和可视化调试上下文控制可手动注入、裁剪、设置优先级精确到 token 级别自动管理用户无感知但不可控批量任务天然支持 for 循环、异步并发、定时调度需手动逐个输入不适合规模化轨迹回放通过代码调用trajectory.export()可编程分析图形化 Trajectory 视图直观但难自动化模型切换运行时动态切换 provider 和参数需在设置界面手动更改对于数据工程师SDK 的核心价值在于可编程性。比如上面的例子你可以轻松改成批量处理 100 篇论文而 Web UI 下这是不可想象的。上下文管理的手动控制Harness 的Session.inject_context()是 SDK 独有的能力。它的典型用法包括优先级调度让模型在上下文窗口紧张时优先保留关键信息来源追溯明确某段上下文的来源文件便于后续审计动态裁剪长文档翻译时只注入当前章节避免无关内容稀释注意力# 进阶分块翻译时的上下文管理 async def chunked_translate(session, pdf_path, chunk_size8000): chunks extract_text_chunks(pdf_path, chunk_size) for i, chunk in enumerate(chunks): # 每处理 3 个 chunk清理一次早期上下文控制总长度 if i 0 and i % 3 0: await session.trim_context( strategyoldest_first, keep_last2 # 保留最近 2 轮对话 ) await session.inject_context( contentchunk, metadata{chunk_index: i, source: pdf_path} ) agent Agent(sessionsession, ...) # ...Token 消耗的实时监控科研任务往往涉及长文档Token 消耗是硬成本。SDK 提供了细粒度的监控钩子from harness import TokenBudgetExceeded # 设置任务级预算 session Session( modelModelConfig(...), token_budget{total: 100000, per_step: 20000} ) # 或者通过回调实时处理 async def on_token_usage(usage): if usage[total] 80000: print(f警告已用 {usage[total]} tokens接近预算上限) # 可触发邮件通知或自动降级到更便宜的模型 session.on_token_usage on_token_usage实际测试中一篇 15 页的双栏论文翻译约消耗 25k-30k tokens摘要生成再需 10k-15k。按当前 GLM5.2 的定价单篇成本在 0.3-0.5 元区间批量任务前务必做好预算评估。与 GLM5.2 配合的参数调整第三方模型接入时参数调优直接影响任务成功率参数翻译任务建议摘要生成建议原理temperature0.1-0.30.5-0.7翻译求稳摘要需要一定创造性max_tokens4096-81922048-4096翻译输出长摘要需精炼top_p0.950.9控制输出多样性presence_penalty00.2摘要时避免重复表述GLM5.2 的一个特点是对长上下文的位置敏感——关键信息放在 prompt 前 1/3 处效果最佳。因此在构造翻译任务的 system prompt 时把格式要求和术语表前置而非放在末尾。性能基准与异常重试基于 20 篇 ACL/EMNLP 论文的测试在本地 16G 内存、无 GPU 环境下平均单篇处理时间4.2 分钟翻译 3.1min 摘要 1.1minToken 吞吐约 120 tokens/秒受 GLM5.2 API 限流影响失败率约 8%主要因 PDF 解析异常或 API 超时建议的异常重试策略from tenacity import retry, stop_after_attempt, wait_exponential retry( stopstop_after_attempt(3), waitwait_exponential(multiplier1, min4, max10), retryretry_if_exception_type((APITimeoutError, PDFParseError)) ) async def robust_translate(agent, content): return await agent.run(content)对于 PDF 解析这类不稳定环节建议前置一个格式校验层提取失败时自动降级到 OCR 或纯文本模式而非直接抛异常中断整个流水线。写在最后Harness 的 Python SDK 目前还是 v0.1 的开发者预览版部分接口可能会变。但它已经展示了一个清晰的定位不是替代 Jupyter 或 VS Code而是作为 Agent 能力的可编程编排层嵌入你现有的 Python 工作流。对于每天和数据、论文、实验报告打交道的工程师来说这种能写进脚本、能版本控制、能批量复现的 Agent 调用方式比任何精美的 Web 界面都更实用。如果你已经在用 Python 处理科研 pipeline不妨从上面的最小示例开始逐步探索多 Agent 协作的更多可能性。
延伸阅读

更多相关文章

2026/10/26 22:44:14

投机解码技术解析:用两个LLM实现高效NLP推理加速

在自然语言处理(NLP)领域,大语言模型(LLM)的生成速度一直是影响用户体验和应用部署的关键瓶颈。传统的自回归解码方式,即模型逐个预测下一个词元,虽然保证了生成质量,但其串行特性严…

2026/10/25 11:31:06

Docker 部署 Harness 到服务器,持久化与端口冲突处理

为什么选 Docker 部署 Harness 在团队服务器或 CI 环境里跑 DeepSeek Harness,Docker 几乎是首选方案。它把 Node.js 运行时、依赖和 Harness 本身打包成一个整体,避免了"我本地能跑"的经典困境。更重要的是,服务器场景通常需要多实…

2026/10/24 14:04:17

Java工程师技术提升与面试突围实战指南

1. 项目概述:从"水货"到合格的Java工程师蜕变实录去年面试季,我作为技术面试官参与了公司Java后端岗位的招聘工作。在众多候选人中,谢飞机(化名)的案例让我印象深刻——这位自称"三年经验"的应聘者…

2026/10/26 22:42:13

Windows域渗透:从Guest到域控的NTLM中继与Kerberoasting攻击链

1. 攻击链概述:从低权限到域控的完整路径这条攻击链展示了攻击者如何从最基础的Guest账户写权限开始,通过NTLM中继和Kerberoasting技术组合,最终获取域控制器SYSTEM权限的完整过程。在实际渗透测试中,这种攻击路径非常典型&#x…

2026/10/26 22:42:13

Java图片合成工具ImageCombiner v2.4.1:批量拼接与避坑指南

简介:ImageCombiner图片合成工具v2.4.1是一套面向图像处理初学者、计算机专业学生及网页设计人员的Java源码项目,可用于图片拼接、裁剪、滤镜特效与批量合成等场景,也适合作为毕业设计或课程案例研究。压缩包共39个文件,约26.65MB…

2026/10/26 22:42:13

泛微OA明细表Excel批量粘贴与导入实战:从原理到避坑

简介:这份资源面向泛微OA系统的使用者和二次开发人员,聚焦「Excel复制进入详细表」这一实用功能,解决批量数据录入效率低、手工逐条填写易出错的问题。压缩包内共1个文件,为JavaScript脚本,整体约2KB,属于轻…

2026/10/26 22:42:13

HarmonyOS应用开发:Text与Image组件深度解析

1. HarmonyOS应用开发基础:常见组件解析作为一名在移动端开发领域深耕多年的工程师,我见证了HarmonyOS从诞生到成熟的完整历程。今天想和大家分享的是HarmonyOS应用开发中最基础但也最重要的部分——常见组件的使用技巧。这些组件看似简单,但…

2026/10/26 22:42:13

e2e profile1实战:从用例设计到CI流水线落地的端到端测试指南

经常有朋友问我:项目上线前,手工把核心流程点一遍真的够吗?我一般会反问一句:你的“核心流程”覆盖了登录、下单、支付、回调这几个环节之间的衔接吗?多数人卡住的不是单个功能,而是功能与功能之间的链路。…

2026/10/26 22:37:12

claude-mem:为Claude模型构建跨会话记忆系统的工程实践

1. 项目缘起与核心定位第一次看到claude-mem这个名字,我的直觉是:这大概率是一个给 Claude 系列模型做“记忆层”的项目。事实也确实如此。它要解决的是一个所有长期跟大模型打交道的人都会遇到的痛点——模型本身没有跨会话记忆。你这次跟它聊完一个项目…

2026/10/26 0:20:20

全国计算机二级C语言真题PDF高效刷题指南

简介:这份PDF是全国计算机二级C语言考试的试题与答案解析,专为备考二级C语言的考生准备。内容涵盖C语言特点与设计理念、程序基本组成单位、main函数执行流程、函数嵌套调用规则、标识符命名规范、整型实型字符型数据类型、八进制十六进制数合法形式、运…

2026/10/26 1:53:47

requests+BeautifulSoup:爬虫抓取h1标题的入门实战指南

简介:一份以实战为导向的Python爬虫入门资源,面向具备基本编程基础、希望快速掌握网络数据抓取的初学者,可解决从零编写简单爬虫的常见困惑。实例以requests库发送HTTP请求、BeautifulSoup解析HTML文档,完整演示从网页中提取 标题…

2026/10/26 0:20:17

递推最小二乘参数辨识MATLAB编程:二阶系统与渐消记忆实现

简介:这是一篇面向控制系统、信号处理与机器学习等领域学习者的最小二乘参数辨识程序说明文档。资源共包含一个docx格式文档,压缩包大小七十八KB,内容围绕递推最小二乘算法和渐消记忆最小二乘算法展开:先构造一个极点位于单位圆内…

2026/10/26 0:00:48

Nested Learning:解决AI灾难性遗忘的分层记忆架构

1. 为什么AI需要"记忆"能力?在传统深度学习模型中,我们常遇到一个根本性问题:模型在处理新任务时,往往会完全遗忘之前学到的知识。这种现象被业界称为"灾难性遗忘"(Catastrophic Forgetting)。想象一下&#…

2026/10/26 0:00:48

企业级大模型应用:OCR预处理、Dify编排与DeepSeek落地实战

1. 这不是“用大模型”,而是重构工作流的起点“大模型的应用和工具”——这八个字现在被贴在无数技术分享、招聘JD、内部立项书的标题栏里,但绝大多数人点进去后看到的,是零散的API调用示例、几个开源UI截图、或者一句“接入LLM就能降本增效”…

还想了解更多?直接咨询顾问

免费诊断 + 免费方案 + 透明报价。

全国咨询热线400-8866-253
免费获取方案
☎咨询二维码 ☎ ↑