乐于分享
好东西不私藏

AI 聊天工具基于 .NET 10 的 ChatAgentCLI

AI 聊天工具基于 .NET 10 的 ChatAgentCLI

零依赖打造彩色终端 AI 聊天工具——基于 .NET 10 的 ChatAgentCLI

不用任何 NuGet 包,仅靠 .NET BCL 手写 SSE 流式解析 + Markdown 语法高亮渲染,不到 250 行代码实现一个带加载动画的彩色终端 AI 聊天客户端。


unsetunset一、起因unsetunset

在日常开发中,与 AI 模型对话几乎是刚需。Web 界面固然方便,但频繁切换窗口、复制粘贴代码片段的操作并不高效。如果能在终端里直接和 AI 对话,并且回复还能实时流式输出、带代码高亮,那开发体验会有很大提升。

市面上已有不少类似的 CLI 工具,但它们大多依赖大量第三方库。于是我想:能不能只用 .NET 内置库,从零手写一个?

这就是 ChatAgentCLI 的由来。


unsetunset二、效果预览unsetunset

启动时显示 ASCII Logo,输入问题后出现中文加载动画("思考中 |" → "整理思路 /" → "组织语言 -" → "生成回复 "),随后 AI 回复以流式方式逐字符输出,并根据 Markdown 语法实时着色:

  • 代码块```):绿色文字 + 黑色背景
  • 加粗text):黄色文字
  • 斜体text):青色文字
  • 行内代码`text`):白色文字 + 灰色背景
  • 标题#):品红色文字

2.1 自定义 ASCII Logo

启动时的 ASCII 文字 Logo 可以通过 TAAG 在线生成。该工具提供了丰富的字体选项(Graffiti、Big、Slant 等),在文本框中输入你想要的文字,选择喜欢的字体后直接复制生成的 ASCII 字符画,替换到代码中对应的 Logo 字符串即可。


unsetunset三、技术架构unsetunset

整个项目极其精简,只有三个文件,零 NuGet 依赖:

ChatAgentCLI/├── ChatAgentCLI.csproj  # .NET 10.0 项目文件├── Program.cs           # 入口 + REPL 交互循环└── DeepSeekClient.cs    # HTTP 客户端 + SSE 解析 + Markdown 着色渲染

3.1 技术栈

项目
选择
语言
C# 13(.NET 10.0)
依赖
零 NuGet 包
,仅用 BCL
通信协议
SSE(Server-Sent Events)
API 格式
OpenAI 兼容格式(DeepSeek)
目标模型
DeepSeek Chat
目标平台
Windows x64

unsetunset四、核心实现拆解unsetunset

4.1 流式 SSE 解析

DeepSeek API 返回的是 OpenAI 兼容的 SSE 格式流式响应,每行以 data: 开头。我们不使用任何 SSE 客户端库,而是直接逐行读取:

usingvar stream = await response.Content.ReadAsStreamAsync();usingvar reader = new StreamReader(stream, Encoding.UTF8);while ((line = await reader.ReadLineAsync()) != null){if (string.IsNullOrEmpty(line)) continue;if (!line.StartsWith("data:")) continue;var data = line.Substring(5).Trim();if (data == "[DONE]"break;usingvar doc = JsonDocument.Parse(data);var root = doc.RootElement;if (root.TryGetProperty("choices"outvar choices) && choices.GetArrayLength() > 0)    {var choice = choices[0];if (choice.TryGetProperty("delta"outvar delta)            && delta.TryGetProperty("content"outvar text))        {var chunk = text.GetString();// 渲染 chunk 到终端...        }    }}

当收到新的 content 字段时,立即渲染到终端,用户看到的就是逐字跳出的流式效果。

4.2 逐字符 Markdown 着色

这是项目最有意思的部分。收到的文本是 Markdown 格式,但在终端中我们需要把它渲染成彩色文字。实现方式是一个简单的状态机,逐字符扫描:

bool inCodeBlock = false;bool bold = false;bool italic = false;for (int i = 0; i < chunk.Length; i++){// 代码块 ```if (chunk.Substring(i, 3) == "```")    {        inCodeBlock = !inCodeBlock;        Console.ResetColor();if (inCodeBlock)        {            i += 2;            Console.ForegroundColor = ConsoleColor.Green;            Console.BackgroundColor = ConsoleColor.Black;        }continue;    }if (inCodeBlock)    {        Console.ForegroundColor = ConsoleColor.Green;        Console.Write(chunk[i]);continue;    }// 加粗 **text**if (chunk[i] == '*' && chunk[i + 1] == '*')    {        bold = !bold;        i++;        Console.ForegroundColor = bold ? ConsoleColor.Yellow : Console.ForegroundColor;if (!bold) Console.ResetColor();continue;    }// 斜体 *text*、行内代码 `text`、标题 # 等...if (chunk[i] == '\n')    {        Console.ResetColor();        bold = false;        italic = false;    }    Console.Write(chunk[i]);}Console.Out.Flush();

每个 chunk 到来时即时渲染并 Flush,用户在终端看到的就是"逐字跳出"的效果,和 Web 端的流式输出体验一致。

4.3 加载动画

在请求发出后、第一个 chunk 到达前,终端需要给用户一个"正在处理"的反馈。这里实现了一个简单的加载动画:

privatevoidLoadingLoop(CancellationToken ct){var spinner = new[] { '|''/''-''\\' };var phrases = new[] { "思考中""整理思路""组织语言""生成回复" };var sw = Stopwatch.StartNew();int i = 0;while (!ct.IsCancellationRequested)    {int pi = ((int)(sw.ElapsedMilliseconds / 3000)) % phrases.Length;        Console.SetCursorPosition(0, _loadingRow);        Console.Write($"  {phrases[pi]}{spinner[i % spinner.Length]}   ");        i++;        Thread.Sleep(150);    }}

动画在后台线程运行,每 150ms 刷新一次。当收到第一个内容 chunk 时,通过 CancellationTokenSource.Cancel() 停止动画并清除该行。

4.4 终端输入处理

终端输入没有直接用 Console.ReadLine(),而是用 Console.ReadKey(intercept: true) 手动处理每个按键,这样可以:

  • 自定义退格行为
  • 在输入区域下方绘制分隔线( 字符)
  • 动态调整 Console.BufferHeight 防止光标越界
  • 正确处理中文字符的显示宽度(CJK 字符占 2 列)
while (true){var key = Console.ReadKey(intercept: true);if (key.Key == ConsoleKey.Enter) break;if (key.Key == ConsoleKey.Backspace)    {if (inputSb.Length > 0)        {            inputSb.Remove(inputSb.Length - 11);// 清除整行并重绘,按 Unicode 类别计算显示宽度            Console.SetCursorPosition(0, inputRow);            Console.Write(newstring(' '60));            Console.SetCursorPosition(1, inputRow);            Console.Write(inputSb.ToString());int displayWidth = 1;foreach (char c in inputSb.ToString())                displayWidth += char.GetUnicodeCategory(c)                    == System.Globalization.UnicodeCategory.OtherLetter ? 2 : 1;            Console.SetCursorPosition(displayWidth, inputRow);        }continue;    }if (!char.IsControl(key.KeyChar))    {        inputSb.Append(key.KeyChar);        Console.Write(key.KeyChar);    }}

unsetunset五、API 对接细节unsetunset

5.1 获取 API Key

  1. 前往 DeepSeek API Keys 页面
  2. 登录后点击 "Create New Key" 创建新的 API Key
  3. 复制生成的 Key(格式为 sk- 开头),妥善保管

5.2 API 文档与 Base URL

DeepSeek API 文档详见 DeepSeek API Docs,核心信息:

项目
Base URL
https://api.deepseek.com
接口路径
/chat/completions
认证方式
Bearer Token
流式参数
stream: true

5.3 请求体构建

使用 DeepSeek 的 OpenAI 兼容格式构建请求:

_http.DefaultRequestHeaders.Authorization =new AuthenticationHeaderValue("Bearer", apiKey);var requestBody = new{    model = "deepseek-chat",    max_tokens = 4096,    messages = new[] { new { role = "user", content = question } },    stream = true,    stream_options = new { include_usage = false }};var json = JsonSerializer.Serialize(requestBody);usingvar content = new StringContent(json, Encoding.UTF8, "application/json");var request = new HttpRequestMessage(HttpMethod.Post, $"{_baseUrl}/chat/completions");request.Content = content;

使用 C# 匿名类型 + JsonSerializer.Serialize 构建 JSON,无需引入 Newtonsoft.Json 等第三方库。.NET 内置的 System.Text.Json 完全够用。

5.4 在代码中使用

// Program.csvar chatClient = new DeepSeekClient(    apiKey: "sk-your-key-here",    baseUrl: "https://api.deepseek.com");await chatClient.AskStreamingWithLoadingAsync(userInput);

unsetunset六、为什么零依赖?unsetunset

你可能会问:有现成的 SSE 库、Markdown 渲染库、终端 UI 框架,为什么不直接用?

这个项目本质上是一个技术验证——用最基础的工具能做出什么效果。零依赖意味着:

  1. 编译产物极小:没有一堆 DLL 跟着跑
  2. 没有依赖冲突:不需要担心包版本兼容性
  3. 可控性高:每一行代码都在自己手里,出 bug 能快速定位
  4. 学习价值:手写 SSE 解析和 Markdown 状态机的过程,比调用一个 await client.ChatStreamAsync() 学到的东西多得多

当然,如果要投入生产,可能需要引入更成熟的终端 UI 库(如 Spectre.Console)来处理跨平台、表格、进度条等更复杂的需求。但作为一个轻量级工具,当前方案已经足够。


unsetunset七、不足与改进方向unsetunset

当前版本虽然能用,但还有一些可以优化的地方:

方向
说明
多轮对话
目前每次请求只发送当前问题,没有维护对话历史
API Key 管理
Key 硬编码在代码中,应改为环境变量或配置文件读取
跨平台支持
当前针对 Windows x64,可适配 Linux/macOS 终端
Markdown 解析健壮性
跨 chunk 的语法标记(如 ** 被拆到两个 chunk)可能无法正确识别
错误处理
网络异常、API 限流等情况需要更完善的降级策略
多模型切换
可支持配置不同模型(DeepSeek、Claude、GPT 等)

unsetunset八、总结unsetunset

ChatAgentCLI 用不到 250 行代码、零外部依赖,实现了一个功能完整的终端 AI 聊天工具:

  • SSE 流式解析:逐行读取、实时响应
  • Markdown 着色:状态机逐字符渲染,彩色输出
  • 加载动画:多线程 spinner + 中文提示短语轮播
  • 终端交互:手动按键处理 + 缓冲区管理 + CJK 字符宽度适配

它证明了:很多时候,我们不需要引入一堆 NuGet 包,标准库就能把事情办好。


开源地址:https://github.com/yanjinhuagood/ChatAgentCLI

最后
如果你觉得这篇文章对你有帮助,不妨点个赞支持一下!你的支持是我继续分享知识的动力。如果有任何疑问或需要进一步的帮助,欢迎随时留言。也可以加入微信公众号[DotNet技术匠] 社区,与其他热爱技术的同行一起交流心得,共同成长!

作者:小码编匠

出处:gitee.com/smallcore/DotNetCore
声明:网络内容,仅供学习,尊重版权,侵权速删,歉意致谢!
END
方便大家交流、资源共享和共同成长
纯技术交流群,需要加入的小伙伴请扫码,并备注加群

推荐阅读
WinForm + SunnyUI 的智能图书管理系统(用户/管理员双端)
Element 风格的 WPF 后台管理系统,免费开源,开箱即用
开箱即用的 .NET 8 + Avalonia + SukiUI 桌面应用模板
.NET 8 + S7.Net Plus 开源PLC监控系统,支持西门子与Modbus双协议
5分钟搭建工控 HMI:WinForm 状态/报警/趋势控件库及模板
工业视觉实战 | WPF + Halcon/OpenCvSharp 的锂电池极耳视觉检测系统
C# 自动化设备运动控制上位机模拟系统

.NET 8+MAUI跨平台 IoT 移动端,实时监控水温、转速与光强

一款高效易用的 WinForm 端口扫描工具

WPF 表格终于能筛选了!支持嵌套对象、百万级数据、开箱即用

C# 工业机器视觉平台,实现 OpenCV 与 深度学习算法的可视化编排

填补.NET 生态空白:面向工业视觉的高性能 3D 点云/网格处理库

WPF 打造可视化标签打印工具:自由绘制,所见即所得

WPF + MVVM架构的开源高效工业级电池管理系统(BMS)

.NET + Surging 微服务引擎,快速搭建多协议物联网平台

Avalonia 跨平台聊天客户端实战:基于 Prism 的 MVVM 架构实现

.NET 9+ Avalonia + Prism 高性能、支持 AOT 跨平台桌面应用

开源、有文档、能上线的 .NET + Vue 通用权限系统

一个真正好用的 .NET 开源短链系统:支持生成 + 实时监控

.NET 开源串口转发工具,工业协议调试 + 自动应答

WPF 工业视觉检测系统:双工位(面阵 + 线扫)独立运行架构

.NET 10 + CQRS + MediatR 一个跨平台文档管理系统

WinForm + Modbus 上位机温湿度数据采集系统

超实用!一个专为工控量身打造的 WinForm 控件库

基于 C# 的轻量级离线工业语音播报方案

.NET 8 高性能跨平台设备健康监测上位机系统

谁说 WinForm 不能高颜值?看这个 Ant Design 无边框收银系统

WinForm + SQL Server 企业物资管理系统(库存、出入库、审批全搞定)

WinForm 做了个医院信息管理系统,支持多角色权限

WPF +虚拟PLC 实现的工业视觉检测线模拟系统

本月.NET干货:流式菜单、高颜值控件库与硬核视觉实战

基于 WinForm、Halcon、OpenCV的多功能图像处理与机器视觉框架

WPF + Halcon + YOLO 工业视觉检测的全能上位机

零依赖!WinForm 车牌识别系统开发全流程(算法实现+模块拆解)

C# 运动控制流程引擎:实现类 PLC 的启动与暂停功能

WPF/WinForm 也能用 ECharts?快来试试这个开源项目

C# 开发工业级欧姆龙 PLC 通讯工具

C# + ViewFaceCore 快速实现高精度人脸识别

一款轻量级 WinForm 开源控件库,让老界面秒变高颜值

WinForm 也能玩转工业物联网?这个轻量级 SCADA 数据采集网关做到了

WinForm 中轻松绘制实时曲线,彻底告别图表控件焦虑

WPF+OpenCvSharp搭个可视化调试神器,别再写 Console 测试 OpenCV 了!

WPF + MVVM 实战轻量级企业订单系统(OMS)

觉得有收获?不妨分享让更多人受益

关注「DotNet技术匠」,共同提升技术实力

收藏
点赞
分享
在看
基本 文件 流程 错误 SQL 调试
  1. 请求信息 : 2026-06-02 06:43:49 HTTP/1.1 GET : https://www.yeyulingfeng.com/a/694300.html
  2. 运行时间 : 0.105450s [ 吞吐率:9.48req/s ] 内存消耗:4,979.07kb 文件加载:145
  3. 缓存信息 : 0 reads,0 writes
  4. 会话信息 : SESSION_ID=c61bdb9efb1592311b71726e30d689a1
  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.000469s ] mysql:host=127.0.0.1;port=3306;dbname=wenku;charset=utf8mb4
  2. SHOW FULL COLUMNS FROM `fenlei` [ RunTime:0.001044s ]
  3. SELECT * FROM `fenlei` WHERE `fid` = 0 [ RunTime:0.000330s ]
  4. SELECT * FROM `fenlei` WHERE `fid` = 63 [ RunTime:0.000264s ]
  5. SHOW FULL COLUMNS FROM `set` [ RunTime:0.000636s ]
  6. SELECT * FROM `set` [ RunTime:0.000281s ]
  7. SHOW FULL COLUMNS FROM `article` [ RunTime:0.000758s ]
  8. SELECT * FROM `article` WHERE `id` = 694300 LIMIT 1 [ RunTime:0.000571s ]
  9. UPDATE `article` SET `lasttime` = 1780353829 WHERE `id` = 694300 [ RunTime:0.006295s ]
  10. SELECT * FROM `fenlei` WHERE `id` = 64 LIMIT 1 [ RunTime:0.000292s ]
  11. SELECT * FROM `article` WHERE `id` < 694300 ORDER BY `id` DESC LIMIT 1 [ RunTime:0.000565s ]
  12. SELECT * FROM `article` WHERE `id` > 694300 ORDER BY `id` ASC LIMIT 1 [ RunTime:0.000461s ]
  13. SELECT * FROM `article` WHERE `id` < 694300 ORDER BY `id` DESC LIMIT 10 [ RunTime:0.000918s ]
  14. SELECT * FROM `article` WHERE `id` < 694300 ORDER BY `id` DESC LIMIT 10,10 [ RunTime:0.000917s ]
  15. SELECT * FROM `article` WHERE `id` < 694300 ORDER BY `id` DESC LIMIT 20,10 [ RunTime:0.011681s ]
0.107101s