转写说明

本文基于已校验的公开原文进行结构化转写与事实梳理,非原文转载。 转写保留可核验的技术事实,并将工程建议与来源观点明确分开。

核心结论

Harness 是一种将大模型应用分解为生成、评测、择优三个阶段的流水线编排框架。生成阶段通过 Array.fromPromise.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_KEYOPENAI_API_BASE_URLMODEL_NAME。配置与代码分离实现一次注入全局复用。

核心调用入口为 harness 函数,传入提示词字符串后自动完成生成、评测、择优三阶段流水线,返回得分最高的候选答案。

1
2
3
import { config } from 'dotenv';
config();
const bestCode = await harness("请使用 JavaScript 实现一个数组去重函数");

适用边界

该框架适用于需要对抗大模型输出不确定性的场景,通过并行生成覆盖随机性,用评分筛选质量。它无法保证评测准确度,Judge 的 prompt 设计本身也是需要调参的超参数,角色锚定会显著影响评分气质。

并发度 N 的选择存在权衡:太少覆盖不到随机性,太多浪费 token 和时间。评测阶段的串行处理虽然降低了触发限流的风险,但整体吞吐量受限于 API 速率限制。框架适用于 OpenAI 兼容协议的服务端,接入千问、DeepSeek 等模型需确保其实现 /v1/chat/completions 接口。

三个阶段的解耦使得各环节可独立替换:生成质量可通过调整 N 值改善,评测模型可替换为更强的推理模型,择优策略可从最高分改为多数投票等形式。

核验清单

  • 每个函数职责单一,符合单一职责原则
  • 环境变量实现配置与代码分离,换环境不改代码
  • 生成阶段并行、评测阶段串行,符合工程判断
  • Array.from 构造期间同步执行回调实现真正并发
  • 评测结果解析包含容错兜底,不假设输出必为数字
  • 框架输出纯文本,不含 HTML、图片或外部链接
  • 快速开始仅列出环境变量名称,未写入任何示例密钥值

来源与核验

  • 原始文章
  • 页面事实以原始来源及其引用的官方资料为准;版本、星标和模型能力会随时间变化。
  • AI Stack 不公开抓取到的全文快照,只发布独立转写与来源入口。

站内链接

相关文章