从思维链到思维图:GoT框架如何革新大语言模型推理

news2026/5/11 19:46:53
1. 项目概述从“思维链”到“思维图”的范式跃迁如果你最近在关注大语言模型LLM的应用与推理能力增强那么“思维链”Chain-of-Thought, CoT这个词你一定不陌生。它通过让模型“一步一步思考”显著提升了其在复杂推理任务上的表现。然而CoT本质上是一条线性的推理路径就像一个人沿着一条单行道从头走到尾。当面对的问题存在多种可能的解法、需要多角度验证或者步骤间存在复杂依赖时这种线性结构就显得力不从心了。今天要深入探讨的spcl/graph-of-thoughtsGoT项目正是为了解决这一核心瓶颈而生。它不是一个简单的工具库而是一个开创性的框架旨在将LLM的推理过程从“链”升级为“图”。简单来说GoT允许我们将一个复杂的任务分解成多个“思维”节点这些节点之间可以按照非线性的关系如聚合、循环、分支连接起来形成一个动态的、可塑的推理图。这个框架由苏黎世联邦理工学院ETH Zurich的研究团队提出其论文和代码已经开源为我们探索LLM更强大的推理能力打开了一扇新的大门。这个框架的核心价值在于它极大地扩展了LLM推理的表达能力。传统的CoT或更近期的“思维树”Tree of Thoughts, ToT可以看作是GoT的特殊子集线性链或树状结构。GoT则更加通用它允许信息聚合将多个推理路径的中间结果合并提炼出更优质的结论。循环与迭代对不满意的结果进行回溯和修正实现自我改进。任意图拓扑根据任务需求灵活设计推理步骤之间的依赖关系。无论是进行复杂的数学证明、多文档信息综合、创意写作的头脑风暴还是代码生成的调试与优化GoT都提供了一种结构化的方法来引导和增强LLM的推理过程。接下来我将带你深入这个框架的内部拆解其设计思路、核心组件并分享如何将其应用于实际场景的实操经验。2. 核心架构与设计哲学拆解要理解GoT我们不能只停留在“用图来组织思考”这个比喻层面必须深入到其技术架构的设计哲学。整个框架的构建围绕着几个关键问题如何形式化地表示一个“思维”如何定义和操作思维之间的关系如何让LLM在这个图结构中协同工作2.1 思维Thought的抽象与表示在GoT中一切的基础是“思维”。这不仅仅是一个文本片段而是一个结构化的对象。一个典型的Thought对象通常包含以下核心属性内容Content: 思维的具体文本表述例如一个推理步骤、一个假设、一段总结。状态State: 表示该思维的当前状态如生成中generating、已完成completed、已评估evaluated、已聚合aggregated。状态机机制是协调整个异步推理流程的关键。分数/评估Score: 一个对该思维质量的量化评估值。这个分数可以来自LLM自身的评估例如“请为你刚才提出的方案从1到10打分”也可以来自外部评估函数。分数是后续进行路径选择如波束搜索和聚合操作的核心依据。元数据Metadata: 可包含生成该思维所使用的提示词Prompt、模型参数、父节点ID等用于追溯和调试。这种抽象将LLM的一次调用或一个推理步骤封装成了一个可编程、可观测的单元。这是实现复杂工作流编排的基础。2.2 操作Operation与图拓扑构建思维本身是静态的思维之间的“边”则由“操作”来动态创建和定义。GoT框架预定义了几类核心操作这也是其强大表达能力的来源生成Generate: 最基本的操作。基于一个或多个父思维的内容通过LLM生成一个新的子思维。这对应着图中“节点扩展”的过程。聚合Aggregate: 这是GoT区别于链和树的关键操作。它可以将多个思维例如探索同一问题的不同解决方案作为输入通过LLM进行综合、比较、提炼生成一个质量更高的新思维。这个新思维会“吸收”多个输入思维的精华。改进/循环Refine/Loop: 对一个已有的思维进行修正、深化或迭代。这通过在图中创建一条从某思维指向其自身或新版本的边来实现用于实现自我批评和迭代优化。评估Evaluate: 为一个或多个思维分配分数。评估操作本身可能不产生新的内容节点但会更新节点的“分数”属性影响图的后续演化方向。通过组合这些操作我们可以构建出极其复杂的推理拓扑。例如一个“生成-评估-聚合-再生成”的循环可以模拟人类“提出想法、评判优劣、整合观点、深化思考”的完整过程。框架的“编排器”Orchestrator负责解析我们定义好的图结构并按照依赖关系有序地调度这些操作。2.3 评估与评分策略如何评估一个“思维”的好坏是引导整个推理图向正确方向演化的“指挥棒”。GoT框架在这方面提供了灵活性LLM自评估让LLM根据任务目标对自己或他人的输出进行评分。例如在写作任务中让其评估段落的连贯性在解题任务中评估步骤的逻辑性。提示词工程在这里至关重要需要设计出能让LLM进行稳定、相对客观比较的指令。外部评估函数对于有明确答案的任务如数学计算、代码运行可以直接编写函数来验证结果的正确性。这是最可靠但适用场景较窄的方式。投票或一致性检查生成多个候选思维让LLM判断哪个更优或者检查多个思维之间是否存在共识。在实际应用中我通常采用“混合评估”策略。先用一个快速、低成本的外部检查或简单自评估进行初筛过滤掉明显错误的路径再对剩余的优质候选进行更精细、更耗资源的LLM深度评估以选出最佳路径。这能在效果和成本间取得良好平衡。3. 实战演练构建你的第一个GoT应用理解了理论我们动手实现一个具体场景“多角度产品评测报告生成”。假设我们需要为一款新的无线耳机撰写评测我们希望报告能涵盖音质、佩戴舒适度、续航、性价比等多个维度并且结论要综合平衡。3.1 环境搭建与依赖安装项目基于Python并高度依赖LangChain等LLM应用开发框架来管理与大模型的交互。以下是搭建环境的步骤# 1. 克隆仓库 git clone https://github.com/spcl/graph-of-thoughts.git cd graph-of-thoughts # 2. 创建并激活虚拟环境推荐 python -m venv venv source venv/bin/activate # Linux/macOS # venv\Scripts\activate # Windows # 3. 安装核心依赖 pip install -r requirements.txt # 通常包括langchain, langchain-openai, pydantic, networkx等 # 4. 设置你的LLM API密钥以OpenAI为例 export OPENAI_API_KEYyour-api-key-here # 或在代码中通过os.environ设置这里有一个关键点原项目requirements.txt可能不会直接包含langchain-openai这样的具体集成包。你需要根据自己选择的LLM提供商OpenAI, Anthropic, 本地部署的Ollama等额外安装对应的LangChain集成包。例如使用OpenAI则pip install langchain-openai使用Ollama则pip install langchain-community。3.2 定义思维图结构与操作我们规划一个简单的图首先生成四个独立维度的评测音质、舒适度、续航、性价比然后聚合这四个维度的观点形成一份综合报告。import asyncio from graph_of_thoughts.models import OpenAIModel # 假设的导入路径需根据实际项目调整 from graph_of_thoughts.thought import Thought, ThoughtState from graph_of_thoughts.operations import Generate, Aggregate from graph_of_thoughts.orchestrator import Orchestrator # 1. 初始化LLM模型 llm OpenAIModel(modelgpt-4-turbo, api_keyos.getenv(OPENAI_API_KEY)) # 2. 定义初始思维任务描述 initial_thought Thought( idtask, content请为‘NovaSound Pro无线耳机’生成一份全面的评测报告。, stateThoughtState.COMPLETED ) # 3. 定义生成操作 - 创建四个维度的子思维 aspects [音质表现, 佩戴舒适度与设计, 电池续航与充电, 价格与性价比] generate_ops [] dimension_thoughts [] for i, aspect in enumerate(aspects): op Generate( namefgen_{aspect}, # 提示词基于总任务专门思考某一个维度 promptlambda parent_thought, aspectaspect: f 基于以下产品评测任务{parent_thought.content} 请你专注于‘{aspect}’这个单一维度撰写一段详细、客观的评测分析。 分析应包含具体体验描述和优缺点。 , llmllm, parents[task], # 依赖于初始任务思维 # 结果会创建一个新的Thought对象 ) generate_ops.append(op) # 我们预先知道会生成四个新思维这里用占位符表示实际操作中由Orchestrator创建 dimension_thoughts.append(Thought(idfdim_{i}, stateThoughtState.PENDING)) # 4. 定义聚合操作 - 将四个维度综合成最终报告 aggregate_op Aggregate( nameagg_final_report, promptlambda parent_thoughts: f 你是一名专业的科技产品编辑。以下是关于‘NovaSound Pro无线耳机’在四个不同维度的独立评测 {chr(10).join([f### {aspects[i]}{t.content} for i, t in enumerate(parent_thoughts)])} 你的任务是将以上所有维度的观点整合起来撰写一份结构完整、逻辑连贯、结论平衡的最终评测报告。 报告应包含概述、分维度总结、综合结论与购买建议。 确保整合时处理可能存在的观点冲突给出一个全面而公正的整体评价。 , llmllm, parents[t.id for t in dimension_thoughts], # 依赖于所有四个维度思维 ) # 5. 创建编排器并执行图 orchestrator Orchestrator( initial_thoughts[initial_thought], operationsgenerate_ops [aggregate_op], ) # 异步执行是主流因为LLM API调用通常是网络IO密集型 final_results await orchestrator.run()在这个例子中我们清晰地定义了一个两层的图结构第一层是四个并行的“生成”操作第二层是一个“聚合”操作。编排器会先并发执行四个生成操作前提是LLM API允许并发待它们全部完成后再执行聚合操作。3.3 关键参数配置与调优心得在实际运行中有几个参数对结果质量和成本影响巨大LLM模型选择对于“生成”节点可以使用能力稍弱但更经济的模型如gpt-3.5-turbo对于关键的“聚合”或“评估”节点建议使用能力最强的模型如gpt-4。这种混合模型策略能有效控制成本。温度Temperature在“生成”多样性观点的阶段如头脑风暴可以设置较高的温度如0.8-1.0以探索更多可能性在“聚合”或需要稳定输出的阶段则应使用较低的温度如0.2-0.5。并发控制虽然GoT框架支持并发但需注意LLM提供商的速率限制。需要在编排器中配置最大并发数避免触发API限制导致失败。我的经验是对于OpenAI初始设置并发数在5-10之间比较安全再根据实际情况调整。提示词工程这是GoT应用的灵魂。为不同操作设计精准的提示词比模型本身更重要。例如在“评估”操作的提示词中必须给出清晰、可操作的评分标准“请根据逻辑严谨性、创新性和可行性三个方面分别以1-10分打分”。实操心得在构建复杂GoT图时我强烈建议从一个极其简单的图开始例如一个生成一个聚合确保管道畅通。然后逐步增加节点和边的复杂度。同时为每个Thought对象记录完整的元数据如使用的提示词、模型参数这会在调试和优化阶段为你节省大量时间。当图执行出现意外结果时首先检查各个节点的输入父思维的内容是否符合预期这能解决大部分问题。4. 高级模式与复杂场景应用掌握了基础用法后我们可以探索GoT框架更强大的能力将其应用于更复杂的场景。4.1 迭代优化模式让LLM自我修正这是GoT非常吸引人的一种应用。我们可以构建一个包含“生成 - 评估 - 改进”循环的子图。假设任务是“写一首关于秋天的七言绝句”。我们可以这样设计节点G1生成初始诗句。节点E1评估初始诗句从“意境”、“平仄”、“押韵”三个方面打分。节点R1如果分数低于阈值则基于评估意见进行改进生成诗句V2。节点E2评估诗句V2。循环判断如果分数达标或达到最大迭代次数则终止否则将R1的输出再次作为R1的输入继续改进。这个过程在GoT中可以通过让Refine操作的父节点包含其自身的前一个版本来实现。编排器会管理循环的终止条件。这种模式非常适合写作、代码调试、方案优化等需要反复打磨的任务。4.2 基于评估的路径搜索这类似于在推理空间中执行“波束搜索”Beam Search。例如在一个复杂推理问题中从当前状态并行生成K个可能的下一步推理Generatex K。对这K个候选思维进行快速评估Evaluate选出得分最高的M个M K。以这M个优质思维为新的起点重复步骤1和2。最终从多条探索路径的终端节点中选出全局得分最高的思维作为最终答案。GoT的图结构能很自然地表达这种“扩展-剪枝-再扩展”的搜索过程。你需要自定义一个“选择器”Selector模块集成到编排逻辑中负责在每个搜索深度根据分数选择保留哪些分支。4.3 多智能体协作模拟我们可以将图中的不同节点或子图赋予不同的“角色”模拟一个专家团队。例如在一个市场分析任务中节点A分析师生成市场数据解读。节点B策略师基于解读生成潜在策略。节点C风险评估师对策略进行风险分析。节点DCEO/聚合器综合数据、策略和风险做出最终决策。每个节点使用不同的系统提示词System Prompt来塑造其角色身份。GoT的图定义了这些专家之间的协作流程和信息流向从而完成单人单次对话难以实现的复杂、多视角分析。5. 性能、成本考量与常见问题排查将推理过程图化虽然强大但也引入了新的复杂性和成本。在实际部署中以下几个问题必须谨慎处理。5.1 延迟与异步编排优化一个复杂的GoT图可能包含数十个节点如果串行执行总耗时将是所有LLM调用时间的总和这对于交互式应用是不可接受的。因此异步并发是必选项。利用框架并发确保你的Orchestrator充分利用了asyncio.gather等机制来并发执行无依赖关系的操作。理解依赖关系优化图的设计最大化可并行执行的路径。减少关键路径上的节点数量。缓存中间结果对于某些可能被重复使用的、确定性的思维例如对固定文档的摘要可以考虑进行缓存避免重复调用LLM产生不必要的成本和延迟。5.2 令牌消耗与成本控制GoT应用通常是令牌消耗“大户”。一次运行可能涉及几十次LLM调用和数万甚至数十万令牌的吞吐。成本监控在代码中集成令牌计数功能对每次调用进行统计。OpenAI等提供商API返回的响应中通常包含使用量信息。策略性降级如前所述采用混合模型策略。对于要求不高的“草稿生成”节点使用便宜模型。压缩与总结在将某个思维作为输入传递给下一个节点前考虑是否可以先对其进行压缩或总结以减少提示词中的令牌数。这本身也可以作为一个“压缩”操作节点加入到图中。设置预算上限在编排器中实现逻辑当累计消耗的令牌或估算成本超过某个阈值时提前终止图的执行或回落到更简单的备用方案。5.3 典型错误与调试技巧在开发GoT应用时你可能会遇到以下典型问题问题现象可能原因排查与解决思路图执行卡住不继续1. 某个操作LLM调用超时或失败。2. 循环依赖或等待条件永不满足。3. 异步任务管理异常。1. 检查每个操作的日志确认API调用是否成功返回。2. 可视化你的图结构检查是否存在循环依赖A等BB等A。3. 确保所有操作的parents依赖关系正确定义且对应的父思维状态已变为COMPLETED。最终结果质量差逻辑混乱1. 聚合操作的提示词设计不佳未能有效整合信息。2. 输入给聚合节点的子思维本身质量低或相互矛盾。3. 评估标准模糊导致优质路径未被选中。1.逐层调试先单独运行并检查每个“生成”节点的输出确保基础素材合格。2.强化聚合提示在聚合提示词中明确要求处理冲突、给出权衡依据。3.细化评估为评估操作设计更具体、可量化的评分规则。令牌消耗远超预期1. 提示词中包含大量重复或冗余的上下文。2. 图结构过于复杂进行了不必要的分支探索。3. 未对长文本输入进行压缩。1. 审查每个操作的提示词模板移除重复的指令或上下文。2. 考虑对图进行剪枝合并一些相似或简单的步骤。3. 在长文本输入节点后增加一个“总结”节点将精简后的内容传递给下游。并发请求被API限制1. 并发数设置过高触发提供商的RPM每分钟请求数或TPM每分钟令牌数限制。1. 在编排器中实现请求队列和速率限制器。2. 根据API提供商的具体限制调低并发数并考虑添加指数退避的重试机制。调试心法将GoT应用视为一个数据流管道。最有效的调试方式是“快照”每个Thought节点完成后的状态内容、分数、元数据并将其可视化。你可以简单地将图执行过程输出为JSON或通过networkx库生成图像直观地看到数据是如何在图中流动和演变的这能帮你迅速定位问题节点。GoT框架代表了LLM推理编程的一个前沿方向。它将推理过程从黑盒的提示词工程部分地转变为了白盒的图结构设计。这要求开发者不仅要有LLM应用的经验还需要具备一定的计算思维和系统设计能力。虽然目前该框架在易用性和工具链成熟度上还有很长的路要走但它所指向的“结构化、可编程、可引导的LLM推理”未来无疑充满了潜力。开始动手构建你的第一个思维图亲自体验这种将复杂思考“可视化”和“自动化”的力量吧。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2599722.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

SpringBoot-17-MyBatis动态SQL标签之常用标签

文章目录 1 代码1.1 实体User.java1.2 接口UserMapper.java1.3 映射UserMapper.xml1.3.1 标签if1.3.2 标签if和where1.3.3 标签choose和when和otherwise1.4 UserController.java2 常用动态SQL标签2.1 标签set2.1.1 UserMapper.java2.1.2 UserMapper.xml2.1.3 UserController.ja…

wordpress后台更新后 前端没变化的解决方法

使用siteground主机的wordpress网站,会出现更新了网站内容和修改了php模板文件、js文件、css文件、图片文件后,网站没有变化的情况。 不熟悉siteground主机的新手,遇到这个问题,就很抓狂,明明是哪都没操作错误&#x…

网络编程(Modbus进阶)

思维导图 Modbus RTU(先学一点理论) 概念 Modbus RTU 是工业自动化领域 最广泛应用的串行通信协议,由 Modicon 公司(现施耐德电气)于 1979 年推出。它以 高效率、强健性、易实现的特点成为工业控制系统的通信标准。 包…

UE5 学习系列(二)用户操作界面及介绍

这篇博客是 UE5 学习系列博客的第二篇,在第一篇的基础上展开这篇内容。博客参考的 B 站视频资料和第一篇的链接如下: 【Note】:如果你已经完成安装等操作,可以只执行第一篇博客中 2. 新建一个空白游戏项目 章节操作,重…

IDEA运行Tomcat出现乱码问题解决汇总

最近正值期末周,有很多同学在写期末Java web作业时,运行tomcat出现乱码问题,经过多次解决与研究,我做了如下整理: 原因: IDEA本身编码与tomcat的编码与Windows编码不同导致,Windows 系统控制台…

利用最小二乘法找圆心和半径

#include <iostream> #include <vector> #include <cmath> #include <Eigen/Dense> // 需安装Eigen库用于矩阵运算 // 定义点结构 struct Point { double x, y; Point(double x_, double y_) : x(x_), y(y_) {} }; // 最小二乘法求圆心和半径 …

使用docker在3台服务器上搭建基于redis 6.x的一主两从三台均是哨兵模式

一、环境及版本说明 如果服务器已经安装了docker,则忽略此步骤,如果没有安装,则可以按照一下方式安装: 1. 在线安装(有互联网环境): 请看我这篇文章 传送阵>> 点我查看 2. 离线安装(内网环境):请看我这篇文章 传送阵>> 点我查看 说明&#xff1a;假设每台服务器已…

XML Group端口详解

在XML数据映射过程中&#xff0c;经常需要对数据进行分组聚合操作。例如&#xff0c;当处理包含多个物料明细的XML文件时&#xff0c;可能需要将相同物料号的明细归为一组&#xff0c;或对相同物料号的数量进行求和计算。传统实现方式通常需要编写脚本代码&#xff0c;增加了开…

LBE-LEX系列工业语音播放器|预警播报器|喇叭蜂鸣器的上位机配置操作说明

LBE-LEX系列工业语音播放器|预警播报器|喇叭蜂鸣器专为工业环境精心打造&#xff0c;完美适配AGV和无人叉车。同时&#xff0c;集成以太网与语音合成技术&#xff0c;为各类高级系统&#xff08;如MES、调度系统、库位管理、立库等&#xff09;提供高效便捷的语音交互体验。 L…

(LeetCode 每日一题) 3442. 奇偶频次间的最大差值 I (哈希、字符串)

题目&#xff1a;3442. 奇偶频次间的最大差值 I 思路 &#xff1a;哈希&#xff0c;时间复杂度0(n)。 用哈希表来记录每个字符串中字符的分布情况&#xff0c;哈希表这里用数组即可实现。 C版本&#xff1a; class Solution { public:int maxDifference(string s) {int a[26]…

【大模型RAG】拍照搜题技术架构速览:三层管道、两级检索、兜底大模型

摘要 拍照搜题系统采用“三层管道&#xff08;多模态 OCR → 语义检索 → 答案渲染&#xff09;、两级检索&#xff08;倒排 BM25 向量 HNSW&#xff09;并以大语言模型兜底”的整体框架&#xff1a; 多模态 OCR 层 将题目图片经过超分、去噪、倾斜校正后&#xff0c;分别用…

【Axure高保真原型】引导弹窗

今天和大家中分享引导弹窗的原型模板&#xff0c;载入页面后&#xff0c;会显示引导弹窗&#xff0c;适用于引导用户使用页面&#xff0c;点击完成后&#xff0c;会显示下一个引导弹窗&#xff0c;直至最后一个引导弹窗完成后进入首页。具体效果可以点击下方视频观看或打开下方…

接口测试中缓存处理策略

在接口测试中&#xff0c;缓存处理策略是一个关键环节&#xff0c;直接影响测试结果的准确性和可靠性。合理的缓存处理策略能够确保测试环境的一致性&#xff0c;避免因缓存数据导致的测试偏差。以下是接口测试中常见的缓存处理策略及其详细说明&#xff1a; 一、缓存处理的核…

龙虎榜——20250610

上证指数放量收阴线&#xff0c;个股多数下跌&#xff0c;盘中受消息影响大幅波动。 深证指数放量收阴线形成顶分型&#xff0c;指数短线有调整的需求&#xff0c;大概需要一两天。 2025年6月10日龙虎榜行业方向分析 1. 金融科技 代表标的&#xff1a;御银股份、雄帝科技 驱动…

观成科技:隐蔽隧道工具Ligolo-ng加密流量分析

1.工具介绍 Ligolo-ng是一款由go编写的高效隧道工具&#xff0c;该工具基于TUN接口实现其功能&#xff0c;利用反向TCP/TLS连接建立一条隐蔽的通信信道&#xff0c;支持使用Let’s Encrypt自动生成证书。Ligolo-ng的通信隐蔽性体现在其支持多种连接方式&#xff0c;适应复杂网…

铭豹扩展坞 USB转网口 突然无法识别解决方法

当 USB 转网口扩展坞在一台笔记本上无法识别,但在其他电脑上正常工作时,问题通常出在笔记本自身或其与扩展坞的兼容性上。以下是系统化的定位思路和排查步骤,帮助你快速找到故障原因: 背景: 一个M-pard(铭豹)扩展坞的网卡突然无法识别了,扩展出来的三个USB接口正常。…

未来机器人的大脑:如何用神经网络模拟器实现更智能的决策?

编辑&#xff1a;陈萍萍的公主一点人工一点智能 未来机器人的大脑&#xff1a;如何用神经网络模拟器实现更智能的决策&#xff1f;RWM通过双自回归机制有效解决了复合误差、部分可观测性和随机动力学等关键挑战&#xff0c;在不依赖领域特定归纳偏见的条件下实现了卓越的预测准…

Linux应用开发之网络套接字编程(实例篇)

服务端与客户端单连接 服务端代码 #include <sys/socket.h> #include <sys/types.h> #include <netinet/in.h> #include <stdio.h> #include <stdlib.h> #include <string.h> #include <arpa/inet.h> #include <pthread.h> …

华为云AI开发平台ModelArts

华为云ModelArts&#xff1a;重塑AI开发流程的“智能引擎”与“创新加速器”&#xff01; 在人工智能浪潮席卷全球的2025年&#xff0c;企业拥抱AI的意愿空前高涨&#xff0c;但技术门槛高、流程复杂、资源投入巨大的现实&#xff0c;却让许多创新构想止步于实验室。数据科学家…

深度学习在微纳光子学中的应用

深度学习在微纳光子学中的主要应用方向 深度学习与微纳光子学的结合主要集中在以下几个方向&#xff1a; 逆向设计 通过神经网络快速预测微纳结构的光学响应&#xff0c;替代传统耗时的数值模拟方法。例如设计超表面、光子晶体等结构。 特征提取与优化 从复杂的光学数据中自…