AWS Bedrock 过程

这些过程利用了 Amazon Bedrock API.

以下是所有可用 Aws Bedrock 过程的列表

名称 描述

apoc.ml.bedrock.custom(body, $config)

创建可自定义的 Bedrock API 调用

apoc.ml.bedrock.list($config)

获取基础模型或自定义模型列表

apoc.ml.bedrock.embedding(texts, $config)

创建 API 调用以生成嵌入

apoc.ml.bedrock.chat(messages, $config)

创建聊天完成 API 调用

apoc.ml.bedrock.completion(prompt, $config)

创建文本完成 API 调用

apoc.ml.bedrock.image(body, $config)

创建 API 调用以获取图像

所有过程都利用了 apoc.ml.bedrock.custom 过程,并支持相同的配置参数,但与 custom 过程不同,它们有一些不同的默认参数和模型 ID。

此外,返回的数据与调用的 API 一致,而不是作为结果返回泛型 Object

配置

表 1. 配置参数
名称 类型 默认值 描述

keyId

字符串

null

AWS 密钥 ID。我们也可以通过 apoc.conf 使用密钥 apoc.aws.key.id 来评估它。作为 keyId-secretKey 对的替代方案,我们可以通过 headers 配置直接传递 aws V4 签名

secretKey

字符串

null

AWS 秘密访问密钥。我们也可以通过 apoc.conf 使用密钥 apoc.aws.secret.id 来评估它。作为 keyId-secretKey 对的替代方案,我们可以通过 headers 配置直接传递 aws V4 签名

region

字符串

us-east-1

AWS 区域

endpoint

字符串

见下文

AWS 端点。

method

字符串

"POST" (或使用 apoc.ml.bedrock.list 过程的 "GET"

HTTP 方法

headers

Map<String, Object>

{Content-Type: application/json', Accept, '*/*'}

HTTP 标头

model

字符串

见下文

(此配置在 bedrock.list 过程中被忽略。)Bedrock 模型

path

字符串

"foundation-models"

(仅在 bedrock.list 中有效)端点路径。它将创建一个类型的端点 https://bedrock.<regionConfigValue>.amazonaws.com/<path>;,即,使用默认值 https://bedrock.us-east-1.amazonaws.com/foundation-models

openAICompatible

字符串

false

要传递与 OpenAI Chat Completions API 兼容的正文请求,使用 apoc.ml.bedrock.chat,例如:{role:"system", content:"Only answer with a single word"} ,{role:"user", content:"What planet do humans live on?"}

endpoint 配置优先于 model 配置。在所有过程中(bedrock.list 除外),默认的 endpoint"https://bedrock-runtime.<regionConfigValue>.amazonaws.com/model/<modelConfigValue>/invoke"。因此,使用默认的 region 配置,即 "us-east-1",默认的 endpoint"https://bedrock-runtime.us-east-1.amazonaws.com/model/<modelConfigValue>/invoke"

如果我们使用 ml.bedrock.custom 过程,则必须配置 <modelConfigValue> 部分,而对于 bedrock.chatbedrock.completionbedrock.embeddingbedrock.image,其默认值为 "anthropic.claude-v2"、"ai21.j2-ultra-v1"、"anthropic.claude-v2" 和 "stability.stable-diffusion-xl-v0"。

身份验证设置

要对 bedrock 服务进行身份验证,我们可以在 apoc.conf 文件中设置以下条目。

apoc.conf
apoc.aws.key.id=<AWS Key ID>
apoc.aws.secret.key=<AWS Secret Access Key>

或者,我们可以将它们设置为 $config 参数,即:{keyId: '<AWS Key ID>', secretKey:'<AWS Secret Access Key>'}

或者,我们也可以使用 header 参数放置授权标头,例如 {header: {Authorization: 'AWS4-HMAC-SHA256 <CredentialAndSignature..>', …​其他条目…​} }

请注意,默认的 Content-Type: application/jsonAccept: */* 标头条目始终传递给 http 请求,除非通过配置 header 覆盖。

在以下示例中,我们假设通过 apoc.conf 设置密钥 ID 和秘密访问密钥。

使用示例

Chat Completion API

此过程 apoc.ml.bedrock.chat 接受助手和用户之间聊天交换的映射列表(带有可选的系统上下文),并将返回流中的下一条消息。

其他配置将传递到 API,使用的默认模型为 anthropic.claude-v2

apoc.ml.bedrock.chat
CALL apoc.ml.bedrock.chat([
    {
        prompt: "\n\nHuman: Hello world\n\nAssistant:",
        max_tokens_to_sample: 50,
        top_k: 250,
        top_p: 1,
        stop_sequences: ["\\n\\nHuman:"]
    }
])
表 2. 结果

{"stop_reason": "stop_sequence","completion": " Hello!"}

我们可以使用配置 openAICompatible: true,使用与 apoc.ml.openai.chat 过程一致的 message 正文请求。使用此配置,prompt 请求将放置在 {content: '<promts>'} 条目中,如果不存在,将具有默认的 "\n\nHuman:"` 前缀和 \n\nAssistant: 后缀。

例如,而不是

apoc.ml.bedrock.chat(使用 openAICompatible: false)
CALL apoc.ml.bedrock.chat(
    [ {prompt: "\n\nHuman: Hello world\n\nAssistant:",max_tokens_to_sample: 200} ]
)

我们可以执行此查询(注意,role:"system" 条目是可选的,它只是为了与 OpenAI 正文保持一致)

apoc.ml.bedrock.chat(使用 openAICompatible: true)
CALL apoc.ml.bedrock.chat([
    {role:"system", content:"Hello world"}
])

文本完成 API

此过程 apoc.ml.bedrock.completion 可以继续/完成给定的文本。其他配置将传递到 API,使用的默认模型为 ai21.j2-ultra-v1

apoc.ml.bedrock.completion
CALL apoc.ml.bedrock.completion('What color is the sky? Answer in one word: ')
表 3. 结果
{
  "id": 1234,
  "completions": [
    {
      "data": {
        "text": "\nBlue",
        "tokens": ["....."]
      },
      "finishReason": {
        "reason": "endoftext"
      }
    }
  ],
  "prompt": {}
}

图像 API

此过程 apoc.ml.bedrock.completion 可以获取 base64 图像。其他配置将传递到 API,使用的默认模型为 stability.stable-diffusion-xl-v0

apoc.ml.bedrock.image
CALL apoc.ml.bedrock.image({
    text_prompts: [{text: "picture of a bird", weight: 1.0}],
    cfg_scale: 5,
    seed: 123,
    steps: 70,
    style_preset: "photographic"
})
表 4. 结果
base64Image

"iVBORw0KGgoAAAANSUhEUgAAAgAAAAIACAIAAAB7GkOtAAABjmVYSWZNTQAqAAAACAAGAQAABAAAAAEAAAIAAQEABAAA…​."

模型列表

CALL apoc.ml.bedrock.list()
表 5. 结果
modelId modelArn modelName providerName responseStreamingSupported customizationsSupported inferenceTypesSupported inputModalities outputModalities

"amazon.titan-tg1-large"

"arn:aws:bedrock:us-east-1::foundation-model/amazon.titan-tg1-large"

"Titan Text Large"

"Amazon"

true

["FINE_TUNING"]

["ON_DEMAND"]

["TEXT"]

["TEXT"]

"amazon.titan-e1t-medium"

"arn:aws:bedrock:us-east-1::foundation-model/amazon.titan-e1t-medium"

"Titan Text Embeddings"

"Amazon"

null

[]

["ON_DEMAND"]

["TEXT"]

["EMBEDDING"]

…​

…​

…​

…​

null

[]

…​

…​

…​

自定义 AWS API 调用

通过 apoc.ml.bedrock.custom,我们可以通过选择 HTTP 方法、端点、区域和附加标头来创建可自定义的 Bedrock API 请求。这对于 调用模型(如果响应与之前的过程不兼容)以及使用任何其他 Bedrock API 都很有用。

例如,我们可以通过执行以下查询来调用 GetModelInvocationLoggingConfiguration API(请注意,body 参数为空,因为 API 没有请求正文)。

CALL apoc.ml.bedrock.custom(null,{
    endpoint: "https://bedrock.us-east-1.amazonaws.com/logging/modelinvocations",
    method: "GET"
})
表 6. 结果

{ "loggingConfig": {"cloudWatchConfig": { …​ }}}