Report Machine 2.6:规则驱动型报告流水线实践
简介Report Machine 2.6 是一款专为 Borland Delphi3–7.1 版本开发者打造的轻量级报表生成工具面向中高级 Delphi 桌面应用开发人员解决传统报表开发中设计繁琐、集成度低、定制困难等痛点。资源包共 488 个文件含 139 个 Pascal 源码.pas、71 个窗体描述.dfm、119 个编译单元.dcu及配套 .bat 构建脚本、.ini 配置与 .res 资源文件完整覆盖设计、编译、打包全流程压缩包仅 2.1MB结构清晰、即下即用。已有 287 人学习下载适合需快速嵌入报表功能、研究 Delphi 组件化开发机制或复用经典报表架构的开发者。资源提供全部源码与跨版本 BPK/DPR 工程文件如 RMachine_cb5.bpk、RMachine_cb6.bpk支持二次开发与深度定制并附带 MAKEALL.BAT 等自动化构建脚本便于理解 Delphi 报表组件的编译逻辑与工程组织方式。1. Report Machine 2.6不是报表生成器而是「规则驱动型报告流水线」的落地实践你有没有遇到过这种场景业务方今天要导出带销售漏斗图的周报明天要加一个按区域维度下钻的月度复盘表后天又临时要求把历史3年数据跑成PDF附在邮件里自动发送——每次改需求都得翻出Python脚本改pandas.read_excel()路径、调matplotlib字体大小、再手动打包schedule任务Report Machine 2.6 就是为终结这种“报表救火队”状态而生的。它不依赖GUI拖拽也不绑定特定数据库核心是一套用YAML定义数据源、SQL查询、模板逻辑和输出策略的声明式配置体系。我把它部署在某高校实验室的课程设计项目中支撑12门课的实验报告自动生成从原始CSV到带水印PDFExcel双格式归档全程无人工干预。适合需要高频、多变、可追溯、能交接的报表场景——尤其是当你的团队里既有写SQL的分析师也有只懂Excel的业务方还缺一个专职运维时。2. 核心架构拆解为什么选YAMLJinja2CLI组合而不是低代码平台Report Machine 2.6 的技术栈看似朴素但每层选择都有明确的工程权衡。它没用React做前端也没上Airflow调度是因为它的定位不是“报表SaaS”而是“可版本化、可Code Review、可CI/CD的报告构建工具”。下面从三个关键模块讲清设计逻辑并给出真实配置片段。2.1 数据源抽象层统一管理DB/CSV/API避免硬编码连接串Report Machine 2.6 把所有外部数据接入点收口到sources.yaml文件中。它不强制要求数据库类型而是通过统一的type字段区分驱动用params字段透传原生连接参数。这样做的好处是当某天MySQL换成PostgreSQL只需改type: mysql为type: postgresql其余SQL和模板完全不动。# sources.yaml sales_db: type: mysql params: host: 192.168.5.10 port: 3306 user: report_user password: ${DB_PASSWORD} # 支持环境变量注入不写死密码 database: sales_prod student_csv: type: csv params: path: ./data/students_2024.csv encoding: utf-8-sig # 自动处理Windows Excel导出的BOM头 api_endpoint: type: http params: url: https://api.example.com/v1/metrics method: GET headers: Authorization: Bearer ${API_TOKEN}提示${VAR_NAME}语法由内置的envsubst模块解析启动时自动替换。这比把密码写进YAML安全得多也方便在Docker或GitHub Actions中注入密钥。2.2 查询与模板分离SQL专注取数Jinja2专注呈现逻辑Report Machine 2.6 强制将“取什么数据”和“怎么展示”解耦。每个报表对应一个.sql文件如sales_summary.sql和一个.j2模板文件如sales_summary.j2。SQL里只允许SELECT语句禁止INSERT/UPDATE模板里禁止写业务逻辑只做格式控制和条件渲染。-- sales_summary.sql SELECT region, SUM(revenue) as total_revenue, COUNT(DISTINCT order_id) as order_count, AVG(order_amount) as avg_order_amount FROM sales_fact sf JOIN dim_region dr ON sf.region_id dr.id WHERE date DATE_SUB(CURDATE(), INTERVAL 7 DAY) GROUP BY region ORDER BY total_revenue DESC;{# sales_summary.j2 #} # {{ report_title }} —— 生成于 {{ now | datetimeformat(%Y-%m-%d %H:%M) }} | 区域 | 总营收万元 | 订单数 | 客单价元 | |------|----------------|--------|--------------| {% for row in data %} | {{ row.region }} | {{ %.2f | format(row.total_revenue / 10000) }} | {{ row.order_count }} | {{ %.0f | format(row.avg_order_amount) }} | {% endfor %} 注数据统计周期为最近7日截止时间 {{ now | datetimeformat(%Y-%m-%d %H:%M) }}这种分离带来两个实际收益一是SQL可被DBA直接审核执行计划二是模板可由运营同学修改样式比如加颜色、换标题无需碰SQL或Python代码。2.3 输出策略引擎一份配置同时生成PDF/Excel/HTML/邮件附件Report Machine 2.6 的report.yaml不是简单罗列输出格式而是定义了完整的“交付链路”。它支持链式动作先查库 → 再渲染模板 → 然后转PDF → 最后发邮件。每个环节可独立开关、重试、超时控制。# report.yaml reports: - name: weekly_sales_summary description: 销售周报区域维度汇总 source: sales_db query: ./sql/sales_summary.sql template: ./templates/sales_summary.j2 outputs: - type: excel path: ./output/weekly_sales_{{ now | date(%Y%m%d) }}.xlsx sheet_name: 汇总数据 - type: pdf path: ./output/weekly_sales_{{ now | date(%Y%m%d) }}.pdf options: page_size: A4 margin_top: 20mm - type: email to: [marketingteam.com, opsteam.com] subject: [自动报表] 销售周报 {{ now | date(%Y-%m-%d) }} body_template: ./templates/email_body.j2 attachments: - ./output/weekly_sales_{{ now | date(%Y%m%d) }}.pdf - ./output/weekly_sales_{{ now | date(%Y%m%d) }}.xlsx注意这里{{ now | date(...) }}是Jinja2内置过滤器Report Machine 2.6 在运行时注入当前时间对象确保每次生成的文件名和邮件内容都带真实时间戳——这是避免覆盖旧文件、审计溯源的关键细节。3. 快速上手三步完成本地验证不装数据库也能跑通即使你手头没有MySQL或PostgreSQLReport Machine 2.6 也提供了零依赖的快速验证路径。整个过程不超过5分钟目标是看到第一个PDF报表从命令行里“吐”出来。以下步骤基于macOS/LinuxWindows用户请将./report-machine替换为report-machine.exe。3.1 下载与解压确认二进制完整性跳过编译环节Report Machine 2.6 发布包是预编译的静态二进制Linux/macOS/Windows全平台无需Python环境不依赖Node.js。官方发布页提供SHA256校验值下载后务必核对# 下载以Linux x64为例 curl -L -o report-machine-2.6-linux-amd64.tar.gz \ https://github.com/example-org/report-machine/releases/download/v2.6/report-machine-2.6-linux-amd64.tar.gz # 解压 tar -xzf report-machine-2.6-linux-amd64.tar.gz # 校验官方SHA256值应为a1b2c3... sha256sum report-machine # 输出应匹配a1b2c3d4e5f6... report-machine # 赋予执行权限 chmod x report-machine注意report-machine是单文件二进制无安装过程不写注册表不改系统PATH。你可以把它放在任意目录比如~/bin/或项目根目录下调用时用相对路径即可。3.2 初始化最小工作区用内置CSV示例跑通全流程Report Machine 2.6 自带init子命令能一键生成含示例数据、SQL、模板的最小可运行结构# 创建新目录并初始化 mkdir my-report-demo cd my-report-demo ./report-machine init # 目录结构如下 # . # ├── config/ # │ ├── sources.yaml # 已预置csv数据源 # │ └── report.yaml # 已预置demo报表配置 # ├── sql/ # │ └── demo.sql # 查询./data/demo.csv的SQL # ├── templates/ # │ └── demo.j2 # 简单Markdown模板 # └── data/ # └── demo.csv # 10行模拟销售数据这个demo.csv包含product,region,sales,profit四列足够验证全部流程。你不需要改任何一行代码直接执行# 运行报表生成默认读取当前目录下的config/report.yaml ./report-machine run # 成功输出类似 # ✅ Loaded source: demo_csv # ✅ Executed query: ./sql/demo.sql (10 rows) # ✅ Rendered template: ./templates/demo.j2 # ✅ Wrote output: ./output/demo_20240520.md # ✅ Wrote output: ./output/demo_20240520.pdf # Report demo_report completed in 1.2s此时./output/目录下会出现.md和.pdf两个文件。打开PDF你会看到带表格、标题、时间戳的完整文档——这就是Report Machine 2.6的“Hello World”。3.3 修改配置体验动态参数传递现在我们让报表更“业务”一点给SQL加一个日期参数让运营同学能指定统计范围。Report Machine 2.6 支持在report.yaml中定义params并在SQL中用{{ param_name }}引用# config/report.yaml修改部分 reports: - name: demo_report source: demo_csv query: ./sql/demo.sql template: ./templates/demo.j2 params: start_date: 2024-01-01 end_date: {{ now | date(%Y-%m-%d) }} # 动态计算截止日 outputs: - type: pdf path: ./output/demo_{{ now | date(%Y%m%d) }}.pdf然后修改sql/demo.sql把硬编码的日期换成参数-- sql/demo.sql SELECT product, region, SUM(sales) as total_sales, SUM(profit) as total_profit FROM demo_csv WHERE date {{ start_date }} AND date {{ end_date }} GROUP BY product, region ORDER BY total_sales DESC;再次运行./report-machine run你会发现PDF里的数据已按新日期范围过滤。这个机制让你能把“统计周期”变成配置项而不是每次改SQL——对交接和自动化至关重要。4. 避坑指南五个血泪经验换来的常见问题排查清单Report Machine 2.6 上手快但几个边界场景容易卡住。以下是我在某跨平台系统集成中踩过的坑按发生频率排序每条都附带复现方式、根本原因和一招解决法。4.1 现象PDF输出为空白页但控制台显示“Wrote output”复现方式在Ubuntu 22.04服务器上运行report-machine run日志显示成功但生成的PDF打不开或全是空白。原因Report Machine 2.6 内置的PDF引擎依赖系统级字体如DejaVu Sans而最小化安装的Ubuntu Server默认不装字体包导致渲染失败后静默降级为空白。解决安装基础字体包sudo apt update sudo apt install -y fonts-dejavu-core fonts-liberation提示Docker用户请在Dockerfile中加入该行不要用alpine镜像——其字体生态不兼容Report Machine 2.6的PDF后端。4.2 现象SQL中使用{{ now }}报错“UndefinedError: now is undefined”复现方式在query.sql里直接写WHERE date {{ now | date(%Y-%m-%d) }}运行时报Jinja2变量未定义。原因Report Machine 2.6 对SQL文件的变量注入是有作用域限制的——仅支持在report.yaml的params块中显式声明的变量now等全局变量不会自动注入SQL只注入模板.j2。解决把时间逻辑移到report.yaml的params中再传入SQLparams: today: {{ now | date(%Y-%m-%d) }}然后SQL中用WHERE date {{ today }}。这是设计使然不是bug目的是防止SQL中混入复杂逻辑。4.3 现象CSV数据中文乱码PDF里显示“”复现方式用Windows Excel另存为CSVUTF-8在Linux下运行Report Machine 2.6PDF中中文全变问号。原因Excel导出的UTF-8 CSV文件头部带BOMByte Order Mark而Report Machine 2.6 的CSV解析器默认按纯UTF-8读取BOM被当作文本内容解析导致首列字段名错位、后续中文解码失败。解决在sources.yaml中显式声明encoding: utf-8-sig注意是utf-8-sig不是utf-8student_csv: type: csv params: path: ./data/students.csv encoding: utf-8-sig # 自动剥离BOM4.4 现象邮件发送失败报错“SMTP AUTH extension not supported”复现方式配置Gmail SMTPsmtp.gmail.com:587启用“应用专用密码”仍报AUTH不支持。原因Report Machine 2.6 的SMTP客户端默认使用LOGIN认证方式而Gmail在2024年后已弃用该方式强制要求OAUTH2或现代PLAIN机制。解决改用支持OAuth2的邮件服务如Outlook/Office365或降级使用smtp.mailgun.org等兼容传统AUTH的中继。不建议硬改源码——Report Machine 2.6 的SMTP模块未开放认证方式配置项这是已知限制。4.5 现象并发执行多个报表时PDF文件名时间戳重复导致覆盖复现方式用后台启动两个report-machine run或用cron每分钟触发发现demo_20240520.pdf被反复覆盖。原因{{ now | date(...) }}的精度是秒级同一秒内启动的进程拿到相同时间字符串。Report Machine 2.6 不做文件名去重这是有意为之的设计——它假设“同一时刻只应有一个报表实例”。解决在report.yaml中用纳秒级唯一ID替代时间戳outputs: - type: pdf path: ./output/demo_{{ now | timestamp }}_{{ uuid4() | truncate(8, ) }}.pdfuuid4()是Report Machine 2.6 内置过滤器保证绝对唯一。这是最稳妥的生产级写法。5. 生产就绪技巧用GitCI实现报表变更的全自动回归测试Report Machine 2.6 的真正威力不在单次生成而在把报表变成“可测试、可回滚、可审计”的软件资产。我在某图像处理Demo项目中用一套轻量方案实现了报表配置的CI/CD闭环每次git push自动验证SQL语法、模板渲染、PDF生成并对比历史快照。整套流程不依赖外部服务全部用开源工具组合。5.1 构建可测试的报表单元SQL校验 模板快照Report Machine 2.6 本身不带测试框架但我们可以通过其CLI能力构造测试断言。核心思路是用--dry-run模式检查SQL是否合法用--output-dir指定临时目录生成快照再用diff比对。# test.sh报表回归测试脚本 #!/bin/bash set -e # 步骤1检查SQL语法不真执行只解析 ./report-machine validate --sql ./sql/sales_summary.sql # 步骤2生成当前快照 ./report-machine run --output-dir ./test_snapshot --config ./config/report.yaml # 步骤3与基准快照diff首次运行时手动cp ./test_snapshot/* ./test_baseline/ diff -r ./test_snapshot ./test_baseline || { echo ❌ 快照不一致请检查变更 diff -u ./test_baseline/demo.pdf ./test_snapshot/demo.pdf 2/dev/null | head -20 exit 1 } echo ✅ 所有报表测试通过提示./report-machine validate是2.6新增子命令专用于SQL语法校验支持MySQL/PostgreSQL方言检测不连数据库——这对CI环境极友好。5.2 GitHub Actions自动化流水线每次PR都跑一次报表快照在.github/workflows/report-ci.yml中定义CI流程关键点在于用actions/checkoutv4拉取代码用docker run启动一个带字体的Ubuntu容器执行测试最后把快照存为Artifacts供人工审查。name: Report CI on: [pull_request] jobs: test-reports: runs-on: ubuntu-latest steps: - uses: actions/checkoutv4 - name: Download Report Machine 2.6 run: | curl -L -o report-machine https://github.com/example-org/report-machine/releases/download/v2.6/report-machine-2.6-linux-amd64 chmod x report-machine - name: Install Fonts run: sudo apt-get update sudo apt-get install -y fonts-dejavu-core - name: Run Tests run: ./test.sh - name: Upload Snapshot uses: actions/upload-artifactv3 if: always() with: name: report-snapshot-${{ github.head_ref }} path: ./test_snapshot/当有人提PR修改sales_summary.sql时Actions会自动运行失败则阻断合并。我们曾靠这个发现一个隐藏Bug某次SQL优化加了LIMIT 100导致PDF表格截断快照diff立刻报警——比人工测试快10倍。5.3 历史版本回滚用Git Tag管理报表配置演进Report Machine 2.6 的配置文件report.yaml,sources.yaml,*.sql,*.j2全部文本化天然适配Git。我们约定每次重大报表变更如新增指标、调整口径都打Tag并写明变更说明。# 发布新版本报表 git tag -a v2.6-sales-q2 -m Q2销售报表新增客户留存率指标口径按新CRM标准 git push origin v2.6-sales-q2回滚操作极其简单# 切换到旧版配置 git checkout v2.6-sales-q1 ./report-machine run # 生成Q1口径报表这比在低代码平台里翻“历史版本”按钮直观得多也避免了配置漂移——某天业务方说“还是用上个月的公式”你直接git checkout就能还原不用求着运维找备份。从那以后我每次提交报表配置都强制走一遍./test.shgit tag流程哪怕只是改个标题。因为报表不是一次性的交付物而是持续演进的数据契约。希望帮到你。本文还有配套的精品资源点击获取

相关新闻

GPT-4o多模态模型解析:端到端语音视频交互原理与实战

GPT-4o多模态模型解析:端到端语音视频交互原理与实战

GPT-4o 的工作原理和语音视频交互机制,确实是很多人想搞明白但又被各种科普文章劝退的话题。我最初接触这个方向时,也觉得它像一个黑盒子,只知道它能“看”能“听”能“说”,但完全不清楚背后是怎么把文字、图像、音频揉在一起处理…

2026/10/16 6:58:59 阅读更多 →
无人值守自动化的三种静默死法:幽灵在途、未定义 provider、晚建的定时任务

无人值守自动化的三种静默死法:幽灵在途、未定义 provider、晚建的定时任务

三个案例全部来自同一台 Windows 机器上真实运行的一整套无人值守设施(计划任务守护 定时节拍 外部 CLI 执行器 会话唤醒器)。命令与标识做了脱敏,形态与判据保持原样。一、现场:仪表盘全绿,但它已经一整天没干过活…

2026/10/16 6:58:59 阅读更多 →
CKEditor 4 Table Resize 插件滚动后光标错位问题(4889)复现手册与修复原理解析

CKEditor 4 Table Resize 插件滚动后光标错位问题(4889)复现手册与修复原理解析

前端UI组件 【免费下载链接】ckeditor4 The best enterprise-grade WYSIWYG editor. Fully customizable with countless features and plugins. 项目地址: https://gitcode.com/gh_mirrors/ck/ckeditor4 点击查看 免费下载 本手册针对 CKEditor 4 的 Table Resize…

2026/10/16 6:58:59 阅读更多 →

最新新闻

基于VMD二次分解与Ridge-RF-LSBoost集成的光伏功率预测方法

基于VMD二次分解与Ridge-RF-LSBoost集成的光伏功率预测方法

1. 项目拆解:为什么光伏功率预测需要“二次分解三模型集成”1.1 光伏出力的多尺度特征决定了单一模型的上限光伏功率预测这件事,做过的人都有体会:出力曲线根本不是一条平滑的“馒头曲线”,而是被云层遮挡、气溶胶、温度变化打磨得…

2026/10/16 7:40:12 阅读更多 →
光伏功率预测模型:非线性二次分解与Ridge-RF-LSBoost的MATLAB实现

光伏功率预测模型:非线性二次分解与Ridge-RF-LSBoost的MATLAB实现

光伏功率预测模型:基于非线性二次分解与Ridge-RF-LSBoost的MATLAB实现这两年搞新能源预测的同行应该都有一个共同的感受:光伏功率预测已经从"锦上添花"变成了"刚需中的刚需"。电网调度要提前报计划,电站运维要判断异常发…

2026/10/16 7:40:12 阅读更多 →
大模型分布式训练全解析:并行策略与显存优化实战

大模型分布式训练全解析:并行策略与显存优化实战

你辛辛苦苦把模型代码写好,单卡上小规模试跑了几轮,loss曲线也正常,于是你决定去训练那个真正的大模型——几百亿甚至上千亿参数那种。结果问题接踵而至:单卡显存直接爆掉,OOM报错连续刷屏;就算某张卡勉强塞…

2026/10/16 7:40:12 阅读更多 →
世界地图投影与可视化:从变形原理到工程实践全解析

世界地图投影与可视化:从变形原理到工程实践全解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/16 7:40:12 阅读更多 →
GeoDesc几何约束整合机制:如何让局部描述子具备结构感

GeoDesc几何约束整合机制:如何让局部描述子具备结构感

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/16 7:40:12 阅读更多 →
PointMamba:用状态空间模型实现点云线性复杂度全局建模

PointMamba:用状态空间模型实现点云线性复杂度全局建模

如果你做过点云分类或者三维分割,大概率体会过那种尴尬:点数一多,显存告急,训练时间翻倍,推理延迟也压不下来。Transformer 用自注意力把点云建模往前带了一大步,但同时也把 N 的计算复杂度带进了三维世界。…

2026/10/16 7:39:11 阅读更多 →

日新闻

个人 AI Agent 平台接入 TaoToken:统一 Key 与 API 通道的配置大纲

个人 AI Agent 平台接入 TaoToken:统一 Key 与 API 通道的配置大纲

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/16 0:00:05 阅读更多 →
信号与系统频域分析作业解题指南

信号与系统频域分析作业解题指南

1. 作业背景与核心要求解析信号与系统作为电子信息类专业的核心基础课,其作业设计往往直接关联课程的核心知识框架。2026年春季第六次作业的布置,通常对应着课程进展到频域分析的关键阶段。根据常规教学进度推测,本次作业可能涉及以下核心内容…

2026/10/16 0:00:05 阅读更多 →
Django MVT实战:从零构建图书借阅系统,彻底搞懂Model-View-Template分层

Django MVT实战:从零构建图书借阅系统,彻底搞懂Model-View-Template分层

1. 从一个"四不像"的练手项目说起如果你已经看完了Django的官方教程前几章,跟着敲完了投票应用,大概会有一种"我好像会了,又好像什么都不会"的割裂感。教程里每个知识点都是拆开的——这一章讲模型,下一章讲视…

2026/10/16 0:00:05 阅读更多 →

周新闻

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

简介:基于 ARIMA、LSTM、Transformer 等模型的流感时间序列预测 Python 源码,面向计算机相关专业课程设计与期末大作业学生,以及项目实战学习者。内容覆盖预处理、平稳性检验、定阶、残差分析、多模型对比预测的完整时序建模流程,…

2026/10/15 16:18:54 阅读更多 →
影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别 做影刀RPA自动化,十个新手有八个栽在"往输入框里填东西"这件事上:要么填不进去,要么填了一半,要么直接把原来内容追加在后面。这背后的根因&…

2026/10/15 19:41:51 阅读更多 →
影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容 1. 认识影刀:什么场景该用RPA采小说数据 起点中文网的页面结构相对稳定——分类榜单、书籍详情、章节内容三块独立页面,跳转链路清晰。这种场景非常适合影刀自动化&#x…

2026/10/15 13:48:15 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/15 0:14:36 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/16 3:49:43 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/15 9:49:14 阅读更多 →