DGS的错误处理

在GraphQL中,通过在响应中添加一个错误块来支持错误报告是很常见的。响应可以同时包含数据和错误,例如,当一些字段被成功解决,但其他字段有错误。有错误的字段被设置为空,并且错误被添加到错误块中。

DGS框架有一个开箱即用的异常处理程序,该程序按照本页面错误规范部分所描述的规范工作。这个异常处理程序处理来自数据提取器的异常。任何 RuntimeException 都会被翻译成 INTERNAL 类型的 GraphQLError。对于一些特定的异常类型,会使用一个更具体的GraphQL错误类型。

image-20220718102438597

当@安全检查失败的时候。当请求的实体(例如基于查询参数)没有被找到时,开发者会抛出这个问题。

映射自定义异常

将应用程序特定的异常映射到有意义的异常回客户端是很有用的。您可以通过注册 DataFetcherExceptionHandler 来做到这一点。确保委托给 DefaultDataFetcherExceptionHandler 类,这是框架的默认异常处理程序。如果你不委托给这个类,你就会失去框架的内置异常处理程序。

以下是自定义异常处理程序实现的示例。

@Component
public class CustomDataFetchingExceptionHandler implements DataFetcherExceptionHandler {

   @Override
   public CompletableFuture<DataFetcherExceptionHandlerResult> handleException(DataFetcherExceptionHandlerParameters handlerParameters) {
      if (handlerParameters.getException() instanceof MyException) {
         Map<String, Object> debugInfo = new HashMap<>();
         debugInfo.put("somefield", "somevalue");

         GraphQLError graphqlError = TypedGraphQLError.newInternalErrorBuilder()
                 .message("This custom thing went wrong!")
                 .debugInfo(debugInfo)
                 .path(handlerParameters.getPath()).build();

         DataFetcherExceptionHandlerResult result = DataFetcherExceptionHandlerResult.newResult()
                 .error(graphqlError)
                 .build();

         return CompletableFuture.completedFuture(result);
      } else {
         return DataFetcherExceptionHandler.super.handleException(handlerParameters);
      }
   }
}

以下数据提取器抛出 MyException

@DgsComponent
public class HelloDataFetcher {
    @DgsData(parentType = "Query", field = "hello")
    @DgsEnableDataFetcherInstrumentation(false)
    public String hello(DataFetchingEnvironment dfe) {

        throw new MyException();
    }
}

查询 hello 字段会产生以下响应。

{
  "errors": [
    {
      "message": "This custom thing went wrong!",
      "locations": [],
      "path": [
        "hello"
      ],
      "extensions": {
        "errorType": "INTERNAL",
        "debugInfo": {
          "somefield": "somevalue"
        }
      }
    }
  ],
  "data": {
    "hello": null
  }
}

错误规范

对于 GraphQL,我们通常会遇到两类错误:

1、综合错误。这些是意外错误,并不代表最终用户可以修复的情况。这种错误通常适用于许多类型和领域。此类错误出现在 GraphQL 响应的错误数组中。

2、作为数据的错误。这些是对终端用户有参考价值的错误(例如。"这个标题在你的国家不可用 "或 “你的帐户已被暂停”)。这类错误通常是特定的用例,只适用于某些字段或某些字段的子集。这些错误是GraphQL模式的一部分。

GraphQLError 接口

GraphQL 规范对错误的结构提供了最低限度的指导。唯一需要的字段是消息字符串,它没有定义的格式。在 Studio Edge 中,我们希望拥有更强大、更具表现力的合约。这是我们使用的定义

image-20220718104135998

一个代码位置数组,其中每个位置都是一个带有键 line 和 column 的映射,两个自然数都从 1 开始,描述相关语法元素的开头

如果错误与响应中的一个或多个特定字段相关联,则此错误字段会详细说明遇到错误的那些响应字段的路径(这允许客户端识别空结果是故意的还是由运行时错误引起的

"""
Error format as defined in GraphQL Spec
"""
interface GraphQLError {
    message: String! // Required by GraphQL Spec
    locations: [Location] // See GraphQL Spec
    path: [String | Int] // See GraphQL Spec
    extensions: TypedError
}

TypedError 接口

Studio Edge 将 TypedError 定义如下:

image-20220718104327542

枚举式的错误代码,意在对错误进行相当粗略的描述,足以满足客户端的分支逻辑。

枚举,提供关于错误的更多细节,包括它的具体原因(这个枚举的元素可能会改变,这里没有记录)。

发布错误的来源名称(例如,后台服务、DGS、网关、客户端库或客户端应用程序的名称)。

如果该请求包括一个标志,表明它需要调试信息,这个字段包含了额外的信息(如堆栈跟踪或来自上游服务的额外报告)。

包含可能有助于调试错误的额外信息的页面的URI(这可能是此类错误的通用页面,也可能是关于特定错误实例的特定页面)。

ErrorType 枚举

下表显示了可用的 ErrorType 枚举值:

image-20220718104933684
<think>嗯,用户想找关于3DGS(3D Gaussian Splatting)复现的方法、教程或案例。首先,我需要确认用户提到的3DGS具体指的是什么。根据提供的引用内容,3DGS可能涉及3D高斯分布的点云渲染技术,用于地图表示、视觉重定位或风格化处理。接下来,我应该整理现有的引用信息,看看有哪些资源可以帮助用户复现。 引用[1]提到的是3DGS在重定位中的应用,但可能没有直接提供复现方法。引用[2]讨论了高效风格化方法,可能包含训练和渲染的优化技巧,这对复现有帮助。引用[3]的3DGS.cpp项目是一个跨平台的高性能渲染器,使用Vulkan Compute,支持多平台,这可能是一个重要的复现案例,用户需要查看项目地址和教程。引用[4]则提供了官方的Gaussian Splatting仓库的克隆方法,包括递归拉取子模块,确保代码完整,这对正确复现至关重要。 用户可能需要具体的步骤,比如如何搭建环境、获取代码、处理数据以及训练模型。我应该分步骤整理这些信息,确保每个步骤都有对应的引用支持。例如,官方仓库的克隆需要--recursive参数,否则子模块可能缺失,影响编译。此外,3DGS.cpp项目提供了不同平台的编译指南,这对用户来说可能非常实用。 还需要考虑用户可能的实际问题,比如依赖项安装、数据准备(如使用COLMAP处理数据集)、训练参数调整等。另外,相关的问题可能包括性能优化、不同应用场景的实现差异,或者如何处理训练中的常见错误。根据引用,可以推荐用户参考提供的项目教程和官方文档,以及社区资源如GitHub Issues和论坛。 最后,要确保回答结构清晰,步骤明确,引用正确,并且生成的相关问题能引导用户深入了解更多细节。可能的问题包括复现中的常见错误、性能优化方法、与其他技术的结合应用等,这些都需要基于现有的引用内容来设计。</think>### 3DGS复现方法与案例整理 #### 1. **官方基础复现方法** 官方代码库提供完整的3D高斯分布点云渲染与训练框架,复现步骤如下: - **代码获取** ```bash git clone https://github.com/graphdeco-inria/gaussian-splatting.git --recursive ``` 必须添加`--recursive`参数以拉取子模块(如`diff-gaussian-rasterization`和`glm`),否则编译会失败[^4]。 - **环境配置** 需安装CUDA、PyTorch和COLMAP(用于数据预处理)。官方推荐使用Anaconda管理依赖。 - **数据准备** 使用COLMAP对目标场景的多视角图像进行稀疏重建,生成相机位姿和点云数据。 - **训练与渲染** 运行训练脚本生成3D高斯参数,通过可微分渲染优化模型。支持导出点云和渲染结果。 #### 2. **高性能跨平台渲染案例:3DGS.cpp** 针对实际应用需求,社区项目**3DGS.cpp**提供了优化方案: - **核心特性** - 使用Vulkan Compute实现跨平台(Windows/Linux/macOS/iOS/visionOS) - 相比原生实现,渲染效率提升20%以上[^3]。 - **复现步骤** 1. 克隆仓库: ```bash git clone https://gitcode.com/gh_mirrors/3d/3DGS.cpp ``` 2. 安装Vulkan SDK和CMake 3. 编译并运行示例场景 详细教程见项目文档[^3]。 #### 3. **风格化场景快速生成方法** 中科院提出的**StylizedGS**在保持渲染质量的同时缩短训练时间: - **关键技术** - 通过轻量化风格迁移网络减少计算量 - 动态调整高斯分布参数优化风格一致性 训练时间仅为传统方法的30%[^2]。 - **复现资源** 参考论文代码仓库(需关注作者团队公开的GitHub页面)。 --- ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值