当前位置:首页>python>不到200行Python代码,就能复刻一个「Claude Code」?

不到200行Python代码,就能复刻一个「Claude Code」?

  • 2026-01-18 10:40:15
不到200行Python代码,就能复刻一个「Claude Code」?

【CSDN 编者按】当 Claude Code、Devin 这些 AI 编程工具被神话成“下一代程序员”时,很多人以为背后是某种高不可攀的黑科技。但本文作者用不到 200 行 Python 代码,亲手拆解了一个最小可用的 Coding Agent,让开发者可以直观地看到:所谓“会读代码、会改项目”的智能体,本质只是一个围绕 LLM 的工具调用循环。

原文链接:https://www.mihaileric.com/The-Emperor-Has-No-Clothes/

作者 | Mihail Eric       翻译 | 郑丽媛
出品 | CSDN(ID:CSDNnews)

现在的 AI 编程助手,用起来简直像魔法。

你随口用几句不太通顺的英语描述需求,它就能自动读代码、改项目、写出能跑的功能模块。Claude Code、Cursor、Devin,看起来都像是掌握了某种神秘黑科技。

但真相是:这些工具的核心,一点也不神秘——不到 200 行的 Python 代码,就能复刻一个可用的 AI 编程 Agent。

下面,让我们从零开始,亲手实现一个「会改代码的 LLM」。

先搞懂核心逻辑:Coding Agent 到底在干什么?

在写代码前,先搞清楚:你在用 Claude Code 时,后台究竟发生了什么?

本质上,它就是大语言模型(LLM)+ 工具库的对话循环,具体步骤只有五步:

(1)你发送指令(比如:“创建一个包含 hello world 函数的新文件”)
(2)LLM 分析指令后,判断需要调用工具,并返回结构化的工具调用请求(可以是单次或多次调用)
(3)你的本地程序执行这个工具调用(比如真的创建文件)
(4)工具执行结果被回传给 LLM
(5)LLM 结合结果继续处理,直到完成任务

整个过程里,LLM 自始至终都没有直接操作你的文件系统,它只负责下达指令,真正干活的是你写的本地代码。

核心三件套:实现 Agent 只需要 3 个工具

一个能用的代码助手,底层只需要三个核心功能,再多的功能都只是锦上添花:

(1)读取文件:让 LLM 能查看你现有代码的内容
(2)列出文件:帮 LLM 理清项目的目录结构,实现 “导航”
(3)编辑文件:让 LLM 能创建新文件、修改已有代码

没错,就是这么简单。像 Claude Code 这样的商用产品,还会额外集成 grep 检索、bash 命令执行、网页搜索等功能,对我们来说,这三个工具就足够实现核心能力了。

第一步:搭建基础框架

我们从基础的导入和 API 客户端开始。我这里用的是 Anthropic,但换成其他 LLM 供应商的 SDK 也完全适用。
import inspectimport jsonimport osimport anthropicfrom dotenv import load_dotenvfrom pathlib import Pathfrom typing import AnyDictListTupleload_dotenv()claude_client = anthropic.Anthropic(api_key=os.environ["ANTHROPIC_API_KEY"])
为了让终端输出的内容更易区分,我们定义几个颜色常量:
YOU_COLOR = "\u001b[94m"ASSISTANT_COLOR = "\u001b[93m"RESET_COLOR = "\u001b[0m"
再写一个工具函数,用来解析并返回文件的绝对路径,避免因相对路径导致的找不到文件问题:
def resolve_abs_path(path_str: str) -> Path:    path = Path(path_str).expanduser()    if not path.is_absolute():        path = (Path.cwd() / path).resolve()    return path

第二步:实现三大核心工具

注意:工具函数的文档字符串(docstring)一定要写清楚,LLM 会根据这些描述判断该调用哪个工具、怎么传参——这是让 Agent 能正常工作的关键。

工具 1:读取文件内容

功能最简单的工具,传入文件名,返回文件的完整内容。

def read_file_tool(filename: str) -> Dict[strAny]:    full_path = resolve_abs_path(filename)    with open(str(full_path), "r"as f:        content = f.read()    return {        "file_path"str(full_path),        "content": content    }

返回字典格式,是为了给 LLM 传递结构化的执行结果,方便它理解。

工具 2:列出目录下的文件

帮 LLM 搞清楚项目结构,实现“导航”功能。

def list_files_tool(path: str) -> Dict[strAny]:    full_path = resolve_abs_path(path)    all_files = []    for item in full_path.iterdir():        all_files.append({            "filename": item.name,            "type""file" if item.is_file() else "dir"        })    return {        "path"str(full_path),        "files": all_files    }

工具 3:编辑文件(创建 + 修改)

这是三个工具里最复杂的一个,但逻辑依然清晰,它主要处理两种场景:

  • 当 old_str 参数为空时:创建新文件
  • 当 old_str 参数不为空时:替换文件中第一次出现的 old_str 为 new_str
def edit_file_tool(path: str, old_str: str, new_str: str) -> Dict[strAny]:    full_path = resolve_abs_path(path)    if old_str == "":        full_path.write_text(new_str, encoding="utf-8")        return {"path"str(full_path), "action""created_file"}    original = full_path.read_text(encoding="utf-8")    if original.find(old_str) == -1:        return {"path"str(full_path), "action""old_str not found"}    edited = original.replace(old_str, new_str, 1)    full_path.write_text(edited, encoding="utf-8")    return {"path"str(full_path), "action""edited"}

商用 IDE 的代码助手会有更复杂的容错逻辑,但这个极简版本足以验证核心原理。

第三步:注册工具,让 LLM 能找到它们

我们需要一个“工具注册表”,把工具名称和对应的函数绑定起来,方便后续调用。

TOOL_REGISTRY = {    "read_file": read_file_tool,    "list_files": list_files_tool,    "edit_file": edit_file_tool }

第四步:给 LLM 写 “使用说明书”

LLM 不会天生就知道怎么用我们的工具,我们需要通过系统提示词,把工具的名称、功能、参数格式告诉它。

我们先写两个辅助函数,从工具的函数签名和文档字符串里,自动生成工具说明:

def get_tool_str_representation(tool_name: str) -> str:    tool = TOOL_REGISTRY[tool_name]    return f"""    Name: {tool_name}    Description: {tool.__doc__}    Signature: {inspect.signature(tool)}    """def get_full_system_prompt():    tool_str_repr = ""    for tool_name in TOOL_REGISTRY:        tool_str_repr += "TOOL\n===" + get_tool_str_representation(tool_name)        tool_str_repr += f"\n{'='*15}\n"    return SYSTEM_PROMPT.format(tool_list_repr=tool_str_repr)
然后定义核心的系统提示词模板,这是整个 Agent 的 “灵魂”:你不是教 LLM 怎么写代码,而是教它怎么调用现实世界的工具
SYSTEM_PROMPT = """You are a coding assistant whose goal it is to help us solve coding tasks. You have access to a series of tools you can execute. Here are the tools you can execute:{tool_list_repr}When you want to use a tool, reply with exactly one line in the format: 'tool: TOOL_NAME({{JSON_ARGS}})' and nothing else.Use compact single-line JSON with double quotes. After receiving a tool_result(...) message, continue the task.If no tool is needed, respond normally."""

第五步:解析 LLM 的工具调用指令

当 LLM 返回内容后,我们需要判断它是不是在请求调用工具。这个函数的作用就是从 LLM 的回复里,提取出工具名称和对应的参数。

def extract_tool_invocations(text: str) -> List[Tuple[strDict[strAny]]]:    """    Return list of (tool_name, args) requested in 'tool: name({...})' lines.    The parser expects single-line, compact JSON in parentheses.    """    invocations = []    for raw_line in text.splitlines():        line = raw_line.strip()        if not line.startswith("tool:"):            continue        try:            after = line[len("tool:"):].strip()            name, rest = after.split("("1)            name = name.strip()            if not rest.endswith(")"):                continue            json_str = rest[:-1].strip()            args = json.loads(json_str)            invocations.append((name, args))        except Exception:            continue    return invocations

第六步:封装 LLM 调用逻辑

写一个简单的封装函数,负责把对话历史传给 LLM,并获取回复。

def execute_llm_call(conversation: List[Dict[strstr]]):    system_content = ""    messages = []    for msg in conversation:        if msg["role"] == "system":            system_content = msg["content"]        else:            messages.append(msg)    response = claude_client.messages.create(        model="claude-sonnet-4-20250514",        max_tokens=2000,        system=system_content,        messages=messages    )    return response.content[0].text

第七步:组装核心循环,让 Agent 跑起来

这一步是把前面所有的模块串起来,实现 Agent 的核心工作流,也是“魔法”发生的地方。

def run_coding_agent_loop():    print(get_full_system_prompt())    conversation = [{        "role": "system",        "content"get_full_system_prompt()    }]    while True:        try:            user_input = input(f"{YOU_COLOR}You:{RESET_COLOR}:")        except (KeyboardInterrupt, EOFError):            break        conversation.append({            "role": "user",            "content": user_input.strip()        })        while True:            assistant_response = execute_llm_call(conversation)            tool_invocations = extract_tool_invocations(assistant_response)            if not tool_invocations:                print(f"{ASSISTANT_COLOR}Assistant:{RESET_COLOR}: {assistant_response}")                conversation.append({                    "role": "assistant",                    "content": assistant_response                })                break            for name, args in tool_invocations:                tool = TOOL_REGISTRY[name]                resp = ""                print(name, args)                if name == "read_file":                    resp = tool(args.get("filename""."))                elif name == "list_files":                    resp = tool(args.get("path""."))                elif name == "edit_file":                    resp = tool(args.get("path""."),                                 args.get("old_str"""),                                 args.get("new_str"""))                conversation.append({                    "role": "user",                    "content": f"tool_result({json.dumps(resp)})"                })

这个主循环的逻辑可以拆解为两层:

  • 外层循环:获取用户输入,添加至对话内容;

  • 内层循环:调用大型语言模型,检测工具调用需求;

    →若无需工具,输出响应并终止内层循环;

    →若需工具,执行工具操作,将结果添加至对话内容,循环继续。

内层循环持续进行,直至 LLM 响应时不再请求任何工具。这使 Agent 能够串联多个工具调用(例如:读取文件→编辑文件→确认编辑)。

最后一步:启动程序

加上主函数入口,运行我们的代码助手:

if __name__ == "__main__":    run_coding_agent_loop()

现在,你就可以进行这样的对话了:

你:创建一个名为 hello.py 的新文件,并在其中实现"Hello World"功能

AI 助手调用 edit_file 函数,参数为 path="hello.py",old_str="",new_str="print('Hello World')"

AI 助手:完成!已创建包含 Hello World 实现的 hello.py 文件。

或者,还可以进行多步骤交互:

你:编辑 hello.py 并添加一个乘法函数

AI 助手调用 read_file 查看当前内容,再调用 edit_file 添加函数

AI 助手:已在 hello.py 中添加乘法函数

我们的极简版 vs 商用版 Claude Code

我们的代码只有 200 行左右,但已经实现了代码助手的核心逻辑。商用产品 Claude Code 之所以更强大,是因为它在这个基础上做了这些优化:

(1)更完善的错误处理:比如文件权限不足、路径不存在时的容错逻辑
(2)流式输出:让回复内容实时显示,提升用户体验
(3)智能上下文管理:比如自动摘要长文件,避免 Token 超限
(4)更丰富的工具集:比如执行 shell 命令、搜索代码库、调用外部 API
(5)安全校验流程:比如修改重要文件前需要用户确认,防止误操作

核心工作流完全一致:LLM 决策 → 本地工具执行 → 结果反馈 → 继续决策。

所以,动手试试吧!完整源代码我放在这里了:https://drive.google.com/file/d/1YtpKFVG13DHyQ2i3HOtwyVJOV90nWeL2/view?pli=1

这不到 200 行的代码只是一个起点,你还可以对其轻松扩展:换成其他 LLM 供应商的 API,调整系统提示词,并可作为练习添加更多工具。你会发现,看似高大上的 AI 代码助手,底层原理其实一点都不神秘。

推荐阅读:

11天狂写10万行代码!13年Rust老兵,与Claude联手从零造了一门新语言

全网380万人围观!连代码都不看,4个月“烧掉”30亿Token,不懂编程的他却做出了50+个产品……

开发网站被欠薪?Web开发者怒删客户官网,只留三行催款留言:先付钱才能访问网站!

最新文章

随机文章

基本 文件 流程 错误 SQL 调试
  1. 请求信息 : 2026-02-08 21:23:49 HTTP/2.0 GET : https://f.mffb.com.cn/a/461597.html
  2. 运行时间 : 0.143118s [ 吞吐率:6.99req/s ] 内存消耗:4,924.58kb 文件加载:140
  3. 缓存信息 : 0 reads,0 writes
  4. 会话信息 : SESSION_ID=d88138d1c2a86382089a750f7a11abef
  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.000858s ] mysql:host=127.0.0.1;port=3306;dbname=f_mffb;charset=utf8mb4
  2. SHOW FULL COLUMNS FROM `fenlei` [ RunTime:0.001408s ]
  3. SELECT * FROM `fenlei` WHERE `fid` = 0 [ RunTime:0.000750s ]
  4. SELECT * FROM `fenlei` WHERE `fid` = 63 [ RunTime:0.000678s ]
  5. SHOW FULL COLUMNS FROM `set` [ RunTime:0.001345s ]
  6. SELECT * FROM `set` [ RunTime:0.000597s ]
  7. SHOW FULL COLUMNS FROM `article` [ RunTime:0.001513s ]
  8. SELECT * FROM `article` WHERE `id` = 461597 LIMIT 1 [ RunTime:0.007675s ]
  9. UPDATE `article` SET `lasttime` = 1770557029 WHERE `id` = 461597 [ RunTime:0.019688s ]
  10. SELECT * FROM `fenlei` WHERE `id` = 66 LIMIT 1 [ RunTime:0.002160s ]
  11. SELECT * FROM `article` WHERE `id` < 461597 ORDER BY `id` DESC LIMIT 1 [ RunTime:0.001318s ]
  12. SELECT * FROM `article` WHERE `id` > 461597 ORDER BY `id` ASC LIMIT 1 [ RunTime:0.001608s ]
  13. SELECT * FROM `article` WHERE `id` < 461597 ORDER BY `id` DESC LIMIT 10 [ RunTime:0.003139s ]
  14. SELECT * FROM `article` WHERE `id` < 461597 ORDER BY `id` DESC LIMIT 10,10 [ RunTime:0.006785s ]
  15. SELECT * FROM `article` WHERE `id` < 461597 ORDER BY `id` DESC LIMIT 20,10 [ RunTime:0.006220s ]
0.146924s