大数跨境

核心:如何打造C语言自动判题系统里的核心提示词?

核心:如何打造C语言自动判题系统里的核心提示词? 知识代码AI
2026-11-14
1
导读:06|核心:如何打造C语言自动判题系统里的核心提示词?

06|核心:如何打造C语言自动判题系统里的核心提示词?

一、课程简介

实战案例:一个真实的 C 语言自动判题系统 开发历程,来自一位老师的真实需求——用 AI 让批改作业的工作效率提升 10 倍。

核心洞见:在真实项目里,提示词需要和应用里的其他程序紧密配合,需要更"靠谱",而非更复杂或更智能。


二、客户需求分析

▸ 场景与痛点

维度
说明
现状
老师有题库系统,但学生提交 C 语言程序后无自动判题功能
痛点
老师需要下载 200+ 个学生程序,挨个运行、人工判断、人工评分
需求
独立开发一个 AI 判题系统,减少重复工作、提高效率
目标
不强制全自动,但要让老师的工作效率提升 10 倍

▸ 两个核心技术问题

  1. 自动化运行:C 程序通过命令行运行,可接收多个输入参数,如何自动化?
  2. 智能判断:学生输出和老师答案可能有文字表述差别,不能用完全相等逻辑,如何做到智能化判断?

三、系统设计:明确哪些用 AI,哪些用传统程序

▸ 核心设计思路

★

不要试图完全实现一个流程的 AI 自动化,相反,将 AI 设计嵌入到原有工作流中会更加顺利。

▸ 系统流程概览

┌─────────────────────────────────────────────────┐
│                  C 语言自动判题系统                │
├────────────────────┬────────────────────────────┤
│   题库系统          │        判题系统             │
│                    │                            │
│ ① 题干 → AI生成答案│ ① 学生作业 → AI拆解参数     │
│ ② 答案 → AI生成判例│ ② 命令行运行 → 获取输出     │
│ ③ 答案 → AI转命令行│ ③ AI判题评分                │
│ ④ 命令行编译运行    │ ④ 人工综合评分              │
│                    │                            │
└────────────────────┴────────────────────────────┘
★

备注:C 程序的编译和运行不适合用 AI 替代,采用脚本直接编译运行;而题干→答案、答案→判例、答案→命令行、作业拆解、结果判分这 5 个节点可以用 AI 实现。


四、6 个核心提示词详解

整个系统一共设计了 5 个核心提示词(分别对应 5 个 AI 节点),以下是完整详解:


1️⃣ QUESTION_TO_ANSWER(题干生成答案)

职责:根据题干自动生成标准答案

要求:可运行、无 bug | 风险:答案生成可能存在 bug

提示词模板:

根据我给的题干和输出例子,写出C语言程序,
题干如下:
"""
{题干}
"""
输出例子如下:
"""
{例子}
"""
注意C语言程序输出要有明确的分隔符,以便后续我提取,格式如下:
$$$start$$$
C语言程序
$$$end$$$
★

大模型正常情况下会在输出的 C 语言程序前后加上 $$$start$$$ 和 $$$end$$$,便于后续程序提取。


2️⃣ ANSWER_TO_TEST_CASE(答案生成判例)

职责:根据题干和答案自动生成程序测试用例

要求:用例全面、准确 | 风险:判例生成可能不如人写得好

★

⚠️ 真实项目教训:该功能在实际运行阶段被废弃——AI 给出的判例与人工设计的差别较大,尤其是每个判例的分值权重评估不准。最终方案改为参考 AI 生成的判例,大部分用人工修正。


3️⃣ ANSWER_TO_COMMAND_LINE(答案生成命令行)

职责:把输入变量的输入方式由键盘输入改为命令行接收输入(scanf → argv)

要求:参数识别准确、不改原代码逻辑 | 风险:注意遗漏参数

提示词模板:

我在做一个判题系统,下面是答案的C语言程序,
要求把输入变量的输入方式有键盘输入改为命令行接收输入
...

下面是答案C语言程序:
"""
{程序}
"""

注意C语言程序输出要有明确的分隔符,以便后续我提取,例如:
$$$start$$$
C语言程序
$$$end$$$

4️⃣ DECOMPOSE_HOMEWORK(作业拆解)

职责:只让学生作业总结程序中的参数(参数名、顺序、类型),保留学生的错误代码不动

要求:参数识别准确、顺序一致 | 风险:注意和答案的参数顺序一致

★

💡 重要经验:在逻辑严谨的场景下,多用大模型的总结能力;在逻辑宽松的场景下,才适合用大模型的生成能力。

提示词关键部分:

输出所有的参数名字和每个参数的argv,以及变量类型就行,下面例子的x,y,z就是学生作业里的输入参数变量示示子
"x": "argv[1],int",
"y": "argv[2],string"
"z": "argv[3],float"

输出是一个json串即可,不要任何额外说明和代码。
★

为什么不用 AI 直接转命令行?因为大模型总会试图修改学生作业里的错误代码,而判题需要保留原始错误。妥协方案:只让 AI 总结参数格式,程序单独替换参数。

★

🎯 省 token 技巧:原始版本包含题干和标准答案,最终发现只用学生答案效果也很好,去掉题干和答案后节省 50% token 消耗。


5️⃣ EVALUATE_RESULT(结果判分)

职责:对比 AI 输出的答案和学生作业,判断每个用例的结果

要求:只要变量输出值一致就要判对 | 风险:可能存在误判

★

🔥 这是修改次数最多、印象最深的核心提示词!

最终版(简洁、靠谱):

你的角色是一个判断学生作业的系统,你根据下面数据直接判断结果,不要写程序,

答案和学生作业输出的结果:
"""
{答案输出}
"""

...
判断原则是逐个用例里面进行,按用例1,用例2这样的顺序分别提取数据比对....

输出要求包含的格式如下:
"用例1" :
    "输入参数": "yy"
    "结果" : "正确" 或 "错误"
    "错误说明" : "xxx"

输出用json格式,只要json输出不要任何额外分析说明,不要任何说明,我只要json格式的结果就行

初始版(有幻觉问题):

你的角色是一个判断学生作业的系统,我给你提供题目的题干,答案,答案输出和学生作业输出...

题干...
答案和学生作业输出的结果:
...
★

❌ 初始版的问题:大模型总是以为要让它按题干写出代码或按作业输出写出代码,加入"不要按题干输出代码"等限定后仍无法完全避免幻觉。

✅ 最终版解决方案:只让大模型处理答案输出和作业输出的比对,把更多提示词内容用来限定输出比对的规则,反而效果更好。


五、提示词调教四大挑战

挑战 1:初步实现——提示词模板化

提示词最终要嵌入代码中,需要考虑兼容不同的输入内容,所以与其说是提示词,不如说是提示词模板。

技巧:用分隔符标注内容

"""
{题干}
"""

大模型输出也要设计分隔符,便于后续程序提取:

$$$start$$$
C语言程序
$$$end$$$

挑战 2:多平台适配——每个大模型都不一样

一份提示词在不同大模型上运行效果可能不同!作者的开发流程:

GPT 调试提示词(开发调试阶段)
    ↓ 效果满意后
讯飞大模型接口编程实现(代码上线)

⚠️ 例如在 GPT 里分隔符是 $$$start$$$,在讯飞里变成了 $start$,需要单独调整提示词才让大模型"听话"。

解决办法:使用不易混淆的分隔符,如 __start__ 和 __end__。

挑战 3:成本考量——token 消耗不能忽视

  • 一个学生判题消耗几千 token,100 人一次判题消耗 20 万 token
  • 还需要考虑重复判题的情况
  • 平台给的几百万 token 配额,程序运行起来很快就不够用

两个省钱技巧:

  1. 优化提示词 — DECOMPOSE_HOMEWORK 去掉题干和答案,节省 50% token 消耗
  2. 缓存策略 — 学生作业未修改时,命令行版本固定,不必重复调用大模型

挑战 4:幻觉问题——"题干幻觉"

EVALUATE_RESULT 第一版提供题干+答案+答案输出+学生作业输出,大模型总是以为要让它写代码。

解决思路:让大模型做的事越少、越专一,幻觉就越少。最终只比对学生输出和答案输出。


六、两个特例处理

特例 1:随机数题目

★

有些题目涉及随机数生成(如生成随机整数数组)。解决方案:要求"答案和学生作业使用相同数据",即先固定随机种子再执行。

特例 2:字符图形输出

★

有些题目要求用字符组成金字塔等图形(如 * 构成的金字塔)。AI 需要准确判断这类文本形态的图形输出是否正确。


七、核心经验总结

1. 提示词设计原则

  • 逻辑严谨场景 → 用大模型的总结能力(可靠)
  • 逻辑宽松场景 → 用大模型的生成能力(有创造性)
  • 让大模型做的事越少、越专一 → 幻觉越少

2. AI 应用嵌入工作流

★

不要试图完全实现一个流程的 AI 自动化,相反,将 AI 设计嵌入到原有工作流中会更加顺利。

3. 5 个提示词一览

提示词
职责
输入
输出
关键注意
QUESTION_TO_ANSWER
题干生成答案
题干+例子
C 语言程序
可运行、无 bug
ANSWER_TO_TEST_CASE
答案生成判例
答案程序+例子
测试用例
⚠️ 废弃,改人工修正
ANSWER_TO_COMMAND_LINE
转命令行模式
C 程序
命令行版程序
参数识别准确
DECOMPOSE_HOMEWORK
作业参数拆解
学生程序
参数 JSON
保留错误代码
EVALUATE_RESULT
结果判分
答案输出+学生输出
判题结果 JSON
只比对输出

八、知识点总结(10 条)

  1. C 语言自动判题系统的核心需求是提高老师批改作业的效率,通过 AI 实现自动判题功能,效率提升 10 倍
  2. 设计系统时,需要明确哪些部分可以用 AI 实现(如判题、参数识别),哪些用传统程序实现(如编译运行)
  3. 提示词工程是开发关键,需要定义每个提示词的职责范围、输入输出参数,并预判可能产生的问题
  4. 初步实现提示词需要考虑兼容不同输入内容:使用分隔符标注内容,设计输出的分隔符便于后续程序处理
  5. 多平台适配是提示词开发中的挑战,不同大模型可能需要微调甚至重写提示词
  6. 成本考量是重要问题,需要优化提示词减少 token 消耗,并使用缓存策略避免不必要调用
  7. C 语言判题系统的6 个核心提示词:QUESTION_TO_ANSWER、ANSWER_TO_TEST_CASE、ANSWER_TO_COMMAND_LINE、DECOMPOSE_HOMEWORK、EVALUATE_RESULT
  8. 在逻辑严谨的场景下多用大模型的总结能力,逻辑宽松的场景下才适合用生成能力
  9. 将 AI 设计嵌入到原有工作流中比追求全自动化更加顺利
  10. 让大模型做的事越少越专一,幻觉就越少——这是整个项目最核心的实战经验

九、思考题

★

在 C 语言自动判题系统中,老师提到学生有抄作业的情况,这种情况可以尝试用提示词解决吗?怎么解决?

💡 欢迎在评论区分享你的思路!


★

📌 上节回顾:提示词是一切应用的基础——Zero-shot、结构化提示词、Debug 技巧 📌 下节预告:C 语言自动判题系统的用户界面与控制逻辑

★

💬 如果觉得有收获,欢迎分享给更多朋友一起学习,也欢迎在评论区交流你的提示词实战经验!


【声明】内容源于网络
0
0
知识代码AI
技术基底 机器视觉全栈 × 光学成像 × 图像处理算法 编程栈 C++/C#工业开发 | Python智能建模 工具链 Halcon/VisionPro工业部署 | PyTorch/TensorFlow模型炼金术 | 模型压缩&嵌入式移植
内容 437
粉丝 0
知识代码AI 技术基底 机器视觉全栈 × 光学成像 × 图像处理算法 编程栈 C++/C#工业开发 | Python智能建模 工具链 Halcon/VisionPro工业部署 | PyTorch/TensorFlow模型炼金术 | 模型压缩&嵌入式移植
总阅读10.8k
粉丝0
内容437