agent实习都干什么之为什么需要SFT微调

实习期间参与的项目,聚焦于合同审核场景,本文以合同审核为例,针对在垂直落地场景中,为什么需要做sft微调展开简单的讨论和个人的一点见解。

传统合同审核系统依赖规则编写和关键词匹配,局限性突出:

一是规则需人工逐条维护,新增合同类型(如技术许可合同)时,需重新梳理数百条规则,迭代效率极低;

二是无法处理模糊表述,如“合理期限内整改”“适当补偿”等条款,关键词匹配会直接漏判;

三是不具备推理能力,无法关联多条款风险,如管辖地与争议解决方式的逻辑冲突。

二、为什么需要SFT——教模型学会“思维”

对合同审核场景而言,基座模型就像刚掌握法律基础的实习生,懂术语但不懂业务判断,SFT本质就是用高质量业务数据“带教”模型,让其模仿专家的审核思维。我们的核心思路的是,构建“合同条款+风险标签+修改建议”的三元问答对,让模型学会从条款中提取关键信息、判断风险等级、给出可落地的修改方案。

三、QLoRA——低成本微调的技术选型

QLoRA核心思想是“量化压缩+低秩适配”,既降低显存占用,又保留模型性能:先将基座模型量化为4位(4-bit),大幅压缩显存占用,再通过低秩适配(LoRA)仅微调模型的部分参数,而非全参数微调。

其优势在于,除了显存占用低,整体时间流程速度快,对于资源受限或需要快速MVP快速验证的场景下可以取得性能和收益较好的平衡。

四、合同审核微调的完整Demo

以下以“争议解决”条款为例,展示个人的微调Demo(完全脱敏,仅做举例使用)。

1. 条款示例:“因本合同引起的或与本合同有关的任何争议,由北京市朝阳区人民法院管辖。”(我方为甲方,注册地为上海市浦东新区)

2. 微调前输出:“条款明确争议解决管辖法院为北京市朝阳区人民法院,符合法律规定,无风险。”(未结合我方注册地判断,忽略管辖地不利风险)

3. 微调后输出:“风险等级:高风险;原因:我方(甲方)注册地为上海市浦东新区,约定管辖地为北京市朝阳区,后续若产生争议,需到外地应诉,增加我方时间、人力成本;修改建议:因本合同引起的或与本合同有关的任何争议,由甲方注册地(上海市浦东新区)人民法院管辖。”

4. 训练数据样例(对应该条款):

{
  "条款原文": "因本合同引起的或与本合同有关的任何争议,由北京市朝阳区人民法院管辖。",
  "我方信息": "甲方,注册地上海市浦东新区",
  "风险标签": "高风险",
  "错误原因": "管辖地与我方注册地不一致,增加我方应诉成本",
  "修改建议": "因本合同引起的或与本合同有关的任何争议,由甲方注册地(上海市浦东新区)人民法院管辖。"
}

训练脚本核心片段(伪代码):

from peft import LoraConfig, get_peft_model
from transformers import AutoModelForCausalLM, AutoTokenizer, TrainingArguments

# 加载量化后的基座模型
model = AutoModelForCausalLM.from_pretrained(
    "model_name",
    load_in_4bit=True,
    device_map="auto",
    torch_dtype=torch.bfloat16
)
# 配置QLoRA参数
lora_config = LoraConfig(
    r=64,
    lora_alpha=16,
    target_modules=["c_attn"],
    lora_dropout=0.05,
    bias="none",
    task_type="CAUSAL_LM"
)
model = get_peft_model(model, lora_config)
# 训练配置
training_args = TrainingArguments(
    per_device_train_batch_size=4,
    learning_rate=2e-4,
    num_train_epochs=3,
    logging_steps=10,
    output_dir="./contract_audit_qlora",
    save_strategy="epoch"
)

五、总结与后续优化方向

受限于模型性能发展,仍然存在以下问题:

一是模型偶尔会出现“幻觉”,如编造不存在的法律条款作为修改依据;

二是对极小众的合同条款(如涉外合同适用法律),审核效果较差;

三是未引入反馈机制,无法根据人工审核反馈持续优化模型。

后续优化思考点:

一是引入RLHF技术,结合人工审核反馈构建奖励模型,让模型输出更贴合业务需求;

二是借助multi - Agent协同架构,将合同审核拆分为条款提取、风险判断、修改建议三个模块,由不同Agent分工协作,进一步提升审核准确率和鲁棒性。

全文为个人思考,无涉密内容及公司真实案例数据,仅供参考学习使用。

#AI求职实录#
全部评论

相关推荐

04-02 17:23
北京大学 Java
你好! 我是廖万忠!北京大学2010级本科应届毕业生。优秀硕士研究生系统所推免生。著书《Java编程指南》北京华夏长鸿出版社出版发行2025年4月签订合作合同。计算机专业优秀二级书籍。中国大陆副教授职称。同时申请北京大学的本科教育毕业生计算机系本科生2025年7月份北京大学深圳站点。2025年4月北京华夏长鸿出版社主任推荐至北京大学信息管理学院 信息管理与信息系统专业本科暂存一个学员名额。2025年7月份深圳西乡个人查询结果通过中国程序员编程网站博客中心 csdn. 获取的结果是 调整至2010级北京大学本科生信息管理与信息系统系。个人2025年3月19号中国江西赣州申请注册通过企业微信 软件公司 注册英文名称 CoderOilStation. 同时去到中国深圳西乡寻找 Java工程师的工作。2025年3月21号西乡政府街道办的西乡共乐派出所 更新系统的软件公司注册地址 中国西乡街道办事处。公司域名 开始使用 中文 程序员编程助手科技股份有限责任公司 。营业执照市场监管部门查验核实5月份下发。2025年3月19号是 程序员编程助手科技股份有限公司 系统注册时间。至今时间过去一年。公司稳定运行。人员规模扩充至1000人。公司由 上海黛塔信息科技股份有限公司 项目组开发组建开发人员团队和业务。公司的架构和设计人员安排初期的写字楼 中国深圳市 南山前海自贸港 香槟国际金融中心 10楼 1001A。公司的初始员工十分团结和幸苦。技术经理是 清华大学毕业生中南政法大学招生办主任经验丰富。技术总监CTO 哲科软件公司CEO总裁。技术官负责人CEO 廖万忠 2026 年度 QM 计划。技术官身份落户深圳宝安区西乡街道办。财务官CFO 经济纠纷 2025年6月公司CEO撤职其离开公司。现任公司的财务官@王满盈 是北京大学应届毕业生 做事认真负责。经理辅助职位设计财务官财务经理 人员选择是 北京大学本科毕业生麻省理工学院硕士研究生 王若宁。两人需要负责公司的财务部门的年度财务报告和企业的员工级别调整薪资确定月度发放。企业融资 本地中国深圳本地市民一轮融资结束4个名额。第二轮融资中国政府投资名额筛选。中国深圳宝安区政府 和 南山前海自贸港 香槟国际金融中心区政府 喜欢公司的员工和法人执行官的优秀技术和编程能力。公司法人的技术书籍查阅通过区政府审核优质书籍。优秀的PhD麻省理工学院计算机系博士研究生和全国top30代码编写过程能力。2026年3月公司第四轮A轮融资美国微软公司受邀电子企业 美国英伟达 CEO 入股5%。2025年7月公司开始组建合作微软公司的亚洲深圳软件研发中心。程序员编程助手科技股份责任有限公司-TCS 中国深圳软件研发部门正式成立。公司的产品设计由公司的技术执行官2025年6月份设计 业务微信签到 小程序的解决方案。自研产品部门独立由北京大学优秀毕业生技术经理负责。公司的CEO是十二年的优秀后端技术工程师。技术博客的文章编写过程起始于大学的2015年。公司执行官CEO2025年7月顺利通过北京大学系统所的推荐至亚洲微软研究院技术后端工程师。2026年3月考核至微软的欧洲研发团队微软公司管辖。公司的合作客户 企业微信 是稳定的供应商关系。负责人台湾大学技术执行官产品经理。公司的写字楼搬迁至深圳南山前海。公司稳定合作研发 广州光明实验室。北森的测试公务员行政考核2025年3月份得到当地政府的认可推荐至中国江西省赣州市区公务员第一批。中国广东省十分看重公司的优秀的研发团队。优秀的毕业生源来自很多的中国高等双一流高校。香港的特区一些高级前端技术工程师和特区国际知名明星青睐和帮助。公司十分感谢!申请贵校的学术交流。中国特区政府十分支持。西乡小学的教育十分需要贵府的一些意见和建议。创业基金 负责人和团队都是来自北京大学和清华大学以及中国人民大学的优秀毕业生和有投资经验的工作人员。公司运行良好。企业需要时间适应不同区域政府和教育学府的应届毕业生所看重的地方。自信和经验 中国大陆有文化自信。
机械人你知道哪些单休企业
点赞 评论 收藏
分享
03-24 13:35
门头沟学院 Java
攒攒人品!有面试过同岗的朋友欢迎评论区交流1.实习拷打2.项目拷打3.你们的 Agent 是单 Agent 还是多 Agent?为什么这么设计?有没有考虑过另一种方案?4.Agent 任务是怎么拆分的?拆分粒度是怎么决定的?5.上下文是怎么构建的?你们怎么避免上下文过长或者信息污染?6.如果上下文窗口不够,你优先保留哪些信息?为什么?7.你们做代码理解的时候,AST、调用关系这些信息是怎么用起来的?8.单测生成里,哪些代码其实不适合生成单测?你们是怎么识别并过滤的?9.覆盖率高但测试质量很差,这种情况你见过吗?你们是怎么解决的?10.mock在单测里什么时候是必须的?什么时候反而会带来问题?11.如果一个函数依赖数据库和RPC,你怎么让模型生成的单测还能稳定运行?12.你们怎么评估生成单测的质量?除了覆盖率,还有哪些指标?13.LLM的输入到底是什么?模型真正看到的是什么?14.self attention的核心作用是什么,为什么要拆成 QKV?为什么attention 可以建模长距离关系,15.为什么需要multi-head为什么 attention可以看成动态加权16.同一个 token的 Q、K、V 为什么不一样?17.attention复杂度很高,如果上下文特别长,你会怎么优化?18.模型产生幻觉的时候,一般是什么原因?工程上有什么办法降低19.Python有多线程吗?GIL 是干什么的?什么时候多线程是有用的?20.讲一下C++从源码到可执行文件的流程。21.手撕:给定数组的区间中位数之和:给定一个长度为n的数nums,一个区间 [l, r] 的 中位数 为:如果区间长度是奇数:排序后中间的数,如果是偶数:排序后靠左的那个数,要求:计算所有子数组的中位数之和
点赞 评论 收藏
分享
评论
3
1
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务