跳转到内容
项目课 · 本地运行与作品反馈 做一个可交付的报名数据清理工具 导入 CSV,校验报名、去重、分配名额,导出可核对的结果。
不确定从哪里开始?用 6 道情境题检查基础 约需 6 分钟。根据实际作答给出补课建议,无需登录。刷新页面会清空本次答案,不影响已有学习记录。
基础约 150 分钟 · 7 项验收 会运行 Python;了解 JSON 对象、列表和条件判断。
项目包包含模型进阶代码与教程,可在完成基础后接入自己的模型;另留调试与人工核验时间。
先看成果,再开始
从一条输入到第一次提交 基础练习无需模型密钥 成果预览:正常报名与候补 以下是教学用例的预期示例。它帮助你理解目标,自己的实现要在本地运行并提交报告。
给工具的输入 {
"csv": "name,email\n小林,lin@example.com\n小周,zhou@example.com",
"capacity": 1
} 应得到的结果 {
"accepted": [
{
"name": "小林",
"email": "lin@example.com"
}
],
"waitlist": [
{
"name": "小周",
"email": "zhou@example.com"
}
],
"issues": []
} 我的电脑Windows macOS / Linux 准备 Python 3.10+,完整解压项目包 在包含 verify.py 的文件夹打开终端。先检查版本;找不到命令时先安装 Python,再重新打开终端。
py -3 --version运行起始代码,认识第一份失败报告 首次出现 7 项 FAIL 和 NotImplementedError,表示起始代码还没实现。按下方三段任务修改 solution.py,保存后重跑。
py -3 verify.py复制验收命令
用自己的输入试一遍 运行本地网页,打开终端显示的地址,修改输入并核对输出。端口被占用时可加 --port 8871。
py -3 run.py上传 report.json,按反馈修订 文件就在解压目录;失败报告也可提交。完成基础后再做挑战,并保存一条自己的需求或测试。
前往提交与修订记录 →
卡在安装、命令或报告文件? Windows 可尝试 python;macOS/Linux 使用 python3。版本须至少 3.10。 找不到 project.json:确认完整解压,终端已进入包含 verify.py 的目录。 语法或导入失败:按中文提示修正 solution.py,再运行;这类错误不会生成报告。 运行超时:先检查死循环;确实需要更长时间时使用 --timeout 20。 报告属于旧版:下载当前包,把自己的实现迁入后重新运行,已有历史仍可回看。 一步一步,完成自己的作品
这门项目课怎么学 本地练习 · 无需模型费用 01 基础练习02 分层提示03 独立挑战04 评分依据基础练习 先预测结果,再写代码,最后运行核对。第一次出现7项失败是起始代码未完成,按下面三段逐步修正。
读对一条记录 先只实现输入校验和CSV解析。预测带逗号姓名应占几列,再运行quoted_csv。
关注用例:quoted_csv、bad_header、invalid_capacity
这一段卡住了,查看提示 → 保留错误,不丢好行 实现姓名/邮箱规范化和查重。用invalid_rows确认坏行后仍处理下一行。
关注用例:invalid_rows、dedupe
这一段卡住了,查看提示 → 分配名额与候补 最后实现容量分配。容量从1改成0,解释为什么仍要读取和校验所有行。
关注用例:normal、zero_capacity
这一段卡住了,查看提示 → python verify.py打开完整输入约定与基础教程 → 本文目录 1. 准备与第一次运行 2. 写清楚输入与交付要求 3. 让编程助手分步实现 4. 根据失败修正代码 5. 打开应用并测试自己的材料 6. 验收、提交和进一步修改 进阶项目:接入你自己的模型 先确认接口与配置 查看本机运行证据 连接失败时先查哪一项 编程进阶:让模型写代码,由你证明它可用 1. 生成可审查的候选 2. 对照失败输入修订 3. 做出交付物 实跑案例:7项全绿,为什么仍不能交付 你要做的不是输出一段看起来正确的代码,而是交付一个能接收真实输入、保留坏行原因、导出结果的小应用。完成后,打开本地网页,粘贴 CSV,设置名额,得到正式名单、候补名单和错误行。建议分三次学习,总投入约150分钟。
1. 准备与第一次运行
需要 Python 3.10+,不需要安装依赖。解压项目包,进入包含 solution.py 的目录。Windows 若提示找不到 python,可用 py -3 替换下文 python。先运行:
python verify.py
首次会看到7项 FAIL,每项下方显示“期望正常返回结果,实际:NotImplementedError…”,同时生成 report.json。这说明起始代码待完成,不是安装失败。不要删除用例;先打开 project.json,看每项输入与预期结果。失败时 verify 只打印期望与实际在哪些字段不同;卡住时先在项目页逐层展开分层提示,仍无法定位再运行 python verify.py --explain 查看每项诊断。
2. 写清楚输入与交付要求
输入是 JSON 对象,csv 为最多50000字符的 CSV,表头必须恰好为 name,email,最多500条报名(表头不计入);capacity 是0–500的整数,布尔值不合法。输出固定包含 accepted、waitlist、issues 三个列表:accepted 与 waitlist 的每项为 {"name": 姓名, "email": 邮箱},issues 的每项为 {"row": 记录序号, "reason": 原因},都按原记录顺序排列。姓名去首尾空格,邮箱去首尾空格并转小写;规范化后的邮箱必须恰好含一个@、@两侧非空、@后面至少有一个两侧都非空的点、整体不含空白,本练习不宣称实现完整邮箱标准或投递验证。
重复邮箱保留第一条有效报名。先处理坏行与重复,再按原记录顺序分配名额。row 是 CSV 记录序号,表头为1,不是包含引号换行的物理行号。单条坏行记入 issues 后继续处理下一条;每条记录只记一个原因,按下表从上到下判定,命中第一项即停:
以下属于整份输入非法,抛 ValueError,不返回部分结果:输入不是对象;csv 不是字符串或超过50000字符;capacity 不是0–500的整数(含布尔值);CSV 本身无法解析(例如引号未闭合);表头不是恰好 name,email(含空 CSV);报名超过500条——超限时不能截断后报告成功。
把这份输入粘入本地网页,或存为自己的样例:
{"csv":"name,email\n 小林 , LIN@EXAMPLE.COM \n重复,lin@example.com\n小周,zhou@example.com","capacity":1}
预期正式名单只有小林;小周候补;第三条 CSV 记录标记 duplicate_email。容量不能被重复报名占用。
3. 让编程助手分步实现
可以自己编码,也可以将以下完整任务连同 solution.py 和 project.json 提供给你使用的编程助手。是否使用助手不改变验收标准。
请在 Python 3.10+ 标准库下实现 solution.py 的 solve(payload)。以 project.json 中的输入输出约定为准。先解释 CSV 字段与记录、整体输入错误与单条坏行的区别,然后只实现输入校验和 csv.reader 解析。不要修改 verify.py、reference.py 或 project.json,不要增加第三方库,不要用 split(',') 解析 CSV。完成后列出我应运行的测试和暂未实现的步骤。
提交作品,让问题变得具体 先在本地运行 python verify.py,再上传生成的 report.json;挑战使用 --suite challenge 生成 challenge-report.json。服务器会核对每项输出,并指出失败原因与需要复习的知识。
正在读取账号…
第一轮完成后,增加姓名/邮箱规范化及查重。第二轮再增加名额和候补逻辑。每轮运行 python verify.py,对照失败项下方的字段差异修订,保留一份失败报告再覆盖为新报告。
CSV中的逗号可能属于姓名,例如 "林,一",lin@example.com。标准库 csv.reader 能处理引号;拆字符串会将两列误读成三列。容量为0时,合法报名应全部进入候补,而非跳过处理。
4. 根据失败修正代码 若 dedupe 失败,先打印规范化后的邮箱,看 LIN@EXAMPLE.COM 是否已变为小写,再确认去重集合只包含有效报名。可以给助手这样一份修订请求:
dedupe 用例失败:重复邮箱占用了名额。请追踪邮箱规范化、seen集合和名额计数的执行顺序。只调整这一条链路,保留错误行的CSV记录序号。修复后运行 normal、dedupe、zero_capacity 和 invalid_rows,不得修改预期结果。
如果 invalid_capacity 失败,检查是否使用了 isinstance(True, int);这里需区分布尔值与整数。若 invalid_rows 失败,检查代码是否遇到第一条坏行就提前 return。网页显示输入无效时,先确保你粘贴的是 JSON 对象,CSV中的换行在JSON里写为 \n。
5. 打开应用并测试自己的材料 打开终端显示的 http://127.0.0.1:8870。选择不同用例后点击“运行项目”,再修改输入,观察结果。点击“下载结果 JSON”保存产物。端口占用时使用 python run.py --port 8871。Ctrl+C停止服务;应用只监听本机。
独立增加两个新输入:一个含500条有效记录,一个包含带逗号和换行的引号字段。记录需求是否仍满足,不能只截图绿色测试。未支持导出Excel、多人报名和真实邮箱验证,应在交付说明中写明。
6. 验收、提交和进一步修改 python verify.py --report report.json
把 report.json 上传到 AIScope 本项目页。服务器逐项核对输出并给补课入口;上传的本地报告不能证明代码由谁编写,也不能证明外部模型效果。填写你修过的错误、额外用例与局限。需要人工作品反馈时,再明确申请管理员查看该次提交。
遇到障碍可运行 python verify.py --reference --report reference-report.json 或 python run.py --reference 对照参考实现。参考报告会单独标为“参考实现”,不会当成独立完成的证据。
交付包应包含 :你的solution.py、一次通过的报告、一次失败及修订说明、自己的两个输入输出案例、说明运行命令与限制的README。本项目参考代码在发布前进行本地运行验证;未将编程助手生成的结果冒充真实模型实测。
进阶项目:接入你自己的模型 基础验收通过后,在同一个下载包内继续。模型程序使用 Python 标准库,调用你选择的兼容 Chat Completions 接口;本站没有代管学员密钥,也没有替你支付模型费用。当前教程提供接入实现,真实生成质量需要你在自己的模型和材料上记录、核验。
先确认接口与配置 到所用服务商控制台确认三个信息:兼容接口的 Base URL、已开通的模型名称、API Key。接口可能随地域、工作空间不同,直接复制自己的配置,不要猜地址。通义千问可查官方接口说明 。RAG选择支持JSON输出 的模式;Agent还需要Function Calling 。JSON模式保证的范围不等于事实准确,程序仍需校验字段和证据。
在解压后的项目目录打开终端。PowerShell中先把下面两处占位文字替换为自己的值:
$env:LLM_BASE_URL = '控制台提供的兼容接口Base URL'
$env:LLM_MODEL = '你已开通的模型名称'
python model_lab.py generate --input model-input.json --ask-key
Linux/macOS使用export LLM_BASE_URL='...'、export LLM_MODEL='...'后运行同一条Python命令。--ask-key在终端隐藏输入,只在本次进程使用;已有LLM_API_KEY环境变量时可省略它。脚本不会读取AIScope服务器的.env。本机模型可用loopback HTTP,远程接口必须HTTPS;不会跟随重定向转发密钥。
每次generate只由你主动启动,最多3次模型请求、每次最多2200输出token,不自动重试。模型名称或参数不兼容时会明确失败,不会偷偷换模型。使用量来自服务商响应,缺失时保留未知;程序不推算费用,实际费用请核对服务商账单。
查看本机运行证据 runs/时间-标识.json保存任务、请求消息、模型实际响应、模型名、用量、耗时和程序检查结果。不同尝试保留不同文件,失败也有记录。密钥和请求头不写入记录;目录已加入下载包自带的.gitignore。输入中仍可能有私有材料,分享前自行检查,不能把整个runs目录公开上传。
completed只表示这次程序处理完成;代码可能有缺陷,引用可能不支持结论,草稿也可能写错。配置缺失、401/403、429、网络失败、输出截断、坏JSON、引用不符和工具越权会记录不同错误。网络超时可能已经计费,先检查服务商记录再决定是否重试。
基础的report.json继续由verify.py生成,用于本站逐项核对。模型运行记录是独立文件,不能冒充基础验收报告;目前可在作品复盘中记录运行ID、发现的问题和修订方法,人工评价时只主动共享你希望评审查看的材料。
连接失败时先查哪一项 Arrearage的解释依据阿里云错误码说明 ,于2026-09-07核对。程序只保留已识别的错误码,不保存服务商错误正文;未知错误不会被误判成欠费。
编程进阶:让模型写代码,由你证明它可用
1. 生成可审查的候选 保留已经通过基础验收的solution.py。打开model-input.json查看任务:在显式CSV契约下完成报名清理。运行上面的模型命令,程序将当前项目规范与边界样例发送给模型,生成runs/…-candidate.py。
程序只做AST语法检查和solve函数存在检查,不执行候选,也不覆盖你的solution.py。打开代码,从头读一遍,先确认没有读写文件、访问网络、读取环境变量或执行shell的额外行为,再看CSV解析、类型检查、去重顺序和错误行处理。AST检查本身不能判断代码安全或正确。
2. 对照失败输入修订 你审查后,把候选中需要的实现手动放入solution.py,执行python verify.py。把失败用例的输入、期望和实际结果写进model-input.json的task,再次生成并比较两版差异。不要删除失败用例,也不要把模型说“通过了”当成真实输出。
候选能看到七个公开样例,因此七项通过不能证明它处理了所有输入。请自己再造三组数据:带引号和换行的姓名;重复邮箱出现在一个坏行之后;容量超过有效人数。先手写预期,再运行python run.py输入这些数据,比对接受、候补和issues。把未被提示过的失败输入纳入下一次修订。
3. 做出交付物 至少保留两次模型运行记录、最后的solution.py、基础report.json和三组额外输入/输出。复盘写清楚:模型第一次错在哪里、你如何定位、代码具体改了什么、还有什么限制。删除或避开真实报名者个人信息后再分享。模型生成次数和token是过程记录,不是代码质量分数。
常见卡点:code_format表示内容不是可解析源码或缺少solve;truncated表示输出不完整,应缩小任务;语法通过但验收失败,应回到具体输入,不要把所有代码再次盲目重写。
实跑案例:7项全绿,为什么仍不能交付 2026-09-07,维护者使用虚构报名数据实际调用qwen-plus,保留三次生成和一次人工修订。下载包中的model-example.json包含真实请求、源码、用量、逐项报告及额外测试脚本。它是可复核的教学案例,不能代表该模型在其他任务上的准确率。
最有迷惑性的错误发生在第三次:代码注释说“保留换行”,实际却先调用splitlines()。例如输入姓名"林,\n一",输出成了林,一。七个公开样例没有覆盖这个情况。
if not isinstance(csv_content, str) or len(csv_content) > 50000:
raise ValueError("csv长度或类型无效")
try:
rows = list(csv.reader(io.StringIO(csv_content), strict=True))
except csv.Error as exc:
raise ValueError("CSV格式无效") from exc
if not rows or rows[0] != ["name", "email"] or len(rows) > 501:
raise ValueError("表头或记录数无效")
另外把所有非两列记录统一报告为invalid_columns,按约定用正则拒绝邮箱内部空白。下载示例中的final_source是这次人工修订后的完整源码;extra_cases_source可另存为extra_cases.py,先审查,再运行python extra_cases.py --report runs/extra.json。请继续增加自己的输入,17项通过也不是任意输入都正确的证明。