当前位置:首页>python>Anthropic Python SDK 通用 Agent SDK 改造可行性调研

Anthropic Python SDK 通用 Agent SDK 改造可行性调研

  • 2026-02-06 19:21:58
Anthropic Python SDK 通用 Agent SDK 改造可行性调研

Anthropic Python SDK 通用 Agent SDK 改造可行性调研

调研时间:2026-01-30
调研目的:评估基于 Anthropic Python SDK 架构,改造为支持多 LLM 后端的通用 Agent SDK 的可行性


1. 执行摘要

1.1 核心结论

评估维度
结论
可行性
SDK 架构可扩展性
支持 base_url 和自定义 http_client 注入
MCP 协议独立性
MCP SDK 与 LLM 提供商完全解耦
消息格式兼容性
需要 Content Blocks ↔ 标准格式转换层
Function Calling 兼容
MCP 工具定义与 OpenAI 格式高度相似
整体改造可行性
推荐执行

1.2 推荐方案

采用 LLM Provider 抽象层 方案:

  • 保留 MCP SDK 作为工具/技能管理层
  • 新增 LLMProvider 接口抽象 LLM 调用
  • 实现 ToolTranslator 处理格式转换
  • 支持 Anthropic/OpenAI/本地模型无缝切换

2. Anthropic Python SDK 架构分析

2.1 SDK 概览

仓库: anthropics/anthropic-sdk-python

核心特性:

  • Python 3.9+ 支持
  • 同步/异步双模式 (Anthropic / AsyncAnthropic)
  • 基于 httpx 的 HTTP 客户端
  • 完整的类型定义 (Pydantic v1/v2 兼容)
  • 流式响应支持 (SSE)
  • 内置重试和错误处理

2.2 架构层次

2.3 关键扩展点

2.3.1 Base URL 覆盖

from anthropic import Anthropic

# 方式1: 构造函数参数
client = Anthropic(
    base_url="http://localhost:8080/v1"# 指向本地代理
)

# 方式2: 环境变量
# export ANTHROPIC_BASE_URL=http://localhost:8080/v1

2.3.2 自定义 HTTP Client

import httpx
from anthropic import Anthropic, DefaultHttpxClient

client = Anthropic(
    base_url="http://my.proxy.server:8000",
    http_client=DefaultHttpxClient(
        proxy="http://my.proxy.example.com",
        transport=httpx.HTTPTransport(local_address="0.0.0.0"),
),
)

2.3.3 自定义 Headers

client = Anthropic(
    default_headers={
"anthropic-version":"2023-06-01",
"X-Custom-Header":"value"
}
)

2.4 消息格式 (Content Blocks)

Anthropic 使用独特的 Content Blocks 结构:

# Anthropic 消息格式
{
"role":"user",
"content":[
{"type":"text","text":"Hello"},
{"type":"image","source":{"type":"base64","data":"..."}}
]
}

# Anthropic 工具调用响应
{
"role":"assistant",
"content":[
{"type":"text","text":"Let me search for that."},
{
"type":"tool_use",
"id":"toolu_01A09q90qw90lq917835lgs",
"name":"web_search",
"input":{"query":"latest news"}
}
]
}

对比 OpenAI 格式:

# OpenAI 消息格式
{
"role":"user",
"content":"Hello"# 简单字符串
}

# OpenAI 工具调用响应
{
"role":"assistant",
"content":"Let me search for that.",
"tool_calls":[
{
"id":"call_abc123",
"type":"function",
"function":{
"name":"web_search",
"arguments":"{\"query\": \"latest news\"}"
}
}
]
}

2.5 改造难点分析

难点
描述
解决方案
Content Blocks 差异
Anthropic 使用数组结构
实现双向转换器
Tool Use 格式
ID 格式、参数结构不同
统一中间格式
Streaming 格式
SSE delta 结构不同
流式适配器
多模态支持
图片编码方式不同
统一 multimodal 处理

3. Model Context Protocol (MCP) 集成分析

3.1 MCP 概览

仓库: modelcontextprotocol/python-sdk

核心概念:

  • Resources: 类似 GET 端点,用于加载上下文数据
  • Tools: 类似 POST 端点,执行操作并产生副作用
  • Prompts: 可复用的 LLM 交互模板

3.2 MCP 与 LLM 的解耦

关键发现: MCP SDK 本身 不依赖 任何特定 LLM SDK。

# MCP Client 示例 - 注意 anthropic 是单独导入的
from mcp import ClientSession, StdioServerParameters
from mcp.client.stdio import stdio_client
from anthropic import Anthropic  # <-- 可替换为任何 LLM 客户端

classMCPClient:
def__init__(self):
        self.session: Optional[ClientSession]=None
        self.anthropic = Anthropic()# <-- 替换点

3.3 MCP 工具定义格式

# MCP 工具定义 (JSON Schema)
{
"name":"get_weather",
"description":"Get weather for a location",
"inputSchema":{
"type":"object",
"properties":{
"location":{
"type":"string",
"description":"City name"
}
},
"required":["location"]
}
}

与 OpenAI Function 格式对比:

# OpenAI Function 定义
{
"type":"function",
"function":{
"name":"get_weather",
"description":"Get weather for a location",
"parameters":{# <-- 字段名不同
"type":"object",
"properties":{
"location":{
"type":"string",
"description":"City name"
}
},
"required":["location"]
}
}
}

转换复杂度 - 仅需字段重命名

3.4 MCP 集成模式


4. 通用 Agent SDK 设计方案

4.1 目标架构

4.2 核心接口定义

4.2.1 LLMProvider 抽象基类

from abc import ABC, abstractmethod
from dataclasses import dataclass
from typing import AsyncIterator, Optional

@dataclass
classMessage:
"""统一消息格式"""
    role:str# "user" | "assistant" | "system" | "tool"
    content:str
    tool_calls: Optional[list["ToolCall"]]=None
    tool_call_id: Optional[str]=None# For tool results

@dataclass
classToolCall:
"""统一工具调用格式"""
id:str
    name:str
    arguments:dict

@dataclass
classLLMResponse:
"""统一响应格式"""
    content:str
    tool_calls:list[ToolCall]
    usage: Optional[dict]=None
    raw_response: Optional[dict]=None# 原始响应保留

classLLMProvider(ABC):
"""LLM 提供商抽象接口"""

@abstractmethod
asyncdefgenerate(
        self,
        messages:list[Message],
        tools: Optional[list[dict]]=None,
**kwargs
)-> LLMResponse:
"""生成响应"""
pass

@abstractmethod
asyncdefstream(
        self,
        messages:list[Message],
        tools: Optional[list[dict]]=None,
**kwargs
)-> AsyncIterator[str]:
"""流式生成"""
pass

4.2.2 ToolTranslator

classToolTranslator:
"""MCP 工具定义转换器"""

@staticmethod
defmcp_to_openai(mcp_tools:list[dict])->list[dict]:
"""MCP 格式 -> OpenAI Function 格式"""
return[
{
"type":"function",
"function":{
"name": tool["name"],
"description": tool.get("description",""),
"parameters": tool.get("inputSchema",{})
}
}
for tool in mcp_tools
]

@staticmethod
defmcp_to_anthropic(mcp_tools:list[dict])->list[dict]:
"""MCP 格式 -> Anthropic Tool 格式"""
return[
{
"name": tool["name"],
"description": tool.get("description",""),
"input_schema": tool.get("inputSchema",{})
}
for tool in mcp_tools
]

@staticmethod
defopenai_response_to_tool_calls(response:dict)->list[ToolCall]:
"""OpenAI 响应 -> 统一 ToolCall"""
        tool_calls =[]
for tc in response.get("tool_calls",[]):
            tool_calls.append(ToolCall(
id=tc["id"],
                name=tc["function"]["name"],
                arguments=json.loads(tc["function"]["arguments"])
))
return tool_calls

4.3 实现示例: GenericRESTProvider

import httpx
from typing import AsyncIterator

classGenericRESTProvider(LLMProvider):
"""
    通用 REST API 提供商
    支持 OpenAI 兼容接口 (Ollama, vLLM, LM Studio, etc.)
    """

def__init__(
        self,
        base_url:str="http://localhost:11434/v1",
        api_key:str="ollama",# Ollama 不需要真实 key
        model:str="llama3.2",
        timeout:float=120.0
):
        self.base_url = base_url.rstrip("/")
        self.api_key = api_key
        self.model = model
        self._client = httpx.AsyncClient(timeout=timeout)

asyncdefgenerate(
        self,
        messages:list[Message],
        tools: Optional[list[dict]]=None,
**kwargs
)-> LLMResponse:
"""调用 OpenAI 兼容的 chat/completions 端点"""

# 转换消息格式
        api_messages =[
{"role": m.role,"content": m.content}
for m in messages
]

        payload ={
"model": self.model,
"messages": api_messages,
**kwargs
}

if tools:
            payload["tools"]= tools

        response =await self._client.post(
f"{self.base_url}/chat/completions",
            json=payload,
            headers={"Authorization":f"Bearer {self.api_key}"}
)
        response.raise_for_status()
        data = response.json()

        choice = data["choices"][0]
        message = choice["message"]

return LLMResponse(
            content=message.get("content",""),
            tool_calls=ToolTranslator.openai_response_to_tool_calls(message),
            usage=data.get("usage"),
            raw_response=data
)

asyncdefstream(
        self,
        messages:list[Message],
        tools: Optional[list[dict]]=None,
**kwargs
)-> AsyncIterator[str]:
"""流式生成"""
# ... SSE 处理逻辑
pass

4.4 Agent 运行循环

classAgentRunner:
"""
    Agent 运行器
    协调 LLM 和 MCP 工具执行
    """

def__init__(
        self,
        llm_provider: LLMProvider,
        mcp_client: MCPClient,
        max_iterations:int=10
):
        self.llm = llm_provider
        self.mcp = mcp_client
        self.max_iterations = max_iterations
        self.history:list[Message]=[]

asyncdefrun(self, user_input:str)->str:
"""执行 Agent 循环"""

# 添加用户消息
        self.history.append(Message(role="user", content=user_input))

# 获取 MCP 工具
        mcp_tools =await self.mcp.list_tools()
        llm_tools = ToolTranslator.mcp_to_openai(mcp_tools)

for _ inrange(self.max_iterations):
# 调用 LLM
            response =await self.llm.generate(
                messages=self.history,
                tools=llm_tools
)

# 添加助手响应
            self.history.append(Message(
                role="assistant",
                content=response.content,
                tool_calls=response.tool_calls
))

# 如果没有工具调用,返回最终结果
ifnot response.tool_calls:
return response.content

# 执行工具调用
for tool_call in response.tool_calls:
                result =await self.mcp.call_tool(
                    tool_call.name,
                    tool_call.arguments
)

# 添加工具结果
                self.history.append(Message(
                    role="tool",
                    content=str(result),
                    tool_call_id=tool_call.id
))

return"Max iterations reached"

5. 实施路线图

5.1 Phase 1: 基础框架 (Week 1)

任务
描述
优先级
项目初始化
创建 generic-agent-sdk/ 目录结构
P0
类型定义
实现 MessageToolCallLLMResponse
P0
LLMProvider 接口
定义抽象基类
P0
ToolTranslator
实现 MCP ↔ OpenAI/Anthropic 转换
P0

5.2 Phase 2: Provider 实现 (Week 2)

任务
描述
优先级
AnthropicProvider
封装官方 SDK
P0
OpenAIProvider
封装 openai SDK
P0
GenericRESTProvider
支持 OpenAI 兼容 API
P1
流式响应支持
实现 stream() 方法
P1

5.3 Phase 3: MCP 集成 (Week 3)

任务
描述
优先级
MCPClient 封装
简化 MCP 连接管理
P0
AgentRunner
实现 Agent 循环
P0
多 MCP Server 支持
支持连接多个 MCP 服务
P1
Skills 动态加载
运行时加载/卸载 MCP 服务
P1

5.4 Phase 4: 多 Agent 协同 (Week 4)

任务
描述
优先级
Agent 间通信
实现消息传递机制
P1
任务分发
实现 Orchestrator 模式
P1
共享上下文
Agent 间状态共享
P2
监控/调试
添加日志和追踪
P2

6. 风险与挑战

6.1 技术风险

风险
影响
缓解措施
消息格式不兼容
部分模型不支持 tool_use
降级到纯文本 + JSON 解析
流式响应差异
SSE 格式不一致
实现适配器层
Token 限制差异
不同模型上下文长度不同
动态截断 + 摘要
本地模型能力差异
小模型 function calling 不稳定
提供 fallback 策略

6.2 建议的缓解策略

  1. 渐进式实现: 先支持 OpenAI 兼容 API,再扩展其他格式
  2. 降级机制: 当 function calling 失败时,回退到提示词工程
  3. 模型能力探测: 运行时检测模型是否支持特定功能
  4. 抽象层测试: 为每个 Provider 编写完整的集成测试

7. 参考资源

7.1 官方文档

资源
URL
Anthropic Python SDK
https://github.com/anthropics/anthropic-sdk-python
MCP Python SDK
https://github.com/modelcontextprotocol/python-sdk
MCP 规范
https://spec.modelcontextprotocol.io
MCP 官方教程
https://modelcontextprotocol.io/docs/develop/build-client

7.2 相关项目

项目
描述
LiteLLM
统一 LLM API 代理,支持 100+ 模型
LangChain
流行的 LLM 应用框架
Vercel AI SDK
TypeScript LLM SDK,支持多 Provider

7.3 关键代码位置


anthropic-sdk-python/
├── src/anthropic/
│   ├── _client.py          # 主客户端类,base_url 配置
│   ├── _base_client.py     # HTTP 请求处理,可扩展点
│   ├── _types.py           # 请求/响应类型定义
│   └── resources/
│       └── messages.py     # messages.create() 实现

model-context-protocol/python-sdk/
├── src/mcp/
│   ├── client/             # MCP 客户端实现
│   │   └── session.py      # ClientSession
│   ├── server/             # MCP 服务端实现
│   │   └── fastmcp/        # 高级服务端框架
│   └── types.py            # MCP 协议类型

8. 结论

基于本次调研,将 Anthropic SDK 架构改造为通用 Agent SDK 是完全可行的

8.1 核心优势

  1. MCP 协议独立性: MCP 本身不绑定任何 LLM,是理想的工具管理层
  2. SDK 扩展点充足: Anthropic SDK 提供了 base_url 和 http_client 注入能力
  3. 格式转换简单: MCP 工具定义与 OpenAI Function 高度相似
  4. 生态系统成熟: 已有 LiteLLM 等项目验证了多 LLM 统一调用的可行性

8.2 推荐下一步

  1. 立即开始: 创建项目骨架,实现 LLMProvider 接口
  2. 优先支持: OpenAI 兼容 API (覆盖 Ollama/vLLM/DeepSeek)
  3. 保持兼容: 保留 Anthropic 原生支持作为参考实现
  4. 渐进迭代: 先实现单 Agent,再扩展到多 Agent 协同

附录 A: 快速验证代码

以下代码可用于验证 Anthropic SDK 的 base_url 重定向能力:

"""
验证 Anthropic SDK 可以重定向到本地代理
"""
import anthropic

# 指向 LiteLLM 或其他 OpenAI 兼容代理
client = anthropic.Anthropic(
    base_url="http://localhost:4000/anthropic",# LiteLLM proxy
    api_key="sk-any-key"# 代理可能不验证
)

# 测试调用
response = client.messages.create(
    model="claude-3-sonnet-20240229",
    max_tokens=100,
    messages=[{"role":"user","content":"Hello"}]
)

print(response.content[0].text)

#Anthropic#MCP#AgentSDK#调研 #2026

最新文章

随机文章

基本 文件 流程 错误 SQL 调试
  1. 请求信息 : 2026-02-07 12:19:29 HTTP/2.0 GET : https://f.mffb.com.cn/a/470172.html
  2. 运行时间 : 0.160246s [ 吞吐率:6.24req/s ] 内存消耗:4,539.90kb 文件加载:140
  3. 缓存信息 : 0 reads,0 writes
  4. 会话信息 : SESSION_ID=0aead0070733db797f2e5d27a0150d0f
  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.000549s ] mysql:host=127.0.0.1;port=3306;dbname=f_mffb;charset=utf8mb4
  2. SHOW FULL COLUMNS FROM `fenlei` [ RunTime:0.000678s ]
  3. SELECT * FROM `fenlei` WHERE `fid` = 0 [ RunTime:0.002158s ]
  4. SELECT * FROM `fenlei` WHERE `fid` = 63 [ RunTime:0.000282s ]
  5. SHOW FULL COLUMNS FROM `set` [ RunTime:0.000500s ]
  6. SELECT * FROM `set` [ RunTime:0.000194s ]
  7. SHOW FULL COLUMNS FROM `article` [ RunTime:0.000563s ]
  8. SELECT * FROM `article` WHERE `id` = 470172 LIMIT 1 [ RunTime:0.007032s ]
  9. UPDATE `article` SET `lasttime` = 1770437969 WHERE `id` = 470172 [ RunTime:0.026932s ]
  10. SELECT * FROM `fenlei` WHERE `id` = 66 LIMIT 1 [ RunTime:0.000322s ]
  11. SELECT * FROM `article` WHERE `id` < 470172 ORDER BY `id` DESC LIMIT 1 [ RunTime:0.019673s ]
  12. SELECT * FROM `article` WHERE `id` > 470172 ORDER BY `id` ASC LIMIT 1 [ RunTime:0.001208s ]
  13. SELECT * FROM `article` WHERE `id` < 470172 ORDER BY `id` DESC LIMIT 10 [ RunTime:0.007013s ]
  14. SELECT * FROM `article` WHERE `id` < 470172 ORDER BY `id` DESC LIMIT 10,10 [ RunTime:0.010170s ]
  15. SELECT * FROM `article` WHERE `id` < 470172 ORDER BY `id` DESC LIMIT 20,10 [ RunTime:0.016286s ]
0.161755s