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

山东大学项目实训个人记录4

1. Scoring Agent:综合四维评分

目标:让模型一次性给出语法、任务完成度、连贯衔接、词汇四个维度的分数和详细理由。

实现:在AgentRuntime中新增scoring_agent方法,复用已有的ReportSchema。
系统提示词明确要求:

你是 IELTS 写作总评分 agent。你只能返回一个 JSON 对象,不要输出 markdown,不要解释。 JSON 结构必须包含 grammar_accuracy、task_response、coherence_cohesion、lexical_resource, 每个维度都必须是 {"score": number, "reasonBullets":["..."]},每项提供 3 条简洁中文理由。

调用deepseek.generate_structured,直接得到一份完整的四维报告。

技术点:由于我们已经为ReportDimension定义了丰富的字段别名(reasonBullets可接受feedbackreasonsbullets),即使 LLM 偶尔使用其他命名,Pydantic 也能正确映射。

2. Tutor Agent:生成建议与亮点

目标:输出逐句修改建议(含错误类型、原文定位、解释、改写)以及作文亮点和学习路径。

实现:tutor_agent方法返回TutorResponse
系统提示词做了非常详细的约束:

  • errorType只能使用grammartask_responsecoherencelexical四个稳定键。

  • suggestions必须包含sourceTextexplanationrevisionrevisedSentence及位置索引。

  • highlights.typeadvanced_vocabularycohesive_deviceclear_positionsupporting_example

  • 所有解释和建议必须为中文。

亮点定位修正:LLM 返回的positionStart/End经常与原文有偏移。在normalize_suggestions函数中对每个建议进行二次匹配——用sourceText在原文中模糊查找,重新计算准确位置,确保前端高亮准确。

3. 完整顺序调度链

本周先将四个 Agent 串起来:

language_agent() → discourse_agent() → scoring_agent() → tutor_agent()

每次调用后,将上一步的结果暂存于状态变量,最后汇总。这样一旦某个 Agent 失败,可以清晰地定位问题。

4. JSON 修复机制

痛点:即使我们使用了 DeepSeek 的response_format={"type": "json_object"},模型偶尔还是会输出以下非法内容:

  • 在 JSON 前后添加解释文字,如"Sure, here is the result: {...}"

  • JSON 内部包含//注释

  • 使用单引号而非双引号

  • 字段名末尾多了一个逗号

解决方案:在DeepSeekClient._extract_json中加入修复逻辑:

  1. 先用json.loads尝试直接解析。

  2. 若失败,用正则r"\{.*\}"提取第一个完整花括号块(忽略前后文本)。

  3. 再尝试解析提取出的字符串。

  4. 若仍失败,抛出异常(由上层降级为 Mock)。

同时,Pydantic 模型中的model_validatorreasonBullets做类型兜底:如果 LLM 返回的是字符串(比如用序号分隔的几条理由),自动按换行或句号拆分成列表。

效果:几乎不再出现因为格式问题导致整个评估任务崩溃的情况


感悟:大模型输出不可控通过“强约束 Prompt + 宽松解析 + 降级 Mock”三层防御能让系统在生产环境中保持鲁棒。下一步是实现并行调度。

http://www.jsqmd.com/news/748782/

相关文章:

  • Pillar-0:通用医学影像AI模型的技术解析与应用
  • 这个北京小伙拍了一部东北片,还拿下了年度首作?
  • 新手零基础入门:基于快马生成deerflow本地部署完整教程与实操代码
  • Ledger企业使用为什么更看重授权服务
  • 深度测评5款AI编程助手:哪款最适合你?
  • nnUNetv2五折交叉验证与模型集成实战:如何让你的分割结果更稳定?
  • PartNeXt:3D部件级标注数据集与智能标注系统解析
  • 机器学习从入门到精通:一文吃透全部核心概念
  • 视觉语言模型进阶:PuzzleCraft动态课程学习技术解析
  • ReAct 论文深度解读:让大模型学会“边想边做“
  • 基于多尺度特征一致性损失的YOLOv10域适应改进:从理论到实战
  • NetToSerial Bridge - 网络转虚拟串口桥接工具
  • 【RT-DETR涨点改进】ICME 2026 | 独家创新首发、注意力改进篇| 引入SFD显著特征判别模块,通过通道关系建模和图结构推理实现全局语义增强,含7种创新改进点,助力遥感小目标检测任务涨点
  • 仅剩最后237份!Python量化配置Checklist 3.2正式版(含2024 Q2最新PyPI包兼容矩阵)
  • pip 配置清华源
  • Linux多线程编程进阶:fork与锁的交互及网络编程入门
  • 【车载Java开发实战指南】:20年专家亲授车规级系统稳定性提升7大关键实践
  • GDScript代码转换器:跨引擎复用与多语言迁移实战指南
  • 新手入门:基于快马平台动手实现简易版notepad++编辑器
  • AI Token采购如何不踩雷?2026十款AI大模型Token购买科普解析
  • Ledger官网打不开时还有哪些正规路径?秘语盾说明
  • 超越简单修复:用CodeFormer的inpainting和colorization模块玩转AI人像创意
  • DriveObj3D:扩散模型在自动驾驶3D数据生成中的应用
  • 保姆级教程:基于NCJ29D5的UWB测距开发环境搭建与首个Demo跑通
  • AI视频生成中的物理引擎融合技术解析
  • WrenAI部署指南:基于语义层与LLM实现自然语言查询数据仓库
  • 租户数据混查事故频发?Java多租户隔离失效的3大隐蔽根源,第2个90%团队仍在踩坑!
  • Python GUI编程
  • PresentBench:PPT自动化评估系统的技术解析与应用
  • [MediaForge] 架构之美:依赖倒置原则与好莱坞法则在微内核中的实战