AWS Bedrock procedure

这些过程利用 Amazon Bedrock API

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

名称 描述

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

用于创建可自定义的 Bedrock API 调用

apoc.ml.bedrock.list($config)

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

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

用于创建生成 Embedding 的 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

String

null

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

secretKey

String

null

AWS secret access key。我们也可以通过 apoc.conf,使用键 apoc.aws.secret.id 来获取。作为 keyId-secretKey 对的替代方案,我们可以直接通过 headers 配置传递 aws V4 签名

region

String

us-east-1

AWS 区域

endpoint

String

见下文

AWS 端点。

method

String

"POST" (或与 apoc.ml.bedrock.list 过程一起使用时的 "GET")

HTTP 方法

headers

Map<String, Object>

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

HTTP Header

model

String

见下文

(此配置与 bedrock.list 过程一起使用时被忽略。) Bedrock 模型

path

String

"foundation-models"

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

openAICompatible

String

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",默认端点是 "https://bedrock-runtime.us-east-1.amazonaws.com/model/<modelConfigValue>/invoke"

如果我们使用 ml.bedrock.custom 过程,则必须配置 <modelConfigValue> 部分;而对于 bedrock.chat, bedrock.completion, bedrock.embedding, bedrock.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 参数设置 Authorization header,例如:{header: {Authorization: 'AWS4-HMAC-SHA256 <CredentialAndSignature..>', …​other entries…​} }

请注意,默认的 Content-Type: application/jsonAccept: */* 头条目总是传递给 http 请求,除非通过 config header 覆盖。

在以下示例中,我们假设通过 apoc.conf 设置了 Key id 和 Secret Access Key。

使用示例

聊天完成 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!"}

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

例如,代替

apoc.ml.bedrock.chat (with 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 (with 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,我们可以创建一个可自定义的 Bedrock API 请求,选择 HTTP 方法、端点、区域和附加头部。这对于调用模型(如果响应与先前的过程不兼容)和使用任何其他 Bedrock API 都很有用。

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

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

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

© . All rights reserved.