山东大学-创新实训-智评Code+:基于DeepSeek的AI代码纠错与优化评测平台-(4)异步代码分析

异步代码分析:让 DeepSeek 为你「点石成金」

智评 Code+ 的核心目标不仅是「测出对错」,更要「指出问题」,给用户提供智能的优化建议。为此,我接入了 DeepSeek 提供的代码分析能力,并实现了完整的异步任务链。

为什么选择异步分析?

调用 AI 分析模型的耗时通常远大于本地评测,尤其在模型负载较高时:

  • 若直接在主线程阻塞调用,容易拖慢接口响应,影响用户体验;

  • 异步任务能将分析过程脱离主流程,前端轮询/订阅即可获取分析进度和结果。

因此,我设计了一个可追踪状态的异步分析系统


功能结构概览

用户点击“分析” -->
    1. 创建分析任务记录 (状态 pending)
    2. 异步调用 DeepSeek 进行分析
    3. 任务运行中:状态 analyzing
    4. 分析完成后写入数据库并更新状态为 completed


Step 1:触发分析接口

用户调用 /auth/submissions/:id/analyze 接口后,我们会:

  • 创建一条 AnalysisResult 记录;

  • 启动一个 goroutine 异步执行分析逻辑。

go func() {
    _ = services.UpdateAnalysisStatus(analysis.ID, "analyzing")
    result, err := services.AnalyzeCodeWithDeepSeek(uint(sid))
    ...
    _ = services.SaveAnalysisResult(analysis.ID, result)
    _ = services.UpdateAnalysisStatus(analysis.ID, "completed")
}()

关键点在于:

  • 任务状态的维护非常清晰,避免重复分析或状态错乱;

  • 分析结果持久化到数据库中,便于前端查询和展示。


Step 2:支持分析结果多次查看

我设计了 /auth/submissions/:id/analyses 接口用于查看历史分析记录:

utils.DB.Where("submission_id = ?", sid).Find(&analyses)

每次触发的分析任务都会有一条记录,包含以下字段:

  • status:当前任务状态(pending/analyzing/completed/failed)

  • result_text:AI 返回的分析建议(如存在潜在 bug、代码可优化点)

  • created_at:时间戳,便于历史追踪


Step 3:后续考虑

目前异步分析是用户主动触发,这有两个优势:

  • 节省算力资源,避免无意义分析;

  • 由用户控制分析时机,更符合使用场景。

未来可以扩展功能:

  • 分析缓存:同一个提交的分析结果只保留最近几条;

  • 分析重试机制:分析失败时提供“重新分析”按钮;

  • WebSocket 订阅机制:分析完成后推送到前端而非轮询。


总结

模块

功能

TriggerAnalysis

提交异步分析任务

AnalyzeCodeWithDeepSeek

封装 DeepSeek 接口调用逻辑

UpdateAnalysisStatus

追踪任务状态变化

SaveAnalysisResult

持久化结果供前端展示

GetAllAnalyses

查询历史分析记录

异步代码分析模块的上线,使得 DeepJudge 不再仅仅是一个“对错判断器”,而是向着真正的 智能评测与代码优化平台迈出了重要一步。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值