当前位置:首页>python>手把手打造一个 AI Agent——用 Python 实现迷你版Claude Code

手把手打造一个 AI Agent——用 Python 实现迷你版Claude Code

  • 2026-07-02 12:43:41
手把手打造一个 AI Agent——用 Python 实现迷你版Claude Code

上一篇我们拆开了 Agent 的原理,这一篇我们亲手造一个。

上一篇文章中,我们把 Agent 彻底拆开了:Agent = 大模型 + 工具 + 运行逻辑。 大模型是大脑,工具是手脚,运行逻辑(ReAct 循环)让它知道什么时候该想、什么时候该做。

原理讲完了,你可能会想:说了这么多,代码到底长什么样?

今天我们就来回答这个问题。我们会用尽量少的 Python 代码——大约 50 行——从零实现一个能读文件、写文件、运行命令的 AI Agent。一个迷你版的 Claude Code。

不用任何框架,不用 LangChain,不用 CrewAI。纯 Python + API 调用,每一行代码都能看懂。

读完这篇文章,你不仅能理解 Agent 的代码骨架,还能真正看到上一篇讲的那些概念——ReAct 循环、系统提示词、工具调用——是怎么变成可运行的代码的。


一、准备工作

在动手之前,我们先解决一个前置问题:代码怎么和大模型"对话"?

我们平时用 ChatGPT 或 DeepSeek,是在网页上打字聊天。但写程序的时候,总不能让代码自己去打开浏览器输入消息吧。

这就需要用到 API

API 的全称是 Application Programming Interface(应用程序接口),本质很简单:是你的程序和大模型之间的一根"电话线"。

你的程序通过这根"电话线"把消息发过去,大模型想好之后再通过这根"电话线"把回复传回来。整个过程就是发送和接收数据,和你在网页上聊天的效果一样,只不过变成了代码自动完成。

为什么选 DeepSeek

市面上提供 API 的大模型有很多——OpenAI、Claude、DeepSeek、通义千问……它们的底层原理是一样的,区别主要在价格和调用方式上。

本文选择 DeepSeek API,原因很简单:

  • 国内直接访问,不需要代理
  • 注册送 500 万 token,30 天内免费用,够我们折腾好一阵
  • 完全兼容 OpenAI 的接口格式,以后想换成其他模型,改两行代码就行

注册并获取 API Key

  1. 打开 platform.deepseek.com,用邮箱注册一个账号
  2. 登录后,在左侧导航栏找到 "API Keys"
  3. 点击 **"Create new API Key"**,创建一个新的密钥
  4. 立刻复制保存——创建后就看不到了

这个 API Key 就是你的"电话号码",程序凭它才能连上 DeepSeek 的大模型。

安装 Python 库

因为 DeepSeek 的 API 完全兼容 OpenAI 格式,所以我们直接用 OpenAI 的 Python 库:

pip install openai

就这一个库,不需要任何其他依赖。


二、第一步:让模型说话

准备工作做完了,我们来写第一段代码——让程序通过 API 调用大模型,发一条消息、收一条回复。

from openai import OpenAI

client = OpenAI(
    api_key="你的 DeepSeek API Key",
    base_url="https://api.deepseek.com"
)

response = client.chat.completions.create(
    model="deepseek-chat",
    messages=[
        {"role""user""content""你好,请用一句话介绍你自己"}
    ]
)

print(response.choices[0].message.content)

运行一下,你会看到模型的回复——比如"我是 DeepSeek,一个人工智能助手"之类的。

这段代码做了什么?拆开来看:

  1. 创建客户端OpenAI(api_key=..., base_url=...) 就是拿起"电话",拨通 DeepSeek 的号
  2. 发送消息messages 列表里放的就是你要说的话,role: "user" 表示这是用户发的消息
  3. 接收回复response.choices[0].message.content 就是模型说回来的话

和 OpenAI 的代码唯一的区别就是 api_key 和 base_url 两个参数——这也是为什么说"换模型只需改两行代码"。

到这里,我们的程序已经能和大模型对话了。但别忘了上一篇讲的——大模型只能"说",不能"做"。 它能给你回复一段文字,但它没法自己去读你的文件、写你的代码、运行你的命令。

要让它从"会说话"变成"能干活",我们得给它装上工具。


三、第二步:给模型装上工具

上一篇我们说过,Agent = 大脑 + 手脚。大脑有了(大模型),现在我们来造"手脚"。

我们给 Agent 装三个工具:

工具
作用
对应的能力
read_file
读取文件内容
能"看"你的代码
write_file
写入文件内容
能"写"代码保存成文件
run_command
运行终端命令
能"执行"程序看结果

有了这三个工具,Agent 就能自己读代码、写代码、运行程序——和 Claude Code 的核心能力一样。

写工具函数

先写三个 Python 函数,这就是工具的"身体":

import subprocess, os

defread_file(path):
return open(path).read()

defwrite_file(path, content):
    os.makedirs(os.path.dirname(path) or".", exist_ok=True)
    open(path, "w").write(content)
return"文件写入成功"

defrun_command(command):
    result = subprocess.run(command, shell=True, capture_output=True, text=True)
return result.stdout + result.stderr

三个函数,每个两三行,做的事情很直白:读文件就 open().read(),写文件就 open("w").write(),运行命令就 subprocess.run()

告诉模型有哪些工具

光有函数还不够。模型不知道你写了这些函数——你得把工具的"说明书"告诉它。

这就像招了一个新员工,你得告诉他:"公司有打印机、扫描仪、投影仪,打印机在三楼,用之前要先放纸。"你不说,他就不知道能用这些东西。

工具说明书长这样:

tools = [
    {
"type""function",
"function": {
"name""read_file",
"description""读取指定文件的内容",
"parameters": {
"type""object",
"properties": {
"path": {"type""string""description""文件路径"}
                },
"required": ["path"]
            }
        }
    },
    {
"type""function",
"function": {
"name""write_file",
"description""写入内容到指定文件",
"parameters": {
"type""object",
"properties": {
"path": {"type""string""description""文件路径"},
"content": {"type""string""description""要写入的内容"}
                },
"required": ["path""content"]
            }
        }
    },
    {
"type""function",
"function": {
"name""run_command",
"description""在终端中运行命令",
"parameters": {
"type""object",
"properties": {
"command": {"type""string""description""要执行的命令"}
                },
"required": ["command"]
            }
        }
    }
]

看起来有点长,但结构很简单:每个工具就三样东西——名字(name)描述(description)参数(parameters)。模型根据描述来判断什么时候该用哪个工具,根据参数来知道该传什么值。

现在,大脑有了,手脚也有了。但还差最关键的一步:谁来指挥大脑使用手脚?


四、第三步:实现 Agent 循环

这是全文最核心的部分。

还记得上一篇讲的 ReAct 模式吗?思考→行动→观察→再思考,循环往复,直到任务完成。

翻译成代码,就是一个 while 循环

import json

defagent(task):
    messages = [
        {"role""system""content""你是一个编程助手。使用工具来完成用户的任务。"},
        {"role""user""content": task}
    ]

whileTrue:
# 1. 调用模型(思考)
        response = client.chat.completions.create(
            model="deepseek-chat",
            messages=messages,
            tools=tools
        )
        msg = response.choices[0].message
        messages.append(msg)

# 2. 如果模型没有调用工具,说明任务完成
ifnot msg.tool_calls:
return msg.content

# 3. 执行模型要求的工具(行动)
for tool_call in msg.tool_calls:
            name = tool_call.function.name
            args = json.loads(tool_call.function.arguments)
            print(f"  [调用工具] {name}({args})")

# 调用对应的函数
if name == "read_file":
                result = read_file(**args)
elif name == "write_file":
                result = write_file(**args)
elif name == "run_command":
                result = run_command(**args)

# 4. 把结果告诉模型(观察)
            messages.append({
"role""tool",
"tool_call_id": tool_call.id,
"content": str(result)
            })

# 回到 while True,继续下一轮循环

就这么多。 整个 Agent 的"运行引擎"就是这个 while 循环。

我们来对照上一篇的 ReAct 流程图,看看每一步对应什么:

ReAct 概念
代码对应
做了什么
思考(Thought)client.chat.completions.create(...)
把对话历史发给模型,模型决定下一步做什么
行动(Action)read_file()
 / write_file() / run_command()
执行模型要求调用的工具
观察(Observation)messages.append({"role": "tool", ...})
把工具执行结果回传给模型
最终答案if not msg.tool_calls: return
模型不再调用工具,说明任务完成
循环while True
不断重复,直到任务完成

看到了吗?上一篇讲了那么多的 ReAct 模式——思考、行动、观察、循环——落到代码里,就是一个 while 循环 + 一个 if 判断。

模型每次回复会带一个信号:要么返回 tool_calls(意思是"我要用工具"),要么返回纯文本(意思是"我说完了")。我们的代码只需要看这个信号:有工具调用就执行并继续循环,没有就结束。

这就是 Agent 的全部秘密。


五、第四步:加上系统提示词

上一篇我们讲过,系统提示词是 Agent 的"剧本"。前面的代码里我们只写了一句简单的系统提示词:

{"role""system""content""你是一个编程助手。使用工具来完成用户的任务。"}

这够用,但不够好。就像只给新员工说了一句"你是程序员,干活吧",他能干,但可能干得不太对。

我们来加一个更完善的版本:

system_prompt = """你是一个专业的编程助手。你可以使用以下工具来完成用户的任务:

1. read_file:读取文件内容
2. write_file:写入文件内容
3. run_command:运行终端命令

工作流程:
- 仔细分析用户的任务需求
- 将任务分解为具体步骤
- 使用工具逐步完成每个步骤
- 每一步都要验证结果是否正确
- 所有步骤完成后,给用户一个简要总结

注意事项:
- 写代码前先想清楚文件结构
- 写完代码后用 run_command 验证是否能正常运行
- 如果运行出错,自己分析错误并修复
"""

对比一下效果:

简单提示词
完善提示词
模型知道自己的角色
知道
知道
模型知道工作流程
不知道
知道:分解任务→逐步执行→验证结果
模型会主动验证
不一定
会,提示词要求"写完后验证"
模型出错后会自己修
不一定
会,提示词要求"分析错误并修复"

同一个模型、同样的工具、同样的循环,换一段系统提示词,Agent 的表现就天差地别。 这就是上一篇说的——不同 Agent 产品表现差异大,很多时候不是模型不一样,而是"剧本"写得不一样。


六、实测:让它写个贪吃蛇

还记得上一篇的贪吃蛇例子吗?我们说大模型只能给你输出代码文本,要自己复制保存。而 Agent 会自己创建文件。

现在我们亲手造的 Agent 就在眼前,让它来完成这个任务:

print(agent("写一个贪吃蛇游戏,用 HTML、CSS 和 JS 实现,代码分别放在不同的文件中。"))

运行后,你会在终端里看到这样的输出:

  [调用工具] write_file({"path""index.html""content""<!DOCTYPE html>..."})
  [调用工具] write_file({"path""style.css""content""body { margin: 0; ..."})
  [调用工具] write_file({"path""game.js""content""const canvas = ..."})
  [调用工具] run_command({"command""ls -la"})

贪吃蛇游戏已创建完毕。包含以下文件:
- index.html:游戏主页面
- style.css:样式文件
- game.js:游戏逻辑
用浏览器打开 index.html 即可开始游戏。

三个文件自动创建好了,直接打开就能玩。

上一篇讲的 ReAct 循环,在这里一步步走了出来: 模型先思考需要哪些文件,然后一个一个调用 write_file 写入,最后用 run_command 验证文件是否创建成功,确认无误后输出最终总结。

思考→行动→观察→再思考→再行动→再观察……直到任务完成。

这就是 Agent。50 行代码,从"只会说话"变成了"自己干活"。


七、翻车现场:同样的代码,换个模型就拉胯

上面的演示看起来很顺利,但真实情况没那么美好。我用同样的代码换了一个模型,结果翻车了——而且翻得很有教育意义。

我先后给 Agent 下了三个任务,结果一个比一个离谱:

第几次
我说的
模型做的
问题
第一次
"写一个贪吃蛇,HTML/CSS/JS 分开放"
全部代码塞进一个 index.html
没拆分文件
第二次
"用 HTML 写俄罗斯方块"
创建了 tetris.py
理解成用 Python 写了
第三次
"我说的是用 HTML 写"
还是只有一个 index.html
依然没拆分

更离谱的是,有一次模型突然调用了 python3 -m http.server 8000——启动了一个永远不会结束的 HTTP 服务器。我们的 run_command 函数用的是 subprocess.run(),它会一直等命令结束。结果就是:整个程序卡死了,终端完全没反应。

注意,代码没有任何变化,变的只是模型。同样的工具、同样的循环、同样的提示词,换了一个"大脑",表现就天差地别。

这个翻车故事恰好印证了上一篇的核心观点:Agent 的上限,取决于模型的能力。 工具和循环是骨架,但骨架再好,大脑不行,Agent 就是个会犯傻的机器人。这也是为什么 Claude Code 用的是最强的 Claude 模型,而不是随便一个能跑的模型——大脑的质量,决定了 Agent 的质量。

顺便说一下,那个"卡死"的问题其实可以修复——给 run_command 加一个超时:

defrun_command(command):
try:
        result = subprocess.run(command, shell=True, capture_output=True, text=True, timeout=30)
return result.stdout + result.stderr
except subprocess.TimeoutExpired:
return"命令执行超时(30秒),已终止"

加了 timeout=30,任何命令超过 30 秒就自动终止,不会再卡死。但这只是兜底——真正的解决方案是用更聪明的模型,让它一开始就不会做出"启动服务器"这种傻事。


八、完整代码

把前面所有步骤拼在一起,就是一个完整的迷你 Agent。全部代码如下:

import json, subprocess, os
from openai import OpenAI

# ---- 连接模型 ----
client = OpenAI(api_key="你的 API Key", base_url="https://api.deepseek.com")

# ---- 工具函数 ----
defread_file(path):
return open(path).read()

defwrite_file(path, content):
    os.makedirs(os.path.dirname(path) or".", exist_ok=True)
    open(path, "w").write(content)
return"文件写入成功"

defrun_command(command):
    result = subprocess.run(command, shell=True, capture_output=True, text=True)
return result.stdout + result.stderr

# ---- 工具描述(告诉模型有哪些工具可用)----
tools = [
    {"type""function""function": {"name""read_file""description""读取文件内容",
"parameters": {"type""object""properties": {"path": {"type""string"}}, "required": ["path"]}}},
    {"type""function""function": {"name""write_file""description""写入文件内容",
"parameters": {"type""object""properties": {"path": {"type""string"}, "content": {"type""string"}}, "required": ["path""content"]}}},
    {"type""function""function": {"name""run_command""description""运行终端命令",
"parameters": {"type""object""properties": {"command": {"type""string"}}, "required": ["command"]}}}
]

TOOL_FUNCTIONS = {"read_file": read_file, "write_file": write_file, "run_command": run_command}

# ---- 系统提示词 ----
system_prompt = """你是一个专业的编程助手。你可以使用工具来完成用户的任务。
工作流程:分析需求 → 分解步骤 → 逐步执行 → 验证结果 → 总结。
写完代码后请用 run_command 验证。如果出错,自己分析并修复。"""


# ---- Agent 循环(核心)----
defagent(task):
    messages = [{"role""system""content": system_prompt}, {"role""user""content": task}]
whileTrue:
        response = client.chat.completions.create(model="deepseek-chat", messages=messages, tools=tools)
        msg = response.choices[0].message
        messages.append(msg)
ifnot msg.tool_calls:
return msg.content
for tc in msg.tool_calls:
            args = json.loads(tc.function.arguments)
            print(f"  [调用工具] {tc.function.name}({args})")
            result = TOOL_FUNCTIONS[tc.function.name](**args)
            messages.append({"role""tool""tool_call_id": tc.id, "content": str(result)})

# ---- 启动 ----
print(agent(input("请输入任务: ")))

总共不到 50 行有效代码。

如果你想换成 Claude API,只需要改两个地方:把 openai 换成 anthropic,把 base_url 和认证方式改一下。工具定义和 Agent 循环的逻辑完全一样。


九、把它们串起来

让我们回顾一下:我们用 4 步,从零造出了一个能自主干活的 AI Agent。

步骤
做了什么
对应上篇的概念
让模型说话
通过 API 调用大模型,发消息收回复
大模型只能"说"
给模型装上工具
定义工具函数 + 工具描述
Agent = 大脑 + 手脚
实现 Agent 循环
while 循环 + 工具调用 + 结果回传
ReAct 模式
加上系统提示词
用提示词规定工作流程和行为规范
系统提示词 = 剧本

上一篇讲的每一个概念,在这篇都变成了可运行的代码:

  • "大模型只能说不能做" → 第一步的代码,只能收发文字
  • "工具是 Agent 的手脚" → 第二步的三个函数,让模型能读写文件、运行命令
  • "ReAct 循环" → 第三步的 while 循环,思考→行动→观察→再思考
  • "系统提示词是剧本" → 第四步的 system_prompt,换个提示词就换了 Agent 的行为

Claude Code、Cursor、Codex 这些产品,当然比我们这 50 行代码复杂得多——它们有更多的工具、更精细的权限控制、更长的系统提示词、更好的错误处理。但核心骨架是一样的:模型 + 工具 + 循环。

就像一辆跑车和一辆自行车,结构复杂度天差地别,但本质都是"轮子 + 动力 + 方向控制"。理解了自行车,你就理解了跑车的基本原理。

Agent 没有魔法,就是模型 + 工具 + 循环。


如果这篇文章对你有帮助,欢迎点赞、收藏、转发。有任何问题,欢迎在评论区交流。

最新文章

随机文章

基本 文件 流程 错误 SQL 调试
  1. 请求信息 : 2026-07-03 22:56:17 HTTP/2.0 GET : https://f.mffb.com.cn/a/491303.html
  2. 运行时间 : 0.164452s [ 吞吐率:6.08req/s ] 内存消耗:4,549.86kb 文件加载:140
  3. 缓存信息 : 0 reads,0 writes
  4. 会话信息 : SESSION_ID=bc34eaf93dfab973139d507db2951543
  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.000602s ] mysql:host=127.0.0.1;port=3306;dbname=f_mffb;charset=utf8mb4
  2. SHOW FULL COLUMNS FROM `fenlei` [ RunTime:0.000958s ]
  3. SELECT * FROM `fenlei` WHERE `fid` = 0 [ RunTime:0.000352s ]
  4. SELECT * FROM `fenlei` WHERE `fid` = 63 [ RunTime:0.000247s ]
  5. SHOW FULL COLUMNS FROM `set` [ RunTime:0.000485s ]
  6. SELECT * FROM `set` [ RunTime:0.000199s ]
  7. SHOW FULL COLUMNS FROM `article` [ RunTime:0.000653s ]
  8. SELECT * FROM `article` WHERE `id` = 491303 LIMIT 1 [ RunTime:0.006027s ]
  9. UPDATE `article` SET `lasttime` = 1783090578 WHERE `id` = 491303 [ RunTime:0.005264s ]
  10. SELECT * FROM `fenlei` WHERE `id` = 66 LIMIT 1 [ RunTime:0.000297s ]
  11. SELECT * FROM `article` WHERE `id` < 491303 ORDER BY `id` DESC LIMIT 1 [ RunTime:0.000565s ]
  12. SELECT * FROM `article` WHERE `id` > 491303 ORDER BY `id` ASC LIMIT 1 [ RunTime:0.000500s ]
  13. SELECT * FROM `article` WHERE `id` < 491303 ORDER BY `id` DESC LIMIT 10 [ RunTime:0.030158s ]
  14. SELECT * FROM `article` WHERE `id` < 491303 ORDER BY `id` DESC LIMIT 10,10 [ RunTime:0.016223s ]
  15. SELECT * FROM `article` WHERE `id` < 491303 ORDER BY `id` DESC LIMIT 20,10 [ RunTime:0.035860s ]
0.166097s