AOG 关键概念

在这一节中,我们将介绍 AOG 的关键概念和术语.

AOG 服务和 AOG 服务提供商

AOG 中, 典型的通用 AI 服务例如 chattext-to-image 等被定义为 AOG Service,每个服务都有其标准化的API.

目前, AOG 支持基于HTTP协议的RESTFUL API。 所以这里的API指的是接口(HTTP verb 和 URL),以及通过该接口进行对应服务的请求和响应的格式。

另一方面 AOG Service Provider 是实际提供服务的实体,它实现了 AOG Service 的API。

这与面向对象编程(OOP, Object Oriented Programming)中的抽象接口和具体类概念相似,即 AOG Service 是一种抽象接口,而 AOG Service Provider 是实现该接口的具体类。

实际操作上,一个 AOG Service 可以拥有多个 AOG Service Providers 。一个 AOG Service Provider 也可以提供多个 AOG Services

digraph G {
 rankdir=BT
 compound=true
 label = "AOG Services and Service Providers"
 graph [fontname = "Verdana", fontsize = 10, style="filled", penwidth=0.5]
 node [fontname = "Verdana", fontsize = 10, shape=box, color="#333333", style="filled", penwidth=0.5]


 subgraph cluster_aog_service {
     label = "AOG Services"
     color="#dddddd"
     fillcolor="#eeeeee"

     node[fillcolor="#ffffcc"]

     chat[label="chat"]
     rag_summarize[label="rag/summarize"]
     text_to_image[label="text-to-image"]
 }

 subgraph cluster_aog_service_provider {
     label = "AOG Service Providers"
     color="#dddddd"
     fillcolor="#eeeeee"

     node[fillcolor="#eeffcc"]

     provider_a[label="Remote OpenAI Chat"]
     provider_b[label="Local Ollama Chat"]
     provider_c[label="Local Stable Diffusion"]
 }


 edge[arrowhead=onormal]
 {provider_a, provider_b} -> chat
 {provider_a, provider_b} -> rag_summarize
 provider_c -> text_to_image

}

如上图所示,远程 OpenAI Chat 和本地 Ollama Chat 均为 AOG Service Providers 服务的 chat 。同时,rag/summarize 服务实际上依赖于与 chat 相同的提供商。

AOG 服务详情

一个 AOG Service 包含以下定义属性:

Name

服务的名称。 这是 AOG Service 的字符串类型的ID。因此,每个服务的名称都是唯一的。例如 chat, embed, rag/query, text-to-image, audio/text_to_speech 等。

HybridPolicy

服务的调度策略。在服务层面可以有多种调度策略,我们期望在单个服务拥有多个不同服务提供商时, 可以通过一定的策略来自动选择和切换不同的服务商来提供 AI 服务,这部分目前暂仅支持以下三种策略, 在未来我们期望在调度策略这里加入更多的可能性。 例如 default, always_remote, always_local 等。

RemoteProvider

默认的远端服务提供商的名称,由于我们单个服务可能会有多个不同的远端服务提供商,所以我们需要用户指定 一个默认的远端服务提供商。当然,在我们初次安装远端服务时,我们会自动将当前服务提供商设置为默认远端服务提供商。

LocalProvider

默认的本地服务提供商的名称,由于我们在未来会支持多种本地模型引擎( openvinoollama )等, 和 RemoteProvider 相同,我们同样需要指定一个默认的本地服务提供商。当然,在我们初次安装本地服务时, 我们会自动将当前服务提供商设置为默认本地服务提供商。

AOG 服务提供商详情

ProviderName

服务提供商的名称。

ServiceName

服务名称。表明当前服务提供商提供了哪种服务。

ServiceSource

服务来源。表明服务来源于何处,这里指的是: localremote

Flavor

服务提供商的风格类别。用于区分服务提供商的类别,例如 openaiollamadeepseektencent 等。

Method

服务的调用方式,即 HTTP verb (GET/POST)

URL

服务的实际调用地址,例: http://localhost:11434/api/chat

AuthType

服务的鉴权方式。由于远端 AI 服务基本都需要鉴权才能访问,所以这里我们提供了鉴权支持,例如: none, apikey, token

AuthKey

服务的鉴权信息。根据 AuthType 提供不同的鉴权信息。

Properties

每个 AOG Service 也有一组属性。这些属性用于描述实现服务的实际服务提供商,因此其值因服务提供商而异。

例如, chat 服务有 max_input_tokens 属性,该属性告知上层应用程序可以向底层服务提供商发送的最大token数。对不同的服务提供商,该属性的值也不同。

AOG 应用的 API 风格

AOG 通用规范 中, AOG 定义了 AOG Services 的规范,包括其名称、端口、请求模式、响应模式等。

然而实际上应用开发者和服务提供商很可能并未完全遵守 AOG 的规范,正如文档 解决兼容性问题 所说的。

例如,当调用 chat 服务时,应用程序可能遵循 ollama 的风格,即它会访问类似 /api/chatURL,并在 JSON 体的 options.temperature 中指定 temperature 参数。

然而,响应此请求的底层服务提供商可能是一个类似于 OpenAI 的实现。它期望 URL 为 /v1/chat/completions ,并且 temperature 参数位于 JSON 主体的根部。

ollama 风格的 API 和 openai 风格的 API

chat 服务

ollama 风格

openai 风格

Endpoint

POST /api/chat

POST /v1/chat/completions

Request Schema

见ollama的文档

见openai的文档

Response Schema

见ollama的文档

见openai的文档

Temperature Parameter

options.temperature

temperature

其他

AOG 将这种风格简称为 API FlavorFlavor 。在上例中,应用程序调用 chat 使用 ollama Flavor , 但服务提供商在 openai Flavor 提供服务,他们都没有直接使用 aog Flavor

AOG 会在不同 Flavor 之间进行转换,因此应用程序无需担心服务提供商 API 的细节。详细信息请参阅: 转换 API 风格以实现兼容性.