本页目录
Frontend / 前端Note 51

03 Todo list

它是什么

它是什么

Deep Agent 内置 write_todos 工具和 todos state,用于跟踪多步骤任务。前端不计算任务状态,只读取响应式的 stream.values.todos,每次 state 更新都会自动重渲染任务列表。

最小数据流

模型调用 write_todos
  -> LangGraph 更新 state.todos
  -> useStream 收到新的 stream.values.todos
  -> TodoPanel 重新计算计数和进度

单个 todo 的真实结构来自当前安装的 langchain.agents.middleware.todo.Todo

type Todo = {
  content: string;
  status: "pending" | "in_progress" | "completed";
};

前端核心代码只有一行:

const todos = stream.values?.todos ?? [];

本章示例

后端 todo_agent 被注册到本目录的 langgraph.json。它先创建三个任务,将第一项设为 in_progress,再逐项调用 write_todos 更新完整列表,直到全部为 completed

启动服务:

./deepagent_src/frontend_teach/start.sh

打开 http://127.0.0.1:5173,切换到 03 Todo list,提交默认问题。预期右侧先显示“Agent 正在创建计划”,随后出现三项任务;进行中项为黄色,完成项为绿色,进度最终变为 3/3

最小真实验证

uv run python - <<'PY'
from langgraph_sdk import get_sync_client

client = get_sync_client(url="http://127.0.0.1:2024")
for chunk in client.runs.stream(
    None,
    "todo_agent",
    input={"messages": [{"role": "human", "content": "请分三步解释 stream.values.todos"}]},
    stream_mode="values",
):
    todos = chunk.data.get("todos", [])
    if todos:
        print([todo["status"] for todo in todos])
PY

当前真实验证得到:

in_progress, pending, pending
completed, in_progress, pending
completed, completed, in_progress
completed, completed, completed

常见误区

write_todos 每次提交的是完整列表,并会替换之前的 todo state,不是只提交发生变化的那一项。不要在前端复制一份独立状态、手动轮询或猜测任务进度,否则 UI 会与 LangGraph state 分叉。

Todo list 是执行进度,不是最终答案。Agent 将最后一项标为 completed 后,仍应继续输出用户真正需要的结果。

官方资料

  • Deep Agents Todo list: https://docs.langchain.com/oss/python/deepagents/frontend/todo-list
  • Deep Agents Frontend overview: https://docs.langchain.com/oss/python/deepagents/frontend/overview