LLM结构化输出:JSON Schema约束与Tool Calling原理对比与应用指南
1. 项目概述从“自由发挥”到“精准执行”如果你最近在折腾大语言模型LLM的应用开发比如想做一个能自动整理会议纪要、生成格式化报告或者构建一个能稳定调用外部API的智能助手那你肯定遇到过这个让人头疼的问题你让模型“返回一个JSON对象包含姓名、年龄和职业”它可能给你来一段散文或者JSON的键名随心所欲地变化甚至偶尔还会在JSON外面包裹一段解释性的文字。这种输出的不确定性是LLM从“聊天玩具”走向“生产级工具”的最大障碍之一。结构化输出就是解决这个问题的钥匙。它本质上是一种“约束”告诉模型“请严格按照我规定的格式来回答。”目前业界主要有两大流派来实现这种约束JSON Schema约束和Tool Calling。乍一看它们好像都在做同一件事——让输出变规矩。但深入其原理和应用场景你会发现它们的设计哲学和适用领域截然不同。JSON Schema像是给模型戴上了一副精确的“答题卡”要求它把答案填在指定的格子里而Tool Calling则是赋予了模型“手脚”让它能根据你的指令去执行一个个定义好的“动作”并返回动作的结果。理解这两者的区别不仅关乎你选择哪种技术方案更决定了你设计的AI应用是更偏向于“数据提取与格式化”还是“任务规划与工具执行”。接下来我们就抛开那些笼统的概念直接深入到技术实现层拆解它们的工作原理、背后的生成逻辑以及在实际项目中如何选择和避坑。2. 核心原理深度拆解两种约束的本质差异要理解JSON Schema和Tool Calling不能只看它们表面都能输出结构化的内容而必须深入到LLM生成文本的底层机制和它们与模型交互的方式。2.1 JSON Schema约束在解码阶段戴上“紧箍咒”JSON Schema约束的核心思想是在文本生成解码的过程中实时地限制下一个可能出现的token词元确保最终生成的字符串完全符合预定义的JSON结构。2.1.1 工作原理与流程这个过程可以类比为在一个迷宫中行走JSON Schema就是那张唯一正确的地图。定义Schema首先开发者需要定义一个详细的JSON Schema。这个Schema不仅仅规定了要有哪些字段如name,age还包括字段的类型string,integer、是否必需、枚举值、嵌套对象的结构等。例如一个简单的用户信息Schema{ type: object, properties: { name: { type: string }, age: { type: integer, minimum: 0 }, hobbies: { type: array, items: { type: string } } }, required: [name, age] }提示词工程在给模型的系统提示System Prompt或用户提示User Prompt中会明确指令模型按照给定的JSON Schema输出通常会将Schema以文本形式插入。例如“请根据以下JSON Schema格式输出用户信息{schema_text}”。约束解码这是最关键的环节。当模型开始逐词生成输出时初始阶段模型必须生成一个左花括号{因为Schema定义的是对象。键名生成生成完{后模型接下来应该生成一个键名。约束解码器会根据Schema的properties列表将当前可生成的token集合限制在name、age、hobbies这几个键名的字符串开头包括引号。模型无法生成address或其他未定义的键。键值生成生成完name:之后约束解码器知道接下来需要一个字符串值因此可能会限制生成的token例如避免过早生成结束引号或控制字符串长度虽然精细的长度控制较难。类型控制当生成age:之后约束解码器会强制接下来的token必须是一个数字字符0-9或负号引导模型生成一个整数。如果模型试图生成字母会被约束机制排除。结构导航在生成数组hobbies时约束解码器需要管理方括号[]的生成、数组元素间的逗号分隔以及最终方括号的闭合。整个过程中约束解码算法如基于上下文无关文法的解码、或外挂的验证器引导的重采样像一个严格的语法检查器在每一个生成步骤都动态计算当前所有有效的后续token集合符合Schema语法的token并强制模型从这个有效集合中采样。如果模型产出了一个无效token高级的实现会通过“重采样”或“回溯”机制进行纠正。2.1.2 技术实现要点库支持OpenAI的API在response_format参数中直接支持{ “type”: “json_schema” }。Llama.cpp、vLLM等推理框架也通过类似grammar的功能支持。本质这是一种输出格式的强制规范。模型仍然在进行“文本补全”只不过每一步的选择空间被大幅收窄了。优势输出格式极其稳定、精确。非常适合数据提取从文本中抽取出结构化的实体、格式化生成生成固定格式的邮件、报告、代码片段等场景。2.2 Tool Calling基于函数描述的推理与调度Tool Calling 的原理与 JSON Schema 约束有根本性不同。它并非在解码时进行字符级的强制约束而是利用LLM的理解与推理能力让模型“意识”到它可以调用某些工具并自主决定在何时、调用哪个工具、传入什么参数。2.2.1 工作原理与流程这个过程更像是在给一个聪明的助手一份“工具说明书”然后让它自己决定干活时用什么工具。工具定义开发者定义一系列“工具”本质上是函数。每个定义包括工具名称、描述、以及参数的JSON Schema。这个描述至关重要它用自然语言告诉模型这个工具是干什么用的。例如{ type: function, function: { name: get_current_weather, description: 获取指定城市的当前天气信息, parameters: { type: object, properties: { location: { type: string, description: 城市名例如北京 }, unit: { type: string, enum: [celsius, fahrenheit], description: 温度单位 } }, required: [location] } } }模型推理与决策将用户查询如“北京今天热吗”和工具定义一起提供给模型。模型基于对查询意图的理解和对工具描述的理解进行推理是否需要调用工具用户的问题需要实时天气数据吗需要。调用哪个工具从定义列表中匹配到get_current_weather。参数是什么从查询中提取location为“北京”unit可以默认为“celsius”或询问用户在复杂Agent中。结构化输出工具调用请求模型此时会生成一个特殊的、结构化的中间输出这不是最终给用户的答案而是一个“动作指令”。这个指令本身是一个符合特定格式的JSON例如OpenAI的tool_calls数组包含了它决定调用的工具ID、名称和解析出的参数。{ tool_calls: [ { id: call_abc123, type: function, function: { name: get_current_weather, arguments: {\location\: \北京\, \unit\: \celsius\} } } ] }注意这个JSON的生成在高级实现中也可能受到约束但其核心是模型“思考后”的决策结果。执行与回复应用程序收到这个调用请求后在后台执行对应的函数如调用天气API将执行结果如{“temperature”: 28, “condition”: “晴朗”}再次作为上下文返回给模型。模型再根据这个结果组织最终的自然语言回复给用户如“北京今天天气晴朗气温28摄氏度比较热。”。2.2.2 技术实现要点本质这是一种任务分解与工具调用的协调机制。模型的核心能力是理解和规划结构化输出工具调用请求是它规划动作的“指令集”。优势极大地扩展了LLM的能力边界使其能够获取实时信息、执行具体操作发邮件、查数据库、控制设备。它是构建AI Agent和智能工作流的基石。与JSON Schema的关系Tool Calling的定义中参数的描述依赖于JSON Schema。所以你可以理解为Tool Calling在“调用”这个层面内部使用JSON Schema来规范每个工具的参数格式。3. 对比分析与选型指南理解了原理我们就能清晰地对比二者并做出正确的技术选型。特性维度JSON Schema 约束Tool Calling核心目标强制规范输出格式确保数据形状一致。赋予模型行动能力使其能调用外部工具。工作阶段文本解码阶段进行token级约束。模型推理阶段作为决策和规划的输出。输出性质最终答案。直接返回用户所需的结构化数据。中间指令。是一个待执行的函数调用请求。模型角色数据填写员/格式化工。规划者/调度员。关键输入描述输出数据结构的JSON Schema。描述工具功能、参数的工具定义列表。典型应用场景信息抽取、表单生成、代码结构化生成、API响应格式化。智能助手、AI Agent、复杂工作流编排、需要实时数据或操作的任务。稳定性极高。格式被严格锁定几乎不会出错。依赖模型推理。可能误判是否需要调用、选错工具或参数解析错误。复杂度相对较低主要是Schema设计。较高涉及工具管理、执行、错误处理、多轮对话状态维护。3.1 如何选择一个简单的决策树你的需求仅仅是让LLM的输出变得规整、易于程序处理吗是- 优先选择JSON Schema约束。例如从客户邮件中提取订单号、商品列表和地址让模型生成一个固定格式的周报JSON。否- 进入下一步。你的应用需要LLM根据情况决定去查询信息、进行计算或触发某个真实世界的操作吗是- 你需要Tool Calling。例如一个客服机器人需要根据用户问题查询知识库、订单系统或发起退款流程一个智能分析助手需要检索数据库、运行Python代码画图。否- 你可能只需要简单的文本生成或问答无需复杂结构化。可以结合使用吗当然可以而且非常常见这是构建强大应用的关键。例如在一个Agent工作流中Tool Calling负责调度“获取股票价格”工具。该工具执行后返回原始数据你可能再用一个具备JSON Schema约束的LLM调用将这些数据整理成一份标准化的分析报告JSON。或者一个Tool本身内部在准备返回给模型的数据时就使用了JSON Schema来确保数据格式的规范性。3.2 实操心得与避坑指南JSON Schema 约束方面Schema设计要精确而宽松字段描述尽量清晰但避免过度严格的约束如过短的字符串最大长度以免把模型“逼死”导致生成失败。对于非关键字段可以使用”required”: false。注意上下文长度复杂的Schema会占用大量token减少模型处理实际问题的上下文空间。尽量精简Schema。不是万能的它只能保证格式正确不能保证内容语义正确。模型仍然可能在一个“整数”字段里生成不合逻辑的数字如年龄为-5。需要在后处理中增加业务逻辑校验。测试边界情况用一些刁钻的输入测试看模型在约束下是会输出空值、默认值还是会产生错误。Tool Calling 方面工具描述是灵魂description字段一定要用模型能理解的自然语言清晰说明工具的功能、适用场景和参数含义。这是模型能否正确调用的关键。好的描述“获取用户最近一笔订单的详细信息包括订单号、商品列表、金额和状态。” 差的描述“查询订单。”处理模型的不确定性模型可能一次调用多个工具也可能在不需要时强行调用。你的代码需要能处理无工具调用直接回复。单个/多个工具调用并行或串行执行。参数解析错误尝试提供默认值或向用户澄清。错误处理与重试工具执行可能失败网络错误、API限流。需要设计重试机制或将错误信息反馈给模型让它决定下一步如重试、换工具或向用户道歉。成本与延迟每一轮Tool Calling都意味着多次LLM API调用第一次决定调用第二次根据结果生成回复会增加成本和响应时间。对于简单查询可能不如直接检索高效。4. 进阶应用构建一个混合型智能邮件助手为了将理论付诸实践我们设计一个综合案例一个能自动处理用户邮件的智能助手。它需要完成两个任务1) 从杂乱邮件中提取结构化信息2) 根据信息类型执行不同操作。4.1 系统架构设计我们将结合使用JSON Schema约束和Tool Calling。信息提取层使用JSON Schema约束让一个LLM专门从邮件正文中提取关键信息。决策执行层根据提取出的结构化信息另一个LLM使用Tool Calling来决定并执行后续动作。4.2 核心实现步骤步骤1定义信息提取Schema我们设计一个Schema来分类提取邮件意图和内容。{ “type”: “object”, “properties”: { “intent”: { “type”: “string”, “enum”: [“查询订单状态”, “投诉建议”, “预约服务”, “其他”] }, “entities”: { “type”: “object”, “properties”: { “order_id”: { “type”: “string” }, “customer_name”: { “type”: “string” }, “phone_number”: { “type”: “string” }, “problem_description”: { “type”: “string” } } }, “urgency”: { “type”: “string”, “enum”: [“高”, “中”, “低”] } }, “required”: [“intent”, “entities”, “urgency”] }步骤2实现约束提取调用支持JSON Schema的LLM API如OpenAI GPT-4o将邮件正文和上述Schema作为提示。# 伪代码示例 def extract_email_info(email_body): prompt f””” 请从以下用户邮件中提取结构化信息。严格按照给定的JSON Schema输出。 邮件内容 {email_body} “”” response openai.chat.completions.create( model“gpt-4o”, messages[{“role”: “user”, “content”: prompt}], response_format{“type”: “json_schema”, “json_schema”: {“schema”: email_schema}}, # 假设的API参数 ) return json.loads(response.choices[0].message.content)这一步会得到一个稳定的JSON如{ “intent”: “查询订单状态”, “entities”: {“order_id”: “ORD123456”, “customer_name”: “张三”}, “urgency”: “中” }步骤3定义决策工具根据提取的intent我们定义不同的处理工具。tools [ { “type”: “function”, “function”: { “name”: “query_order_status”, “description”: “根据订单号在内部系统中查询订单的当前状态和物流信息。”, “parameters”: {“type”: “object”, “properties”: {“order_id”: {“type”: “string”}}, “required”: [“order_id”]} } }, { “type”: “function”, “function”: { “name”: “create_service_ticket”, “description”: “根据客户描述的问题创建一张工单并分配优先级。”, “parameters”: { “type”: “object”, “properties”: { “customer_name”: {“type”: “string”}, “problem”: {“type”: “string”}, “urgency”: {“type”: “string”, “enum”: [“高”, “中”, “低”]} }, “required”: [“customer_name”, “problem”] } } } ]步骤4实现Tool Calling与执行将提取出的结构化信息转化为自然语言摘要作为新一轮LLM调用的输入并开启Tool Calling。def process_extracted_info(info): # 将提取的信息转化为对话上下文 context f”用户意图{info[‘intent’]}。相关实体{info[‘entities’]}。紧急程度{info[‘urgency’]}。” response openai.chat.completions.create( model“gpt-4o”, messages[{“role”: “user”, “content”: f”请处理以下客户请求{context}”}], toolstools, tool_choice“auto” # 让模型自行决定是否调用以及调用哪个工具 ) message response.choices[0].message # 检查是否有工具调用 if message.tool_calls: for tool_call in message.tool_calls: function_name tool_call.function.name function_args json.loads(tool_call.function.arguments) # 根据工具名执行对应函数 if function_name “query_order_status”: result database.query_order(function_args[“order_id”]) elif function_name “create_service_ticket”: result ticketing_system.create_ticket(**function_args) # … 将执行结果追加到对话历史中让模型生成最终回复 final_reply generate_final_reply_with_result(result) return final_reply else: # 如果没有工具调用直接返回模型的回复例如对于“其他”意图 return message.content4.3 方案优势与注意事项优势精度高第一层的信息提取格式稳定为后续决策提供了干净、可靠的数据。灵活性好第二层的Tool Calling可以根据清晰的意图灵活地路由到不同的业务系统。可维护两个阶段职责分离Schema和工具列表可以独立更新和扩展。注意事项流水线延迟需要两次LLM调用总响应时间更长。可以考虑对简单意图进行优化或使用更快的模型处理提取层。错误传播第一层提取错误如错误分类意图会导致后续全盘错误。需要设计校验机制例如对低置信度的提取结果转入人工审核或让模型澄清。成本两次调用意味着双倍的成本需要在业务价值和成本间取得平衡。5. 常见问题与排查技巧实录在实际开发和调试中你会遇到各种问题。以下是一些典型场景和解决思路。5.1 JSON Schema约束常见问题问题模型返回了格式错误或非JSON内容。排查检查提示词是否清晰、强硬地要求模型“必须输出JSON”、“不要有任何额外解释”将指令放在系统提示中通常更有效。检查Schema兼容性确认你使用的模型和API是否支持JSON Schema约束。不是所有模型或封装库都支持。简化Schema过于复杂的Schema尤其是多重嵌套、复杂的条件逻辑oneOf/anyOf可能超出约束解码器的处理能力。尝试简化Schema分步提取。调整温度参数将温度temperature设为0或较低值减少随机性。问题字段值的内容不符合业务逻辑如在“年龄”字段生成“年轻”。排查强化字段描述在Schema的字段描述中明确规则。例如“age”: {“type”: “integer”, “description”: “用户的年龄必须是0到120之间的正整数”}。后处理校验LLM不是数据库约束只能保证类型不能保证语义。必须在代码层对提取出的值进行业务规则校验。问题约束导致生成速度变慢。排查约束解码需要进行大量的实时语法检查肯定会比自由生成慢。这是性能与精度的权衡。考虑是否真的需要如此严格的约束或者能否接受后处理清洗。5.2 Tool Calling常见问题问题模型不调用工具而是用自然语言回答。排查检查工具描述description是否足够清晰让模型理解这个工具能解决当前问题用更具体、场景化的语言重写描述。检查用户查询查询是否足够明确触发了工具使用的需求有时需要在前端引导用户提出更明确的需求。调整tool_choice参数如果你确定必须调用某个工具可以将该参数设为{“type”: “function”, “function”: {“name”: “xxx”}}进行强制调用。提供示例在系统提示中提供少量“用户查询-工具调用”的示例Few-shot Learning能显著提升模型调用工具的准确性。问题模型调用了错误的工具或参数解析错误。排查工具区分度不同工具的描述是否太相似确保每个工具的名称和描述都有独特的定位。参数描述每个参数的description字段是否写清楚了格式和示例例如“date”: {“type”: “string”, “description”: “日期格式为YYYY-MM-DD例如2023-10-27”}。实施验证与重试在代码中对解析出的参数进行预验证如必填项、格式。如果失败可以将错误信息连同原始问题再次发送给模型要求它纠正。这构成了一个简单的自我修正循环。问题多轮对话中工具调用状态混乱。排查这是构建Agent的复杂性问题。你需要维护完整的对话历史并将每次工具调用的ID、名称、参数、执行结果都完整地追加到消息列表中。模型需要看到完整的上下文才能做出连贯的决策。使用LangChain、LangGraph或Dify这类框架可以大大简化状态管理。5.3 通用性能与优化技巧缓存对于常见、结果固定的查询如根据产品ID查名称可以将“查询-结果”对缓存起来避免重复调用LLM和外部工具。异步与并行如果一次需要调用多个不依赖的工具尽量使用异步方式并行执行减少总体延迟。降级方案当主要工具如某个API失效时应有备选方案。例如天气API挂了可以转而调用另一个备用API或者让模型直接回复“暂时无法获取”。监控与评估记录每次LLM调用的输入、输出、token用量和工具调用结果。定期评估准确率、成本作为优化提示词、调整Schema或工具定义的依据。理解JSON Schema约束和Tool Calling的原理差异就像掌握了让LLM从“诗人”变为“工程师”的两套不同工具箱。前者用于“塑形”确保输出的数据整洁、可用后者用于“赋能”让模型能够连接世界、执行任务。在实际项目中它们往往不是二选一而是相辅相成共同构建起稳定、强大且智能的应用系统。

相关新闻

Nginx大文件下载中断故障排查:proxy_max_temp_file_size配置详解

Nginx大文件下载中断故障排查:proxy_max_temp_file_size配置详解

1. 项目概述:一次典型的大文件下载故障排查最近在维护一个内部文件分发服务时,遇到了一个典型的运维问题:用户通过Nginx代理下载一个超过10GB的压缩包时,下载进度到某个点(比如2GB左右)就卡住不动&#xff…

2026/10/10 2:58:07 阅读更多 →
游戏账号安全防护:IP风险评估技术解析与实践

游戏账号安全防护:IP风险评估技术解析与实践

1. 游戏账号安全现状与IP风险评估的价值 最近三年,全球游戏行业因账号盗用造成的直接经济损失年均超过50亿美元。我经手过的案例中,90%的账号被盗事件都始于异常IP登录。去年某爆款MMORPG上线首月,黑客通过撞库攻击盗取了12万个账号&#xff…

2026/10/10 2:57:04 阅读更多 →
MySQL索引深度解析:聚簇索引与二级索引原理、优化与实践

MySQL索引深度解析:聚簇索引与二级索引原理、优化与实践

1. 索引的本质与两种核心形态在数据库的世界里,索引就像是图书馆的目录。没有索引,要找到一本特定的书,你就得在茫茫书海中一本一本地翻,这就是全表扫描,效率极低。而有了索引,你就能通过书名、作者或分类号…

2026/10/9 13:17:01 阅读更多 →

最新新闻

自己动手实现TreeMultiSet:基于TreeMap的有序可重复集合

自己动手实现TreeMultiSet:基于TreeMap的有序可重复集合

1. 从一个真实的数据统计需求说起去年帮一个做电商的朋友处理订单数据时&#xff0c;遇到一个挺典型的问题&#xff1a;他们需要统计每个商品在一天内的被下单次数&#xff0c;并且要按商品ID排序输出。第一反应是用TreeMap<Long, Integer>&#xff0c;key 是商品ID&…

2026/10/12 9:22:58 阅读更多 →
PS5折腾指南:系统配置、存储扩展、远程游玩与散热维护

PS5折腾指南:系统配置、存储扩展、远程游玩与散热维护

PS5到手三个月后&#xff0c;我发现自己陷入了一个尴尬循环&#xff1a;开机看一眼、随便通关一个进度、然后切出去看手机&#xff0c;主机外壳摸起来都能煎鸡蛋。直到我给自己定了个"AnyPS5"计划——不把这台机器当普通游戏机&#xff0c;而是当成一台可折腾的娱乐终…

2026/10/12 9:22:58 阅读更多 →
边缘实时分析系统架构设计与实践:边缘计算下的轻量级数据处理与智能化决策

边缘实时分析系统架构设计与实践:边缘计算下的轻量级数据处理与智能化决策

1. 项目背景与整体设计思路拆解1.1 项目代号“rea”从哪来&#xff0c;到底解决了什么问题先说结论&#xff1a;这个代号在我这边是Real-time Edge Analytics的缩写&#xff0c;中文可以叫“实时边缘分析”。最初立项的时候&#xff0c;它其实是某物联网数据平台项目里的一个子…

2026/10/12 9:22:58 阅读更多 →
Python+Vue前后端分离学生选课管理系统开发实战

Python+Vue前后端分离学生选课管理系统开发实战

这几年高校教务系统一直是很多开发者练手的热门方向&#xff0c;尤其是学生选课管理系统&#xff0c;业务场景清晰、技术栈覆盖广、坑点也很典型。我之前完整做了一套基于 Python 和 Vue 的前后端分离版本&#xff0c;用 PyCharm 作为主力开发工具&#xff0c;框架层面对比过 D…

2026/10/12 9:22:58 阅读更多 →
Vivo手机数据备份与恢复全指南:换机迁移防丢数据实操

Vivo手机数据备份与恢复全指南:换机迁移防丢数据实操

手机里最贵的东西&#xff0c;从来不是手机本身&#xff0c;而是里面那些联系人、聊天记录和照片。这句话我在帮朋友迁移数据时说过很多次。很多人以为Vivo系统自带的备份功能随便点一下就行&#xff0c;结果换机之后才发现微信聊天记录没了、照片原图缺了不少&#xff0c;想找…

2026/10/12 9:22:57 阅读更多 →
Windows环境下MapServer与GDAL发布包部署指南

Windows环境下MapServer与GDAL发布包部署指南

简介&#xff1a;这份发布包面向 Java 地理信息开发者&#xff0c;定位是固定版本的 GIS 开发运行环境&#xff0c;基于 x64 Windows&#xff0c;对应 GDAL 3.8.5 与 MapServer 8.0.1&#xff0c;可用于解析 TIFF 等栅格数据并搭建网络地图服务。包内不仅带 GDAL 的 Java 绑定与…

2026/10/12 9:21:57 阅读更多 →

日新闻

复古胶片颗粒感噪点合成器:Canvas ImageData 像素高斯杂色注入算法

复古胶片颗粒感噪点合成器:Canvas ImageData 像素高斯杂色注入算法

在数码相机、高清显示屏与现代矢量图形技术高度发达的今天&#xff0c;画面可以做到绝对的锐利、平滑与无瑕。然而&#xff0c;当一张秋日手账插画或拍立得照片过于“平整无瑕”时&#xff0c;往往会散发出一种冰冷生硬的“数码塑料感&#xff08;Digital Plasticity&#xff0…

2026/10/12 0:00:59 阅读更多 →
活字印刷古籍线装排版:Canvas 竖排文字与栏线自适应算法

活字印刷古籍线装排版:Canvas 竖排文字与栏线自适应算法

在现代网页与移动端设计中&#xff0c;横排&#xff08;Horizontal Layout&#xff09;早已经成为了绝对的主流。然而&#xff0c;当我们翻开泛黄的线装古籍、宋版木刻诗集&#xff0c;或是欣赏一张茶道雅集的手写便签时&#xff0c;那种**自上而下纵向书写、自右向左逐列铺展&…

2026/10/12 0:00:59 阅读更多 →
周日晚间的“精神松绑减震器”:无压力情绪倾倒箱与温和轻声陪伴

周日晚间的“精神松绑减震器”:无压力情绪倾倒箱与温和轻声陪伴

每到周日的晚上八点到十点&#xff0c;很多人心里都会悄悄亮起一盏警示灯。 在心理学上&#xff0c;这种现象有一个专门的称谓——“周日夜晚焦虑症&#xff08;Sunday Scaries&#xff09;”。明天又是周一&#xff0c;闹钟又要重新在七点响彻卧房&#xff1b;脑海里仿佛有一个…

2026/10/12 0:00:59 阅读更多 →

周新闻

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

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

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

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

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

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

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

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

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

2026/10/12 0:16:43 阅读更多 →

月新闻

我发现了一个新思路:用 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/11 10:45:37 阅读更多 →
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/11 14:36:53 阅读更多 →
黑夜航拍船只数据集训练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/11 14:36:54 阅读更多 →