Q1312Agent 架构真题解析Agent 架构AgentAlpha 社区真题库约 7 分钟更新 2026-09-29

有微调过Agent能力吗?数据集如何收集

有微调过Agent能力吗?数据集如何收集

P2 · agent_architecture

🏷 标签:fine-tuning, tool-use, data-collection, lora

1️⃣ 考察意图

面试官想看你是否真正动手做过Agent微调,而非只背过LoRA概念。考察类型是工程取舍+系统设计,刁钻点在于:Agent微调不同于普通LLM微调,核心难点是数据构造(如何让模型学会工具调用和动作序列)和灾难性遗忘(微调后丢失通用能力)。答好了能展示你对数据工程、训练策略和评估完整流程的实战理解,这是P2+级别区分度的关键。

2️⃣ 标准答

微调目标:提升Agent的工具调用准确率(选对API+填对参数)、多步推理连贯性(从用户指令到动作序列的思维链)、指令遵循(严格按工具定义输出JSON格式)。不追求全能,只强化Agent专属短板。

数据集收集:分三类来源,按质量排序:

  • 真实用户日志:从生产环境采样,去隐私(脱敏用户ID、替换敏感字段)。坑:日志中常混入失败案例(如工具调用超时),需人工标注正确动作序列,否则模型会学到错误模式。解法:只保留任务完成率>80%的session,再让标注员修正动作。
  • 合成数据:用Self-Instruct方法,给定工具定义(如天气API、日历API),让强模型(GPT-4)生成(指令,工具定义,思维链,动作)四元组。参考ToolBench和Gorilla论文,生成时加入负样本(如故意写错参数类型),增强模型鲁棒性。
  • 半自动清洗:用规则过滤(如检查JSON格式、API名是否在定义列表中),再用弱模型(如Llama3-8B)做一致性校验,剔除逻辑矛盾样本。

数据格式:采用类似ReAct的序列结构:

用户指令: "帮我订明天下午3点的会议室"**工具定义: [{"name": "book_room", "params": {"time": "string", "duration": "int"}}] 思维链: "用户需要订会议室,时间明天下午3点,默认时长1小时" 动作: {"tool": "book_room", "params": {"time": "2024-01-15 15:00", "duration": 60}} 关键:思维链必须显式写出**,否则模型学不会多步推理。坑:思维链过长会稀释训练信号,建议限制在50 token内。

微调方法:优先用LoRA(秩r=16,alpha=32),只更新attention层参数,保留基座模型通用能力。训练时混合通用数据(如ShareGPT的对话样本),比例建议工具数据:通用数据=1:3,防止灾难性遗忘。学习率用1e-4,batch size=32,训练3个epoch。全参数微调只在数据量>10万条时考虑,且需用Warmup+余弦衰减。

评估:在held-out测试集上计算:

  • 工具调用准确率:API名正确+参数类型正确+参数值合理(如时间格式匹配),用F1。
  • 任务完成率:端到端是否达成用户目标,人工评估或用GPT-4打分。
  • 通用能力退化:在MMLU或HellaSwag上对比微调前后分数,下降>2%则需调整混合比例。

实际落地坑:一次微调后模型在复杂指令(如多工具链式调用)上准确率从85%掉到70%,原因是训练数据中90%是单工具样本。解法:按工具复杂度分层采样,确保多工具样本占比>30%。

3️⃣ 答题模板(30 秒电梯版)

"这个问题我从数据收集、微调策略、评估完整流程三个层面回答。数据层面,优先用真实日志去隐私+合成数据补足,格式采用ReAct四元组。微调层面,用LoRA混合通用数据防止遗忘,学习率1e-4。评估层面,算工具调用F1和任务完成率,同时监控通用能力退化。总结一句:Agent微调的核心是数据质量而非模型规模,数据构造比调参更重要。"

4️⃣ 高频追问 & 应对

追问 1:合成数据怎么保证质量?会不会引入噪声?

用三层过滤:第一层规则过滤(JSON格式、API名匹配),第二层一致性校验(用另一个模型检查思维链和动作是否对齐),第三层人工抽检(随机采样10%让标注员打分)。噪声不可避免,但可接受<5%的误标率,因为LoRA对少量噪声鲁棒。如果噪声>10%,模型会学到幻觉,需重新生成。

追问 2:微调后模型在未见过的工具上表现如何?怎么泛化?

零样本泛化差,因为LoRA只记住了训练集中的工具模式。解法:在工具定义中加入自然语言描述(如"book_room: 用于预订会议室,参数time是ISO格式字符串"),让模型通过语义理解新工具。实验显示,描述从10字扩展到50字,零样本准确率从30%提升到65%。更激进的做法是训练时随机替换工具名(如把book_room改成reserve_room),增强对名称变化的鲁棒性。

追问 3:如果用户指令有歧义(如"明天下午"),模型怎么处理?

训练数据中需加入歧义样本,让思维链显式写出假设(如"用户说'明天下午',我默认是15:00,但需在回复中确认")。微调后模型会学会在动作前加一个确认步骤。评估时用歧义测试集(如时间模糊、地点模糊),看模型是否触发确认动作。如果准确率<80%,需在数据中增加20%的歧义样本。

5️⃣ 避坑 · 常见错误答法

  • ❌ 说"直接用公开数据集(如ToolBench)微调就行" → ✅ 正确切入:公开数据集与业务工具定义不匹配,必须基于自己的API定义重新构造数据,否则模型学不会专有工具。ToolBench只能作为预训练或数据增强的种子。
  • ❌ 说"微调后只测工具调用准确率,不看通用能力" → ✅ 正确切入:必须同时监控通用能力(如MMLU),否则模型会变成"工具调用专才",连简单对话都崩。混合通用数据是标配,不是可选项。
  • ❌ 说"用全参数微调效果更好" → ✅ 正确切入:全参数微调在数据量<10万时容易过拟合,且成本高。LoRA在数据量1万-5万时效果接近全参数,且能保留通用能力,是工程首选。

6️⃣ 简历呼应

  • 如果你有RAG项目:从"数据构造流程"切入,类比RAG中chunking和检索的工程经验,强调Agent微调的数据清洗和格式设计更复杂(需处理动作序列),展示你从RAG到Agent的迁移能力。
  • 如果你只做过传统NLP:用"序列标注"类比,说Agent微调本质是"指令到动作序列的映射",类似NER但输出是结构化JSON。强调你熟悉数据标注和评估指标,能快速上手Agent数据工程。
  • 如果你是校招无项目:聚焦ToolBench论文复现,说你在GitHub上跑通过Gorilla的微调代码,并自己构造了100条天气API的合成数据做demo。展示你对数据格式和LoRA参数的理解,弥补项目经验不足。

7️⃣ 延伸阅读

  • ToolBench: "ToolBench: An Open Platform for Training and Evaluating Tool-Augmented LLMs"
  • Gorilla: "Gorilla: Large Language Model Connected with Massive APIs"
  • ReAct: "ReAct: Synergizing Reasoning and Acting in Language Models"
  • LoRA: "LoRA: Low-Rank Adaptation of Large Language Models"
  • Self-Instruct: "Self-Instruct: Aligning Language Models with Self-Generated Instructions"

—— 本场面试完 ——

我们不做玩具级 Demo 教学。训练营的作业是开源项目和论文——我们想陪伴你,做出能改变生活、最后改变世界的项目。