跳转到内容

gRPC 参考——服务、方法和消息类型

Olivares AI 在两个位置使用 gRPC,方向彼此相反:

  • 引擎的控制平面 APIolivares.api.v1.ControlPlane)——REST 表面的一个小型 镜像,供偏好类型化 stub 的调用方使用。API 参考中的 REST 契约仍是二者中更广泛的契约。
  • 插件传输契约olivares.sdk.v1.*)——每个进程外连接器和模块使用的版本化 契约。当你使用 Go 以外的语言构建连接器时, 要实现的就是这个契约。

本页由服务器交给 gRPC 的注册表生成,而不是从 .proto 文件生成。这个区别正是 重点:只编辑 .proto 而不重新生成,会描述一个二进制文件并未提供的服务;本页背后的 检查会报告这一分歧,而不是发布两者中看起来更漂亮的版本。本页列出的方法就是客户端 能够调用的方法。

以下服务除 GetServerInfo 外的每个方法都要求主体已经认证并获得授权。两个例外是 有意设计的,在此明确列出,避免让你自行发现:GetServerInfo 匿名响应;标准 grpc.health.v1.Health 服务(CheckListWatch)在同一 listener 上提供, 不要求主体,因为探针或 service mesh 必须能够到达每个 pod 上的它,就像 kubelet 到达 /livez 一样。没有 bearer token 会使请求保持匿名,而提供了无效 token 则会 被拒绝。控制平面服务通过引擎的 gRPC listener 访问;插件服务通过 go-plugin broker 调用(宿主内连接器),或由远程采集器通过双向 TLS 的 gRPC 调用。请使用 配置参考中的 OLIVARES_* 变量配置 listener。

引擎和插件宿主在 7 个服务中注册 28 个 RPC。下表读取自服务器交给 gRPC 的 生成注册表,因此这里列出的方法就是客户端能够调用的方法。

定义于 apiv1/api.proto;5 个 RPC。

方法完整方法类型请求响应用途
CreateAgent/olivares.api.v1.ControlPlane/CreateAgentunaryCreateAgentRequestAgent在清单中注册新 Agent,并返回存储的记录,包括 API 其余部分使用的标识符。
GetAgent/olivares.api.v1.ControlPlane/GetAgentunaryGetAgentRequestAgent按标识符返回一个 Agent,字段与 REST 清单端点提供的相同。
GetServerInfo/olivares.api.v1.ControlPlane/GetServerInfounaryEmptyServerInfo报告版本、版本类型和就绪情况。它是此服务上唯一不需要认证主体的方法。
ListAgents/olivares.api.v1.ControlPlane/ListAgentsunaryListAgentsRequestListAgentsResponse逐页列出调用主体可见的 Agent。
VerifyAudit/olivares.api.v1.ControlPlane/VerifyAuditunaryVerifyAuditRequestVerifyAuditResponse重新验证某一范围内的审计链,并报告哈希是否仍然相连,包括检查点状态。

定义于 olivaresv1/v1.proto;7 个 RPC。

方法完整方法类型请求响应用途
Close/olivares.sdk.v1.ContentSourceService/CloseunaryEmptyEmpty结束由 Open 打开的会话,并释放连接器为该会话持有的所有内容。
DeltaList/olivares.sdk.v1.ContentSourceService/DeltaListserver-streamingContentDeltaRequestContentChange (stream)流式传输游标之后的变化。仅在连接器声明 content.delta 能力时调用。
Describe/olivares.sdk.v1.ContentSourceService/DescribeunaryEmptyDescribeResponse返回连接器描述符:身份、配置字段和声明的能力。
Fetch/olivares.sdk.v1.ContentSourceService/FetchunaryContentFetchRequestContentDocument返回宿主从 List 流中选出的引用所对应的一份文档正文和元数据。
FetchACL/olivares.sdk.v1.ContentSourceService/FetchACLunaryContentFetchRequestContentACLResult返回治理一份文档的权限引用。空结果表示应用知识库默认值。
List/olivares.sdk.v1.ContentSourceService/Listserver-streamingContentListRequestContentDocRef (stream)每次一页流式传输文档引用,并受宿主传入的上限约束,使语料库无法在一次调用中全部载入宿主内存。
Open/olivares.sdk.v1.ContentSourceService/OpenunaryOpenRequestEmpty在进行任何内容调用前,使用宿主提供的配置启动会话。

定义于 olivaresv1/v1.proto;3 个 RPC。

方法完整方法类型请求响应用途
Log/olivares.sdk.v1.HostService/LogunaryLogRecordEmpty通过引擎写入一条结构化日志记录,使进程外模块与进程内模块写入同一位置。
Publish/olivares.sdk.v1.HostService/PublishunaryEventEmpty代表进程外模块在引擎总线上发布一个事件。
Subscribe/olivares.sdk.v1.HostService/Subscribeserver-streamingSubscribeRequestEvent (stream)将总线事件流式传给模块,并按模块请求的事件类型过滤。空过滤器表示所有类型。

定义于 olivaresv1/v1.proto;1 个 RPC。

方法完整方法类型请求响应用途
Push/olivares.sdk.v1.IngestService/Pushclient-streamingIngestEnvelope (stream)IngestSummary接收采集守护进程推送的观测流,将每一项提升到事件总线,并在流结束时返回摘要。

定义于 olivaresv1/v1.proto;4 个 RPC。

方法完整方法类型请求响应用途
Describe/olivares.sdk.v1.ModuleService/DescribeunaryEmptyDescribeResponse返回模块描述符:模块身份及其接受的配置。
Init/olivares.sdk.v1.ModuleService/InitunaryInitRequestEmpty将配置交给模块,让它在任何内容启动前做好准备。
Start/olivares.sdk.v1.ModuleService/StartunaryEmptyEmptyInit 成功后启动模块工作。
Stop/olivares.sdk.v1.ModuleService/StopunaryEmptyEmpty停止模块,并允许它释放持有的内容。

定义于 olivaresv1/v1.proto;4 个 RPC。

方法完整方法类型请求响应用途
Close/olivares.sdk.v1.OutputService/CloseunaryEmptyEmpty结束由 Open 打开的会话,并释放连接器为该会话持有的所有内容。
Describe/olivares.sdk.v1.OutputService/DescribeunaryEmptyDescribeResponse返回连接器描述符:身份、配置字段和声明的能力。
Notify/olivares.sdk.v1.OutputService/NotifyunaryNotifyRequestNotifyResponse将一条通知投递到目的地,并报告目的地的处理结果;该结果决定宿主是否重试。
Open/olivares.sdk.v1.OutputService/OpenunaryOpenRequestEmpty在任何投递前,使用宿主提供的配置启动会话。

定义于 olivaresv1/v1.proto;4 个 RPC。

方法完整方法类型请求响应用途
Close/olivares.sdk.v1.SourceService/CloseunaryEmptyEmpty结束由 Open 打开的会话,并释放连接器为该会话持有的所有内容。
Describe/olivares.sdk.v1.SourceService/DescribeunaryEmptyDescribeResponse返回连接器描述符:身份、配置字段和声明的能力。
Gather/olivares.sdk.v1.SourceService/Gatherserver-streamingEmptyObservation (stream)将观测流式传给宿主,由宿主把每一项提升到事件总线。批处理运行完成或宿主取消时,流会结束。
Open/olivares.sdk.v1.SourceService/OpenunaryOpenRequestEmpty在采集任何观测前,使用宿主提供的配置启动会话。

表格给出了每个请求和响应消息的名称;它们的字段声明在各服务旁列出的 .proto 文件中。这些文件随仓库发布,也是生成 stub 的来源。阅读前有两条惯例值得了解:

  • 词汇字段是字符串,不是封闭 enum——访问模式、信号来源、置信度、严重性和 事件类型。第三方连接器无需等待 SDK 发布,即可引入自己的信号来源。
  • Payload 形态是封闭的。 ObservationEvent 的 payload 是已知消息类型的 oneof,另加一个供模块定义事件 payload 使用的 JSON fallback。无法识别的 payload 是契约错误;不会被静默丢弃。

.proto 文件就是契约。插件契约请让所用语言的 protobuf 工具链指向 sdk/plugin/proto/olivaresv1/v1.proto;控制平面镜像则指向 core/api/proto/apiv1/api.proto。Go 和 TypeScript 的现成客户端在 使用客户端 SDK中说明。