Python 现代开发学习笔记

18-06 接入自己的书架

本章题解 · 全部练习

题目

把第十三章的当前用户和书籍查询接成只读工具。先显示将要保存的阅读安排,再批准提交;分别检查未登录、查询不到书籍、拒绝与批准的结果。

推导与做法

工具闭包捕获第十三章登录后的 Bearer,只接收 title,不让模型填 owner。查询仍经过原 API 的当前身份依赖和用户筛选,精确匹配不到书时先停止。

找到 NumPy 后才创建阅读安排,interrupt 先展示将要保存的动作;拒绝后计划数仍为零,批准后才变为一。题解同时请求未登录查询,得到 401,并分别保留缺书、拒绝、批准结果。运行前在 study_agent 环境安装相邻 api_project,使用它声明的数据库和密码依赖。

过程图

%% 每个节点保留输入、执行位置或执行后的实际状态。 flowchart TD A["当前Bearer封装在工具闭包中"] A --> B{"查询是否有合法身份与目标书"} B -->|未登录| C["401,停止"] B -->|没有书| D["空结果,停止"] B -->|找到NumPy| E["interrupt保存待确认状态,plans=0"] E --> F{"用户决定"} F -->|拒绝| G["rejected,plans仍为0"] F -->|批准| H["恢复节点,执行业务事务"] H --> I["saved,plans为1"] classDef default fill:#EEF0FB,stroke:#4657B5,color:#24324A linkStyle default stroke:#4657B5

实现与运行

查看带注释实现。本题与相关处理函数放在同一章节代码文件中;启动工具负责定位相邻项目和选择题号。

在配套目录的 LangChain与AgentRuntime/study_agent 中运行。先按项目 README 执行 uv sync --locked。本章先执行 uv sync --locked --all-extras。18-06 还需执行 uv pip install -e "../../FastAPI/api_project",接入前面 API 声明的依赖;之后使用 --no-sync 保留这份组合环境。

# 使用项目解释器运行本题,题号决定执行哪一组演示。
uv run --no-sync python "../../学习索引/参考实现/代码/ch18.py" 18-06

程序按题号输出处理后的值、查询结果或状态。先和前面的手算比较,再修改一项输入重跑。

查看本题运行结果
# 与上面的手算状态和题目数值逐项比较。
{
  "not_logged_in": 401,
  "missing_book": {},
  "found": "NumPy",
  "rejected": "rejected",
  "plans_after_reject": 0,
  "preview": [
    {
      "action": "save_plan",
      "operation_id": "6975a21ab5774cac814661b6f3613000",
      "question": "NumPy 切片怎样避免改动原数组?",
      "minutes": 35
    }
  ],
  "approved": "saved",
  "plans_after_approve": 1
}

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