Python 现代开发学习笔记

(一)从查询笔记到安排阅读

1. 把已有项目接到文本问题

第十七章已经把数据处理、数据库和 HTTP 接口接成完整项目。现在给书架增加一个入口:输入“NumPy 切片怎样避免改动原数组”,程序找到相关笔记,给出带来源的解释;需要复习时,再提出一个 35 分钟的阅读安排,等用户确认后保存。

先把一次操作拆开:问题从哪里来,能读哪些笔记,回答引用了什么,用户批准了哪项动作,保存后怎样查到。前面学过的函数、校验、身份判断和事务继续承担这些工作。新增的聊天模型负责理解与生成文字;检索负责找材料;运行程序负责调用工具和推进任务。

阅读时可以沿下面几处回查。这里继续使用已经学过的对象、数组和请求处理方式,再给它们接上模型接口。

已经学过的内容 本章继续用来处理的工作
第三章的函数、模块、装饰器与生成器 将检索写成函数,用装饰器登记工具,逐项读取执行更新
第四章的数据类、实例属性与继承 保存运行依赖,实现可替换的编码器和模型接口
第五章的 JSON、SQLite、事务与连接关闭 保存证据字段、任务进度和正式阅读计划
第八章的 HTTP、同步调用与协程 调用模型服务,区分本次等待与持久化暂停
第十一章的 shape、点积、广播与排序 把文本向量排成矩阵,计算每个候选的相似度
第十三章的 Pydantic、依赖与身份 检查字段,把当前用户传给工具和业务层
第十七章的状态、版本和重开检查 重建依赖,从保存的进度继续同一项操作

第四章中的存储器由服务对象调用;本章的工具也采用这个关系:模型提出函数名和参数,程序调用已经登记的函数,函数再使用存储器或检索对象。先把这条调用关系读清,再看框架怎样替我们完成消息交接。

同一次提问从检索到引用检查、暂停确认与保存计划的状态变化

2. 先观察一次提问与保存

本章的完整项目在 LangChain与AgentRuntime/study_agent。先在项目目录运行:

# 项目使用 Python 3.12,按附带锁定文件安装运行与测试依赖。
uv sync --locked --all-extras
# 给本次任务一个名字;--plan 表示回答后还希望保存阅读计划。
uv run study-agent --data data ask "NumPy 切片怎样避免改动原数组?" --thread numpy-1 --plan --minutes 35
# 先查看暂停内容,再明确批准同一项计划。
uv run study-agent --data data status numpy-1
uv run study-agent --data data approve numpy-1
# 新一次命令从 SQLite 读取已经提交的计划。
uv run study-agent --data data plans

第一次命令会返回 state、pending 和 next。state 保存已完成的检索与回答,pending 显示准备保存的动作,next 指向等待继续的节点。此时计划表还没有增加记录;执行 approve 后,状态才变成 saved。

按行执行这些命令:先读完 ask 的输出,再决定是否执行 approve;想拒绝时使用 reject numpy-1。退出终端也可以稍后继续,任务进度保存在数据目录中。命令行中的 numpy-1 是本次任务的显示编号,代码会结合当前身份把它保存为 alice:numpy-1。

默认模型按固定脚本回放一次调用,返回检索材料中的原文。这样可以先核对消息、工具、检查点和事务,而不必下载模型。它没有学习语言知识,也不会自行推理;换上生成模型以后,回答质量需要用同一组问题重新检查。后面会解释替换位置。

需要完成的步骤 使用的工具
把提示、模型调用和结果解析接起来 LangChain 的消息、Runnable 与模型接口
找到能够支持回答的笔记片段 RAG:先检索,再把材料交给模型生成
保存步骤状态,按条件分支,暂停后继续 LangGraph 的状态图与检查点
调用工具、传入依赖、处理失败并持续执行 Agent Runtime 承担的运行工作

LangChain 提供模型、工具和 Agent 等接口;LangGraph 提供更具体的状态与执行控制。create_agent 已经建立在 LangGraph 之上,小型工具循环可以直接使用它;需要自己安排确认与持久化步骤时,再显式构造图。LangChain 概览

笔记正文与全部题解 · Ctrl / ⌘ K