代码题解生成:输出异常时走确定性的回退路径

发布时间:2026/8/12 13:10:04
代码题解生成:输出异常时走确定性的回退路径
代码题解生成输出异常时走确定性的回退路径题解生成服务要区分两件事判题和解释。编译、测试、超时等结论应来自隔离执行环境模型负责基于这些结果组织说明。模型超时、返回空内容或格式不合规时服务应降低为可用的基础反馈而不是把一个猜测的“标准答案”标成验证通过。flowchart LR A[提交代码] -- B[输入大小与语言校验] B -- C[隔离执行与测试] C -- D[结构化执行结果] D -- E[调用模型解释] E --|合规输出| F[返回解释] E --|失败| G[返回测试结果和规则提示]降级结果也要诚实兜底内容可以是“第 3 个测试用例超时请检查循环是否收敛”或“编译失败先修复未定义符号”。如果题库有经过维护的参考解可单独标注为参考资料不能因为模型不可用就宣称用户代码有效或把所有题目的复杂度写成 O(N)。输入限制应依据沙箱和模型的容量配置不宜在文章里写成万能的字符阈值。二进制空字符、未知语言、过大请求和取消请求都要明确处理。无论是否调用模型都不能在主服务进程执行用户代码。一个可取消的处理流程func (e *Engine) Verify(ctx context.Context, req Request) (*Result, error) { if err : e.validate(req); err ! nil { return nil, err } run, err : e.sandbox.Run(ctx, req.SourceCode, req.Language) if err ! nil { return e.ruleResult(req.QuestionID, sandbox_error), nil } modelCtx, cancel : context.WithTimeout(ctx, e.modelTimeout) defer cancel() raw, err : e.llm.Explain(modelCtx, run.Summary()) if err ! nil { return e.resultFromRun(run), nil } var explanation Explanation if err : json.Unmarshal(raw, explanation); err ! nil || explanation.Text { return e.resultFromRun(run), nil } return e.combine(run, explanation), nil }sandbox.Run和模型调用都必须尊重传入的ctx取消后应停止排队、网络请求和子进程。模型的 JSON 校验失败时通常直接回退比用一个贪婪正则从任意文本中提取大括号更安全后者可能误把代码或说明当作结果。测试应覆盖沙箱超时、模型超时、模型返回 Markdown 包裹的 JSON、空输出、客户端取消和降级响应。记录这些路径的比例与原因才能判断是题库问题、模型问题还是沙箱容量不足。