第 6 节 · 本站原创中文课程 · 建议 35 分钟
第六课:用 AI 编程实现下一词预测器
学完能做:把需求变成程序契约,用测试和小步修改检查 AI 生成代码。
小鱼模型实验 · 用自己的话写下发现,保留实际观察与待验证的问题。
先给编程助手一份可检查的需求
本节把之前的相邻词计数实验实现为一个 Python 程序。可以使用学校或家长允许的编程助手,把下面的契约和测试交给它;不要求购买某个工具。GuppyLM 本身不是通用编码助手。先让助手解释方案和边界,再生成代码;暂不使用外部工具时,可检查本站参考实现,并在报告中说明。
请用 Python 3 标准库实现 predict_next(text, context)。
每行是独立句子,按空白切词,只统计同行相邻词。
返回 context 后出现最多的词;平票按训练数据中首次出现顺序选择。
未知词或空数据返回 None;去掉 context 首尾空白。
不要下载依赖、访问网络或读写文件。
先解释算法和边界,再给实现与可直接运行的 assert 测试。
测试必须包括:多数票、平票、句子边界、未知词、空数据、多余空格。 先看会运行什么,再执行
参考程序只导入标准库 Counter,没有网络或文件操作。阅读 AI 返回的版本时,同样检查导入、系统命令、网络请求和文件读写;不理解的语句先让它逐行解释,并与老师核对。已有 Python 3 环境时,导出草稿到文件夹,在该目录终端运行 python3 文件名.py;Windows 可用 py 文件名.py。应看到“6 个基础测试通过”。缺少环境时由老师安排,未执行则标注待测。
from collections import Counter
def predict_next(text, context):
counts = Counter()
for line in text.splitlines():
tokens = line.split()
for left, right in zip(tokens, tokens[1:]):
if left == context.strip():
counts[right] += 1
return counts.most_common(1)[0][0] if counts else None
def test_predict_next():
assert predict_next("我 喜欢 海草\n我 喜欢 气泡\n我 喜欢 海草", "喜欢") == "海草"
assert predict_next("我 喜欢 气泡\n我 喜欢 海草", "喜欢") == "气泡"
assert predict_next("我 喜欢 海草\n我 吐 气泡", "海草") is None
assert predict_next("我 喜欢 海草", "住在") is None
assert predict_next("", "喜欢") is None
assert predict_next("我 喜欢 海草", " 喜欢 ") == "海草"
if __name__ == "__main__":
test_predict_next()
print("6 个基础测试通过")
print("喜欢 ->", predict_next("我 喜欢 海草", "喜欢"))
用一个失败反例检查 AI
常见错误是先对整篇文本执行 text.split(),这会丢失换行边界。输入“我 喜欢 海草”换行“我 吐 气泡”,不该学到“海草→我”。参考实现逐行处理,所以该测试返回 None。可以先保存正确版本,再尝试把循环改成整篇切分,运行边界测试观察失败;用下面的报错任务卡要求助手做最小修复。
需求:每行独立,不能把两行首尾连起来。
复现输入:'我 喜欢 海草\n我 吐 气泡',context='海草'。
预期:None。实际:'我'(仅当实际复现时填写)。
请解释为什么跨行计数,并给最小修改。
保留原来的其他行为;补上这个回归测试,再说明需要重跑哪些测试。 做一次需求变更,再回归测试
先保留基线,再要求 AI 增加大小写不敏感匹配:比较前词与 context 时使用 casefold(),后词仍原样返回。增加 assert predict_next('I Like kelp', 'like') == 'kelp',先看旧版失败,再实现匹配条件并确认新测试通过。注意不能把整个返回文本都转小写,否则破坏原样返回契约。重跑六个旧测试,并再增加一个由你设计的反例。
记录协作证据
在笔记中保存最初需求、用过的提示词、实际报错、修改摘要和测试输出。AI 帮写了哪部分、你判断了什么,都明确说明。程序通过这些测试只表明它符合已覆盖的契约,并不证明完整正确,更不表示训练了 GuppyLM。本站练习区负责保存代码与笔记,代码需要在自己的 Python 环境运行。
这是本站独立编写的讲解与示例,并非官方课程逐字翻译。理解之后,请完成下面的练习、自测和笔记。