当前位置:首页>python>用纯 Python 手撸一个 AI Agent!!

用纯 Python 手撸一个 AI Agent!!

  • 2026-08-18 23:11:29
用纯 Python 手撸一个 AI Agent!!

大家好,我是小寒

今天我将带领大家用纯 Python 构建一个真正的智能体,无需任何智能体框架。

一旦你了解了智能体的本质,就会发现它出奇地简单。

它由一个while循环、一组工具、一个目标和一个停止条件组成。

这就是它的全部理念。

让我们构建一个真正有用的智能体——给定一个文本文件目录,它能找出哪个文件提到了某个主题并返回结果

我们正在构建什么

我们的代理只有一个目标:“找到目录中与数据库索引相关的文件,并总结其内容。”

为了完成这个目标,它需要搜索目录、读取文件并进行推理。

因此,我们将为它提供三种工具:

  • list_files — 查看目录中的内容。
  • read_file — 读取文件内容。
  • finish — 宣布完成并交还答案。

最后一点比表面看起来更重要。

结束代理循环的一个简洁方法是给模型一个明确的 “我完成了” 工具,这样结束就成了一个刻意的行为,而不是措辞上的偶然。

思考→行动→观察循环

这是编写任何代码之前的思维模型。

每一步:

  1. 思考 —— 该模型会审视目标和迄今为止发生的一切,并决定下一步行动。
  2. 行动 — 如果它想要一个工具,它会发出一个结构化的工具调用(名称 + 参数)。
  3. 观察 —— 你的代码运行该工具,捕获结果,并将其反馈。

然后它开始循环。模型会再次思考,现在它知道了工具的返回结果。

它会一直循环,直到被调用finish——或者直到到达我们设置的预算。

预算就像一道安全屏障,防止混乱的代理无限循环并耗尽你的账户。

步骤 1:将工具定义为纯 Python 函数

工具只是函数。

智能体不会运行它们——只有当模型发出请求时,你才会运行它们。

保持工具简洁明了、可预测,并且始终返回模型可以读取的字符串。

import osNOTES_DIR = "notes"def list_files(directory: str) -> str:"""Return the file names in a directory, one per line."""    try:        names = sorted(os.listdir(directory))return"\n".join(names) if names else"(directory is empty)"    except OSError as e:return f"Error listing '{directory}': {e}"def read_file(path: str) -> str:"""Return the text contents of a file (truncated to keep tokens sane)."""    try:        with open(path, "r", encoding="utf-8") as f:            text = f.read()return text[:4000] if len(text) > 4000 else text    except OSError as e:return f"Error reading '{path}': {e}"# A registry so the loop can dispatch by name.TOOL_FUNCTIONS = {"list_files": list_files,"read_file": read_file,}

finish 它很特殊:它本身不做任何操作,只是发出完成信号。

我们将在循环中直接处理它,而不是在注册表中处理。

请注意,每个工具都会捕获自身的错误并以文本形式返回,当某个工具失败时,代理应该能够检测到该错误并进行相应的调整,而不是导致程序崩溃。

步骤 2:向模型描述工具

模型无法直接查看你的 Python 代码。

它需要 JSON Schema 描述,以便了解每个工具的名称、用途和参数。

编写描述时,要像向新同事介绍工作一样——说明何时使用该工具,而不仅仅是它的功能。

TOOLS = [    {"name""list_files","description""List the file names in a directory. Use this first to ""discover what files exist before reading any of them.","input_schema": {"type""object","properties": {"directory": {"type""string""description""Directory path to list"}            },"required": ["directory"],        },    },    {"name""read_file","description""Read the text contents of a single file. Use this to ""inspect a file you found with list_files.","input_schema": {"type""object","properties": {"path": {"type""string""description""Path to the file to read"}            },"required": ["path"],        },    },    {"name""finish","description""Call this when you have the answer. Provide the final ""answer to the user's goal in the 'answer' field.","input_schema": {"type""object","properties": {"answer": {"type""string""description""The final answer"}            },"required": ["answer"],        },    },]

步骤 3:代理循环本身

现在到了关键所在。

在这里,“思考→行动→观察” 形成了一个while有预算限制的循环。

import jsonfrom openai import OpenAIclient = OpenAI(    api_key="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",    base_url="https://openrouter.ai/api/v1")SYSTEM_PROMPT = ("You are a file-investigation agent. You achieve the user's goal by ""calling tools to explore the filesystem, then calling 'finish' with your ""answer. Explore before you conclude. Don't guess file contents — read them.")def run_agent(goal: str, step_budget: int = 8) -> str:# 1. 在 messages 开头加入 system prompt    messages = [        {"role""system""content": SYSTEM_PROMPT},        {"role""user""content": goal}    ]for step in range(1, step_budget + 1):print(f"\n--- step {step}/{step_budget} ---")# 2. 调用 API(移除了顶层 system 参数)        response = client.chat.completions.create(            model="openrouter/free",            max_tokens=2000,            tools=TOOLS,  # 注意:OpenAI 格式的 TOOLS 结构需要是 {"type": "function", "function": {...}}            messages=messages,        )        choice = response.choices[0]        message = choice.message# 将模型的回复追加到历史记录中(必须完整保存,包含 tool_calls)        messages.append(message)# 3. 如果模型没有发起工具调用,直接返回文本回答并结束if not message.tool_calls:return message.content or "(agent ended without a final answer)"# 4. 遍历处理每一个工具调用for tool_call in message.tool_calls:            func_name = tool_call.function.name# OpenAI 返回的参数是 JSON 字符串,需要解析为字典            args = json.loads(tool_call.function.arguments)# 特殊工具 finish:获取答案并退出if func_name == "finish":return args.get("answer""")            func = TOOL_FUNCTIONS.get(func_name)if func is None:                result = f"Error: unknown tool '{func_name}'"else:print(f"  calling {func_name}({args})")                try:                    result = func(**args)                except Exception as e:                    result = f"Error executing '{func_name}': {e}"# 5. OpenAI 格式:每一个工具结果作为一条 role="tool" 的消息单独追加            messages.append({"role""tool","tool_call_id": tool_call.id,"content": str(result)            })return"(step budget exhausted before the agent finished)"

逐步了解一次回合的生命周期

  • 我们调用模型时会传入目标、工具以及目前为止的所有对话记录。API 是无状态的——每次调用都会重新发送完整的历史记录。模型本身不会“记住”什么;是你提醒它。
  • 如果返回的 stop_reason 是 "end_turn",说明模型只是用普通文本做了回答,没用任何工具。我们直接返回这个文本并结束。
  • 如果模型决定用工具,千万注意!必须把模型返回的这段回复(里面带着 tool_use 结构)原封不动存进对话历史里。接着,你的代码去真正执行这些工具,并将结果封装成 tool_result 返还给模型。这里还有一个死规则:每一个 tool_use 指令,都必须有一个带有相同 tool_use_id 的 tool_result 结果与之对应,一个都不能少。
  • 一旦模型在调用工具时选择了 finish,说明它拿到最终答案了,直接跳出整个大循环,把答案吐给用户。
  • 如果跑着跑着达到了我们设定的最大步数,程序就会优雅地强制退出,防止 Agent 在里面打转陷入死循环。

第四步:一个可验证的目标

一个好的智能体任务应该有一个可验证的目标——一个你可以验证其真实性的目标,而不仅仅是听起来合情合理。

我们的目标就是可验证的:我们可以打开智能体指定的文件,确认它确实在讨论索引问题。

让我们创建测试数据并运行它。

if __name__ == "__main__":    os.makedirs(NOTES_DIR, exist_ok=True)    with open(f"{NOTES_DIR}/standup.txt""w") as f:        f.write("Discussed the Q3 roadmap and the hiring freeze. No blockers.")    with open(f"{NOTES_DIR}/perf.txt""w") as f:        f.write("Slow queries traced to a missing B-tree index on orders.user_id. ""Adding the index cut p95 latency from 800ms to 40ms.")    with open(f"{NOTES_DIR}/lunch.txt""w") as f:        f.write("Team voted for tacos. Again.")    answer = run_agent(        f"Find which file in the '{NOTES_DIR}' directory talks about database "        f"indexing, and summarize what it says.",        step_budget=8,    )print("\n=== FINAL ANSWER ===")print(answer)

运行它,你会看到跟踪信息:代理程序调用了  list_files("notes") ,发现了三个文件,读取了全部文件,然后返回 finish 类似这样的信息。

perf.txt 讨论了数据库索引——缺少 B 树索引,导致查询速度缓慢;添加索引后,p95 延迟从 800 毫秒降至 40 毫秒。

最后

今天的分享就到这里。如果觉得近期的文章不错,请点赞,转发安排起来。
欢迎大家进高质量 python 学习群

「进群方式:加我微信,备注 “python”」

往期回顾

Fashion-MNIST 服装图片分类-Pytorch实现

python 探索性数据分析(EDA)案例分享

深度学习案例分享 | 房价预测 - PyTorch 实现

万字长文 |  面试高频算法题之动态规划系列

面试高频算法题之回溯算法(全文六千字)  

如果对本文有疑问可以加作者微信直接交流。

最新文章

随机文章

基本 文件 流程 错误 SQL 调试
  1. 请求信息 : 2026-08-21 22:50:59 HTTP/2.0 GET : https://f.mffb.com.cn/a/507649.html
  2. 运行时间 : 0.317583s [ 吞吐率:3.15req/s ] 内存消耗:4,574.80kb 文件加载:140
  3. 缓存信息 : 0 reads,0 writes
  4. 会话信息 : SESSION_ID=3661feee7541fcc721a8a14dd32f8a77
  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.000954s ] mysql:host=127.0.0.1;port=3306;dbname=f_mffb;charset=utf8mb4
  2. SHOW FULL COLUMNS FROM `fenlei` [ RunTime:0.000778s ]
  3. SELECT * FROM `fenlei` WHERE `fid` = 0 [ RunTime:0.002991s ]
  4. SELECT * FROM `fenlei` WHERE `fid` = 63 [ RunTime:0.008965s ]
  5. SHOW FULL COLUMNS FROM `set` [ RunTime:0.000613s ]
  6. SELECT * FROM `set` [ RunTime:0.015254s ]
  7. SHOW FULL COLUMNS FROM `article` [ RunTime:0.000729s ]
  8. SELECT * FROM `article` WHERE `id` = 507649 LIMIT 1 [ RunTime:0.014710s ]
  9. UPDATE `article` SET `lasttime` = 1787323859 WHERE `id` = 507649 [ RunTime:0.005213s ]
  10. SELECT * FROM `fenlei` WHERE `id` = 66 LIMIT 1 [ RunTime:0.010515s ]
  11. SELECT * FROM `article` WHERE `id` < 507649 ORDER BY `id` DESC LIMIT 1 [ RunTime:0.005132s ]
  12. SELECT * FROM `article` WHERE `id` > 507649 ORDER BY `id` ASC LIMIT 1 [ RunTime:0.026342s ]
  13. SELECT * FROM `article` WHERE `id` < 507649 ORDER BY `id` DESC LIMIT 10 [ RunTime:0.052742s ]
  14. SELECT * FROM `article` WHERE `id` < 507649 ORDER BY `id` DESC LIMIT 10,10 [ RunTime:0.004758s ]
  15. SELECT * FROM `article` WHERE `id` < 507649 ORDER BY `id` DESC LIMIT 20,10 [ RunTime:0.023832s ]
0.319153s