当前位置: 首页 > news >正文

2026山东大学项目实训4月7日

一、问题背景

在 CodeGuard AI 项目早期,系统已经可以把 PR 变更交给 AI 分析,但很快遇到一个工程问题:如果模型只返回一段自然语言文本,系统后续很难继续处理。

自然语言回答可以阅读,但不能稳定落库,也不方便前端按文件、严重程度和状态展示,更无法支撑质量门禁、评论草稿和审计追踪。一个真正的审查平台不能只把 AI 回答贴出来,而要让 AI 输出成为后端可以治理的数据。

二、我的思路

我把 AI 审查结果抽象成结构化 Finding。每个问题都必须包含文件路径、行号、标题、严重程度、问题分类、描述、修复建议、证据、证据来源和置信度。

这样 AI 输出就从“能看的一段话”变成了“能被系统继续处理的数据对象”。

三、关键代码与实现讲解

最核心的是先定义 AI 输出的结构。

class GeneratedFinding(BaseModel): path: str title: str severity: str category: str description: str suggestion: str | None = None line: int | None = None end_line: int | None = None source: str = "llm" rule_id: str | None = None skill_id: str | None = None evidence: str | None = None evidence_source: str | None = None evidence_line: int | None = None confidence: float | None = None

这段结构的重点不是字段多,而是每个字段都对应后续链路中的一个动作。

pathline用来决定评论能否定位到具体文件和行;severitycategory用来支撑前端分组和质量门禁风险计算;rule_idskill_id用来追溯问题来源;evidenceevidence_sourceevidence_lineconfidence则为后续 verifier 做二次校验提供依据。

一次审查还需要整体总结,所以我又把 summary 和 findings 组合成统一输出。

class GeneratedSummary(BaseModel): overview: str strengths: list[str] = Field(default_factory=list) concerns: list[str] = Field(default_factory=list) next_steps: list[str] = Field(default_factory=list) class LLMReviewOutput(BaseModel): findings: list[GeneratedFinding] summary: GeneratedSummary

这样前端进入审查任务详情页时,不需要直接面对一堆零散评论,而是可以先看到整体结论,再展开具体问题。

四、为什么这样做

结构化 Finding 是后续所有能力的基础。如果没有统一结构,系统只能展示 AI 文本,不能做治理。

有了结构化 Finding 以后,后端可以落库,前端可以筛选和分组,质量门禁可以计算风险,评论中心可以生成草稿,规则引擎可以继续调整严重程度和建议内容,审计日志也能追踪问题来源。

五、实际效果

这一阶段完成后,CodeGuard AI 不再是简单的 AI 问答页面,而是开始具备审查平台的数据基础。

AI 生成的问题可以被保存、过滤、去重、排序、确认和发布。后续的技能执行、上下文分析、候选校验、规则治理和评论草稿,都是基于这套结构继续往下做的。

六、小结

这一阶段让我意识到,AI 审查系统的关键不是让模型说得更多,而是让模型说出的内容能被系统稳定处理。

结构化 Finding 把 AI 输出从“能看”变成了“能管”,这是整个审查链路能够继续扩展的前提。

http://www.cnnetsun.cn/news/2959706.html

相关文章:

  • 为什么你的3DS游戏总是卡顿?Citra模拟器画质优化的逆向思维
  • 嵌入式开发必读:如何从EEPROM数据手册中挖掘关键非技术信息
  • QDKT全面拆解Harness工程
  • 2026人像抠图换背景工具保姆级教程,多款工具手把手操作指南
  • 基于Springboot2+vue2的高校办公室行政事务管理系统
  • 深度解析:Android超大图片加载的性能优化与内存管理实战指南
  • Microchip技术支持网络与半导体器件应用实战指南
  • 优学宝知识付费系统 V3.2.1 重磅全新升级|全五大终端适配,多 AI 大模型深度赋能,全域 AI 智能助手全面上线
  • 9.三个修饰符
  • Python 练习题讲解 3 · 字符串
  • 淘宝推广按成交才扣费的推广是什么?深度解析3an推客实操玩法
  • Linux用户必备:3分钟学会用WoeUSB-ng制作Windows启动U盘
  • 097、PCIE合规性测试基础:从一次诡异的链路降速说起
  • GPT-4o架构革命:单一流水线实现多模态直连交互
  • 国产化紫外成像替代背景下,Knight UV系列相机半导体研发平台使用心得
  • MPC105总线协议解析:ARTRY机制与缓存一致性设计
  • 098、 PCIE眼图与抖动分析:从一次深夜调试说起
  • 微信聊天记录永久保存:3分钟搞定你的数字记忆库
  • Java毕设项目:基于 SpringBoot 的公交出行信息推送系统的设计与实现 基于 SpringBoot 的城市智慧交通出行系统 (源码+文档,讲解、调试运行,定制等)
  • HarmonyOS 6.1.1 网络加速与企业数据防护:Network Boost 和 DataGuard 怎么设计?
  • ERPNext开源ERP实战指南:从零构建企业管理系统
  • 基于机器学习的增材制造缺陷检测与分类技术
  • 计算机视觉项目博文生成规范与技术内容合规要求
  • Unsloth Studio实战:QLoRA微调Qwen3.5-9B实现LaTeX OCR
  • HsMod 55项功能模块化增强指南:打造专属炉石传说个性化体验
  • AI应用开发面试题精讲(三):工程化与性能优化高频15问
  • iCloud照片批量下载终极指南:3种模式高效备份你的珍贵回忆
  • 电机控制死区失真校正:原理、状态机与嵌入式实现详解
  • 飞思卡尔TWRPI-ROTARY旋转触摸板:电容传感原理与嵌入式HMI实战
  • 深入解析MSC8102PFC:多核DSP硬件架构与VoIP网关设计精髓