乐于分享
好东西不私藏

当AI开始「思考」:LangGraph状态管理深度解密

当AI开始「思考」:LangGraph状态管理深度解密
       
           

引子:当AI开始「递归思考」,工程师该警惕什么?

           

最近科技圈最大的新闻,莫过于Anthropic发布新一代AI系统,并罕见地发出递归自我改进风险警告。这条消息在36氪刷屏,激起了整个行业对AI安全的新一轮讨论。Anthropic的工程师在论文中指出:当一个AI系统具备修改自身推理链的能力,并开始「思考我还能思考得更好」时——这对人类来说是一个前所未有的命题。

           

但作为一个在工程领域摸爬滚打多年的开发者,我看到的不是恐惧,而是一个极其具体的工程挑战:当AI Agent需要跨越几十步、甚至几百步完成复杂任务时,它的「大脑」里到底在发生什么?状态是怎么流转的?出错了怎么回滚?

           

这正是LangGraph试图回答的核心问题。今天这篇文章,我们从Anthropic递归风险预警这个热点切入,深入探讨LangGraph的状态管理机制——这是构建可靠AI Agent的基石,也是Java开发者转型AI工程侧必须掌握的核心技能。

                       

一、从「链条」到「图」:为什么Agent需要图结构?

           

要理解LangGraph的价值,我们先回顾一下传统LangChain的设计思路。

           

LangChain的核心抽象是Chain——一条线性的处理链条:输入进来,依次经过一系列预定义的Processor,每个Processor拿到自己的输入,做处理,吐给下一个。非常符合我们做后端服务时熟悉的Pipeline模式。简单场景下这很高效,比如我们熟悉的RAG流程——「检索 → 改写 → 生成」,一条链搞定。

           

但当你面对真正复杂的AI任务时,「链条」就力不从心了。

           

想象你要构建一个「智能投研Agent」:它需要先搜索目标公司的财报数据,再提取关键财务指标,再交叉对比行业基准,再判断估值区间,最后生成报告。在传统Chain里,这只能写成一个超长的线性链,每一步紧紧耦合在一起。问题是:

           
               

条件分支去哪了? 投研报告中,若某公司是亏损状态,模型需要触发「现金流分析」分支;若是盈利状态,则走「增长性分析」分支。Chain是线性的,没有分支能力。

               

状态怎么共享? 搜索步骤发现了关键数据,报告生成步骤怎么拿到?传统Chain中,每一步只「看见」自己的输入,上下文全靠手动传递。

               

循环怎么实现? Agent可能需要「搜索 → 判断是否充分 → 不充分则继续搜索 → 充分则生成」这样的循环逻辑,Chain无法原生表达循环。

               

出错怎么恢复? 某一步网络请求超时,整个链就断了。没有子图调用、没有异常边界、没有状态回滚。

           
           

LangGraph正是为解决这些问题而生的。它的核心思想非常优雅——用图(Graph)来描述AI Agent的工作流程:节点(Node)代表具体的处理步骤,边(Edge)代表状态流转方向,图结构天然支持条件分支、循环和并行执行。

           

这听起来是不是有点眼熟?没错——这本质上就是有限状态机(FSM)或者工作流引擎的思想,只不过状态机的状态和流转规则,由LLM来驱动。这是AI时代给传统软件工程思想的一次完美升级。

                       

二、LangGraph的核心抽象:StateGraph

           

2.1 什么是State?

           

在LangGraph中,State是贯穿整个图执行过程的共享数据结构。它就像一个全局Context,所有节点都读写同一个State对象。在Java世界里,这可以类比为DDD中的DomainEventBus,或者是Actor模型中的Mailbox——所有Actor共享一个消息总线,通过消息传递驱动整个系统运转。

           

State是一个TypedDict(类型化字典),每个字段都有明确的类型定义。以下是一个典型的Java风格的State定义:

           
// Java 伪代码:定义Agent状态的类型系统 // 对应 LangGraph 的 State channels 概念 // 状态通道:定义Agent运行时的共享数据结构 public class AgentState extends HashMap<String, Object> {    // 对话历史:完整的消息链(输入+输出)    public List<Message> messages;    // 当前Agent身份标记(supervisor/researcher/reporter)    public String currentAgent;    // 已执行步骤计数器(循环上限保护)    public int stepCount;    // 研究报告草稿(跨节点传递)    public StringBuilder reportDraft;    // 搜索结果缓存(避免重复检索,节省token)    public Map<String, Object> searchCache;    // 是否已标记为最终完成    public boolean finished;    public AgentState() {        this.messages = new ArrayList<>();        this.stepCount = 0;        this.reportDraft = new StringBuilder();        this.searchCache = new HashMap<>();        this.finished = false;    } }
           

这个State的设计有几个关键点值得深入理解:

           

❶ messages字段的双向作用:它是输入也是输出。每一轮对话的UserMessage追加进去,每一轮Agent的回复也追加进去,形成完整的对话历史。这是RAG场景下ChatHistory管理的标准范式。

           

❷ stepCount是安全护栏:防止Agent陷入无限循环。每次状态更新时递增,设置上限(比如max_steps=30),当达到上限时强制终止。Anthropic在其论文中提到的「递归自我改进」风险,某种程度上可以通过这种循环上限来兜底。

           

❸ searchCache实现记忆复用:在投研场景中,「搜索茅台2024年报」和「搜索茅台2023年报」可能共享同一个搜索节点的结构,通过缓存避免重复调用LLM,节省token成本。这类似于HTTP层的CDN缓存思想。

           

2.2 节点(Node):每个节点的职责边界

           

在LangGraph中,Node是一个函数,接收当前State,返回更新后的State(或者只是State的一个增量)。用Java的思维来看,Node就是一个Function<AgentState, AgentState>——输入是状态,输出也是状态,纯函数,没有副作用。

           

这种设计的精妙之处在于:节点的输出是增量而不是全量。这类似于Git的diff思想——每个Node只「提交」自己改变的那部分State,而不是重写整个状态对象。

           
// Supervisor节点:负责任务分发决策 // 这是LangGraph中条件路由的核心实现 public class SupervisorNode {    // LLM驱动的小脑:分析当前状态,决定下一步    public AgentState decide(AgentState state) {        // 1. 构建决策prompt:让LLM「看见」当前状态        String systemPrompt = String.format("""            你是一个任务调度器。            当前对话历史: %s            当前步骤数: %d / 30            已完成的报告草稿: %s                        请决定下一步任务(只选一个):            - 如果信息检索不充分 → 返回 "RESEARCHER"            - 如果信息充分需要生成报告 → 返回 "REPORTER"            - 如果报告已生成完毕 → 返回 "END"            """,            state.messages.toString(),            state.stepCount,            state.reportDraft.length() > 0 ? state.reportDraft.toString() : "[尚未开始]"        );        // 2. 调用LLM获取决策结果        String decision = llm.chat(systemPrompt, userInput = null);        // 3. 更新状态并记录本次决策日志        state.currentAgent = decision.trim().toUpperCase();        state.stepCount++;        System.out.println("[Supervisor] 决策: %s (步骤 %d)".formatted(decision, state.stepCount));        return state;    } }
           

这里有一个极其重要的工程细节:Supervisor的prompt里「喂」了多少状态信息,直接决定了决策质量。如果只给LLM喂messages,它就只能在对话历史里盲猜;如果把stepCount、reportDraft、searchCache都喂进去,LLM就能做出更明智的判断。这对应了一个核心RAG原则:Context的质量决定输出的质量

           

2.3 边(Edge):条件路由的实现

           

边定义了State如何从一个节点流转到下一个节点。LangGraph支持两种边:

           

① 普通边(Normal Edge):无条件流转,A执行完必然到B。

           

② 条件边(Conditional Edge):根据State动态决定下一步。这才是真正让LangGraph区别于线性Chain的核心能力。

           
// Java伪代码:边的路由逻辑 // 对应 LangGraph 的 add_conditional_edges public class RoutingEngine {    // 条件路由函数:根据Supervisor的决策决定下一步    public static String routeNext(AgentState state) {        String decision = state.currentAgent;        switch (decision) {            case "RESEARCHER": return "research_node";            case "REPORTER":  return "report_node";            case "END":            default:         return "__END__";        }    }    // 安全护栏路由:如果超过循环上限,强制终止    // 这正是Anthropic递归警告的工程回应:给循环加护栏    public static String safetyRoute(AgentState state) {        if (state.stepCount >= 30) {            System.out.println("[Safety] 达到最大步数限制,强制终止");            state.finished = true;            return "__END__";        }        return routeNext(state);    } }
           

这个路由逻辑看起来简单,但它其实是整个Agent系统的「大脑皮层」——它决定了在不同状态下,系统应该做什么。就像现实工作中的项目管理系统:任务分配、流程推进、异常中止,全部由同一个路由引擎驱动。

                       

三、实战:构建多Agent协作系统

           

光说不练假把式。下面我们构建一个「投研多Agent系统」——这是对Anthropic递归风险预警的直接工程回应:当AI系统开始处理复杂、多步骤任务时,我们需要结构化的状态管理来确保它不会「想太多」或「想偏了」

           
               

【投研多Agent系统架构图】

               

Supervisor → 条件路由 → Researcher / Reporter → 循环 → Supervisor → ... → END

           
           

3.1 Researcher节点:RAG检索与过滤

           
// Researcher节点:从向量数据库检索信息 // 这里展示 RAG 在 Agent 场景下的具体实现方式 public class ResearcherNode {    private final VectorStore qdrantStore;     // Qdrant向量库    private final EmbeddingModel embeddingModel; // Embedding模型    private final Reranker reranker;               // 重排序模型    public AgentState search(AgentState state) {        // 1. 提取最后一个用户查询        String userQuery = state.messages.stream()            .filter(m -> m instanceof UserMessage)            .reduce((a, b) -> b)            .map(m -> m.content)            .orElse("");        // 2. 检查缓存:避免重复检索(节省token & 降低延迟)        String cacheKey = "query:" + userQuery.hashCode();        if (state.searchCache.containsKey(cacheKey)) {            System.out.println("[Researcher] 命中缓存,直接复用");            state.messages.add(new AIMessage("已从缓存获取检索结果。"));            return state;        }        // 3. 生成查询向量,执行向量相似度检索        float[] queryVector = embeddingModel.embed(userQuery);        List<SearchResult> results = qdrantStore.search(            queryVector,            topK = 10,              // 召回Top10最相关片段            scoreThreshold = 0.75   // 相似度阈值过滤低质量结果        );        // 4. 对检索结果进行重排序(Rerank)        // 这是工程落地的关键细节:近似KNN检索不完美,需要重排        List<SearchResult> reranked = reranker.rerank(userQuery, results);        // 5. 将检索结果构建为上下文,追加到messages        StringBuilder context = new StringBuilder();        for (int i = 0; i < reranked.size(); i++) {            context.append("[%d] %s (来源: %s)\n".formatted(                i + 1, reranked.get(i).content, reranked.get(i).source            ));        }        // 6. 注入系统prompt,强制LLM「只基于检索结果回答」        String researchPrompt = String.format("""            你是一个专业的研究助手。            请仅基于以下检索结果回答用户问题,不要编造。                        === 检索结果 ===            %s            === 检索结果结束 ===                        用户问题: %s            """, context, userQuery);        AIMessage response = llm.chat(null, researchPrompt);        // 7. 写入缓存 & 更新状态        state.searchCache.put(cacheKey, response.content);        state.messages.add(response);        state.stepCount++;        System.out.println("[Researcher] 完成,召回 %d 条,步数: %d"            .formatted(reranked.size(), state.stepCount));        return state;    } }
           

3.2 Reporter节点:结构化报告生成

           
// Reporter节点:负责任务规划 + 报告生成 // 展示 ReAct 模式(Reasoning + Acting)在 LangGraph 中的落地 public class ReporterNode {    public AgentState generateReport(AgentState state) {        // Step 1: 理解任务范围(从历史messages中提取用户意图)        String task = extractTaskFromHistory(state.messages);        // Step 2: 生成报告大纲(先规划后写作,这是CoT的工程实践)        String outlinePrompt = String.format("""            用户请求: %s            请为此生成研究报告大纲,要求包含:            1. 执行摘要(50字内)            2. 关键发现(3-5点)            3. 风险提示            4. 结论建议            请用JSON格式输出大纲。            """, task);        String outline = llm.chat(null, outlinePrompt);        JSONObject outlineJson = parseJson(outline);        // Step 3: 基于大纲分模块生成内容        StringBuilder report = new StringBuilder();        report.append("# "%s" 投研报告\n\n".formatted(task));        report.append("生成时间: %s\n\n".formatted(LocalDateTime.now()));        for (String section : outlineJson.getKeySet()) {            String sectionContent = llm.chat(null,                "请基于上下文信息,为「%s」章节撰写内容(200字以内)。\n上下文: %s"                .formatted(section, getContextFromState(state, section))            );            report.append("## %s\n%s\n\n".formatted(section, sectionContent));        }        // Step 4: 质量校验(检查报告是否覆盖关键信息点)        boolean qualityPass = qualityCheck(report.toString(), task);        if (!qualityPass) {            // 质量不达标,打回Researcher重新检索            report.append("\n## 补充分析\n(系统检测:需进一步补充特定信息)\n");            state.currentAgent = "RESEARCHER";        }        state.reportDraft = report;        state.finished = qualityPass;        state.stepCount++;        System.out.println("[Reporter] 报告生成完成,字数: %d,步数: %d"            .formatted(report.length(), state.stepCount));        return state;    }    private boolean qualityCheck(StringBuilder report, String task) {        List<String> requiredKeywords = extractEntities(task);        long matched = requiredKeywords.stream()            .filter(kw -> report.toString().contains(kw))            .count();        return matched >= requiredKeywords.size() * 0.6;  // 60%覆盖即通过    } }
           

3.3 图的组装与执行

           
// 最终的图组装:将所有节点和边组合成可执行的Agent网络 // 对应 LangGraph 的 StateGraph.compile() public class InvestmentResearchGraph {    public AgentGraph build() {        StateGraph<AgentState> graph = new StateGraph(AgentState::new);        // 注册节点        graph.addNode("supervisor", SupervisorNode::decide);        graph.addNode("research",   ResearcherNode::search);        graph.addNode("report",    ReporterNode::generateReport);        // 设置入口节点        graph.setEntryPoint("supervisor");        // 条件边:supervisor → 路由引擎 → researcher 或 report        graph.addConditionalEdges(            "supervisor",            RoutingEngine::safetyRoute,            Map.of(                "research_node", "research",                "report_node",   "report"            )        );        // 从research和report回来后,重新进入supervisor(形成循环)        graph.addEdge("research", "supervisor");        graph.addEdge("report",    "supervisor");        // 编译图(生成可执行对象)        return graph.compile();    }    // 执行入口:持续运行直到终止条件满足    public AgentState run(String userQuery) {        AgentGraph compiledGraph = build();        AgentState initialState = new AgentState();        initialState.messages.add(new UserMessage(userQuery));        return compiledGraph.invoke(initialState);    } }
                       

四、工程落地的关键细节:踩过这些坑你才算真正入门

           

4.1 状态压缩:解决上下文窗口的燃眉之急

           

在做真实项目时,我发现状态压缩是Javaer最容易忽略、但一旦忽略就会爆雷的环节。LLM的上下文窗口是有限的,当Agent运行超过几十轮后,messages字段会膨胀到把上下文窗口撑爆。

           

常见的解决策略有三种:

           
// 策略一:对话摘要压缩(最常用) // 当messages超过阈值时,调用LLM对历史进行摘要 public class MessageCompressor {    private static final int MAX_MESSAGES = 20;    public List<Message> compressIfNeeded(List<Message> messages) {        if (messages.size() <= MAX_MESSAGES) {            return messages;        }        // 保留最近N条,压缩早期消息为摘要        List<Message> recent = messages.subList(            messages.size() - MAX_MESSAGES, messages.size()        );        List<Message> historical = messages.subList(            0, messages.size() - MAX_MESSAGES        );        // 调用LLM生成摘要(消耗少量token换大量空间)        String summary = llm.chat(null,            "请将以下对话历史压缩为一段100字以内的摘要,保留关键信息和结论:\n%s"            .formatted(historical)        );        return List.of(            new SystemMessage(summary),            new UserMessage("[以上为历史摘要]")        );    } }
           

策略二:选择性遗忘(Selective Memory):类似Java的LRU缓存,只保留最近访问的状态字段,历史状态定期淘汰。这在长程Agent任务(比如「连续对话100轮后仍能准确回答第3轮讨论的内容」)中尤为重要。

           

策略三:向量压缩(Embedding Compression):将历史对话编码为向量,存储到Qdrant中,只检索最相关的向量片段注入上下文。这本质上是把「聊天记录」变成了「可检索的知识库」,是mem0这类记忆框架的核心原理。

           

4.2 向量库选型:Qdrant在生产环境中的真实表现

           

聊到向量库,很多Javaer会问:为什么是Qdrant而不是Milvus或者Pgvector?

           

我的实际经验是:Qdrant在召回精度和性能之间取得了最佳平衡。它的HNSW索引支持动态图调整,filter条件丰富,REST API和gRPC双协议支持,在百万级向量规模下查询延迟可以控制在10ms以内——这对于需要实时响应的Agent系统至关重要。

           
// Qdrant Java客户端的典型使用模式 // 展示从建库到检索的完整流程 // 1. 初始化Qdrant客户端(连接池配置) QdrantClient client = new QdrantClient(    QdrantClientConfig.forAddress("localhost", 6333)        .withDatabase("agent_memory")        .withTimeout(10, TimeUnit.SECONDS)        .withConnectionPoolSize(10) ); // 2. 创建Collection(HNSW索引配置) CreateCollection createCollection = CreateCollection.builder()    .collectionName("company_reports")    .vectorsConfig(VectorConfigParams.builder()        .addMap(VectorParams.builder()            .size(1536)  // OpenAI text-embedding-3-small维度            .distance(Distance.Cosine)            .build())        .build())    .hnswConfig(HnswConfig.builder()        .m(16)        // HNSW的M参数,影响召回率与内存占用        .efConstruct(256) // 构建时的ef参数,越大召回越准但越慢        .build())    .build(); client.createCollection(createCollection); // 3. 批量插入向量(带元数据) List<PointStruct> points = documents.stream().map(doc -> {    float[] vector = embeddingModel.embed(doc.content);    return PointStruct.builder()        .id(doc.id)        .vector(vector)        .payload(Map.of(            "content", doc.content,            "company", doc.company,            "year", doc.year,            "doc_type", doc.type        ))        .build(); }).toList(); client.upsert("company_reports", points); // 4. 带过滤条件的向量检索 SearchParams searchParams = SearchParams.builder()    .hnswEf(512)  // 检索时的ef,越大越准但越慢    .exact(false)    .build(); SearchResponse<ScoredPoint> response = client.search(    SearchRequest.builder()        .collectionName("company_reports")        .vector(vector)        .limit(10)        .scoreThreshold(0.75)        .filter(Filter.must(            List.of(                FieldCondition.match("company", "茅台"),                FieldCondition.match("doc_type", "年报")            )        ))        .params(searchParams)        .build() );
           

关于HNSW的M参数,这里有一个常见的工程陷阱:M值不是越大越好。M值增大可以提升召回率,但内存占用是O(M×N)的——100万条向量、M=16时,HNSW图结构可能占用数GB内存。我在项目里踩过这个坑:M=16在测试环境跑得好好的,上生产后容器内存直接爆了。最后调整为M=12,配合efConstruct=128,既保证了召回率(实测约97%),又控制了内存。

           

4.3 异常处理:Agent系统的容错设计

           

Javaer写惯了try-catch,在Agent系统里这个习惯要升级。Agent的异常场景比普通服务复杂得多:LLM服务超时、向量库连接失败、网络抖动导致中间步骤丢结果……每一个都需要优雅处理。

           
// Agent执行层的容错设计 // 展示了重试、降级、超时三重保护机制 public class AgentExecutor {    private static final int MAX_RETRIES = 3;    private static final long TIMEOUT_MS = 30_000;    public AgentState executeWithRetry(AgentState state, String nodeName) {        int attempt = 0;        while (attempt < MAX_RETRIES) {            try {                // 带超时的节点执行                return executeWithTimeout(state, nodeName, TIMEOUT_MS);            } catch (LLMTimeoutException e) {                attempt++;                System.err.println("[Executor] LLM调用超时(%d/%d),等待后重试"                    .formatted(attempt, MAX_RETRIES));                if (attempt >= MAX_RETRIES) {                    // 降级处理:返回「无法完成」的友好结果                    state.messages.add(new AIMessage(                        "抱歉,因服务暂时不可用,无法完成您的请求,请稍后重试。"                    ));                    state.finished = true;                    state.stepCount++;                    return state;                }                Thread.sleep(1000L * attempt); // 指数退避            } catch (VectorStoreException e) {                // 向量库异常:降级到「无缓存模式」直接查                System.err.println("[Executor] 向量库异常,降级到直连模式: " + e.getMessage());                state.searchCache.clear();                return executeWithTimeout(state, nodeName, TIMEOUT_MS * 2);            }        }        return state;    }    private AgentState executeWithTimeout(            AgentState state, String nodeName, long timeoutMs) {        Future<AgentState> future = executor.submit(() ->            nodeRegistry.get(nodeName).invoke(state)        );        try {            return future.get(timeoutMs, TimeUnit.MILLISECONDS);        } catch (TimeoutException e) {            future.cancel(true);            throw new LLMTimeoutException("节点 "%s" 执行超时".formatted(nodeName));        } catch (InterruptedException e) {            Thread.currentThread().interrupt();            throw new RuntimeException(e);        }    } }
                       

五、回到Anthropic的递归警告:工程的视角

           

写到这里,我们再回头看Anthropic的递归自我改进警告,会发现一个有趣的事实:LangGraph的StateGraph设计,恰好从工程层面回应了这种担忧

           

Anthropic担心的核心场景是:当一个AI系统开始修改自己的推理过程(Prompt自我优化、代码自我改进),它可能会绕过人类的监控机制,走向不可预测的行为。在LangGraph的语境下,这对应的是「某个节点修改了State中关于路由规则的部分,导致整个图的流向偏离设计初衷」。

           

而LangGraph通过几个设计原则对此做了工程层面的约束:

           
               

状态不可自引用:State的设计里没有「路由规则字段」——路由规则是硬编码在RoutingEngine里的,不允许LLM动态修改。如果把路由规则也放进State,LLM就能修改自己的决策逻辑,这才是递归风险的真正来源。

               

步数上限护栏:stepCount限制了Agent能执行的最多步数。这直接限制了「想太多」的可能性。

               

节点输出是增量:每个节点只提交State的增量,无法重写整个State——这意味着任何节点的「自私行为」都受到全局状态的约束。

           
           

这给我们一个重要启示:AI安全不是玄学,而是工程问题。通过合理的架构约束,我们可以让AI系统「既能干想干的事,又不能干不该干的事」。这正是软件工程的核心价值所在。

                       

六、面试题:Java工程+AI方向

           
               

🎯 面试题精选

               

【题目一】LangChain的Chain和LangGraph的StateGraph有什么区别?什么场景下你会优先选择StateGraph?

               

【解答】

               

Chain是线性结构,适合简单、确定性的Pipeline(如RAG流程);StateGraph是图结构,支持条件分支、循环和并行,适合复杂的多步骤Agent任务。

               

选择StateGraph的典型场景:① 任务有多个可选择的执行路径(如路由决策);② 需要循环直到满足某个条件(如检索直到充分);③ 多个子任务需要并行执行后汇总(如同时查询多个数据源);④ 需要共享跨步骤的上下文状态(如投研报告跨章节的数据传递)。

               

简单判断法则:如果你的任务执行流程可以用流程图描述(而不仅仅是线性流程),就应该用StateGraph。

               

【题目二】在设计一个基于RAG的企业知识库Agent时,如果用户问了一个非常具体的问题,但向量检索召回的结果相关性都很低(相似度最高也只有0.52),产品要求必须给出回答,你会如何从工程层面处理这个场景?请给出你的解决思路和代码思路。

               

【解答】

               

这是一个典型的「低质量检索+强需求回答」冲突场景,工程上有几个层次的解决思路:

               

第一层:Query改写(查询扩展)。先用LLM将用户问题改写为3-5个同义表述,分别检索后做并集去重。这能显著提升召回率。

               

第二层:Rerank重排。用CrossEncoder对初筛结果做精确相关性打分,过滤掉表面相似但语义不相关的文档。

               

第三层:降级策略。当所有检索结果的分数都低于阈值时,走「搜索引擎+知识图谱」的混合检索兜底,而不是返回空结果。

               

第四层:诚实回答。如果混合检索仍然低质量,LLM层面应该生成「当前知识库未找到直接相关答案,基于以下相近信息给出参考意见」的诚实回答,并在回答中标注「以下内容为推断,请核实」。

               

核心代码思路:实现一个ResultAggregator,对多路检索结果做融合分数计算,取加权得分最高的Top-K结果。

           
           
               

🌄 技术的本质,是让复杂的世界变得可操控。当我们用图结构去描述AI的思维,用状态机去约束AI的行为,用工程纪律去守护AI的安全——这不是在限制AI,恰恰是在释放AI最大的价值。愿每一个在转型路上探索的Java工程师,都能找到属于自己的AI工程之道。

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