Skip to content

同步管道

同步管道端到端处理非流式 Requests API 调用。它是 GodeX 两条执行路径中较简单的一条:向上游提供者发送单个请求,将响应重建为 OpenAI Responses 格式,验证输出契约,持久化会话,并返回完整的 ResponseObject。理解同步管道是理解更复杂的流式管道的基础。

概览

关注点组件关键文件
管道编排器SyncRequestPipelinesync-request-pipeline.ts:25
提供者交换ProviderExchangeprovider-exchange.ts:25
桥接接口ResponsesBridgebridge.ts:7
运行时装配ResponsesBridgeRuntimeruntime.ts:19
会话持久化saveResponseSessionresponse-session-persistence.ts:5

管道步骤

SyncRequestPipeline.request (sync-request-pipeline.ts:31) 按顺序执行七个步骤:

步骤操作关键代码
1构建提供者请求并调用上游exchange.request(ctx)
2重建响应对象reconstructResponseObject(...)
3验证输出契约validateResponseOutputContract(...)
4记录追踪使用量recordTraceUsage(ctx, response.usage)
5记录完成日志ctx.logger.info(...)
6记录诊断日志logDiagnostics(ctx, ...)
7保存响应会话saveResponseSession(...)

提供者交换

ProviderExchange (provider-exchange.ts:25) 封装了与上游提供者的交互。对于同步请求:

  1. 构建请求buildProviderRequest(ctx, false) 构建提供者特定的聊天补全请求,包括工具规划和输出契约设置 (provider-exchange.ts:73)
  2. Patch 并追踪请求:provider edge 应用 patchRequest,随后 onPatchedRequest 将最终 patched provider 请求写入 trace_requests,并记录一个不携带 body 的 provider.request.prepared 生命周期事件
  3. 调用上游:等待 ctx.provider.request(providerRequest) -- patch 之后的实际 HTTP 调用
  4. 追踪响应:记录同步 provider 响应体
  5. 返回:同时提供原始响应和构建的请求元数据

交换还记录工具决策诊断 (provider-exchange.ts:102) 并在上下文中设置输出契约槽 (provider-exchange.ts:98)。

响应重建

交换返回后,管道使用以下参数调用 reconstructResponseObject (sync-request-pipeline.ts:34):

参数来源
requestIdctx.requestId
responseIdctx.responseId
createdAtctx.createdAt
completedAtMath.floor(Date.now() / 1000)
providerctx.provider.name
modelctx.resolved.model
providerResponse原始提供者响应
accessorctx.provider.spec.response
toolIdentity构建的工具声明
outputContract构建的输出契约计划
echo来自 responseRequestEchoFields 的请求回显字段

回显字段 (response-request-echo.ts:4) 将选定的请求参数镜像回响应对象,包括 instructionstemperaturetoolstool_choice 等许多其他参数。

输出契约验证

重建后,validateResponseOutputContract 检查输出是否满足规划的契约。这在 json_schema 被降级为 json_object 时尤为重要:requiresValidJson 标志会触发对输出文本的 JSON.parse。完整的验证逻辑请参见 Output Contracts

会话持久化

saveResponseSession (response-session-persistence.ts:5) 在 ctx.request.store !== false 时存储响应会话。存储的会话包括:

部分字段
会话元数据idprevious_response_idcreated_atcompleted_atstatus
请求快照inputinstructionsmodeltoolstool_choicereasoningtexttruncation
响应快照idoutputoutput_textusageerrorincomplete_details

会话保存错误会被捕获并以 warn 级别记录,永远不会导致请求失败 (sync-request-pipeline.ts:62)。

运行时装配

ResponsesBridgeRuntime (runtime.ts:19) 创建一个共享的 ProviderExchange 实例,并将其连接到 SyncRequestPipelineStreamPipeline。它实现了 ResponsesBridge 接口:

日志与可观测性

同步管道在关键节点发出结构化日志事件:

事件级别上下文
provider.request.sendingdebugprovider, model, stream=false
provider.response.receiveddebugprovider, model, upstreamDurationMillis
responses.request.completedinfostatus, model, outputCount, durationMillis, usage, cacheHitRatio
session.save.errorwarnrequest_id, response_id, error

追踪记录会把最终 patched 请求体写入 trace_requests,把不携带 body 的 provider.request.prepared 生命周期事件写入 trace_events,通过 provider.response.body 记录同步响应体,并通过 recordTraceUsage 记录使用量指标。

交叉引用

参考