乐于分享
好东西不私藏

AI Agent从入门到精通(二):持久化记忆、人机协作与流式输出

AI Agent从入门到精通(二):持久化记忆、人机协作与流式输出

前言

上一篇我们搭了一个能"自主使用工具"的 Agent。但如果你真正跑起来就会发现三个问题:

  1. 失忆——每次对话都是新的,Agent 完全不记得上一轮你说了什么
  2. 失控——Agent 决定调什么工具、你完全无法干预,万一它准备删库呢?
  3. 发呆——Agent 在"思考"时,用户只能干等一个最终结果

本文解决这三个问题:持久化(Persistence)让 Agent 拥有记忆、人机协作(Human-in-the-Loop)让关键操作必须人类审批、流式输出(Streaming)让用户实时看到思考过程。

其中持久化是核心——后面两个能力都依赖它。

一、持久化:给 Agent 装上记忆

1.1 问题复现

用第一篇的代码跑两轮对话:

# 第一轮 result = app.invoke({"messages": [HumanMessage(content="我在北京")]}) # -> "好的,你在北京。有什么我可以帮你的?" # 第二轮 result = app.invoke({"messages": [HumanMessage(content="这里天气怎么样?")]}) # -> "请问你在哪个城市?"  <- 忘了!

为什么?因为每次 invoke 都是全新的 State,上一轮的消息完全丢失了。

1.2 Checkpointer:一行代码加记忆

LangGraph 的解决方案叫 Checkpointer——在每个节点执行完后,自动把 State 存一份快照。

from langgraph.checkpoint.memory import InMemorySaver # 创建检查点存储器 checkpointer = InMemorySaver() # 编译时传入 app = workflow.compile(checkpointer=checkpointer)

就这一行。但调用时需要多传一个 thread_id

config = {"configurable": {"thread_id": "user-001"}} # 第一轮 result = app.invoke(    {"messages": [HumanMessage(content="我在北京")]},    config=config ) # -> "好的,你在北京。" # 第二轮(同一个 thread_id) result = app.invoke(    {"messages": [HumanMessage(content="这里天气怎么样?")]},    config=config ) # -> "北京今天晴天,32 C"  <- 记住了!

thread_id = 对话线程的唯一标识。同一个 thread_id 下的消息会自动累积,就像微信聊天记录一样。

1.3 发生了什么?

加了 Checkpointer 后,每次节点执行完,LangGraph 会自动存快照:

执行 agent 节点 -> 存快照(checkpoint_1) 执行 tools 节点 -> 存快照(checkpoint_2) 执行 agent 节点 -> 存快照(checkpoint_3) ...

下次同一个 thread_id 再调用时,会先加载最新的快照,然后在此基础上继续。

Thread "user-001" 的时间线: 第一轮对话:  checkpoint_0 (空) -> checkpoint_1 (agent推理) -> checkpoint_2 (最终回答) 第二轮对话:  从 checkpoint_2 继续 -> checkpoint_3 -> checkpoint_4 -> checkpoint_5

所有历史消息都存在 State 里,Agent 自然就"记住"了之前的对话。

1.4 三种 Checkpointer

Checkpointer适用场景特点
InMemorySaver开发调试存在内存,进程结束就没了
SqliteSaver本地应用存在 SQLite 文件,重启不丢
PostgresSaver生产环境存在 PostgreSQL,支持高并发

生产代码示例:

from langgraph.checkpoint.sqlite import SqliteSaver # 数据存到文件,重启应用也不丢 with SqliteSaver.from_conn_string("checkpoints.db") as checkpointer:    app = workflow.compile(checkpointer=checkpointer)    # 即使程序重启,user-001 的对话历史还在

1.5 State 操作三件套

Checkpointer 不只是"自动存档",它还提供了三个强大的 API:

get_state:查看当前状态

state = app.get_state(config) print(state.values["messages"])  # 当前所有消息 print(state.next)                # 下一步要执行的节点(空=已完成)

get_state_history:时间旅行

# 获取所有历史快照 for snapshot in app.get_state_history(config):    print(f"Step {snapshot.metadata['step']}: {snapshot.next}")    print(f"  消息数: {len(snapshot.values['messages'])}")    print(f"  时间: {snapshot.created_at}")

这就像 Git 的 git log——你能看到 Agent 每一步的状态变化,方便调试。

update_state:手动修改状态

# 假设 Agent 理解错了,你想手动纠正 app.update_state(    config,    values={"messages": [HumanMessage(content="我改主意了,查深圳的天气")]},    as_node="agent"  # 假装这条消息是从 agent 节点产生的 ) # 继续执行(从修改后的状态继续) result = app.invoke(None, config)

update_state 的典型场景:手动纠正 Agent 的错误理解、注入系统指令、调试时跳过某些步骤。

1.6 Memory Store:跨对话的长期记忆

Checkpointer 解决的是同一对话内的记忆(短期记忆)。但如果用户今天聊完关了,明天开新对话又得重新自我介绍?

这时需要 Memory Store——跨对话的长期记忆。

from langgraph.store.memory import InMemoryStore # 创建 Store store = InMemoryStore() # 编译时同时传入 checkpointer 和 store app = workflow.compile(checkpointer=checkpointer, store=store)

Store 的数据结构是 namespace + key -> value

# 存储用户偏好(跨对话共享) store.put(    namespace=("user", "user-001", "preferences"),    key="language",    value={"setting": "中文", "updated": "2024-06-20"} ) # 在任何对话中检索 items = store.search(    namespace_prefix=("user", "user-001"),    query="用户住在哪里",  # 支持语义搜索!    limit=3 )

1.7 Checkpointer vs Store 总结

维度CheckpointerStore
比喻聊天记录通讯录备注
作用域单个 thread(对话)跨所有 thread
存什么完整对话状态快照结构化知识片段
谁写入自动(每步存档)手动(代码里 put)
典型用途多轮对话、断点恢复用户画像、偏好、长期事实

             Agent 记忆体系 ------------------------------------------------  Checkpointer(短期记忆)  [Thread A]  [Thread B]  [Thread C]   对话1记录   对话2记录   对话3记录  Store(长期记忆)  [用户画像 | 偏好设置 | 历史摘要]   所有对话共享 ------------------------------------------------

1.8 三类记忆模式

设计 Agent 记忆时,可以参考认知科学的三类记忆:

记忆类型含义Agent 中的实现
语义记忆关于用户/世界的事实Store 中存用户画像、偏好
情景记忆过去做过什么Store 中存历史对话摘要
程序记忆该怎么做事Store 中存规则、SOP

一个"聪明"的 Agent 会同时运用三类记忆:知道用户叫阿太住深圳(语义)、记得上次帮用户查过酒店选了希尔顿(情景)、知道查酒店时要先问日期和预算(程序)。

二、Human-in-the-Loop:让人类掌握决定权

2.1 为什么需要人机协作

想象你给 Agent 配了一个"发邮件"工具。用户说"帮我给老板发封请假邮件",Agent 自动写好内容、填上老板邮箱、直接发了——万一内容写得不对呢?发出去可就收不回来了。

这就需要 Human-in-the-Loop:在关键操作前暂停,等人类确认后再继续。

2.2 interrupt:动态断点

LangGraph 提供了 interrupt() 函数,可以在任何节点中暂停执行:

from langgraph.types import interrupt, Command @tool def send_email(to: str, subject: str, body: str) -> str:    """发送邮件给指定收件人"""    # 发送前暂停,等人类确认    approval = interrupt({        "question": "确认发送以下邮件?",        "to": to,        "subject": subject,        "body": body    })    if approval == "yes":        smtp.send(to, subject, body)        return "邮件已发送"    else:        return "已取消发送"

2.3 完整流程

config = {"configurable": {"thread_id": "email-task-001"}} # 第一次调用:Agent 决定调 send_email -> 触发 interrupt -> 暂停 result = app.invoke(    {"messages": [HumanMessage(content="帮我给老板发封请假邮件")]},    config=config ) # 查看 Agent 想做什么 state = app.get_state(config) print(state.tasks[0].interrupts[0].value) # -> {"question": "确认发送以下邮件?", "to": "boss@..."} # 人类审核后,决定批准 result = app.invoke(    Command(resume="yes"),  # 把答案传回去    config=config ) # -> "邮件已发送"

整个过程可视化:

用户: "帮我发封请假邮件"       |       v  [Agent] -> LLM 决定调 send_email       |       v  [Tools] -> send_email 内部触发 interrupt()       |       v  PAUSE! 等待人类确认...(状态已存档)  人类: "yes"       |       v  [Tools] -> 继续执行,真正发邮件       |       v  [Agent] -> "邮件已发送"       |       v     END

2.4 关键点

  1. interrupt 依赖 Checkpointer——暂停时状态必须存档,否则恢复不了
  2. 暂停期间可以关机——状态存在数据库里,明天回来继续都行
  3. 人类可以修改——不只是 yes/no,可以返回修改后的内容

2.5 静态断点(简单场景)

如果你只想在某个节点前固定暂停,不需要写 interrupt:

# 在 tools 节点执行前暂停(所有工具调用都要确认) app = workflow.compile(    checkpointer=checkpointer,    interrupt_before=["tools"] )

适合开发调试时使用。

三、Streaming:实时看到 Agent 的思考

3.1 为什么需要流式

Agent 做复杂任务时可能需要几十秒。如果只能干等最终结果,用户体验很差。流式输出让你实时看到每一步的进展。

3.2 三种流式模式

# 模式一:values -- 每步输出完整状态 for chunk in app.stream(input, config, stream_mode="values"):    print(chunk["messages"][-1].content) # 模式二:updates -- 只输出每步的增量变化 for chunk in app.stream(input, config, stream_mode="updates"):    for node_name, update in chunk.items():        print(f"[{node_name}] 产生了新消息") # 模式三:messages -- Token 级流式(逐字输出) for msg, metadata in app.stream(input, config, stream_mode="messages"):    if msg.content:        print(msg.content, end="", flush=True)

3.3 三种模式对比

模式粒度适用场景
values每个节点完成后调试、看完整状态变化
updates每个节点的增量后端日志、进度追踪
messages每个 Token前端展示打字效果

3.4 实用模式:进度通知

for chunk in app.stream(input, config, stream_mode="updates"):    if "agent" in chunk:        msg = chunk["agent"]["messages"][-1]        if msg.tool_calls:            print(f"正在调用: {msg.tool_calls[0]['name']}...")        elif msg.content:            print(f"{msg.content}")    elif "tools" in chunk:        print("工具执行完毕")

输出效果:

正在调用: get_weather... 工具执行完毕 北京今天晴天,32 C,适合户外活动。

四、总结

概念一句话解释关键 API
Checkpointer自动存档对话状态,实现多轮记忆InMemorySaver / SqliteSaver
thread_id对话线程标识,同 ID = 同一对话config["configurable"]["thread_id"]
get_state查看当前状态快照app.get_state(config)
get_state_history查看所有历史快照app.get_state_history(config)
update_state手动修改状态app.update_state(config, values)
Store跨对话长期记忆InMemoryStore + store.put/search
interrupt暂停执行,等待人类输入from langgraph.types import interrupt
Command恢复被暂停的执行Command(resume=...)
stream_mode流式输出模式"values" / "updates" / "messages"

从 Demo 到生产的路径

第一篇 ✅本篇 ✅下一篇 →
Agent 能跑记得住、可控、实时多 Agent 协作
StateGraphCheckpointer + StoreSubGraph
bind_toolsinterrupt + Command多 Agent 通信
ReAct LoopStreamingSupervisor 模式

参考资料

  1. LangGraph Persistence 概念文档
  2. LangGraph Memory 概念文档
  3. LangGraph Human-in-the-Loop 文档
  4. LangGraph Streaming How-to
  5. LangGraph Persistence Tutorial
  6. LangGraph Human-in-the-Loop Tutorial
基本 文件 流程 错误 SQL 调试
  1. 请求信息 : 2026-06-20 19:19:02 HTTP/1.1 GET : https://www.yeyulingfeng.com/a/775071.html
  2. 运行时间 : 0.253062s [ 吞吐率:3.95req/s ] 内存消耗:4,643.00kb 文件加载:145
  3. 缓存信息 : 0 reads,0 writes
  4. 会话信息 : SESSION_ID=7badceb8a848b29a81ae734f8725eed1
  1. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/public/index.php ( 0.79 KB )
  2. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/autoload.php ( 0.17 KB )
  3. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/composer/autoload_real.php ( 2.49 KB )
  4. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/composer/platform_check.php ( 0.90 KB )
  5. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/composer/ClassLoader.php ( 14.03 KB )
  6. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/composer/autoload_static.php ( 6.05 KB )
  7. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-helper/src/helper.php ( 8.34 KB )
  8. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-validate/src/helper.php ( 2.19 KB )
  9. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/ralouphie/getallheaders/src/getallheaders.php ( 1.60 KB )
  10. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/helper.php ( 1.47 KB )
  11. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/stubs/load_stubs.php ( 0.16 KB )
  12. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/Exception.php ( 1.69 KB )
  13. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-container/src/Facade.php ( 2.71 KB )
  14. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/symfony/deprecation-contracts/function.php ( 0.99 KB )
  15. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/symfony/polyfill-mbstring/bootstrap.php ( 8.26 KB )
  16. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/symfony/polyfill-mbstring/bootstrap80.php ( 9.78 KB )
  17. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/symfony/var-dumper/Resources/functions/dump.php ( 1.49 KB )
  18. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-dumper/src/helper.php ( 0.18 KB )
  19. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/symfony/var-dumper/VarDumper.php ( 4.30 KB )
  20. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/guzzlehttp/guzzle/src/functions_include.php ( 0.16 KB )
  21. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/guzzlehttp/guzzle/src/functions.php ( 5.54 KB )
  22. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/App.php ( 15.30 KB )
  23. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-container/src/Container.php ( 15.76 KB )
  24. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/psr/container/src/ContainerInterface.php ( 1.02 KB )
  25. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/app/provider.php ( 0.19 KB )
  26. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/Http.php ( 6.04 KB )
  27. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-helper/src/helper/Str.php ( 7.29 KB )
  28. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/Env.php ( 4.68 KB )
  29. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/app/common.php ( 0.03 KB )
  30. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/helper.php ( 18.78 KB )
  31. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/Config.php ( 5.54 KB )
  32. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/config/alipay.php ( 3.59 KB )
  33. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/facade/Env.php ( 1.67 KB )
  34. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/config/app.php ( 0.95 KB )
  35. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/config/cache.php ( 0.78 KB )
  36. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/config/console.php ( 0.23 KB )
  37. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/config/cookie.php ( 0.56 KB )
  38. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/config/database.php ( 2.48 KB )
  39. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/config/filesystem.php ( 0.61 KB )
  40. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/config/lang.php ( 0.91 KB )
  41. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/config/log.php ( 1.35 KB )
  42. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/config/middleware.php ( 0.19 KB )
  43. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/config/route.php ( 1.89 KB )
  44. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/config/session.php ( 0.57 KB )
  45. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/config/trace.php ( 0.34 KB )
  46. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/config/view.php ( 0.82 KB )
  47. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/app/event.php ( 0.25 KB )
  48. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/Event.php ( 7.67 KB )
  49. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/app/service.php ( 0.13 KB )
  50. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/app/AppService.php ( 0.26 KB )
  51. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/Service.php ( 1.64 KB )
  52. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/Lang.php ( 7.35 KB )
  53. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/lang/zh-cn.php ( 13.70 KB )
  54. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/initializer/Error.php ( 3.31 KB )
  55. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/initializer/RegisterService.php ( 1.33 KB )
  56. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/services.php ( 0.14 KB )
  57. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/service/PaginatorService.php ( 1.52 KB )
  58. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/service/ValidateService.php ( 0.99 KB )
  59. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/service/ModelService.php ( 2.04 KB )
  60. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-trace/src/Service.php ( 0.77 KB )
  61. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/Middleware.php ( 6.72 KB )
  62. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/initializer/BootService.php ( 0.77 KB )
  63. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/Paginator.php ( 11.86 KB )
  64. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-validate/src/Validate.php ( 63.20 KB )
  65. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/Model.php ( 23.55 KB )
  66. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/model/concern/Attribute.php ( 21.05 KB )
  67. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/model/concern/AutoWriteData.php ( 4.21 KB )
  68. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/model/concern/Conversion.php ( 6.44 KB )
  69. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/model/concern/DbConnect.php ( 5.16 KB )
  70. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/model/concern/ModelEvent.php ( 2.33 KB )
  71. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/model/concern/RelationShip.php ( 28.29 KB )
  72. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-helper/src/contract/Arrayable.php ( 0.09 KB )
  73. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-helper/src/contract/Jsonable.php ( 0.13 KB )
  74. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/model/contract/Modelable.php ( 0.09 KB )
  75. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/Db.php ( 2.88 KB )
  76. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/DbManager.php ( 8.52 KB )
  77. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/Log.php ( 6.28 KB )
  78. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/Manager.php ( 3.92 KB )
  79. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/psr/log/src/LoggerTrait.php ( 2.69 KB )
  80. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/psr/log/src/LoggerInterface.php ( 2.71 KB )
  81. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/Cache.php ( 4.92 KB )
  82. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/psr/simple-cache/src/CacheInterface.php ( 4.71 KB )
  83. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-helper/src/helper/Arr.php ( 16.63 KB )
  84. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/cache/driver/File.php ( 7.84 KB )
  85. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/cache/Driver.php ( 9.03 KB )
  86. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/contract/CacheHandlerInterface.php ( 1.99 KB )
  87. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/app/Request.php ( 0.09 KB )
  88. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/Request.php ( 55.78 KB )
  89. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/app/middleware.php ( 0.25 KB )
  90. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/Pipeline.php ( 2.61 KB )
  91. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-trace/src/TraceDebug.php ( 3.40 KB )
  92. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/middleware/SessionInit.php ( 1.94 KB )
  93. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/Session.php ( 1.80 KB )
  94. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/session/driver/File.php ( 6.27 KB )
  95. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/contract/SessionHandlerInterface.php ( 0.87 KB )
  96. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/session/Store.php ( 7.12 KB )
  97. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/Route.php ( 23.73 KB )
  98. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/route/RuleName.php ( 5.75 KB )
  99. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/route/Domain.php ( 2.53 KB )
  100. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/route/RuleGroup.php ( 22.43 KB )
  101. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/route/Rule.php ( 26.95 KB )
  102. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/route/RuleItem.php ( 9.78 KB )
  103. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/route/app.php ( 3.94 KB )
  104. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/facade/Route.php ( 4.70 KB )
  105. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/route/dispatch/Controller.php ( 4.74 KB )
  106. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/route/Dispatch.php ( 10.44 KB )
  107. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/app/controller/Index.php ( 9.87 KB )
  108. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/app/BaseController.php ( 2.05 KB )
  109. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/facade/Db.php ( 0.93 KB )
  110. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/db/connector/Mysql.php ( 5.44 KB )
  111. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/db/PDOConnection.php ( 52.47 KB )
  112. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/db/Connection.php ( 8.39 KB )
  113. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/db/ConnectionInterface.php ( 4.57 KB )
  114. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/db/builder/Mysql.php ( 16.58 KB )
  115. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/db/Builder.php ( 24.06 KB )
  116. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/db/BaseBuilder.php ( 27.50 KB )
  117. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/db/Query.php ( 15.71 KB )
  118. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/db/BaseQuery.php ( 45.13 KB )
  119. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/db/concern/TimeFieldQuery.php ( 7.43 KB )
  120. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/db/concern/AggregateQuery.php ( 3.26 KB )
  121. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/db/concern/ModelRelationQuery.php ( 20.07 KB )
  122. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/db/concern/ParamsBind.php ( 3.66 KB )
  123. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/db/concern/ResultOperation.php ( 7.01 KB )
  124. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/db/concern/WhereQuery.php ( 19.37 KB )
  125. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/db/concern/JoinAndViewQuery.php ( 7.11 KB )
  126. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/db/concern/TableFieldInfo.php ( 2.63 KB )
  127. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/db/concern/Transaction.php ( 2.77 KB )
  128. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/log/driver/File.php ( 5.96 KB )
  129. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/contract/LogHandlerInterface.php ( 0.86 KB )
  130. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/log/Channel.php ( 3.89 KB )
  131. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/event/LogRecord.php ( 1.02 KB )
  132. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-helper/src/Collection.php ( 16.47 KB )
  133. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/facade/View.php ( 1.70 KB )
  134. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/View.php ( 4.39 KB )
  135. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/app/controller/Es.php ( 3.30 KB )
  136. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/Response.php ( 8.81 KB )
  137. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/response/View.php ( 3.29 KB )
  138. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/Cookie.php ( 6.06 KB )
  139. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-view/src/Think.php ( 8.38 KB )
  140. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/contract/TemplateHandlerInterface.php ( 1.60 KB )
  141. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-template/src/Template.php ( 46.61 KB )
  142. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-template/src/template/driver/File.php ( 2.41 KB )
  143. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-template/src/template/contract/DriverInterface.php ( 0.86 KB )
  144. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/runtime/temp/c935550e3e8a3a4c27dd94e439343fdf.php ( 31.50 KB )
  145. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-trace/src/Html.php ( 4.42 KB )
  1. CONNECT:[ UseTime:0.000904s ] mysql:host=127.0.0.1;port=3306;dbname=wenku;charset=utf8mb4
  2. SHOW FULL COLUMNS FROM `fenlei` [ RunTime:0.001347s ]
  3. SELECT * FROM `fenlei` WHERE `fid` = 0 [ RunTime:0.000665s ]
  4. SELECT * FROM `fenlei` WHERE `fid` = 63 [ RunTime:0.000632s ]
  5. SHOW FULL COLUMNS FROM `set` [ RunTime:0.001218s ]
  6. SELECT * FROM `set` [ RunTime:0.000568s ]
  7. SHOW FULL COLUMNS FROM `article` [ RunTime:0.001375s ]
  8. SELECT * FROM `article` WHERE `id` = 775071 LIMIT 1 [ RunTime:0.003655s ]
  9. UPDATE `article` SET `lasttime` = 1781954342 WHERE `id` = 775071 [ RunTime:0.004999s ]
  10. SELECT * FROM `fenlei` WHERE `id` = 64 LIMIT 1 [ RunTime:0.000610s ]
  11. SELECT * FROM `article` WHERE `id` < 775071 ORDER BY `id` DESC LIMIT 1 [ RunTime:0.001026s ]
  12. SELECT * FROM `article` WHERE `id` > 775071 ORDER BY `id` ASC LIMIT 1 [ RunTime:0.006363s ]
  13. SELECT * FROM `article` WHERE `id` < 775071 ORDER BY `id` DESC LIMIT 10 [ RunTime:0.002303s ]
  14. SELECT * FROM `article` WHERE `id` < 775071 ORDER BY `id` DESC LIMIT 10,10 [ RunTime:0.011309s ]
  15. SELECT * FROM `article` WHERE `id` < 775071 ORDER BY `id` DESC LIMIT 20,10 [ RunTime:0.008485s ]
0.256691s