当前位置: 首页 > 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.cnnetsun.cn/news/2212782.html

相关文章:

  • 如何用AEUX免费打通Figma/Sketch到After Effects的设计动画工作流
  • 01. 安卓逆向基础、环境搭建与授权
  • ClaudeClaw:面向巨量代码库的智能管理与语义搜索平台
  • 自感的物质重塑与唯物主义的本体论重构——岐金兰论AI时代“唯心恐惧症”的终结
  • ## 4 Agent 的感知层:多模态输入(文本、图像、音频、传感器)
  • Arduino Portenta H7 Lite开发板工业应用与成本优化解析
  • 保研个人陈述别再套模板了!手把手教你用STAR法则写出让导师眼前一亮的文书(附500/1000/1800字实例拆解)
  • 不只是医学影像:手把手教你用CTK Widgets库快速打造专业级Qt桌面应用
  • MinIO Windows安装踩坑实录:从环境变量失效到服务启动失败的全面解决指南
  • Bifrost AI Gateway:统一AI模型调用,实现智能路由与故障转移
  • 别再死记硬背了!用一张图搞懂嵌入式Linux启动三巨头:U-Boot、Kernel、Rootfs的协作关系
  • 深入MTK SensorHub 3.0架构:以SH3001和VC36658为例,详解传感器驱动与HAL的协作机制
  • 家庭网络“双网关”现象解析与通用桥接配置指南
  • 告别‘text/plain’:彻底搞懂Flask静态文件Content-Type与Vite打包的兼容性配置
  • 光线追踪与3D高斯渲染的GRTX架构优化实践
  • ESP32-CAM四驱遥控车DIY指南
  • ISAC系统中杂波建模与抑制技术解析
  • NVIDIA AI红队:机器学习安全攻防实战解析
  • OpenClaw Agent Templates:模块化配置快速构建专属AI助手
  • Arm Cortex-A76处理器错误分析与解决方案
  • 对比直接使用原厂 API 体验 Taotoken 聚合服务在接入便捷性上的优势
  • VeLoCity皮肤:为VLC播放器注入全新视觉体验与交互设计的界面革命
  • 大模型后训练优化:ODC架构显存与通信效率提升实践
  • 老旧电视盒子救星:手把手教你给创维H2903刷入安卓4.4.2精简固件,告别卡顿
  • 2026/03/30飞书 V7.65 功能更新详解:AI 深度融合办公场景,aily、妙搭、多维表格与妙记全面升级
  • 别再只用收盘价了!用Python实战对比Parkinson、Garman-Klass等三种高阶波动率算法(附完整代码)
  • 告别机械按键:在中颖51项目里低成本集成触摸功能(SH79F9476 Touch Key实战)
  • DDrawCompat完整指南:让经典游戏在Windows 11上焕发新生的终极解决方案
  • STM32 CubeMX配置FreeRTOS通信的避坑指南:为什么你的信号量会丢失,队列会溢出?
  • 5分钟上手Jets.js:打造电商网站极速产品搜索体验的完整指南