放弃自研RAG!SpringBoot3 + RAG + 大模型打造的开箱即用型企业知识库问答智能系统(TaoToken 统一 Key 接入版)
1. 为什么我劝你放弃自研 RAG先跑通这条最小链路企业知识库问答这件事坑不在“大模型会不会答”而在“文档怎么进、检索怎么准、模型怎么稳、接口怎么统一”。我见过太多团队一上来就自研先搭向量库再写文档解析再调检索权重再适配三四家模型接口最后还要做对话记忆和容错。小团队两个月起步上线后一改需求就牵一发动全身。更现实的问题是模型侧接入。今天用 A 家的对话模型明天想换 B 家的重排模型后天老板说要用某个新出的向量模型每换一次就要改一遍 SDK、改一遍鉴权、改一遍超时重试。真正吃掉工期的往往不是 RAG 算法而是这些模型接入的胶水代码。这篇要讲的是另一条路用 SpringBoot3 做服务骨架把 RAG 检索链路和大模型问答能力串起来模型侧统一走 TaoToken 的 Key/API 通道一套 Base URL 一个 Key 就能切换不同模型。你不需要先成为 RAG 专家先把“上传文档 → 命中答案”这条链路跑通再逐步加检索优化。适合谁看有 Java 后端基础、想给公司内部做知识库问答的开发者正在评估自研还是接入的团队负责人以及已经写过 demo 但检索效果不稳定、想补齐工程化配置的人。下面所有配置和代码都可以直接复制重点是让你今天就能跑出一个能问答的最小系统。2. TaoToken 前置准备统一 Key 与模型通道怎么配在动手写 SpringBoot3 代码之前先把模型侧通道打通。这一步做对了后面换模型、加模型都只是改配置。TaoToken 在这里扮演的角色是“统一模型入口”你拿到一个 API Key通过一个兼容 OpenAI 标准的 Base URL 去调用对话、向量、重排等不同模型。对 SpringBoot3 项目来说好处是 LangChain4j 或任意 OpenAI 兼容客户端只需要配一次地址和 Key模型 ID 作为参数传入即可。先到官网注册并进入控制台创建 Key官网入口https://taotoken.net/?utm_sourcetaotoken_aicg_blog_endutm_mediumcsdnutm_campaignrewriteutm_content控制台创建 Keyhttps://taotoken.net/console?utm_sourcetaotoken_aicg_blog_endutm_mediumcsdnutm_campaignrewriteutm_contentAPI Keys 管理页https://taotoken.net/api-keys?utm_sourcetaotoken_aicg_blog_endutm_mediumcsdnutm_campaignrewriteutm_content创建完 Key 后先别急着写代码用一条 curl 验证通道是否通。这一步能帮你排除 90% 的“后面报 401 但不知道哪错了”的问题curl https://taotoken.net/api/v1/chat/completions \ -H Content-Type: application/json \ -H Authorization: Bearer 你的API_KEY \ -d { model: 你的对话模型ID, messages: [ {role: user, content: 用一句话说明什么是RAG} ] }如果返回里有choices字段和正常文本说明 Key 和通道都没问题。注意 API 地址是https://taotoken.net/api不带任何查询参数鉴权走标准的Authorization: Bearer。这里有个容易踩的点很多人把 Base URL 写成带/v1结尾还是不带搞混。在 OpenAI 兼容客户端里Base URL 通常填https://taotoken.net/api客户端自己会拼/v1/chat/completions如果你直接手写 HTTP 请求就写完整路径https://taotoken.net/api/v1/chat/completions。两种写法对应两种场景别混用。模型 ID 从哪来在模型对话页可以直接试跑并看到可用模型列表模型对话体验https://taotoken.net/chat?utm_sourcetaotoken_aicg_blog_endutm_mediumcsdnutm_campaignrewriteutm_content建议你在这里先把“对话模型”和“向量模型”各试一次确认这两个模型 ID 都能正常返回再写进 SpringBoot3 配置。因为 RAG 链路里对话和向量是两类调用任何一个不通问答都会失败。如果你后面要做长期编码或 Agent 类任务可以了解 Coding PlanCoding Planhttps://taotoken.net/coding-plan?utm_sourcetaotoken_aicg_blog_endutm_mediumcsdnutm_campaignrewriteutm_content前置准备的核心就三件事拿到 Key、确认 Base URL、确认对话和向量两个模型 ID。这三样齐了下面进入代码环节。3. 可复制配置SpringBoot3 依赖、application.yml 与 RAG 参数这一节是全文最该抄的部分。我按“能直接跑”的标准给配置路径和字段名保持一致你替换 Key 和模型 ID 即可。先看 Maven 依赖。SpringBoot3 要求 Java 17LangChain4j 用 1.x 版本向量库用 PostgreSQL pgvectorproperties java.version17/java.version spring-boot.version3.4.0/spring-boot.version langchain4j.version1.0.0/langchain4j.version /properties dependencies dependency groupIdorg.springframework.boot/groupId artifactIdspring-boot-starter-web/artifactId /dependency dependency groupIdorg.springframework.boot/groupId artifactIdspring-boot-starter-data-redis/artifactId /dependency dependency groupIddev.langchain4j/groupId artifactIdlangchain4j/artifactId version${langchain4j.version}/version /dependency dependency groupIddev.langchain4j/groupId artifactIdlangchain4j-open-ai/artifactId version${langchain4j.version}/version /dependency dependency groupIddev.langchain4j/groupId artifactIdlangchain4j-pgvector/artifactId version${langchain4j.version}/version /dependency dependency groupIddev.langchain4j/groupId artifactIdlangchain4j-document-parser-apache-tika/artifactId version${langchain4j.version}/version /dependency dependency groupIdorg.postgresql/groupId artifactIdpostgresql/artifactId /dependency /dependencies然后是application.yml。这里把 TaoToken 的 Base URL、Key、对话模型、向量模型、重排模型都集中配置后面换模型只改这里server: port: 8080 spring: datasource: url: jdbc:postgresql://localhost:5432/knowledge username: postgres password: postgres data: redis: host: localhost port: 6379 taotoken: base-url: https://taotoken.net/api api-key: ${TAOTOKEN_API_KEY} chat-model: 你的对话模型ID embedding-model: 你的向量模型ID rerank-model: 你的重排模型ID rag: chunk-size: 500 chunk-overlap: 80 top-k: 5 vector-threshold: 0.7 keyword-threshold: 0.3 rerank-top-n: 3注意api-key用环境变量注入别硬编码进仓库。启动前设置export TAOTOKEN_API_KEY你的API_KEY接着是 Java 配置类把 LangChain4j 的对话模型和向量模型 Bean 建出来统一指向 TaoTokenConfiguration public class ModelConfig { Value(${taotoken.base-url}) private String baseUrl; Value(${taotoken.api-key}) private String apiKey; Value(${taotoken.chat-model}) private String chatModel; Value(${taotoken.embedding-model}) private String embeddingModel; Bean public ChatLanguageModel chatLanguageModel() { return OpenAiChatModel.builder() .baseUrl(baseUrl) .apiKey(apiKey) .modelName(chatModel) .temperature(0.2) .timeout(Duration.ofSeconds(60)) .build(); } Bean public EmbeddingModel embeddingModel() { return OpenAiEmbeddingModel.builder() .baseUrl(baseUrl) .apiKey(apiKey) .modelName(embeddingModel) .build(); } }这里三件套齐了Base URL 是https://taotoken.net/apiKey 走环境变量Model ID 从配置读。温度设 0.2 是为了知识库问答更稳定别用默认的高温。向量库初始化用 pgvector建表语句CREATE EXTENSION IF NOT EXISTS vector; CREATE TABLE IF NOT EXISTS knowledge_embedding ( id UUID PRIMARY KEY, content TEXT, metadata JSONB, embedding VECTOR(1536) ); CREATE INDEX ON knowledge_embedding USING ivfflat (embedding vector_cosine_ops) WITH (lists 100);维度 1536 要和你选的向量模型输出维度一致不一致会插入失败。这是新手最容易忽略的报错来源。RAG 参数解释一下chunk-size500 是每块字符数chunk-overlap80 是相邻块重叠避免句子被切断top-k5 是召回数量vector-threshold0.7 是向量相似度门槛低于这个值不采纳rerank-top-n3 是重排后保留的条数。这些值不是固定的文档密度大就调小 chunk问答不准就调高 threshold。4. 验证请求从上传文档到命中答案的完整动作配置写完跑起来验证。这一节给你完整的接口和验证步骤确保链路真的通。先写文档入库服务用 Tika 解析后分块、向量化、写库Service public class KnowledgeIngestService { private final EmbeddingModel embeddingModel; private final EmbeddingStoreTextSegment embeddingStore; public KnowledgeIngestService(EmbeddingModel embeddingModel, EmbeddingStoreTextSegment embeddingStore) { this.embeddingModel embeddingModel; this.embeddingStore embeddingStore; } public void ingest(InputStream inputStream, String fileName) throws Exception { DocumentParser parser new ApacheTikaDocumentParser(); Document document parser.parse(inputStream); DocumentSplitter splitter DocumentSplitters.recursive(500, 80); ListTextSegment segments splitter.split(document); ListEmbedding embeddings embeddingModel.embedAll(segments).content(); embeddingStore.addAll(embeddings, segments); } }上传接口RestController RequestMapping(/api/knowledge) public class KnowledgeController { private final KnowledgeIngestService ingestService; public KnowledgeController(KnowledgeIngestService ingestService) { this.ingestService ingestService; } PostMapping(/upload) public ResponseEntityString upload(RequestParam(file) MultipartFile file) { try { ingestService.ingest(file.getInputStream(), file.getOriginalFilename()); return ResponseEntity.ok(入库成功: file.getOriginalFilename()); } catch (Exception e) { return ResponseEntity.status(500).body(入库失败: e.getMessage()); } } }用 curl 上传一个 PDFcurl -X POST http://localhost:8080/api/knowledge/upload \ -F file员工手册.pdf返回“入库成功”后去数据库确认向量真的写进去了SELECT id, LEFT(content, 50) AS preview FROM knowledge_embedding LIMIT 5;如果表里有数据说明解析、分块、向量化、写库这条链路通了。如果表是空的看日志里有没有 embedding 调用报错。然后是问答接口检索 重排 生成RestController RequestMapping(/api/chat) public class ChatController { private final EmbeddingModel embeddingModel; private final EmbeddingStoreTextSegment embeddingStore; private final ChatLanguageModel chatModel; public ChatController(EmbeddingModel embeddingModel, EmbeddingStoreTextSegment embeddingStore, ChatLanguageModel chatModel) { this.embeddingModel embeddingModel; this.embeddingStore embeddingStore; this.chatModel chatModel; } PostMapping(/ask) public MapString, Object ask(RequestBody MapString, String req) { String question req.get(question); Embedding queryEmbedding embeddingModel.embed(question).content(); ListEmbeddingMatchTextSegment matches embeddingStore.findRelevant(queryEmbedding, 5, 0.7); String context matches.stream() .map(m - m.embedded().text()) .collect(Collectors.joining(\n\n)); String prompt 你是企业知识库助手只根据下面的资料回答问题。 如果资料里没有答案直接说“资料中未提及”不要编造。 资料 %s 问题%s .formatted(context, question); String answer chatModel.generate(prompt); return Map.of( answer, answer, sources, matches.stream() .map(m - m.embedded().metadata().getString(source)) .toList() ); } }验证请求curl -X POST http://localhost:8080/api/chat/ask \ -H Content-Type: application/json \ -d {question:员工年假有多少天}成功结果长这样{ answer: 根据员工手册入职满一年的员工每年享有5天年假。, sources: [员工手册.pdf] }看到answer里有基于文档的具体内容、sources能溯源到文件名这条“上传文档 → 命中答案”的链路就算跑通了。如果answer是“资料中未提及”说明检索没召回去调top-k或降低vector-threshold如果answer是编的说明 prompt 约束不够把“不要编造”那句加强。想更直观地对比不同模型的回答效果可以在模型对话页手动试同一段 prompt模型对话https://taotoken.net/chat?utm_sourcetaotoken_aicg_blog_endutm_mediumcsdnutm_campaignrewriteutm_content5. 本篇常见错排查401、local proxy failed、reading choices、OAuth这一节按真实报错来遇到直接对号入座。401 Unauthorized。最常见。原因通常是 Key 没注入、Key 写错、或者Authorization头格式不对。检查三处环境变量TAOTOKEN_API_KEY是否真的 export 了application.yml里是不是写成了${TAOTOKEN_API_KEY}而不是硬编码空值curl 里 Bearer 后面有没有多余空格。还有一种情况是 Key 被复制时带了换行肉眼看不出来重新复制一次。local proxy failed / connection refused。这个报错说明请求根本没发出去通常是 Base URL 写错或本地网络配置问题。确认 Base URL 是https://taotoken.net/api不要带多余路径。如果你本地配了某些网络工具导致请求被拦截先关掉再试。注意这里不要用任何非官方的转发地址直接用官方 API 地址最稳。reading choices 相关报错。典型表现是Cannot read field choices或返回体里没有choices字段。原因一般是模型 ID 写错或者调用的是向量接口却按对话接口解析。检查taotoken.chat-model和taotoken.embedding-model有没有填反。对话模型返回choices向量模型返回data两者结构不同解析代码不能混用。OAuth / token 过期类报错。如果你用的是某些需要 OAuth 流程的客户端报错会提示 token invalid。TaoToken 走的是标准 API Key 鉴权不需要 OAuth 流程。如果你在某个工具里看到 OAuth 配置项说明那个工具默认走了别的鉴权方式改成 API Key 模式即可。Claude Code 这类工具接入时配置里要写全三件套Base URL、API Key、Model ID缺一个都会报鉴权或模型不存在。向量维度不匹配。报错类似expected 1536 dimensions, not 1024。这是建表时VECTOR(1536)和你实际向量模型输出维度不一致。解决办法查你选的向量模型输出维度改表结构重新入库。改完记得清空旧数据否则新旧维度混在一起还会报错。入库成功但问答召回为空。表里有数据但findRelevant返回空列表。先确认查询用的 embedding 模型和入库时是同一个不同模型向量空间不通用。再确认vector-threshold是不是设太高0.7 对某些模型偏严可以先降到 0.5 测试。最后确认分块大小chunk 太大导致语义分散也会召回不准。排障时建议打开 LangChain4j 的请求日志把实际发出的 URL、模型 ID、请求体打出来对照官方文档核对接入文档https://taotoken.net/doc?utm_sourcetaotoken_aicg_blog_endutm_mediumcsdnutm_campaignrewriteutm_content6. 把模型通道固定下来RAG 才敢往生产走跑通最小链路后下一步不是急着加知识图谱而是把模型通道固定成可运维的形态。我自己的做法是所有模型调用都收敛到ModelConfig这一层业务代码只依赖ChatLanguageModel和EmbeddingModel接口不直接碰 HTTP。这样换模型、加备用模型、做熔断降级都只改配置层。具体来说给对话模型加一个降级包装主模型超时或报错时自动切到备用模型。因为 TaoToken 是统一入口你只需要在配置里多写一个模型 ID不用改任何业务代码Bean public ChatLanguageModel chatLanguageModel() { ChatLanguageModel primary OpenAiChatModel.builder() .baseUrl(baseUrl).apiKey(apiKey) .modelName(primaryModel).timeout(Duration.ofSeconds(30)) .build(); ChatLanguageModel fallback OpenAiChatModel.builder() .baseUrl(baseUrl).apiKey(apiKey) .modelName(fallbackModel).timeout(Duration.ofSeconds(30)) .build(); return new FallbackChatModel(primary, fallback); }FallbackChatModel自己实现ChatLanguageModel接口在generate里 try-catch主模型失败就调备用。这就是“统一 Key 接入”的真正价值容错逻辑写一次所有模型通用。另一个生产必备是链路追踪。每次问答记录问题、召回条数、重排后条数、模型耗时、最终答案。这些数据攒一周你就能看出是检索拖后腿还是模型拖后腿。检索慢就优化向量索引模型慢就换更快的模型 ID都是配置级操作。最后提醒一句知识库问答的准确率七分靠文档质量三分靠检索参数。文档本身结构混乱、扫描件没 OCR、表格没解析好再好的 RAG 也救不回来。先把文档入库质量盯住再调chunk-size和top-k顺序别反。如果你要长期跑编码或 Agent 类任务Coding Plan 那条通道可以单独了解Coding Planhttps://taotoken.net/coding-plan?utm_sourcetaotoken_aicg_blog_endutm_mediumcsdnutm_campaignrewriteutm_content到这里SpringBoot3 RAG 大模型的企业知识库问答最小系统就跑通了。接下来你要做的是把公司真实文档丢进去看哪些问题答不准然后针对性调参数。这个过程没有捷径但有了统一模型通道至少你不用再为换模型改代码了。

相关新闻

Recordset.Open 方法参数详解:ActiveConnection、CursorType、LockType、Options 一次讲透

Recordset.Open 方法参数详解:ActiveConnection、CursorType、LockType、Options 一次讲透

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

2026/10/10 0:37:45 阅读更多 →
微信小程序心理咨询预约系统毕业设计:技术选型与核心逻辑全解析

微信小程序心理咨询预约系统毕业设计:技术选型与核心逻辑全解析

毕业设计选了“基于微信小程序的心理咨询预约系统”?这可能是你今年最省心的决定每年到了毕业设计选题季,总有学生私信问我同一个问题:想做微信小程序方向,但不知道什么题目既好过审、又有技术含量、还能顺利拿到源码和文档。如果…

2026/10/10 0:37:45 阅读更多 →
群论复习:置换群、凯莱定理与Burnside引理全梳理

群论复习:置换群、凯莱定理与Burnside引理全梳理

复习到群论这一章的时候,很多同学会在“变换群”“置换群”这一节突然卡住。前面刚习惯用集合、映射、同态去理解群,这里又冒出来一堆“把元素看成函数”的操作,容易让人觉得抽象。我倒觉得这一节恰恰是整个群论里最值得停下来慢慢品的一段&a…

2026/10/10 0:36:45 阅读更多 →

最新新闻

Steve Brunton | Reinforcement Learning | 笔记 | Lecture 3 | 深度强化学习在流体动力学与控制中的应用

Steve Brunton | Reinforcement Learning | 笔记 | Lecture 3 | 深度强化学习在流体动力学与控制中的应用

目录前言1. 引言2. 强化学习框架回顾3. 流体动力学中的应用分类4. 鱼群游动研究5. 强化学习加速计算6. 综述与常用算法7. 流动控制8. 非稳态流体环境中的飞行控制9. 总结结语参考前言 学习 Steven Brunton 讲授的强化学习入门概述视频,本篇文章记录第三讲&#xff1…

2026/10/10 8:54:30 阅读更多 →
Steve Brunton | Reinforcement Learning | 笔记 | Lecture 4 | 强化学习系列:方法概览

Steve Brunton | Reinforcement Learning | 笔记 | Lecture 4 | 强化学习系列:方法概览

目录前言1. 引言2. 强化学习核心概念回顾3. 模型驱动强化学习4. 模型无关强化学习5. 深度强化学习方法6. 总结与展望结语参考前言 学习 Steven Brunton 讲授的强化学习入门概述视频,本篇文章记录第四讲:强化学习系列:方法概览,记录…

2026/10/10 8:54:30 阅读更多 →
Rocket.Chat 的 `@rocket.chat/peggy-loader`:在 Webpack 构建中把 Peggy 语法文件编译为 ES 模块解析器

Rocket.Chat 的 `@rocket.chat/peggy-loader`:在 Webpack 构建中把 Peggy 语法文件编译为 ES 模块解析器

即时通讯后端前端 【免费下载链接】Rocket.Chat The Secure CommsOS™ for mission-critical operations 项目地址: https://gitcode.com/GitHub_Trending/ro/Rocket.Chat 点击查看 免费下载 rocket.chat/peggy-loader 是 Rocket.Chat 官方维护的 Peggy&#xff08…

2026/10/10 8:54:30 阅读更多 →
ComfyUI本地部署与工作流搭建:从零跑通AI绘画环境

ComfyUI本地部署与工作流搭建:从零跑通AI绘画环境

1. 为什么本地跑图这件事值得认真对待如果你最近才开始接触AI绘画,大概率会经历这样一个过程:先用在线工具生成几张图,觉得挺新鲜,然后发现免费额度用完了,或者想调一个特定的姿势、换一个特定的画风,在线工…

2026/10/10 8:54:30 阅读更多 →
水流量示意图制作全指南:类型划分、工具选型与模板复用

水流量示意图制作全指南:类型划分、工具选型与模板复用

干过给排水、环保、水利项目的人都有体会:方案汇报时,一张干净的水流量示意图,比满屏数据表格更能说服人。无论是污水厂提标改造的工艺流程图,还是城市供水管网的水量分配图,甚至是科研论文里的测流时序曲线&#xff0…

2026/10/10 8:54:30 阅读更多 →
KV Cache Offloading 原理详解:GLM5.2 如何用 CPU DRAM 突破 1M 长上下文 HBM 内存墙

KV Cache Offloading 原理详解:GLM5.2 如何用 CPU DRAM 突破 1M 长上下文 HBM 内存墙

KV Cache Offloading 原理详解:GLM5.2 如何用 CPU DRAM 突破 1M 长上下文 HBM 内存墙 【免费下载链接】GLM5.2-KV-Offloading-FusedSfaOverlap 项目地址: https://ai.gitcode.com/Ascend-SACT/GLM5.2-KV-Offloading-FusedSfaOverlap 在 GLM5.2 长文本推理场…

2026/10/10 8:53:28 阅读更多 →

日新闻

卫星轨道分类全解析:从LEO到GEO的选型逻辑与工程实践

卫星轨道分类全解析:从LEO到GEO的选型逻辑与工程实践

1. 从“卫星轨道分类”这个标题说起:为什么值得花时间搞懂第一次接触“卫星轨道分类”这个概念,很多人会觉得它离自己很远——不就是天上的星星怎么转吗?但如果你正在做航天任务规划、遥感数据接收、星座设计,甚至只是准备一场航天…

2026/10/10 0:00:39 阅读更多 →
Spring AOP 核心原理与实战:从概念到日志切面落地

Spring AOP 核心原理与实战:从概念到日志切面落地

1. 从一个真实痛点说起:为什么你的代码里到处都是重复逻辑刚入行那会儿,我写过一个用户管理模块,注册、登录、改密码、注销四个接口。每个接口里都塞了几乎一样的日志打印、参数校验、事务开启和提交。当时觉得没什么,能跑就行。直…

2026/10/10 0:00:40 阅读更多 →
Python招聘数据采集与分析可视化:从采集清洗到薪资技能城市可视化全链路

Python招聘数据采集与分析可视化:从采集清洗到薪资技能城市可视化全链路

简介:这是一套面向计算机相关专业学生与项目实战学习者的Python数据采集与分析可视化完整项目,以Boss直聘岗位数据为对象,适合用作毕业设计、课程设计或期末大作业。资源包共38个文件,约246KB,以13个py源码文件为核心&…

2026/10/10 0:00:40 阅读更多 →

周新闻

KT148A语音芯片外挂8002D功放的工程实践指南

KT148A语音芯片外挂8002D功放的工程实践指南

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

2026/10/8 15:26:32 阅读更多 →
LLC谐振变换器增益公式推导:从FHA等效到完整归一化表达式

LLC谐振变换器增益公式推导:从FHA等效到完整归一化表达式

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

2026/10/10 1:36:08 阅读更多 →
ARM架构深度解析:从RISC设计理念到交叉编译实战

ARM架构深度解析:从RISC设计理念到交叉编译实战

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

2026/10/9 10:11:06 阅读更多 →

月新闻

我发现了一个新思路:用 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/10 5:23: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/9 21:32:20 阅读更多 →
黑夜航拍船只数据集训练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/9 6:17:20 阅读更多 →