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
}