PLSQL基础复习:用TaoToken统一API通道跑通存储过程调试环境
1. 为什么 PLSQL 复习环境总卡在连接配置上刚接触 Oracle PLSQL 的开发者十有八九会在同一个地方卡住环境还没跑起来光配连接就耗掉一晚上。SQL*Plus 要配tnsnames.oraPLSQL Developer 要填主机、端口、服务名换个工具又得重来一遍。更麻烦的是很多教程默认你已经有一个能连的库直接开始讲游标、存储过程、触发器结果你连匿名块都执行不了。我见过太多人复习 PLSQL 的路径是这样的装 Oracle 客户端 → 配 tnsnames → 装 PLSQL Developer → 发现连不上 → 查监听 → 改环境变量 → 放弃。真正想复习的FETCH ... BULK COLLECT INTO、PRAGMA RESTRICT_REFERENCES、INSTEAD OF触发器一个都没跑到。这篇要解决的就是这个前置问题。核心思路是把数据库连接串和 API Key 统一收敛到一份 settings 配置里用 TaoToken 作为统一 API 通道让 SQL*Plus、PLSQL Developer、以及你后面可能用的 AI 辅助编码工具都从同一个入口拿配置。这样你复习 PLSQL 的时候注意力在语法和逻辑上而不是在“为什么又连不上”上。适合谁看刚学 PLSQL 语法、需要反复跑匿名块验证结果的人手上有多个 Oracle 连接、想统一管理的人以及想用 AI 辅助写存储过程、但不想每次手动贴连接信息的人。TaoToken 在这里的角色是统一 API 通道。它本身不是数据库而是帮你把模型调用、编码辅助、连接配置收敛到一个 Base URL 和一个 Key 上。你复习 PLSQL 时写的匿名块、存储过程、触发器可以通过它接入的编码工具来辅助生成和排错同时数据库连接串也统一放在 settings 里不用在 SQL*Plus 和 PLSQL Developer 之间来回抄。2. TaoToken 前置准备Key、Base URL 与 settings 文件位置在开始写 PLSQL 之前先把 TaoToken 的接入信息准备好。你需要三样东西API Key、Base URL、以及你要用的 Model ID。这三件套后面在配置文件里会反复出现。API Key 在控制台的 API Keys 页面创建地址是 https://taotoken.net/api-keys 。创建后复制出来注意它只显示一次。Base URL 固定用 https://taotoken.net/api 不要加 UTM 参数配置文件里写干净地址就行。Model ID 根据你用的工具填比如做代码补全和存储过程辅助选一个擅长代码的模型即可。接下来是 settings 文件的位置。不同工具路径不一样这里列几个常见的工具settings 路径用途Claude Code~/.claude/settings.json编码辅助、匿名块生成Cline MCP~/.cline/mcp_settings.jsonMCP 通道配置Codex~/.codex/auth.json认证与模型配置通用环境变量~/.bashrc或系统环境变量SQL*Plus 连接串如果你用的是 Claude Code配置文件在用户目录下的.claude/settings.json。这个文件里可以同时放模型接入信息和环境变量。Cline 的 MCP 配置在.cline/mcp_settings.jsonCodex 的认证信息在.codex/auth.json。这三个文件的结构不一样但核心都是 Base URL Key Model ID 三件套。这里要提醒一点不要把生产库的连接串直接写进这些配置文件然后提交到 Git。复习环境用本地库或者测试库连接串里的密码用环境变量引用不要硬编码。TaoToken 的 Key 也一样放在配置文件里没问题但别传到公开仓库。准备好这三样之后就可以进入下一步把配置片段写进对应的文件里。下面会给可直接复制的 JSON 和 TOML 片段路径和原文一致你照着改 Key 和 Model ID 就行。3. 可复制配置settings.json / auth.json / MCP 三件套这一节给可直接复制的配置片段。重点是把 Base URL、API Key、Model ID 三件套写全同时把数据库连接串也收敛到同一份配置里。先看 Claude Code 的~/.claude/settings.json。这个文件用 JSON 格式里面可以放模型接入信息也可以放环境变量。下面是一个完整示例{ env: { ANTHROPIC_BASE_URL: https://taotoken.net/api, ANTHROPIC_API_KEY: sk-你的TaoTokenKey, ANTHROPIC_MODEL: claude-sonnet-4-20250514, ORACLE_CONN_STR: scott/tigerlocalhost:1521/XEPDB1, ORACLE_HOME: /opt/oracle/product/21c/dbhome_1 } }这里ANTHROPIC_BASE_URL填 TaoToken 的 API 地址ANTHROPIC_API_KEY填你在控制台创建的 KeyANTHROPIC_MODEL填模型 ID。下面两个环境变量是给 SQLPlus 用的ORACLE_CONN_STR是你的数据库连接串ORACLE_HOME是客户端安装路径。这样你在终端里跑 SQLPlus 时可以直接引用这些变量不用每次手输。如果你用 Cline 的 MCP配置文件在~/.cline/mcp_settings.json。MCP 的配置结构不太一样它把每个 server 单独列出来{ mcpServers: { taotoken: { command: npx, args: [-y, taotoken/mcp-server], env: { TAOTOKEN_BASE_URL: https://taotoken.net/api, TAOTOKEN_API_KEY: sk-你的TaoTokenKey, TAOTOKEN_MODEL: claude-sonnet-4-20250514 } } } }Cline 的 MCP 配置里Base URL 和 Key 放在env里Model ID 也一起写进去。这样 Cline 在调用 MCP 通道时会自动带上这些信息。注意command和args按你实际安装的 MCP server 填这里只是示例结构。Codex 的认证文件在~/.codex/auth.json格式又不一样{ base_url: https://taotoken.net/api, api_key: sk-你的TaoTokenKey, model: claude-sonnet-4-20250514, provider: taotoken }Codex 的auth.json用下划线命名base_url、api_key、model三个字段。provider填taotoken表示走统一通道。这个文件权限建议设成600避免其他用户读到 Key。三件套的核心就是Base URL 统一用https://taotoken.net/apiKey 用你创建的那一串Model ID 按工具支持的填。数据库连接串单独放在环境变量里和 API 配置分开但都在同一份 settings 文件里管理。这样你换工具的时候只需要改文件路径三件套内容不变。配置写完后建议先验证一下 JSON 格式是否正确。可以用python -m json.tool ~/.claude/settings.json检查或者用编辑器的 JSON 校验功能。格式错了后面请求会直接报解析错误排起来很麻烦。4. 验证请求匿名块执行与报错回显配置写好后先别急着写复杂的存储过程。用一条最简单的匿名块验证整条链路是否通。打开 SQL*Plus连上你的复习库然后执行下面这段SET SERVEROUTPUT ON DECLARE v_count NUMBER; BEGIN SELECT COUNT(*) INTO v_count FROM emp WHERE deptno 20; DBMS_OUTPUT.PUT_LINE(部门20人数 || v_count); EXCEPTION WHEN NO_DATA_FOUND THEN DBMS_OUTPUT.PUT_LINE(没有找到数据); WHEN OTHERS THEN DBMS_OUTPUT.PUT_LINE(报错 || SQLERRM); END; /这段匿名块做了三件事声明变量、查询计数、输出结果。SET SERVEROUTPUT ON必须开否则DBMS_OUTPUT.PUT_LINE的内容不会显示。执行后你应该看到类似部门20人数5的输出。如果表不存在会走到OTHERS分支打印报错ORA-00942: table or view does not exist。这一步验证的是数据库连接本身。接下来验证 TaoToken 通道。如果你用 Claude Code 辅助写 PLSQL可以在终端里跑一个简单请求确认 Base URL 和 Key 生效。比如用 curl 测试curl -X POST https://taotoken.net/api/v1/messages \ -H x-api-key: sk-你的TaoTokenKey \ -H anthropic-version: 2023-06-01 \ -H content-type: application/json \ -d { model: claude-sonnet-4-20250514, max_tokens: 100, messages: [{role: user, content: 写一个PLSQL匿名块输出emp表前3行}] }如果返回 200 并且有内容说明通道正常。如果返回 401说明 Key 不对或者没带上。如果返回local proxy failed说明 Base URL 写错了或者网络不通。如果返回里出现reading choices相关错误通常是响应格式和预期不一致检查 Model ID 是否填对。再验证一个带异常处理的存储过程调用。先创建一个小过程CREATE OR REPLACE PROCEDURE check_sal(p_empno IN emp.empno%TYPE) IS v_sal emp.sal%TYPE; BEGIN SELECT sal INTO v_sal FROM emp WHERE empno p_empno; DBMS_OUTPUT.PUT_LINE(工资 || v_sal); EXCEPTION WHEN NO_DATA_FOUND THEN DBMS_OUTPUT.PUT_LINE(雇员不存在 || p_empno); END; /然后调用它SET SERVEROUTPUT ON BEGIN check_sal(7369); check_sal(9999); END; /预期输出是工资2000和雇员不存在9999。第二个调用故意传一个不存在的雇员号验证异常分支是否正常回显。如果这里报ORA-01403: no data found而不是你自定义的提示说明异常处理没生效检查EXCEPTION块是否写对。这两步跑通说明数据库连接和 TaoToken 通道都正常。后面复习游标、BULK COLLECT、触发器时就可以直接在这个环境里跑不用再折腾配置。5. 常见报错排查401、local proxy failed、reading choices、OAuth配置和验证过程中最容易碰到四类报错。这里逐个对照真实错误信息给排查路径。401 Unauthorized。这个最直接Key 不对或者没带上。检查三处settings 文件里的 Key 是否和 TaoToken 控制台创建的一致请求头里是否带了x-api-key或AuthorizationKey 是否被空格或换行污染。常见坑是复制 Key 时多带了一个换行或者 JSON 里 Key 没加引号。用cat ~/.claude/settings.json | python -m json.tool检查格式确认 Key 字段完整。local proxy failed。这个报错通常出现在 Base URL 写错或者网络层不通的时候。先确认 Base URL 是https://taotoken.net/api不要写成https://taotoken.net/api/带尾斜杠也不要在配置文件里加 UTM 参数。然后检查本机是否能解析和访问这个域名。如果公司网络有出口限制可能需要走内网 DNS。这个报错和数据库连接无关纯粹是 API 通道的问题。reading choices 相关错误。这个一般出现在响应解析阶段提示读取choices字段失败。原因是请求的 Model ID 和返回格式不匹配。比如你填了一个只支持 OpenAI 格式的模型但用 Anthropic 格式请求返回结构里没有choices。解决方法是确认 Model ID 和请求格式对应。Claude 系列用 Anthropic 格式GPT 系列用 OpenAI 格式。在 settings 里把 Model ID 改成和工具匹配的即可。OAuth 相关报错。如果你用 Codex 或某些需要 OAuth 的工具可能会碰到 token 过期或授权失败。Codex 的auth.json里如果同时有api_key和 OAuth 字段优先走 OAuth 可能导致冲突。解决方法是清掉 OAuth 相关字段只保留base_url、api_key、model三件套。如果工具强制要求 OAuth检查系统时间是否准确时间偏差超过几分钟会导致 token 校验失败。除了这四类还有一个常见问题是数据库连接报ORA-12541: TNS:no listener。这个和 TaoToken 无关是 Oracle 监听没起或者连接串里的主机端口不对。检查lsnrctl status确认监听在 1521 端口。如果用的是 Docker 里的 Oracle确认端口映射正确。排查顺序建议先确认 API 通道curl 测试再确认数据库连接SQL*Plus 匿名块最后确认工具集成Claude Code / Cline / Codex。这样能把问题范围缩小到某一层不用同时怀疑所有配置。6. 把复习环境用起来从匿名块到存储过程的连续验证环境搭好之后复习 PLSQL 的效率会明显不一样。你可以把 excerpt 里那些经典例子逐个跑一遍从简单游标到BULK COLLECT再到触发器和动态 SQL。先跑一个简单游标验证%ROWTYPE和%NOTFOUNDSET SERVEROUTPUT ON DECLARE CURSOR c1 IS SELECT ename, sal FROM emp ORDER BY sal DESC; v1 c1%ROWTYPE; BEGIN OPEN c1; LOOP FETCH c1 INTO v1; EXIT WHEN c1%NOTFOUND; DBMS_OUTPUT.PUT_LINE(v1.ename || || v1.sal); END LOOP; CLOSE c1; END; /这段跑通后换成BULK COLLECT INTO版本对比一次性提取和逐行提取的区别DECLARE CURSOR dept_cursor IS SELECT deptno, dname, loc FROM dept; TYPE dept_table_type IS TABLE OF dept_cursor%ROWTYPE INDEX BY BINARY_INTEGER; dept_table dept_table_type; idx NUMBER; BEGIN OPEN dept_cursor; FETCH dept_cursor BULK COLLECT INTO dept_table; FOR idx IN 1..dept_table.COUNT LOOP DBMS_OUTPUT.PUT_LINE(部门号 || dept_table(idx).deptno || 部门名 || dept_table(idx).dname || 所在地 || dept_table(idx).loc); END LOOP; CLOSE dept_cursor; END; /再往下可以试LIMIT子句控制每次提取的行数。这个在数据量大时很有用避免一次性占满 PGADECLARE CURSOR dept_cursor IS SELECT deptno, dname, loc FROM dept; TYPE dept_array_type IS VARRAY(5) OF dept_cursor%ROWTYPE; dept_array dept_array_type; v_count INT : 0; BEGIN OPEN dept_cursor; LOOP FETCH dept_cursor BULK COLLECT INTO dept_array LIMIT 2; v_count : v_count 1; DBMS_OUTPUT.PUT_LINE(第 || v_count || 次提取); FOR idx IN 1..dept_array.COUNT LOOP DBMS_OUTPUT.PUT_LINE(部门号 || dept_array(idx).deptno); END LOOP; EXIT WHEN dept_cursor%NOTFOUND; END LOOP; CLOSE dept_cursor; END; /存储过程部分先建一个带输入输出的过程然后匿名块调用CREATE OR REPLACE PROCEDURE query_emp( v_id IN emp.empno%TYPE, v_name OUT emp.ename%TYPE, v_salary OUT emp.sal%TYPE ) IS BEGIN SELECT ename, sal INTO v_name, v_salary FROM emp WHERE empno v_id; END; / DECLARE v1 emp.ename%TYPE; v2 emp.sal%TYPE; BEGIN query_emp(7654, v1, v2); DBMS_OUTPUT.PUT_LINE(v1 || 工资 || v2); END; /动态 SQL 用EXECUTE IMMEDIATE注意拼接字符串时表名和变量分开CREATE OR REPLACE PROCEDURE p_create_table(name VARCHAR2) IS v1 NUMBER; sqltext VARCHAR2(200); BEGIN SELECT COUNT(*) INTO v1 FROM tabs WHERE table_name UPPER(name); IF v1 1 THEN sqltext : drop table || name || purge; EXECUTE IMMEDIATE sqltext; END IF; sqltext : create table || name || as select * from emp; EXECUTE IMMEDIATE sqltext; sqltext : select count(*) from || name; EXECUTE IMMEDIATE sqltext INTO v1; DBMS_OUTPUT.PUT_LINE(行数 || v1); END; /这些例子跑下来PLSQL 的核心语法基本就覆盖了。每跑通一个就把结果和预期对比报错就回到第 5 节对照排查。环境稳定之后复习节奏会快很多。如果你需要长期做 PLSQL 编码和调试可以考虑用 Coding Plan 把模型调用和编码辅助固定下来地址是 https://taotoken.net/coding-plan?utm_sourcetaotoken_aicg_blog_endutm_contentcoding_planutm_campaignrewrite 。接入文档在 https://taotoken.net/doc?utm_sourcetaotoken_aicg_blog_endutm_contentdocutm_campaignrewrite 里面有各工具的详细配置说明。模型对话入口在 https://taotoken.net/chat?utm_sourcetaotoken_aicg_blog_endutm_contentchatutm_campaignrewrite 可以用来快速验证模型是否正常响应。API Keys 管理在 https://taotoken.net/api-keys?utm_sourcetaotoken_aicg_blog_endutm_contentapi_keysutm_campaignrewrite Key 丢了或者要新建都从这里进。最后说一个实际经验复习 PLSQL 时把每次跑通的匿名块和存储过程存到一个.sql文件里按章节命名比如cursor_bulk_collect.sql、trigger_instead_of.sql。下次复习直接文件名执行不用重新敲。配合统一的 settings 配置换机器也能快速恢复环境。

相关新闻

jQuery事件绑定核心:bind与on的本质区别及事件委托原理

jQuery事件绑定核心:bind与on的本质区别及事件委托原理

简介:本资源是一份面向前端开发初学者与 jQuery 进阶学习者的事件绑定核心知识解析资料,聚焦 bind 与 on 方法的用法差异、适用场景及性能影响。内容深入剖析事件委托机制、事件冒泡原理、动态元素绑定能力等关键概念,并通过 ul/li 示例对比两…

2026/10/18 3:34:17 阅读更多 →
数组原地移动0的三种本质解法与工程实践

数组原地移动0的三种本质解法与工程实践

1. 这道题到底在考什么:从“移动0”看数组操作的本质逻辑“数组类题目:移动0,将数组中所有0移动到数组末尾”——这行标题看起来平平无奇,甚至有点像某次笔试第一道热身题。但我在带教新人、参与代码评审、以及自己刷题复盘的十多…

2026/10/18 3:34:17 阅读更多 →
Go服务如何守护化与优雅退出:从nohup到systemd的实践

Go服务如何守护化与优雅退出:从nohup到systemd的实践

写Go服务最尴尬的事,不是bug查不出来,而是部署的时候翻车。前阵子帮一个朋友收拾他的内部服务,程序本身跑得挺欢,一问怎么后台运行,他回我一句“开个终端挂着呗”。终端一关,服务就跟着陪葬了。后来让他写个…

2026/10/18 3:34:17 阅读更多 →

最新新闻

自助KTV系统开发:智能门禁与线上预约的完整闭环方案

自助KTV系统开发:智能门禁与线上预约的完整闭环方案

近年来,线下娱乐行业对"无人化、自助化"的诉求越来越强烈,传统KTV面临的人力成本高、闲时资源浪费、用户体验割裂等痛点,催生了一整条自助娱乐系统开发的赛道。这个"自助KTV系统开发:智能门禁与线上预约"项目…

2026/10/19 5:56:35 阅读更多 →
ArtCraft:创意生产的系统化方法论与工程化实践

ArtCraft:创意生产的系统化方法论与工程化实践

1. 项目概述:ArtCraft 不是“艺术手作”的简单拼贴,而是一套可落地的创意生产方法论ArtCraft 这个词乍看像英文单词 art(艺术)和 craft(工艺/手作)的合成词,很容易被理解成“艺术手作”“创意DI…

2026/10/19 5:56:35 阅读更多 →
artcraft:连接算法与手工的参数化创作方法论

artcraft:连接算法与手工的参数化创作方法论

1. 项目概述:从“artcraft”这个词开始,我们到底在做什么?“artcraft”这个词乍一看像拼写错误,但其实它是个合成词——art(艺术) craft(工艺),合起来直译就是“艺术工艺…

2026/10/19 5:56:35 阅读更多 →
电梯电瓶车AI报警系统:毕设可落地的YOLO端到端方案

电梯电瓶车AI报警系统:毕设可落地的YOLO端到端方案

简介:本资源是一套基于YOLOv8的电梯场景电瓶车闯入智能检测与报警系统,面向计算机、人工智能、自动化等专业在校学生及初学者,解决公共场所安全监管中的典型目标识别与实时告警问题,特别适合作为毕业设计、课程设计或项目原型快速…

2026/10/19 5:56:35 阅读更多 →
激光打标机中振镜与场镜的区别:从原理到故障排查

激光打标机中振镜与场镜的区别:从原理到故障排查

前两天去客户现场调一台紫外打标机,对方工程师指着打标头问我:“这个场镜的焦距是多少?”我顺着他指的方向看过去,他指的其实是振镜的X轴镜片。这个场景我遇到过太多次了,振镜和场镜,一个管“激光往哪打”&…

2026/10/19 5:56:35 阅读更多 →
STM32通过IIC驱动MPU6050六轴传感器:从时序到姿态解算实战指南

STM32通过IIC驱动MPU6050六轴传感器:从时序到姿态解算实战指南

做嵌入式这几年,被问到最多的传感器大概就是 MPU6050。这颗六轴芯片配合 STM32 的 IIC 接口,几乎是所有姿态相关项目的标准开局:两轮自平衡、云台增稳、手势遥控、跌倒检测……不管你是刚入门的新手,还是在做毕业设计的同学&#…

2026/10/19 5:55:34 阅读更多 →

日新闻

频率跟踪型PWM电源设计:臭氧发生器谐振点漂移与软开关实现

频率跟踪型PWM电源设计:臭氧发生器谐振点漂移与软开关实现

简介:本资源为电源技术方向的学术研究文档,聚焦介质阻挡放电型臭氧发生器电源的频率跟踪型PWM控制策略,面向电力电子、高压电源及臭氧应用领域的科研人员与工程技术人员。针对负载呈容性、等效电容随外加电压升高而增大、谐振频率随之漂移的难…

2026/10/19 0:00:47 阅读更多 →
Vibe Coding 遇上 TaoToken:把开发者思维圣殿的灵感流接入统一 Key 通道

Vibe Coding 遇上 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/19 0:00:47 阅读更多 →
HundredCV-Chat话题建模实战教程:利用4,871个内置话题标签构建主题分析系统

HundredCV-Chat话题建模实战教程:利用4,871个内置话题标签构建主题分析系统

【免费下载链接】HundredCV-Chat 项目地址: https://ai.gitcode.com/hf_mirrors/Jax-dan/HundredCV-Chat 点击查看 免费下载 HundredCV-Chat 是一个由 100 位青年简历数据开发而来的中文多轮对话数据集,共包含 24,750 组日常闲聊对话和 4,871 个话题标签…

2026/10/19 0:00:47 阅读更多 →

周新闻

基于GMM的语音识别系统原理与MATLAB实现详解

基于GMM的语音识别系统原理与MATLAB实现详解

说到基于高斯混合模型(GMM)的语音识别系统,很多人第一反应就是一堆数学公式,觉得门槛很高。但如果你真的在MATLAB里把它落地跑通,会发现核心其实就是三件事:把声音变成特征向量,用GMM给每个类别…

2026/10/18 0:00:55 阅读更多 →
数字图像处理入门:反白、灰度化、调色板修改与导出txt实践

数字图像处理入门:反白、灰度化、调色板修改与导出txt实践

数字图像处理这四个字听起来挺唬人,但落到具体操作上,无非就是让计算机按你的想法“摆弄”像素。我在一个模拟项目X里用了一套特别经典的基础处理流程:对图像做反白、改调色板、彩色转灰度,最后把像素数据导出成txt文件。单看每一…

2026/10/18 0:00:55 阅读更多 →
机器人大脑技术盘点:具身智能的感知、决策与数据闭环

机器人大脑技术盘点:具身智能的感知、决策与数据闭环

如果你的信息流最近也天天刷到“机器人大脑”这个词,你会发现一个很有意思的现象:每个人说的“大脑”根本不是同一个东西。有人指的是大语言模型,有人指的是运动控制系统,还有人指的是能理解物理世界的端到端模型。在2026年这个时…

2026/10/19 1:30:52 阅读更多 →

月新闻

我发现了一个新思路:用 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/19 2:54:50 阅读更多 →
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/17 17:22:31 阅读更多 →
黑夜航拍船只数据集训练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/18 12:16:16 阅读更多 →