gRPC 参考——服务、方法和消息类型
Olivares AI 在两个位置使用 gRPC,方向彼此相反:
- 引擎的控制平面 API(
olivares.api.v1.ControlPlane)——REST 表面的一个小型 镜像,供偏好类型化 stub 的调用方使用。API 参考中的 REST 契约仍是二者中更广泛的契约。 - 插件传输契约(
olivares.sdk.v1.*)——每个进程外连接器使用的版本化 契约。当你使用 Go 以外的语言构建连接器时, 要实现的就是这个契约。(冻结的传输契约上存在一对模块服务,但它已被弃用, 且从未被提供;模块只在进程内运行。)
本页由服务器交给 gRPC 的注册表生成,而不是从 .proto 文件生成。这个区别正是
重点:只编辑 .proto 而不重新生成,会描述一个二进制文件并未提供的服务;本页背后的
检查会报告这一分歧,而不是发布两者中看起来更漂亮的版本。本页列出的方法就是客户端
能够调用的方法。
以下服务除 GetServerInfo 外的每个方法都要求主体已经认证并获得授权。两个例外是
有意设计的,在此明确列出,避免让你自行发现:GetServerInfo 匿名响应;标准
grpc.health.v1.Health 服务(Check、List、Watch)在同一 listener 上提供,
不要求主体,因为探针或 service mesh 必须能够到达每个 pod 上的它,就像 kubelet
到达 /livez 一样。没有 bearer token 会使请求保持匿名,而提供了无效 token 则会
被拒绝。控制平面服务通过引擎的 gRPC listener 访问;插件服务通过 go-plugin broker
调用(宿主内连接器),或由远程采集器通过双向 TLS 的 gRPC 调用。请使用
配置参考中的 OLIVARES_* 变量配置 listener。
引擎和插件宿主在 7 个服务中注册 29 个 RPC。下表读取自服务器交给 gRPC 的 生成注册表,因此这里列出的方法就是客户端能够调用的方法。
olivares.api.v1.ControlPlane
Section titled “olivares.api.v1.ControlPlane”定义于 apiv1/api.proto;5 个 RPC。
| 方法 | 完整方法 | 类型 | 请求 | 响应 | 用途 |
|---|---|---|---|---|---|
CreateAgent |
/olivares.api.v1.ControlPlane/CreateAgent |
unary | CreateAgentRequest |
Agent |
在清单中注册新 Agent,并返回存储的记录,包括 API 其余部分使用的标识符。 |
GetAgent |
/olivares.api.v1.ControlPlane/GetAgent |
unary | GetAgentRequest |
Agent |
按标识符返回一个 Agent,字段与 REST 清单端点提供的相同。 |
GetServerInfo |
/olivares.api.v1.ControlPlane/GetServerInfo |
unary | Empty |
ServerInfo |
报告版本、版本类型和就绪情况。它是此服务上唯一不需要认证主体的方法。 |
ListAgents |
/olivares.api.v1.ControlPlane/ListAgents |
unary | ListAgentsRequest |
ListAgentsResponse |
逐页列出调用主体可见的 Agent。 |
VerifyAudit |
/olivares.api.v1.ControlPlane/VerifyAudit |
unary | VerifyAuditRequest |
VerifyAuditResponse |
重新验证某一范围内的审计链,并报告哈希是否仍然相连,包括检查点状态。 |
olivares.sdk.v1.ContentSourceService
Section titled “olivares.sdk.v1.ContentSourceService”定义于 olivaresv1/v1.proto;7 个 RPC。
| 方法 | 完整方法 | 类型 | 请求 | 响应 | 用途 |
|---|---|---|---|---|---|
Close |
/olivares.sdk.v1.ContentSourceService/Close |
unary | Empty |
Empty |
结束由 Open 打开的会话,并释放连接器为该会话持有的所有内容。 |
DeltaList |
/olivares.sdk.v1.ContentSourceService/DeltaList |
server-streaming | ContentDeltaRequest |
ContentChange (stream) |
流式传输游标之后的变化。仅在连接器声明 content.delta 能力时调用。 |
Describe |
/olivares.sdk.v1.ContentSourceService/Describe |
unary | Empty |
DescribeResponse |
返回连接器描述符:身份、配置字段和声明的能力。 |
Fetch |
/olivares.sdk.v1.ContentSourceService/Fetch |
unary | ContentFetchRequest |
ContentDocument |
返回宿主从 List 流中选出的引用所对应的一份文档正文和元数据。 |
FetchACL |
/olivares.sdk.v1.ContentSourceService/FetchACL |
unary | ContentFetchRequest |
ContentACLResult |
返回治理一份文档的权限引用。空结果表示应用知识库默认值。 |
List |
/olivares.sdk.v1.ContentSourceService/List |
server-streaming | ContentListRequest |
ContentDocRef (stream) |
每次一页流式传输文档引用,并受宿主传入的上限约束,使语料库无法在一次调用中全部载入宿主内存。 |
Open |
/olivares.sdk.v1.ContentSourceService/Open |
unary | OpenRequest |
Empty |
在进行任何内容调用前,使用宿主提供的配置启动会话。 |
olivares.sdk.v1.HostService
Section titled “olivares.sdk.v1.HostService”定义于 olivaresv1/v1.proto;3 个 RPC。
| 方法 | 完整方法 | 类型 | 请求 | 响应 | 用途 |
|---|---|---|---|---|---|
Log |
/olivares.sdk.v1.HostService/Log |
unary | LogRecord |
Empty |
随从未接线的进程外模块传输一并弃用:没有任何东西提供 HostService。原本应通过引擎写入一条结构化日志记录,使进程外模块与进程内模块写入同一位置。 |
Publish |
/olivares.sdk.v1.HostService/Publish |
unary | Event |
Empty |
随从未接线的进程外模块传输一并弃用:没有任何东西提供 HostService。原本应代表进程外模块在引擎总线上发布一个事件。 |
Subscribe |
/olivares.sdk.v1.HostService/Subscribe |
server-streaming | SubscribeRequest |
Event (stream) |
随从未接线的进程外模块传输一并弃用:没有任何东西提供 HostService。原本应将总线事件流式传给模块,并按请求的事件类型过滤;空过滤器表示所有类型。 |
olivares.sdk.v1.IngestService
Section titled “olivares.sdk.v1.IngestService”定义于 olivaresv1/v1.proto;1 个 RPC。
| 方法 | 完整方法 | 类型 | 请求 | 响应 | 用途 |
|---|---|---|---|---|---|
Push |
/olivares.sdk.v1.IngestService/Push |
client-streaming | IngestEnvelope (stream) |
IngestSummary |
接收采集守护进程推送的观测流,将每一项提升到事件总线,并在流结束时返回摘要。 |
olivares.sdk.v1.ModuleService
Section titled “olivares.sdk.v1.ModuleService”定义于 olivaresv1/v1.proto;4 个 RPC。
| 方法 | 完整方法 | 类型 | 请求 | 响应 | 用途 |
|---|---|---|---|---|---|
Describe |
/olivares.sdk.v1.ModuleService/Describe |
unary | Empty |
DescribeResponse |
随从未接线的进程外模块传输一并弃用:没有任何宿主分发 ModuleService。原本应返回模块描述符:模块身份及其接受的配置。 |
Init |
/olivares.sdk.v1.ModuleService/Init |
unary | InitRequest |
Empty |
随从未接线的进程外模块传输一并弃用:没有任何宿主分发 ModuleService。原本应将配置交给模块,让它在任何内容启动前做好准备。 |
Start |
/olivares.sdk.v1.ModuleService/Start |
unary | Empty |
Empty |
随从未接线的进程外模块传输一并弃用:没有任何宿主分发 ModuleService。原本应在 Init 成功后启动模块工作。 |
Stop |
/olivares.sdk.v1.ModuleService/Stop |
unary | Empty |
Empty |
随从未接线的进程外模块传输一并弃用:没有任何宿主分发 ModuleService。原本应停止模块,并允许它释放持有的内容。 |
olivares.sdk.v1.OutputService
Section titled “olivares.sdk.v1.OutputService”定义于 olivaresv1/v1.proto;4 个 RPC。
| 方法 | 完整方法 | 类型 | 请求 | 响应 | 用途 |
|---|---|---|---|---|---|
Close |
/olivares.sdk.v1.OutputService/Close |
unary | Empty |
Empty |
结束由 Open 打开的会话,并释放连接器为该会话持有的所有内容。 |
Describe |
/olivares.sdk.v1.OutputService/Describe |
unary | Empty |
DescribeResponse |
返回连接器描述符:身份、配置字段和声明的能力。 |
Notify |
/olivares.sdk.v1.OutputService/Notify |
unary | NotifyRequest |
NotifyResponse |
将一条通知投递到目的地,并报告目的地的处理结果;该结果决定宿主是否重试。 |
Open |
/olivares.sdk.v1.OutputService/Open |
unary | OpenRequest |
Empty |
在任何投递前,使用宿主提供的配置启动会话。 |
olivares.sdk.v1.SourceService
Section titled “olivares.sdk.v1.SourceService”定义于 olivaresv1/v1.proto;5 个 RPC。
| 方法 | 完整方法 | 类型 | 请求 | 响应 | 用途 |
|---|---|---|---|---|---|
Close |
/olivares.sdk.v1.SourceService/Close |
unary | Empty |
Empty |
结束由 Open 打开的会话,并释放连接器为该会话持有的所有内容。 |
Describe |
/olivares.sdk.v1.SourceService/Describe |
unary | Empty |
DescribeResponse |
返回连接器描述符:身份、配置字段和声明的能力。 |
Gather |
/olivares.sdk.v1.SourceService/Gather |
server-streaming | Empty |
Observation (stream) |
将观测流式传给宿主,由宿主把每一项提升到事件总线。批处理运行完成或宿主取消时,流会结束。 |
GatherInventory |
/olivares.sdk.v1.SourceService/GatherInventory |
server-streaming | GatherInventoryRequest |
Observation (stream) |
仅针对已协商的 inventory-coverage-v1 能力,流式传输连接器的清单观测;其他任何能力都会被拒绝,已取消的流绝不会报告成功。 |
Open |
/olivares.sdk.v1.SourceService/Open |
unary | OpenRequest |
Empty |
在采集任何观测前,使用宿主提供的配置启动会话。 |
表格给出了每个请求和响应消息的名称;它们的字段声明在各服务旁列出的 .proto
文件中。这些文件随仓库发布,也是生成 stub 的来源。阅读前有两条惯例值得了解:
- 词汇字段是字符串,不是封闭 enum——访问模式、信号来源、置信度、严重性和 事件类型。第三方连接器无需等待 SDK 发布,即可引入自己的信号来源。
- Payload 形态是封闭的。
Observation或Event的 payload 是已知消息类型的oneof,另加一个供模块定义事件 payload 使用的 JSON fallback。无法识别的 payload 是契约错误;不会被静默丢弃。
.proto 文件就是契约。插件契约请让所用语言的 protobuf 工具链指向
sdk/plugin/proto/olivaresv1/v1.proto;控制平面镜像则指向
core/api/proto/apiv1/api.proto。Go 和 TypeScript 的现成客户端在
使用客户端 SDK中说明。