在实际开发中,把 AI 当作学习工具,已经不再是“要不要用”的问题,而是“怎么用才不会变成复制粘贴”。Hacker News 上经常有开发者发起同一个讨论:How are you using AI to learn? 翻看评论区会发现,真正能坚持下来的人很少直接让 AI 念答案,更多是让 AI 参与需求拆解、代码生成、测试验证和源码阅读。二者区别在于:前者把 AI 当成“答案搜索框”,后者把 AI 当成“可交互的结对开发者”。学习效果的差异,来自“有没有验证”。
接下来按一条可复现主线展开:先用本地模型和 IDE 插件搭一个 AI 学习工作台,再写一个“AI 学习助手”命令行工具,接着用开源项目练习 AI Agent 开发,最后补充常见的幻觉问题和排查路径。整条路线适合已经会一点编程、想用 AI 加速学习新技术的开发者,也适合正在准备 AI 工程实践的人。
1. 先想清楚:AI 学习工具应该解决哪一层问题
在动手写代码之前,先明确 AI 在学习流程里的定位,否则后面容易变成“AI 写一段、人复制一段、项目跑不起来”。
1.1 三种典型用法:问答、结对、Agent
第一种是问答式学习。用户向 AI 提问,AI 返回概念解释。这种方式适合入门,但如果不要求 AI 结构化输出,很容易得到又长又空的说明。很多人在用 AI 学编程时,只问一句“什么是装饰器”,得到的回答往往是教科书式定义,看完还是不会用。
第二种是结对式学习。用户给 AI 一个具体需求,AI 生成代码和测试,用户在本地运行、观察结果、根据报错继续追问。这种方式的重点不是代码本身,而是“运行 + 修改”的循环。比如让 AI 写一个解析 JSON 文件的脚本,然后自己改路径、跑测试、看日志,理解每一步为什么成立。
第三种是 Agent 式学习。用户给 AI 一个目标,AI 调用脚本、读写文件、执行命令,自动完成一个小任务。适合练习工具链和工程化能力。比如构造一个定时抓取本地笔记、生成复习卡片的流程,需要文件读写、进程管理、模型调用和异常处理,一套下来能学到很多工程细节。
| 用法 | 典型输入 | 典型输出 | 适合阶段 | 主要风险 |
|---|---|---|---|---|
| 问答式 | “什么是依赖注入?” | 概念解释 | 入门 | 容易堆概念,没有动手 |
| 结对式 | “用 Python 写一个读取 CSV 并生成统计结果的脚本” | 代码 + 运行说明 | 动手阶段 | 代码需要验证 |
| Agent 式 | “定时抓取本地笔记,生成复习卡片” | 自动化脚本或工具 | 进阶 | 链路长,难排查 |
1.2 为什么“可验证结果”比“直接告诉你”更重要
AI 是概率模型,输出看起来流畅,不代表内容正确。尤其在学习编程时,AI 可能会给出一个旧版本 API 的写法,也可能把两个框架的概念糅在一起。如果只读答案不运行,你无法发现错误;如果每次拿到代码就运行,你会立刻看到错误信息,然后带着具体问题再问 AI,这样更容易学到东西。
一个最小验证闭环是:
- 把需求写清楚:输入是什么,输出是什么。
- 让 AI 给出可运行的代码或命令。
- 在本地执行。
- 拿到实际输出或报错。
- 把报错重新交给 AI,进入下一次循环。
把“AI 说了什么”替换成“程序实际输出了什么”,是 AI 学习最重要的心法。很多开发者学得快,不是因为天赋,而是他们愿意让代码多跑几次,让报错信息多出现几次。
1.3 给 AI 设置边界:它是草案生成器,不是最终答案
不要在最开始就要求 AI“一次写对”。更合理的做法是:把 AI 输出视为第一版草案,自己负责审查依赖、运行、边界条件。学习 Java 时,让 AI 生成 Spring Boot 项目的同时,你自己看pom.xml的版本;学习 Python 时,让 AI 给出装饰器示例,自己再写一个带参数的装饰器验证理解。
注意:学习场景中,AI 可以帮你缩小问题范围,但“程序能不能跑”“你理解不理解”仍然要由你自己确认。AI 可以写出能运行的代码,但无法替你形成肌肉记忆和问题直觉。
2. 环境准备:用本地模型和 IDE 插件搭一个可调试的学习工作台
如果只想快速体验,可以直接使用在线 AI 服务。但要真正把 AI 嵌入学习流程,推荐在本机准备一套可调试的环境。本地模型的好处是免费、可离线、能看 Prompt 如何影响输出,也更适合练习模型接口调用。
2.1 工具选型
下面这套环境适合 Python 开发者,也适合对本地模型感兴趣的人:
- Python 3.10 或更高版本。
- Ollama,用来管理并运行本地大模型。
- 一个对话模型,例如 qwen2.5:7b。
- IDE,推荐 VS Code、IntelliJ IDEA 或 PyCharm。
- 一个 AI 编程插件,例如 Continue、GitHub Copilot,或 Cursor 自带的 AI 能力。
这套方案不是唯一解。如果你正在学习 Spring AI,也可以把 Java 和 Maven 加入环境;如果你更习惯 Cursor,可以跳过插件安装,直接用 Cursor 的对话能力。目标是让“写代码、跑测试、问 AI、看报错”在同一个窗口里完成。
2.2 安装并启动 Ollama,拉取一个可用模型
在 macOS 上,如果安装了 Homebrew,可以执行:
brew install ollama在 Linux 或 Windows 上,安装方式参考 Ollama 官方文档。安装完成后,先启动服务:
ollama serve服务默认监听 11434 端口。再打开一个新终端,拉取模型:
ollama pull qwen2.5:7b这里以 qwen2.5:7b 为例。如果网络或硬件条件不允许,也可以换成 llama3.1:8b 或其它 Ollama 支持的小模型。拉取完成后,检查模型列表:
ollama list正常输出会包含 qwen2.5:7b。接着验证 HTTP 接口是否可用:
curl http://localhost:11434/api/tags如果返回 JSON,并且models数组里能看到 qwen2.5:7b,说明本地模型服务已经准备好。
2.3 在 IDE 里接入 AI 编程插件
以 VS Code 为例,打开扩展市场,搜索 Continue,安装后就能在侧边栏打开 AI 对话窗口。这个窗口可以直接读取当前文件内容,适合“选中一段代码,让 AI 解释”的场景。
在 IDEA 或 PyCharm 中,可以安装 AI Assistant 或国内模型厂商提供的插件。不同插件的快捷键不一样,但核心用法一致:把当前代码上下文、报错信息一起发送给 AI,而不是只发一句话。报错信息越完整,AI 回答越有针对性。
Cursor 适合从零写项目,它的 Chat 和 Tab 补全能力也可以用来学习。建议不要同时装太多插件,一个能读代码、能带上下文的就够用。
2.4 学习环境检查清单
在进入下一节之前,逐项确认:
| 检查项 | 命令或操作 | 预期结果 |
|---|---|---|
| Python 版本 | python3 --version | 3.10 或更高 |
| Ollama 版本 | ollama --version | 正常输出版本号 |
| Ollama 服务运行中 | curl http://localhost:11434/api/tags | 返回 JSON |
| 模型已拉取 | ollama list | 列表包含 qwen2.5:7b |
| requests 已安装 | pip install requests | 成功安装 |
3. 最小实践:写一个“AI 学习助手”命令行程序
环境准备好了,接下来用一个最小程序实践“让 AI 输出可验证结果”。这个程序的目标是:用户输入一个知识点,AI 返回四部分内容:一句话解释、类比、最小可运行示例、自测题。
3.1 需求拆解与输入输出定义
先不要急着让 AI 生成代码,先自己定义好输入输出:
- 输入:一个知识点名称,例如
Python 装饰器。 - 输出:四段文本,并且必须包含“自测题”。
- 运行方式:命令行参数,或交互式输入。
- 技术栈:Python + requests,调用本地 Ollama 接口。
这样的定义可以帮助后续校验 AI 输出是否完整,也方便测试。
3.2 代码实现:用 requests 调用本地模型
创建目录:
mkdir ai-learning-assistant cd ai-learning-assistant创建requirements.txt:
requests>=2.31.0创建main.py:
import sys import requests OLLAMA_URL = "http://localhost:11434/api/chat" MODEL = "qwen2.5:7b" SYSTEM_PROMPT = ( "你是一名技术导师。回答必须包含四个部分:" "1. 一句话解释;" "2. 一个类比;" "3. 一个最小可运行示例;" "4. 两道自测题。" "如果用户要求代码,请给出可以直接运行的代码。" ) def build_messages(topic: str) -> list: return [ {"role": "system", "content": SYSTEM_PROMPT}, {"role": "user", "content": f"请讲解知识点:{topic}"}, ] def ask_ai(topic: str) -> str: payload = { "model": MODEL, "messages": build_messages(topic), "stream": False, } resp = requests.post(OLLAMA_URL, json=payload, timeout=120) resp.raise_for_status() data = resp.json() return data["message"]["content"].strip() def main(): if len(sys.argv) > 1: topic = " ".join(sys.argv[1:]) else: topic = input("请输入要学习的知识点:") print("AI 正在组织学习材料...\n") content = ask_ai(topic) print(content) if __name__ == "__main__": main()这段代码做了三件关键事情:
- 通过
SYSTEM_PROMPT给 AI 设定输出结构,避免回答跑题。 - 通过
requests.post调用 Ollama 的/api/chat接口,把用户输入放在messages里。 - 使用
timeout=120,避免本地模型推理太慢时程序无限等待。
如果想让输出更稳定,可以在payload中增加temperature参数,例如:
"temperature": 0.3temperature越低,输出越保守,适合学习场景;越高越有创造性,适合头脑风暴。
3.3 关键参数说明
| 参数 | 作用 | 学习场景建议 |
|---|---|---|
model | 指定使用哪个模型 | 先选本地可跑的小模型,再逐步切换 |
messages | 传递多条对话消息 | 把 system 指令放到最前面 |
stream | 是否流式返回 | 命令行演示先设为False,方便调试 |
timeout | 请求超时时间 | 本地模型 7B 推理可能超过 30 秒,设 120 |
temperature | 控制输出随机性 | 学习场景建议 0.3 左右,降低幻觉 |
3.4 运行与验证
运行:
python main.py "Python 装饰器"预期输出是一个包含四个部分的回答。例如“一句话解释”和“自测题”都会出现。如果只输出了大段概念,说明SYSTEM_PROMPT没生效,可以检查是否传给 Ollama 时被截断。
再运行一个带参数的命令:
python main.py "SQL 索引"如果程序正常运行,说明输入输出链路通。此时可以继续加入一个最简单的校验脚本test_output.py:
from main import ask_ai content = ask_ai("Python 装饰器") assert "自测题" in content, "AI 输出缺少自测题" assert len(content) > 100, "AI 输出太短" print("输出结构符合预期")注意:运行测试前,确认
ollama serve还在运行。
4. 用开源项目学习 AI Agent 开发:my_ai_town 的阅读路径
命令行工具只能训练“调用 API”的技能。想进一步学习 AI Agent 开发,建议找一个真实开源项目,把阅读和修改当成学习材料。材料中的my_ai_town正是一个可以放进这条路径的参考仓库。
4.1 为什么开源项目比教程更适合练习
教程通常会把复杂项目拆成“正确路线”,但真实项目里会有大量兼容代码、历史版本和边界处理。阅读开源项目能训练三件事:
- 快速定位关键入口。
- 理解模块之间的调用关系。
- 在现有代码上做小改动,而不影响整体结构。
对 AI 学习来说,真实开源项目也是最好的验证环境:AI 说的架构,必须和仓库里的文件对得上;AI 给的修改方案,必须在真实代码里跑通。
4.2 先跑起来:克隆、看 README、找入口
克隆仓库:
git clone https://github.com/mewamey/my_ai_town.git cd my_ai_town不要急着读所有代码,先看 README。README 通常包含项目简介、依赖列表、启动命令。按 README 装好依赖后,执行启动命令。不同项目命令差异很大,如果是 Python 项目,常见流程是:
pip install -r requirements.txt python main.py如果是 Node 项目,常见流程是:
npm install npm run dev第一次启动只要能正常起来,就算完成了一部分。启动失败也没关系,报错信息本身就是学习材料。把报错复制给 AI 时,尽量附上操作系统、Python 版本、Node 版本,这样 AI 更容易定位问题。
4.3 让 AI 辅助读源码:总结职责和生成调用关系
一个常见做法是先把某个目录的文件列表发给 AI,让 AI 猜结构,然后打开代码验证。例如:
请根据下面的文件列表,猜测每个文件可能负责什么职责,并用一句话概括。不要编造,打开实际代码后再修改你的判断。再把某个关键文件内容粘贴给 AI,要求输出:
- 输入:这个模块接收什么数据。
- 输出:它产生什么结果。
- 依赖:它调用了哪些模块。
- 关键逻辑:最核心的几步。
- 可能的边界问题。
每次要求都聚焦一个小范围,不要一次性把整个项目丢给 AI,否则上下文太长,回答质量会明显下降。
如果项目里有 AI Agent 相关模块,可以重点关注几个关键词:agent、memory、environment、prompt、tool。阅读时先画出调用链,再带着调用链去问 AI:“这个调用链里哪些是核心路径,哪些是异常分支?” AI 给出的回答可以作为理解路线,但最终要以实际断点和日志为准。
4.4 一个扩展练习:给项目增加一个小功能
读完结构后,选一个小功能做修改。例如“给 Agent 增加一条启动日志”或“在运行时打印当前模型名称”。改动越小,越容易验证。
步骤:
- 找到主循环或 Agent 启动位置。
- 在 AI 辅助下定位需要修改的函数。
- 自己动手加代码。
- 运行并观察日志。
- 让 AI 帮你审查改动,并指出潜在问题。
这个流程的关键是“让 AI 给方案,自己动手改”。如果你只是让 AI 把代码写好,粘贴进去,你学到的只是“它能写代码”,而不是“你能改项目”。
5. AI 学习中最容易踩的坑和排查链路
AI 学习不是“AI 说什么都对”,下面这些坑在实际过程中很常见。
5.1 常见坑速查表
| 问题现象 | 常见原因 | 检查方式 | 处理建议 |
|---|---|---|---|
| 调用本地模型报 ConnectionError | Ollama |