拒绝第三方重型黑盒依赖!使用 JavaScript 从零理解教学版轻量 Harness,并在线体验预设流程模拟。
许多初学者一上来就使用 LangChain 或 AutoGen 等三方库,往往面临以下痛点:
以下示例使用 Node.js 18+,通过确定性的模拟模型演示循环;不是实际模型调用,也不是生产实现:
// 保存为 minimal-harness.mjs,运行:node minimal-harness.mjs
// 教学模拟:无网络、无真实模型调用、无生产鉴权或持久化。
const messages = [{ role: 'user', content: '计算 12 + 30' }];
const tools = {
add(args) {
if (!args || typeof args.a !== 'number' || typeof args.b !== 'number' ||
!Number.isFinite(args.a) || !Number.isFinite(args.b)) {
return { error: 'a 和 b 必须是有限数字' };
}
return { value: args.a + args.b };
}
};
function mockModel(history) {
const last = history.at(-1);
if (last.role === 'tool') return { role: 'assistant', content: `结果:${last.result.value}` };
return { role: 'assistant', toolCall: { id: 'call-1', name: 'add', args: { a: 12, b: 30 } } };
}
async function run(maxSteps = 4) {
for (let step = 0; step < maxSteps; step++) {
const reply = mockModel(messages);
messages.push(reply);
if (!reply.toolCall) return reply.content;
const { id, name, args } = reply.toolCall;
const result = Object.hasOwn(tools, name) ? tools[name](args) : { error: '未知工具' };
messages.push({ role: 'tool', toolCallId: id, result });
}
throw new Error('超出循环预算');
}
console.log(await run()); // 结果:42
// 真实模型需要适配对应 API 的消息协议,并增加权限、超时、幂等、审计等控制。
选择预设任务,点击“启动 Harness 运行”,观察浏览器内置轻量仿真内核如何逐轮执行思考、派发工具并生成最终回复:
恭喜你完成了全部七个模块的学习!对照以下清单,检验你是否已经完全掌握了简历上所体现的专家能力: