转写说明
本文基于已校验的公开原文进行结构化转写与事实梳理,非原文转载。 转写保留可核验的技术事实,并将工程建议与来源观点明确分开。
- 原作者: dzhd
- 原始来源: https://juejin.cn/post/7672695343738454052
- 原文发布时间: Tue, 11 Aug 2026 10:44:02 GMT
核心结论
Harness 是一种将大模型应用分解为生成、评测、择优三个阶段的流水线编排框架。生成阶段通过 Array.from 与 Promise.all 组合并行发出 N 个请求,评测阶段由 LLM 作为 Judge 输出结构化分数,最后根据分数择优输出。该框架的核心价值在于将大模型的随机性从缺陷转化为优势,用工程手段覆盖质量波动。
框架的核心函数共五个:askLLM 封装所有 LLM 通信;generateCandidates 实现并行生成;judge 负责单个候选的评分;evaluateAll 串行评测所有候选;pickBest 从评测结果中选取最高分。整个实现不足 80 行代码,体现了单一职责原则在 AI 工程中的应用。
能力机制
框架的三阶段流水线各司其职。生成阶段调用 Promise.all 实现真正的高并发,请求之间无串行等待。评测阶段使用 for...of 串行循环处理候选,原因是评测阶段存在隐式速率限制,同一 API Key 并发请求过多可能触发限流导致整批评分失败。择优阶段采用 sort 按分数降序排序后取第一个元素。
Array.from 在此承担双重职责:创建数组结构的同时,在构造期间同步执行回调函数生成 Promise,而非先创建稀疏数组再遍历填充。这种写法在 JavaScript 单线程事件循环下实现了最高并发度。
askLLM 函数将客户端创建和 API 细节封装为唯一 I/O 边界,API Key、模型名、Base URL 均从环境变量读取,与代码分离。换环境只需修改配置文件。
快速开始
环境变量配置通过 dotenv 模块加载 .env 文件完成。必需的环境变量包括 OPENAI_API_KEY、OPENAI_API_BASE_URL、MODEL_NAME。配置与代码分离实现一次注入全局复用。
核心调用入口为 harness 函数,传入提示词字符串后自动完成生成、评测、择优三阶段流水线,返回得分最高的候选答案。
| |
适用边界
该框架适用于需要对抗大模型输出不确定性的场景,通过并行生成覆盖随机性,用评分筛选质量。它无法保证评测准确度,Judge 的 prompt 设计本身也是需要调参的超参数,角色锚定会显著影响评分气质。
并发度 N 的选择存在权衡:太少覆盖不到随机性,太多浪费 token 和时间。评测阶段的串行处理虽然降低了触发限流的风险,但整体吞吐量受限于 API 速率限制。框架适用于 OpenAI 兼容协议的服务端,接入千问、DeepSeek 等模型需确保其实现 /v1/chat/completions 接口。
三个阶段的解耦使得各环节可独立替换:生成质量可通过调整 N 值改善,评测模型可替换为更强的推理模型,择优策略可从最高分改为多数投票等形式。
核验清单
- 每个函数职责单一,符合单一职责原则
- 环境变量实现配置与代码分离,换环境不改代码
- 生成阶段并行、评测阶段串行,符合工程判断
Array.from构造期间同步执行回调实现真正并发- 评测结果解析包含容错兜底,不假设输出必为数字
- 框架输出纯文本,不含 HTML、图片或外部链接
- 快速开始仅列出环境变量名称,未写入任何示例密钥值
来源与核验
- 原始文章
- 页面事实以原始来源及其引用的官方资料为准;版本、星标和模型能力会随时间变化。
- AI Stack 不公开抓取到的全文快照,只发布独立转写与来源入口。