当前位置:首页>python>用 Python 搭一个会规划、用工具、验证和复盘的 LLM Agent

用 Python 搭一个会规划、用工具、验证和复盘的 LLM Agent

  • 2026-08-18 23:10:45
用 Python 搭一个会规划、用工具、验证和复盘的 LLM Agent

前言

很多 LLM 项目起步时都很简单:
用户问题 → Prompt → 调用模型 → 返回答案
真正投入使用后,问题才会出现:
模型遗漏约束;在错误方向上持续推理;声称查过并不存在的资料;工具失败后重复相同动作;当前任务修正了,下次仍犯同样的错。
于是,CoT、ReAct、Reflection、Reflexion、CoVe、ToT 等概念不断被加入系统,Agent 却未必因此更可靠。
原因是:这些方法不是可以互相替代的提示词技巧,而是在解决不同层面的工程问题。
本文将用 Python 搭建一个最小但完整的 Agent,把常见方法还原成五个模块:
最终的数据流如下:
用户任务 ↓Planner:拆解目标与约束 ↓ReAct Loop:选择动作 → 调用工具 → 读取观察 ↓Verifier:检查证据、约束和矛盾 ↓Refiner:根据问题修改答案 ↓Reflection Memory:保存可复用经验
好的 Agent 不是“思考得最多”,而是能在正确位置获得反馈,并让每一步都可以被观察、验证和停止。🧠

一、先定义统一的模型接口

为了把注意力放在工作流上,代码不绑定具体模型厂商,只假设项目中存在以下函数:
def call_model(system: str, user: str) -> str: ”””调用你选择的 LLM,并返回文本结果。””” raise NotImplementedError
你可以在这里接入云端 API、本地模型或公司内部网关。
生产环境最好让模型直接返回受 JSON Schema 约束的结构化结果。为了保持示例通用,本文使用普通 JSON 和一个最小解析器:
import jsonfrom typing import Anydef parse_json(text: str) -> dict[strAny]: start = text.find(”{”) end = text.rfind(”}”) if start == -1 or end == -1: raise ValueError(f”模型没有返回 JSON:{text[:200]}”) return json.loads(text[start : end + 1])
这里有一条重要原则:

让自然语言负责表达,让结构化数据负责控制流程。

不要通过搜索 Thought: 或 Action: 等字符串决定下一步。一旦模型改变格式,整个 Agent 都可能失控。🧩

二、建立单次调用基线

实现 Agent 前,先保留一个直接回答版本:
def direct_answer(task: str) -> str: return call_model( system=”你是一个严谨的技术助手。信息不足时明确说明。”, user=task, )
多步骤工作流会增加 Token、延迟和故障点。如果它不能在真实测试集上稳定超过单次调用,就只是更复杂,而不是更好。
至少记录四项指标:
任务成功率;事实或证据错误率;平均响应时间;每个成功任务的平均成本。
以后每增加一个模块,都重新比较一次。📊

三、用 Plan-and-Solve 拆解任务

CoT 的价值,是把复杂任务拆成中间步骤。但在工程系统中,我们通常不需要保存漫长的自由推理文本。
更实用的方法,是让模型生成可执行计划:
  • 最终目标是什么;
  • 必须满足哪些约束;
  • 需要执行哪些步骤;
  • 如何判断每一步完成。
PLANNER_SYSTEM = ”””你是任务规划器。把用户任务拆成少量、可验证的步骤。只返回 JSON:{ ”goal”: ”最终目标”, ”constraints”: [”必须满足的约束”], ”steps”: [ { ”id”: 1, ”objective”: ”该步骤要完成什么”, ”needs_external_info”: true, ”success_condition”: ”如何判断完成” } ]}不要执行任务,不要虚构已经获得的信息。”””def make_plan(task: str) -> dict: raw = call_model(PLANNER_SYSTEM, task) plan = parse_json(raw) if not plan.get(”steps”): raise ValueError(”计划中没有步骤”) if len(plan[”steps”]) > 8: raise ValueError(”计划过长,需要重新压缩”) return plan
八步不是通用标准,而是示例中的复杂度上限。计划越长,状态越容易漂移,实际项目应根据任务分布调整。
两种方法的区别可以概括为:
CoT:生成帮助模型得到答案的中间文字Plan-and-Solve:生成系统能够执行和检查的任务步骤
对于 Agent,计划应该成为结构化状态,而不是散落在上下文中的一段话。🗂️

四、用 ReAct 连接外部工具

模型无法靠“继续思考”获得实时网页、数据库记录或代码执行结果。只要任务依赖外部状态,就需要工具。
先定义搜索和计算器:
from collections.abc import Callabledef search(query: str) -> str:    # 替换成你的搜索服务,并返回精简后的文本结果    raise NotImplementedErrordef calculator(expression: str) -> str:    # 演示用。生产环境不要直接 eval 不可信输入。    allowed = set("0123456789+-*/().% ")    if not set(expression) <= allowed:        raise ValueError("表达式包含不允许的字符")    return str(eval(expression, {"__builtins__": {}}, {}))TOOLS: dict[strCallable[..., str]] = {    "search": search,    "calculator": calculator,}
规定 Agent 每一轮只能返回两种动作。
调用工具:
{ ”type”: ”tool”, ”tool”: ”search”, ”args”: {”query”: ”ReAct paper arXiv”}, ”reason”: ”需要获得原始资料”}
结束任务:
{ ”type”: ”final”, ”answer”: ”最终答案”, ”evidence”: [”支持答案的观察编号”]}
reason 只记录简短的行动依据,不要求保存模型完整的隐藏推理过程。
接着实现 ReAct 循环:
AGENT_SYSTEM = ”””你是一个使用工具完成任务的 Agent。每轮只能返回以下两种 JSON 之一:1. 调用工具:{ ”type”: ”tool”, ”tool”: ”search | calculator”, ”args”: {}, ”reason”: ”简短说明为什么需要这个动作”}2. 完成任务:{ ”type”: ”final”, ”answer”: ”答案”, ”evidence”: [”observation-1”]}规则:- 不得声称执行过上下文中没有记录的工具调用;- 外部事实必须引用 observation;- 工具失败时调整方案,不要原样重复;- 信息不足时继续调用工具或明确停止原因。”””def run_react(task: str, plan: dict, max_steps: int = 6) -> dict: history: list[dict] = [] for step_no in range(1, max_steps + 1): context = { ”task”: task, ”plan”: plan, ”history”: history, ”available_tools”: list(TOOLS), ”remaining_steps”: max_steps - step_no + 1, } action = parse_json( call_model(AGENT_SYSTEM, json.dumps(context, ensure_ascii=False)) ) if action.get(”type”) == ”final”: return { ”status”: ”completed”, ”answer”: action.get(”answer”, ””), ”evidence”: action.get(”evidence”, []), ”trajectory”: history, } if action.get(”type”) != ”tool”: raise ValueError(f”未知动作类型:{action}”) tool_name = action.get(”tool”) if tool_name not in TOOLS: observation = f”工具不存在:{tool_name}” else: try: observation = TOOLS[tool_name](**action.get(”args”, {})) except Exception as exc: observation = f”工具执行失败:{type(exc).__name__}: {exc}” history.append( { ”id”: f”observation-{step_no}”, ”action”: action, ”result”: observation[:6000], } ) return { ”status”: ”max_steps_exceeded”, ”answer”: ””, ”evidence”: [], ”trajectory”: history, }
这个循环对应:
Reason:决定下一步Act:调用工具Observe:读取真实结果Reason:根据结果继续决策
进入生产环境前,还需要补充:
最大步骤数和总预算;工具超时、重试和参数校验;副作用操作的单独授权;工具结果截断与去噪;Prompt Injection 防护;重复失败检测;Evidence 与 Observation 的引用校验。
ReAct 的可靠性主要来自工具边界和状态机,而不是 Prompt 写得多聪明。🔧

五、把“反思”拆成验证和修改

Agent 生成答案后,只追加一句“请检查回答”通常不够。
更稳定的方案是拆成两个角色:
Verifier:发现具体问题;
Refiner:根据问题修改。

1. Verifier:检查约束与证据

VERIFIER_SYSTEM = ”””你是结果验证器。根据任务、计划、工具观察和候选答案进行检查。只返回 JSON:{ ”verdict”: ”pass | revise | fail”, ”issues”: [ { ”type”: ”unsupported_claim | missed_constraint | contradiction | incomplete”, ”detail”: ”具体问题”, ”required_action”: ”如何修复” } ], ”supported_evidence”: [”observation-1”]}不得用常识替代不存在的工具证据。”””def verify(task: str, plan: dict, result: dict) -> dict: payload = { ”task”: task, ”plan”: plan, ”candidate_answer”: result[”answer”], ”claimed_evidence”: result[”evidence”], ”observations”: result[”trajectory”], } return parse_json( call_model(VERIFIER_SYSTEM, json.dumps(payload, ensure_ascii=False)) )
这吸收了 CoVe 的核心思想:把验证变成独立任务,而不是让模型边维护原答案,边证明自己正确。
能使用确定性验证器时,应优先使用:
代码任务运行测试、编译和静态检查;数据任务检查 Schema、范围和唯一性;数学任务交给计算器;事实任务回到原始资料;操作任务读取系统最终状态。

2. Refiner:按照明确问题修改

REFINER_SYSTEM = ”””你是答案修订器。根据验证器指出的问题修改候选答案。不得引入 observations 中没有依据的新事实。如果现有证据不足以修复,返回 needs_more_tools=true。只返回 JSON:{ ”needs_more_tools”: false, ”answer”: ”修订后的答案”, ”evidence”: [”observation-1”], ”changes”: [”修改了什么”]}”””def refine(task: str, result: dict, report: dict) -> dict: payload = { ”task”: task, ”candidate”: result, ”verification”: report, } return parse_json( call_model(REFINER_SYSTEM, json.dumps(payload, ensure_ascii=False)) )
这对应 Self-Refine:
生成候选 → 获得具体反馈 → 根据反馈修改
如果 needs_more_tools=true,不要让 Refiner 猜答案,而应把问题送回 ReAct 循环获取新证据。
真正有效的 Reflection,不是重复思考,而是引入新的约束、证据或错误信号。✅

六、用 Reflexion 保存失败经验

Self-Refine 改进当前答案,Reflexion 解决另一个问题:

为什么 Agent 下次还会犯同样的错?

可以在失败或修订后,生成一条简短、可检索、可执行的经验:
REFLECTION_SYSTEM = ”””你是 Agent 复盘器。根据任务轨迹和验证报告,提取一条可复用经验。只记录能改变未来行动的内容,不要复述完整过程。只返回 JSON:{ ”trigger”: ”什么情况下应该想起这条经验”, ”failure_pattern”: ”本次失败模式”, ”lesson”: ”以后应采用的具体策略”, ”avoid”: ”不要重复的动作”}”””def reflect(task: str, result: dict, report: dict) -> dict: payload = { ”task”: task, ”trajectory”: result[”trajectory”], ”verification”: report, } return parse_json( call_model(REFLECTION_SYSTEM, json.dumps(payload, ensure_ascii=False)) )
最简单的内存可以是一组字典:
class ReflectionMemory: def __init__(self) -> None: self.items: list[dict] = [] def add(self, item: dict) -> None: self.items.append(item) def recall(self, task: str, limit: int = 3) -> list[dict]:演示版直接取最近记录。  # 生产环境可以使用关键词、Embedding 或混合检索。  return self.items[-limit:]
执行新任务前,把相关经验加入 Planner:
memory = ReflectionMemory()def make_plan_with_memory(task: str, memory: ReflectionMemory) -> dict: past_lessons = memory.recall(task) user = json.dumps( {”task”: task, ”relevant_past_lessons”: past_lessons}, ensure_ascii=False, ) return parse_json(call_model(PLANNER_SYSTEM, user))
不要保存所有轨迹和“感想”。只有符合以下条件的经验才值得进入长期记忆:
对应明确的失败模式;能转化为未来动作;不依赖已经过期的状态;不与现有经验重复或冲突;后续可以评价是否有效。
Reflexion 修改的是运行时记忆,不改变模型参数;CoH 则会把反馈变成训练数据,通过训练改变模型。
大多数应用团队应先做可观察、可删除的运行时记忆,再考虑微调。🧩

七、组装完整 Agent

现在可以写出统一入口:
def solve(task: str, memory: ReflectionMemory) -> dict: plan = make_plan_with_memory(task, memory) result = run_react(task, plan) if result[”status”] != ”completed”: report = { ”verdict”: ”fail”, ”issues”: [{”detail”: result[”status”]}], } memory.add(reflect(task, result, report)) return result report = verify(task, plan, result) if report[”verdict”] == ”pass”: return result revised = refine(task, result, report) memory.add(reflect(task, result, report)) if revised.get(”needs_more_tools”): return { ”status”: ”needs_more_evidence”, ”answer”: ””, ”verification”: report, } return { ”status”: ”revised”, ”answer”: revised[”answer”], ”evidence”: revised[”evidence”], ”verification”: report, }
这仍然只是教学骨架,缺少持久化、并发控制、权限系统、严格的结构化输出和生产级工具适配器,但核心控制面已经完整:
Plan:决定怎么做Search:比较候选方案Act:通过工具获得真实观察Verify:检查答案是否被证据支持Learn:把失败压缩成经验

八、什么时候加入 Self-Consistency 或 ToT?

前面的实现主要沿一条路径执行。如果任务存在多个合理方案,而且早期选择会显著影响结果,可以加入受限搜索。
最简单的是 Self-Consistency:运行多个候选,再由独立评估器选择。
def solve_with_candidates(task: str, memory: ReflectionMemory, k: int = 3): candidates = [solve(task, memory) for _ in range(k)] judge_input = { ”task”: task, ”candidates”: candidates, ”rule”: ”优先选择证据完整、满足约束、步骤更少的结果”, } return parse_json( call_model( ”从候选中选择最佳结果,只返回 JSON。”, json.dumps(judge_input, ensure_ascii=False), ) )
ToT 会在关键节点生成多个候选动作,评分后保留部分分支,必要时回退。它适合复杂规划和搜索问题,但成本可能成倍增加。
加入搜索前,先问三个问题:
  • 任务是否真的存在多个有意义的候选路径?
  • 是否有一个比“模型觉得不错”更可靠的评价函数?
  • 错误成本是否足以覆盖额外的延迟和模型调用?
任何一个答案是否定的,都应先保留单路径工作流。🌳

九、上线前必须检查的六件事

1. 所有循环都有上限

ReAct、Self-Refine、ToT 和重试必须设置最大次数、最大 Token 或预算。

2. 工具权限分级

搜索和读取可以自动执行;发送消息、修改数据、付款和删除文件等操作,应设置更严格的验证与人工确认。

3. 工具输出不是可信指令

网页、邮件和文档可能包含 Prompt Injection。工具结果应被视为不可信数据,而不是系统指令。

4. 验证尽量外部化

测试、编译器、Schema、数据库约束和原始资料,通常比模型自己的置信度可靠。

5. 记忆可以过期和删除

每条经验应记录来源、时间和适用范围。过期经验需要淘汰,冲突经验需要重新验证。

6. 评价完整任务

除了最终答案,还应记录:
工具调用成功率;平均执行步骤;无效或重复调用比例;证据覆盖率;验证后的修订率;失败恢复成功率;每个成功任务的成本和延迟。
如果只看“答案读起来不错”,就无法判断 Agent 是可靠完成任务,还是偶然猜对。🛡️

结语

CoT、ReAct、Reflection 和 Reflexion 经常同时出现在 Agent 系统中,但它们负责不同阶段:
CoT / Plan-and-Solve:拆解问题Self-Consistency / ToT:探索候选路径ReAct:从外部环境获得信息CoVe / Self-Refine:验证并修改结果Reflexion:把失败变成可复用经验CoH:把稳定反馈用于训练
你不需要一次实现全部功能。
先建立直接回答的基线,再加入计划、工具调用和确定性验证。只有评测证明某类错误持续出现时,再增加搜索、修订或记忆。
如果你正在开发 LLM 应用,可以拿出最近十个失败案例,逐个标记它们发生在:
分解、搜索、行动、验证、记忆
错误属于哪一层,下一步应该补什么机制,通常就会立刻清楚。
好的 Agent 不是一个无限思考的模型,而是一套能规划、行动、验证、学习,并在必要时停止的工程系统。🚀

最新文章

随机文章

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