简介:本文面向开发者与运维人员,系统讲解如何基于大语言模型构建智能体,并设计 Harness 评测与运行框架。内容涵盖目标拆解、工具调用、任务规划、评测指标、安全隔离、结果验证与常见问题排查,帮助读者完成可复现的智能体落地流程。
本教程的目标是帮助读者完成一套从“大语言模型”到“智能体”再到“Harness 运行与评测框架”的完整落地流程。最终你将能够实现以下效果:
本教程不是单纯介绍概念,而是围绕“如何搭建一个可运行、可验证、可扩展的 LLM 智能体系统”展开,适合希望将大语言模型从“问答工具”升级为“可执行任务的业务系统”的技术人员阅读。
本教程适合以下读者:
常见的可落地场景包括:
本教程将以一个通用的“旅行规划智能体”为例进行说明,但该方法同样适用于其他需要“理解目标 + 拆解任务 + 调用工具 + 汇总结果”的业务场景。
在开始实施前,需要先明确三者关系。很多人会把“调用大模型”误认为就是“智能体”,但实际上,智能体是一个由模型、工具、状态、流程和控制策略共同组成的系统。
LLM,即大语言模型,主要负责:
LLM 本身并不天然拥有“行动能力”。它只能根据输入生成文本或结构化内容。如果希望它完成真实操作,就必须通过工程手段将其连接到外部工具。
Agent 是在 LLM 基础上增加以下能力后形成的系统:
简单说,LLM 是“大脑”,Agent 是“具备手脚、记忆和计划能力的大脑”。
Harness 可以理解为智能体的“运行线束”和“评测框架”。它不是某一个具体功能,而是一套围绕智能体运行过程建立的基础设施,通常包括:
如果 Agent 是执行者,Harness 就是让执行者“可测试、可追踪、可优化、可治理”的系统底座。
在正式实现前,需要准备以下内容。
你需要一个可调用的大语言模型服务。常见能力包括:
如果模型服务支持结构化输出,应优先使用结构化输出降低解析成本;如果不支持,也可以通过提示词约定输出格式,再由程序侧解析和校验。
智能体要“动手”,必须依赖工具。工具可以是:
需要注意:写入类或高风险操作应增加权限控制与人工确认机制。
所有工具调用都应遵循最小权限原则。建议准备:
不要在提示词、日志或前端展示中暴露密钥、令牌、内部地址等敏感信息。
如果要在生产环境运行,可依托云环境中的通用能力,例如:
如果运行在百度智能云等云平台,也可以使用上述通用类目能力完成工程化落地。
没有评测样本,就无法判断智能体是否真正可用。建议至少准备三类样本:
建议读者具备以下基础:
下面按照从 0 到 1 的顺序,拆解智能体与 Harness 的实现步骤。
在开始写代码前,先把任务定义清楚:
例如,对于“旅行规划”任务,可以定义如下目标:
输入:出发地、目的地、日期、预算、偏好。
输出:一份包含交通、住宿、行程安排和注意事项的旅行建议。
边界:只提供建议,不自动完成真实支付;如涉及预订,必须提示用户确认。
智能体最大的风险之一是“边界不清”。如果模型没有明确限制,可能会:
因此,任务边界是智能体安全性的第一道保障。
将智能体需要使用的工具统一抽象为“接口契约”。每个工具至少包含:
示例:
{"name": "query_weather","description": "查询指定城市和日期的天气情况","parameters": {"city": "string","date": "string"},"output": {"temperature": "string","condition": "string"},"idempotent": true}
{"name": "search_transport","description": "查询两地之间的交通方案","parameters": {"origin": "string","destination": "string","date": "string"},"output": {"options": "array"},"idempotent": true}
{"name": "reserve_service","description": "提交预订请求","parameters": {"item_id": "string","user_id": "string","confirm": "boolean"},"output": {"order_id": "string","status": "string"},"idempotent": true,"require_confirmation": true}
工具契约决定了模型能否稳定调用工具。如果参数描述不清,模型容易出现:
清晰的工具契约可以显著降低执行偏差。
智能体不应只输出一段最终答案,而应按照“规划—执行—观察—调整”的循环运行。
一个通用执行循环如下:
输入用户目标↓解析任务状态↓模型生成下一步动作↓如果是工具调用:校验参数并执行↓如果是最终回答:汇总输出↓记录本轮轨迹↓判断是否需要继续
伪代码示例:
state = parse_user_input(user_input)while not state.finished and state.iteration < max_iterations:action = model.plan_next_action(state, available_tools)if action.type == "tool_call":result = validate_and_execute(action)state.observe(result)elif action.type == "ask_user":return clarify_question(action.question)elif action.type == "final_answer":return format_answer(action.content)else:log_warning("未知动作类型")breakreturn fallback_answer()
该循环是智能体的核心运行机制。它让系统具备以下能力:
智能体在处理多步任务时,需要保存状态。状态至少包括:
可以按层次设计:
如果上下文管理不好,智能体容易出现:
Harness 的作用是把智能体的运行过程工程化。建议至少包含以下模块:
一个简化的 Harness 结构如下:
输入样本↓任务执行器↓工具适配层↓轨迹存储↓评测器↓指标报告
轨迹记录建议包含:
{"task_id": "demo-001","input": "帮我规划一次三天旅行","steps": [{"step": 1,"type": "plan","content": "需要查询天气、交通和住宿"},{"step": 2,"type": "tool_call","tool": "query_weather","arguments": {"city": "杭州","date": "2026-06-01"}},{"step": 3,"type": "tool_result","content": "天气晴朗,温度适宜"}],"final_answer": "建议上午抵达,下午游览西湖..."}
没有 Harness,智能体很难做到:
Harness 是把“模型能力”转化为“稳定产品”的关键工程层。
建议从以下维度评估智能体:
示例指标表:
任务完成率 = 成功完成任务数 / 总任务数工具调用准确率 = 正确调用工具数 / 应调用工具数参数错误率 = 参数校验失败次数 / 工具调用总次数平均响应时间 = 所有任务总耗时 / 任务数越权操作数 = 未授权写操作次数
没有指标,就无法判断优化是否有效。评测指标能帮助团队区分:
智能体具备工具调用能力后,必须建立安全机制。建议包括:
例如:
智能体一旦被赋予过多权限,可能带来严重风险。例如:
建议按以下阶段推进:
部署时可考虑:
智能体系统通常具有不确定性,不能像传统接口一样只靠单次测试判断稳定性。灰度发布和持续监控是必要的。
在实现过程中,会涉及多个配置项。以下是通用配置示例,可根据实际系统调整。
agent:max_iterations: 8timeout_seconds: 60temperature: 0.2require_confirmation_for_write: truefallback_response: "当前无法自动完成该任务,请提供更多信息或联系人工支持。"tools:whitelist:- query_weather- search_transport- search_hotel- reserve_serviceblocked:- delete_data- change_permissionevaluation:sample_dir: ./samplesretry_times: 3record_trace: truesave_cost: truemonitoring:log_level: infoalert_on_failure_rate: truealert_on_latency_p95: 10s
限制智能体单次任务的最大执行步数。
作用:防止模型陷入无限循环。
风险:设置过小可能导致复杂任务无法完成;设置过大可能导致成本上升。
单次任务或单次工具调用的超时时间。
作用:避免请求长时间阻塞。
风险:过短可能误杀正常任务;过长可能影响系统吞吐。
控制模型输出随机性。通常任务越需要稳定,取值应越低。
作用:降低随机发挥。
风险:过高可能导致结果不稳定;过低可能使表达过于机械。
是否对写操作要求人工确认。
作用:降低误操作风险。
风险:会增加交互步骤,但更适合生产环境。
工具白名单和黑名单。
作用:限制智能体可执行的动作范围。
风险:配置遗漏可能导致越权调用。
是否记录执行轨迹。
作用:方便排查问题和评测。
风险:会增加存储成本,需要脱敏和生命周期管理。
下面以一个旅行规划任务为例,展示智能体如何运行。
用户:我想下个月去杭州玩三天,预算中等,喜欢自然风光。
模型识别出以下关键信息:
同时发现缺失信息:
如果出发地影响交通查询,可以追问:
请问您从哪个城市出发?
如果任务允许先给建议,也可以先基于常见假设给出方案,但应明确标注假设。
假设用户补充出发地后,智能体开始调用工具:
{"tool": "query_weather","arguments": {"city": "杭州","date": "2026-07-10"}}
返回结果:
{"temperature": "26~33℃","condition": "多云"}
接着查询交通:
{"tool": "search_transport","arguments": {"origin": "上海","destination": "杭州","date": "2026-07-10"}}
模型根据工具返回结果生成行程建议:
第一天:抵达杭州,入住酒店,下午游览西湖周边。第二天:上午前往灵隐寺,下午体验龙井茶园。第三天:上午参观博物馆,下午返程。注意事项:天气多云,温度较高,建议携带防晒用品。
如果用户要求“帮我订酒店”,智能体不应直接执行,而应回复:
我可以为您推荐酒店,但正式预订需要您确认。请确认是否选择以下酒店?
只有用户明确确认后,才调用写操作工具。
完成实现后,需要从以下几个方面验证结果。
选择一个明确任务,检查:
查看每一步执行轨迹,确认:
使用评测集批量运行,观察:
每次修改提示词、工具描述、模型版本或流程逻辑后,都应重新运行固定评测集,避免新版本引入退化。
重点检查:
现象:
可能原因:
解决思路:
现象:
可能原因:
解决思路:
现象:
可能原因:
解决思路:
现象:
可能原因:
解决思路:
现象:
可能原因:
解决思路:
现象:
可能原因:
解决思路:
可以从以下方面优化:
建议持续完善:
建议引入:
可以从以下方面控制成本:
建议做到:
本教程围绕 LLM、Agent 与 Harness 三个核心对象,给出了一条从概念到工程落地的完整路径。
首先,LLM 提供语言理解与生成能力,是智能体的核心引擎。其次,Agent 在 LLM 基础上加入目标理解、任务规划、工具调用、结果观测和状态管理,使模型从“会回答”升级为“能执行”。最后,Harness 通过样本管理、执行追踪、评测指标、安全控制和回归验证,让智能体从“可演示”走向“可运营”。
在实际落地时,建议重点关注以下几个方面:
如果后续要继续深入,可以进一步关注多智能体协作、工具编排平台、评测集自动生成、异常自动归因、任务成本优化以及企业级权限治理等方向。