18-03 检查另一用户的数据
题目
为 Bob 增加一份私人笔记,用 Alice、Bob 分别检索;再从两个 HTTP 身份读取同一显示任务号,核对材料、检查点和计划的归属。
推导与做法
Bob 的私人块携带 owner=bob,过滤发生在取前 k 项之前。Alice 的结果不含这块,Bob 可以检索到。
HTTP 再检查同一显示任务号:Alice 已建立 shared-name 时,Bob 先读得到 404;Bob 自己建立后,两份内部 thread_id 分别带各自身份。批准后 plans 也只返回当前用户的行,不能因显示编号相同而共用检查点或正式计划。
过程图
%% 每个节点保留输入、执行位置或执行后的实际状态。
flowchart TD
S0["Bob私人块带owner=bob"]
S1["Alice检索前先过滤:不可读到"]
S0 --> S1
S2["同显示号保存为alice号与bob号"]
S1 --> S2
S3["各自批准后,计划表仍按当前用户读取"]
S2 --> S3
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-03
程序按题号输出处理后的值、查询结果或状态。先和前面的手算比较,再修改一项输入重跑。
查看本题运行结果
# 与上面的手算状态和题目数值逐项比较。
{
"alice_sources": [],
"bob_sources": [
"bob-private"
],
"bob_before_own_run": 404,
"alice_plans": [
{
"id": 1,
"owner": "alice",
"operation_id": "69cca10daab5414fb35758d418bb2e4a",
"question": "NumPy 切片怎样避免改动原数组?",
"minutes": 35
}
],
"bob_plans": [
{
"id": 2,
"owner": "bob",
"operation_id": "82c61ed055534ed397b2a3fa75006485",
"question": "NumPy 切片怎样避免改动原数组?",
"minutes": 35
}
]
}