当前位置:首页>python>麻雀虽小,五脏俱全:631 行 Python 代码实现一个 Claw

麻雀虽小,五脏俱全:631 行 Python 代码实现一个 Claw

  • 2026-04-14 09:23:05
麻雀虽小,五脏俱全:631 行 Python 代码实现一个 Claw
各位朋友好,我是小伙子。
最近在arthurchiao 看到一篇文章:

https://arthurchiao.art/blog/openclaw-technical-notes-zh/

OpenClaw:技术解读和给 AI 应用开发的启示(2026)

作者用不到 632 行的核心 Python 代码,从零写一个极简版,取名 ToyClaw

整个项目只有一个文件:toyclaw.py,全部依赖 Python 标准库,没有任何第三方包。但它却实现了:

  • 可持久化的人设系统(USER.md、SOUL.md 等)

  • 动态安装外部技能包(Skills)

  • 自动执行 Shell 命令并返回结果

  • 完整的 ReAct 推理循环

代码地址:

https://github.com/ArthurChiao/arthurchiao.github.io/blob/master/assets/code/openclaw-technical-notes/toyclaw.py

一、代码结构总览:麻雀虽小,五脏俱全

toyclaw.py,从上到下可以分为七个核心模块。这是简化版的结构图:

texttoyclaw.py├── 1. 全局配置与常量├── 2. 工作区初始化├── 3. 上下文文件管理├── 4. 技能安装与加载├── 5. 系统提示词构建├── 6. Shell 命令执行(含安全拦截)├── 7. Agent 主循环(ReAct)└── 8. REPL 入口

二、模块 1:全局配置与默认文件内容

首先定义工作目录和几个固定的 Markdown 文件名。

这里用一个字典 DEFAULT_FILE_CONTENTS 存放每个文件的初始模板,方便第一次运行时自动创建。

DEFAULT_FILE_CONTENTS = {    "USER.md": textwrap.dedent(        """\        # USER.md        Describe the human you are helping here.        Examples:        - name / nickname        - language preference        - working style        - constraints to remember        """    ),    "SOUL.md": textwrap.dedent(        """\        # SOUL.md        Define the assistant's values, personality, and tone here.        """    ),    "IDENTITY.md": textwrap.dedent(        """\        # IDENTITY.md        Define the assistant's public identity here.        Example:        - name        - vibe        - style        """    ),    "AGENT.md": textwrap.dedent(        """\        # AGENT.md        Operating notes:        - help the user directly        - keep answers concise        - use shell only when it materially helps        - avoid destructive commands        """    ),}

这些文件就是 AI 的“外挂记忆”和“人设配置”,后续会被动态读取并注入到系统提示词中。

工作目录直接定在 /tmp/toyclaw/

在这个文件夹下,它维护了几个熟悉的 Markdown 文件来控制 AI 的行为:

  • USER.md:你是谁?有什么习惯?

  • SOUL.md:AI 的性格和说话语气。

  • IDENTITY.md:AI 的公开身份。

  • AGENT.md:运行时的操作守则。

三、模块 2:工作区初始化

这个函数负责检查 /tmp/toyclaw 目录是否存在,如果不存在就创建,并把上面的默认文件全部写入。

它还会创建 skills/ 子目录,用来存放安装的技能包。

def ensure_workspace():    """创建工作目录并写入默认上下文文件"""    WORKSPACE.mkdir(parents=True, exist_ok=True)    SKILLS_DIR.mkdir(exist_ok=True)    for filename, content in DEFAULT_FILE_CONTENTS.items():        file_path = WORKSPACE / filename        if not file_path.exists():            file_path.write_text(content, encoding="utf-8")

运行 python toyclaw.py 后,你的 /tmp/toyclaw 下就会自动生成这些文件。

四、模块 3:技能安装——让 AI 学会新把戏

技能包本质上就是一个 Markdown 文件,里面包含了如何使用某个特定 API 或工具的说明。install_skill 函数支持两种来源:

  1. 远程 URL:用 urllib 下载。

  2. 本地路径:直接读取。

下载后,它会把文件保存到 skills/ 目录下。

def install_skill(source: str) -> Path:    parsed = urlparse(source)    if parsed.scheme in {"http""https"}:        # 下载远程技能文件        request = Request(source, headers={"User-Agent""ToyClaw/0.1"})        with urlopen(request, timeout=20as response:            content = response.read().decode("utf-8")        stem = Path(parsed.path or "skill.md").name    else:        # 读取本地文件        local_path = Path(source).expanduser()        content = local_path.read_text(encoding="utf-8")        stem = local_path.name    # 保存到 skills/ 目录    target = SKILLS_DIR / stem    target.write_text(content, encoding="utf-8")    return target

安装完成后,后续 build_system_prompt() 会遍历 skills/ 目录,把所有 .md 文件的内容全部塞进系统提示词里,这样模型就知道怎么调用这个技能了。

五、模块 4:系统提示词构建——注入灵魂和技能

这是整个程序的“大脑说明书”。build_system_prompt() 会做三件事:

  1. 读取 USER.mdSOUL.mdIDENTITY.mdAGENT.md,拼接成上下文块。

  2. 遍历 skills/ 目录,把每个技能的内容也拼进去。

  3. 用一段严格的 JSON 格式指令,告诉模型:你每次只能输出一个 JSON 对象,要么 answer,要么 shell

    def build_system_prompt() -> str:    # 1. 读取上下文文件    context_blocks = []    for name in ["USER.md""SOUL.md""IDENTITY.md""AGENT.md"]:        path = WORKSPACE / name        if path.exists():            content = path.read_text(encoding="utf-8")            context_blocks.append(f"## {name}\n{content}")    # 2. 读取已安装技能    skills_text = ""    for skill_file in SKILLS_DIR.glob("*.md"):        content = skill_file.read_text(encoding="utf-8")        skills_text += f"\n## Skill: {skill_file.name}\n{content}\n"    # 3. 构建最终 prompt    return textwrap.dedent(f"""\        You are ToyClaw, a tiny OpenClaw-like assistant.        Workspace root: {WORKSPACE}        Respond with exactly one JSON object:        - If answering directly: {{"type": "answer", "content": "..."}}        - If needing a shell command: {{"type": "shell", "command": "..."}}        Context files:        {''.join(context_blocks) if context_blocks else'(none)'}        Installed skills:        {skills_text if skills_text else'(none)'}        """)

正是这段 prompt,把模型约束成了一个严格遵守 JSON 协议的“工具调用者”。

六、模块 5:Shell 命令执行与安全拦截

AI 可以执行 Shell 命令,但必须有限制。run_shell 函数在执行前会先过一道安全检查:如果命令中包含 sudorm -rf 等危险模式,直接拒绝。

def is_dangerous_shell(command: str) -> str | None:    """返回拦截原因,None 表示安全"""    dangerous_patterns = [        (r"(^|[;&|])\s*sudo\b""sudo is blocked"),        (r"\brm\s+-rf\b""rm -rf is blocked"),        (r"\bcurl.*\|\s*bash\b""curl pipe bash is blocked"),    ]    import re    for pattern, reason in dangerous_patterns:        if re.search(pattern, command, re.IGNORECASE):            return reason    return Nonedef run_shell(command: str) -> str:    blocked_reason = is_dangerous_shell(command)    if blocked_reason:        return f"COMMAND BLOCKED\nReason: {blocked_reason}\nCommand: {command}"    # 使用 subprocess 执行,设置超时和工作目录    result = subprocess.run(        ["bash""-lc", command],        cwd=WORKSPACE,        capture_output=True,        text=True,        timeout=30,    )    return textwrap.dedent(f"""\        Command: {command}        Exit code: {result.returncode}        Stdout:        {result.stdout or'(empty)'}        Stderr:        {result.stderr or'(empty)'}        """)

这里用了 bash -lc 是为了让命令能加载用户环境变量(比如 TRIPGENIE_API_KEY),方便技能调用。

七、模块 6:Agent 主循环——ReAct 推理

这是整个程序最核心的逻辑。run_agent_turn 实现了经典的 ReAct(Reasoning + Acting)循环:

  1. 把用户输入发给模型。

  2. 解析模型返回的 JSON。

  3. 如果是 answer,直接返回给用户。

  4. 如果是 shell,执行命令,把输出作为新的“用户消息”追加到对话历史,然后继续循环。

MAX_TOOL_STEPS = 5def run_agent_turn(client, history, user_input):    system_prompt = build_system_prompt()    messages = [{"role""system""content": system_prompt}] + history    messages.append({"role""user""content": user_input})    for _ in range(MAX_TOOL_STEPS):        response = client.complete(messages)  # 调用 LLM API        action = json.loads(response)         # 解析 JSON        if action["type"] == "answer":            history.append({"role""user""content": user_input})            history.append({"role""assistant""content": action["content"]})            return action["content"]        elif action["type"] == "shell":            command = action["command"]            result = run_shell(command)            print(f"[shell] {command}\n{result}")   # 回显命令结果            # 把执行结果作为 user 消息追加            messages.append({"role""assistant""content": json.dumps(action)})            messages.append({"role""user""content"f"Shell result:\n{result}"})            continue    return "Reached maximum tool steps."

注意,这里的 client.complete 需要你自己实现,对接 OpenAI 兼容的 API。

八、模块 7:REPL 交互入口

最后是主循环,一个简单的 while True 读取用户输入,调用上面的 Agent 逻辑。

def repl(client):    history = []    print("ToyClaw ready. Type 'exit' to quit.")    while True:        user_input = input("\nyou> ").strip()        if user_input.lower() == "exit":            break        reply = run_agent_turn(client, history, user_input)        print(f"\nclaw> {reply}")def main():    ensure_workspace()    client = ChatClient(api_key=os.environ["OPENAI_API_KEY"])  # 伪代码,需自己实现    repl(client)if __name__ == "__main__":    main()

九、效果展示

配置好 API Key,运行 python toyclaw.py,你就可以和这个极简 Agent 对话了。

用户对话

you> who am iclaw> I don't have specific details about you yet. If you'd like, you can tell me your name, preferences, or anything you'd like me to remember to assist you better!

安装技能

在对话里输入:

install this skill https://raw.githubusercontent.com/.../SKILL.md

它会自动下载并保存到 skills/ 目录。

查特价机票:提供 API Key 后,AI 就能构造 curl 命令去调用第三方 API,把结果整理成自然语言回复你。

这 200 行代码,去掉了所有冗余的错误处理和花哨的 TUI 界面,只保留最核心的骨架,清晰地展示了:

  • 上下文注入 → 人设和规则

  • 工具定义 → Shell 命令执行

  • 推理循环 → ReAct 范式

  • 动态扩展 → Skill 文件加载

感谢您读到这里。我是小伙子。

本公众号的内容仅用于交流与学习。

文章中如有技术或理论上的疏漏,欢迎在留言区指出,理性讨论、共同进步。

可以交个朋友,微信:yy_00_ff

最新文章

随机文章

基本 文件 流程 错误 SQL 调试
  1. 请求信息 : 2026-04-14 19:16:26 HTTP/2.0 GET : https://f.mffb.com.cn/a/486447.html
  2. 运行时间 : 0.218432s [ 吞吐率:4.58req/s ] 内存消耗:4,891.74kb 文件加载:140
  3. 缓存信息 : 0 reads,0 writes
  4. 会话信息 : SESSION_ID=fcf02ff2dce1a8c33a4f6343a2389c86
  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.001031s ] mysql:host=127.0.0.1;port=3306;dbname=f_mffb;charset=utf8mb4
  2. SHOW FULL COLUMNS FROM `fenlei` [ RunTime:0.001760s ]
  3. SELECT * FROM `fenlei` WHERE `fid` = 0 [ RunTime:0.000733s ]
  4. SELECT * FROM `fenlei` WHERE `fid` = 63 [ RunTime:0.000683s ]
  5. SHOW FULL COLUMNS FROM `set` [ RunTime:0.001368s ]
  6. SELECT * FROM `set` [ RunTime:0.000696s ]
  7. SHOW FULL COLUMNS FROM `article` [ RunTime:0.001392s ]
  8. SELECT * FROM `article` WHERE `id` = 486447 LIMIT 1 [ RunTime:0.001169s ]
  9. UPDATE `article` SET `lasttime` = 1776165386 WHERE `id` = 486447 [ RunTime:0.003558s ]
  10. SELECT * FROM `fenlei` WHERE `id` = 66 LIMIT 1 [ RunTime:0.000572s ]
  11. SELECT * FROM `article` WHERE `id` < 486447 ORDER BY `id` DESC LIMIT 1 [ RunTime:0.006640s ]
  12. SELECT * FROM `article` WHERE `id` > 486447 ORDER BY `id` ASC LIMIT 1 [ RunTime:0.002127s ]
  13. SELECT * FROM `article` WHERE `id` < 486447 ORDER BY `id` DESC LIMIT 10 [ RunTime:0.016581s ]
  14. SELECT * FROM `article` WHERE `id` < 486447 ORDER BY `id` DESC LIMIT 10,10 [ RunTime:0.022467s ]
  15. SELECT * FROM `article` WHERE `id` < 486447 ORDER BY `id` DESC LIMIT 20,10 [ RunTime:0.005647s ]
0.220180s