当前位置:   article > 正文

使用 Amazon Bedrock 和 Amazon SageMaker,开启全新的生成式 AI “工作年”!

sagemaker studio 与bedrock

81eecbbc25983edb2d544c9e2cfa66e2.gif

先祝各位开发者们:开工大吉,开发顺利!

现如今 AIGC 爆火出圈,其智能化、人性化的交互方式和惊人的创作能力,让人们对 AI 的未来充满期待。这种以创造力和智慧而非纯计算力渐长的 AI,正在缩小人与机器的界限,展示出令人欣喜的未来景象。其不仅被技术和产业界竞相追逐,让全球各大科技企业都在积极拥抱 AIGC,不断推出相关的技术、平台和应用。同时,AI 也引发全民关注,茶余饭后人们都在讨论 AI 会为工作、生活带来哪些改变。

那么,AIGC 究竟是什么?应用场景都有哪些?

AIGC(AI-Generated Content,人工智能生产内容)代表 AI 技术发展的新趋势,通过大量的训练数据和生成算法模型,自动生成文本、图片、音乐、视频、3D 交互内容等各种形式的内容。换言之,AIGC 正在加速成为 AI 领域的商业新边界。AIGC 如何工程化落地,也是我们一直探索的方向。

为了让用户更清晰地理解和掌握 AIGC 的使用,我们基于营销场景,构建了端到端的 AIGC 解决方案。从前端页面,后端处理,到 AI 模型调研,完整地提供了每一步实现方式(包括源代码和注释)。

下面让我们开启 AIGC 之旅。

01

价值驱动 — 业务聚焦

AIGC 作为当下最热门的技术方向,其中文本生成、图像生成也是目前工程化最成熟的两大类,可以广泛服务于各个行业的诸多业务场景。来源于 2023 年 2 月的 IDC 全球 CIO 快速调研结果:

  • 金融行业、电商零售、能源行业、医疗行业、法律行业头部机构会在 1 年内尝试引入大模型以及生成式 AI 能力;

  • 首先在相对成熟的场景中引入;

  • 驱动力来源于竞争压力,希望获取先发竞争优势。

  • 过去 5 年部署的 AI 应用,都有可能被新一代 AI 更新换代。

本文我们针对“营销应用”和“设计应用”两个方向进行展开。

4644536937e2e68862d4a91acab6a989.png

业务场景分类

业务场景又细分为:文档和文案生成, 产品创意设计, 产品营销素材生成三部分。接下来,我们逐一介绍三个场景。

1. 文档和文案生成

营销文案的创作,是频繁且重复的工作,需要耗费大量的人力成本。而 AIGC 生于互联网,且更懂互联网,只要提供产品亮点,提示词(Prompt),即可由大语言模型(LLM)帮助我们完成。

下面就是几个营销文案样例。输入提示词,并选择期望的文案风格即可。

5c9cbaee98f6cad5a0bb2fa29b3670c8.png

2. 产品创意设计

自 2022 年 8 月,Stable Diffusion 的首次发布,即引爆了整个互联网。从一张骑马的宇航员,到无处不在的二次元深渊橘。人们通过各种 prompt,来完成无限的艺术想象。

随着更多人的关注和贡献,也有越来越多的微调模型,可以提供细分领域的场景。下图就是通过工业设计风格的模型,设计出的产品创意图。也可以通过线稿,生成产品设计图片,这可以大大降低设计师的绘画成本。

55e8c0a5f2bd1da242876b335ede1073.png

3. 产品营销素材生成

在创意设计之外,产品背景更换,也是 AI 助力营销场景中,特别有价值的部分。根据不同的风格需求,更换对应的背景,可以大大降低实景拍摄的成本和实效性。也可以让提供给终端客户,根据个性化需求,在不同背景下,即时预览产品效果。增加购买成功率。

下面场景中,左侧是实拍图片,右侧是 AIGC 背景更换后效果。

728cab0037fde7c46eeed98a8fbb6d02.png

02

深入浅出 — 原理解析

在初步了解了 AIGC 在业务场景的能力之后,我们从技术角度,针对每一个环节,进行详细的讲解。希望能通过本文,使读者有一个清晰的 AI 实施架构,并能根据文章的思路,结合到实际生产中。

本文就以下面几个维度,逐项开展:

  1. 文档和文案生成详解

  2. 产品创意设计详解

  3. 产品营销素材生成详解

  4. 前端应用 UI 代码解析

  5. 应用服务端代码解析

  6. 基于Amazon Bedrock的营销场景应用

注释: 为方便大家阅读,每小结内容结构为: Web UI 截图 + 技术架构图 + 源代码解析

为了完整的感受 AIGC 营销场景,且更贴近生产效果。我们开发了一个 Web 页面,可以端到端的理解每一个技术环节。

Web 首页展示效果

adbd572b4e8abffa600afccd8fb8d333.png

1. 整体架构介绍

首先我们介绍一下整个项目的模型调用架构。整个架构是基于 Amazon SageMaker 进行的模型环境部署,通常是把模型和推理代码上传到 S3 存储桶,也可以直接从 HuggingFace 直接下载。

架构图介绍

1.1 使用 Amazon SageMaker 的 Notebook 上传自定义代码到 S3 并完成部署,包含如下模型:

  • ChatGLM2 模型,使用了 Amazon SageMaker LMI 部署,模型从 HuggingFace 下载

  • Product Design Model(minimalism-eddiemauro),使用了 Amazon SageMaker LMI 部署,模型从 S3 存储桶下载

  • Segment Anything Model(SAM),使用 Amazon SageMaker 的 PyTorch 模型部署,模型从 S3 存储桶下载

  • Stable Diffusion 2 Inpaiting Model,使用了 Amazon SageMaker LMI 部署,模型从 HuggingFace 下载

1.2 使用 Amazon Bedrock 托管的基础模型,完成创意文案和创意图片生成等工作

只需通过相应的 SDK 进行 Amazon Bedrock 的调用,即可实现业务需求。

  • 调用 Amazon Bedrock Claude2,Titan,Llama2 皆可实现创意文案生成。

  • 调用 Amazon Bedrock Stable Diffusion 可以完成创意图片生成。

93c794d82559be2c55a9871a7bfee8a5.png

2. 营销文案页

在 Web 端,根据需求,提供商品描述,以及文案风格。会生成相应的文案。更详细的提示词(Prompt)会获取更准确的文案内容。

f2ee7afac14e2baa21044479c983ace2.png

我们以一个帐篷为例来测试营销文案的撰写。

  • 商品描述(提示词)

驴友牌,帐篷,颜色鲜艳,轻便,抗风,抗雨,高山帐,海拔 5000 米

  • 风格选择:小红书

经过后台转换,提交给模型的提示词为:

请根据下面的内容写一段小红书的种草文案: 驴友牌,帐篷,颜色鲜艳,轻便,抗风,抗雨,高山帐,海拔 5000 米

  • 生成文案结果为:

驴友牌帐篷,绝对是户外探险的必备神器!这款帐篷具有鲜艳的颜色,轻便且抗风抗雨,非常适合在高山帐中使用。帐篷的尺寸适中,既可以容纳两个人,也可以容纳多人,非常适合团队出行。帐篷还带有通风口和透气窗,让您的睡眠更加舒适。帐篷还具有高山帐的特点,海拔 5000 米的高山气候恶劣,但驴友牌的帐篷可以抵御风雨,让您安心入睡。驴友牌帐篷是一款高品质的户外产品,具有出色的性能和实用性。如果您正在寻找一款高品质的帐篷,不妨考虑一下驴友牌,相信您一定不会失望!

  • 多轮对话

  • 如果希望对生成结果再加工,可以继续在商品描述中继续输入提示词:

突出可以在喜马拉雅山使用

  • 由于是多轮对话,后台提交无需对提示词进行继续加工,直接提交整个对话历史,此时生成文案结果为:

喜马拉雅山脉的顶峰,驴友牌帐篷助您轻松应对各种恶劣天气!这款帐篷具有鲜艳的颜色,轻便且抗风抗雨,非常适合在高山帐中使用。 帐篷的尺寸适中,既可以容纳两个人,也可以容纳多人,非常适合团队出行。帐篷还带有通风口和透气窗,让您的睡眠更加舒适。驴友牌帐篷还具有高山帐的特点,在海拔 5000 米的高山气候恶劣的情况下,驴友牌的帐篷可以抵御风雨,让您安心入睡。驴友牌帐篷是一款高品质的户外产品,具有出色的性能和实用性。作为您喜马拉雅山之旅的伙伴,驴友牌帐篷助您轻松应对各种恶劣天气,让您的探险之旅更加难忘!

您还可以继续输入,让 AI 继续写出您满意的内容。

2.1 大模型推理镜像 LMI

Large Model Inference(LMI)是用于大模型推理优化的镜像,该镜像包含了以下特性:

  • 通过 DJL Serving(基于 java 开发的高性能后端框架)暴露 HTTP 模型终端节点

  • 包含多种大模型推理优化引擎(DeepSpeed inference,FasterTransformer,Hugging Face Accelerate 等),从而降低延迟,提升吞吐

  • Tensor Parallel,支持将大模型拆分到多张 GPU 卡上实现推理过程的模型并行

  • 支持模型量化(GPTQ,Smoothquant 等),Attention 层计算优化如 Flash Attention 和 Paged Attention 等特性

  • 推理支持流式输出

  • 内置 s5cmd 高性能 S3 传输工具,从而实现大模型文件的快速下载

在 Amazon SageMaker 上使用 LMI 镜像非常简单,只需要提供 LMI 配置文件(serving.properties)与推理代码(model.py)即可。以下是示例代码:

Text

  1. engine=Python
  2. option.tensor_parallel_degree=1
  3. option.enable_streaming=True
  4. option.predict_timeout=240
  5. option.model_id=THUDM/chatglm2-6b

其中 engine 表示推理引擎,本示例中用的是 Hugging Face Accelerate,将 enging 指定为 Python 即可。

tensor_parallel_degree 表示 TP 并行度,本文使用一张 GPU 卡进行演示,因此将该参数设置为 1,实际参数需要根据业务需求进行评估。

enable_streaming 表示是否启用流式输出,可以将 token 以流式的方式返回给应用程序,提升用户体验。model_id 指的是模型在 HuggingFace 上的 ID,部署时 LMI 会通过 model_id 下载模型。此外,若用户已将模型上传至 S3,则可以将 s3url 设置为模型所在的路径,LMI 会使用 s5cmd 直接将 S3 上的模型下载至容器环境。更多可配置参数和示例可以参考文档:

https://docs.djl.ai/docs/demos/aws/sagemaker/large-model-inference/sample-llm/rollingbatch_llama_7b_customized_preprocessing.html

model.py

 Python 

  1. from djl_python import Input, Output
  2. import os
  3. import torch
  4. from transformers import AutoTokenizer, AutoModel
  5. from typing import Any, Dict, Tuple
  6. import warnings
  7. import json
  8. model = None
  9. tokenizer = None
  10. def get_model(properties):
  11.    model_name = properties["model_id"]
  12.    local_rank = int(os.getenv("LOCAL_RANK", "0"))
  13.    model = AutoModel.from_pretrained(model_name, trust_remote_code=True).half().cuda()
  14.    tokenizer = AutoTokenizer.from_pretrained(model_name, trust_remote_code=True)
  15.    return model, tokenizer
  16. def handle(inputs: Input) -> None:
  17.    global model, tokenizer
  18.    print("print inputs: " + str(inputs) + '.'*20)
  19.    if not model:
  20.        model, tokenizer = get_model(inputs.get_properties())
  21.    if inputs.is_empty():
  22.        # Model server makes an empty call to warmup the model on startup
  23.        return None
  24.    input_map = inputs.get_as_json()
  25.    data = input_map.pop("inputs", input_map)
  26.    parameters = input_map.pop("parameters", {})
  27.    model = model.eval()
  28.    response, history = model.chat(tokenizer, data, **parameters)
  29.    out = {'response': response, 'history': history}
  30.    return Output().add(json.dumps(out))

在 model.py 中,用户需要实现模型加载和推理的逻辑。get_model 函数会从 serving.properties 中拿到 model_id,然后加载模型。handel 函数用于解析应用程序调用模型服务器的输入,执行完推理后,以 json 的方式输出回应用程序。我们可以观察到,其中模型加载,推理用到的类,方法和本地使用 ChatGLM 是一致的,区别主要体现在 Input 和 Output 部分,这是 Model Server 对于输入输出的要求,我们按照这种规范进行编程即可。但在 serving.properties 中,我们用到了流式输出,对于如何处理流式 token 和本示例还有稍许不同,用户可以在 Github 上查看完整的代码逻辑:

https://github.com/aws-east-ai/east-ai-models/blob/main/chinese-llm-sagemaker-lmi/chatglm2/chatglm2_accelerate.ipynb

2.2 营销文案架构图详解

  • 用户通过 Web 页面操作,向后端发出请求。

  • 服务端将用户输入转化为特定的 Prompt 提示词。

  • Amazon SageMaker 接收到输入参数,并把推理结果以流式进行输出。

  • 服务端通将输出流封装为 WebSocket 协议并返回给用户(前端)。

47b38eb150c7bdb831cb2e38cf280cd6.png

2.3 营销文案服务层源码解析

为了调用推理引擎,本方案使用了 Boto3 SDK,加入了中间服务层。在这个中间层,可以加入预处理环节,并且可以将流程串联起来。

另外通过加入 Streaming 方式的调用,提升了用户体验。最新版的 SDK 均已经集成了 Streaming 调用。

使用 invoke_model_with_response_stream 方法可以实现 Streaming 调用,如下代码:

 Python 

  1. smr = boto3.client("sagemaker-runtime")
  2. async def ask_chatglm2(websocket: WebSocket, prompt: str, history):
  3.    parameters = {"max_length": 4092, "temperature": 0.01, "top_p": 0.8}
  4.    response_model = smr.invoke_endpoint_with_response_stream(
  5.        EndpointName="chatglm2-lmi-model",
  6.        Body=json.dumps(
  7.            {"inputs": prompt, "parameters": parameters, "history": history}
  8.        ),
  9.        ContentType="application/json",
  10.    )
  11.    stream = response_model.get("Body")
  12.    if stream:
  13.        chunk_str_full = ""
  14.        for event in stream:
  15.            chunk = event.get("PayloadPart")
  16.            if chunk:
  17.                chunk_str_full = chunk_str_full + chunk.get("Bytes").decode()
  18.                if chunk_str_full.strip().endswith(
  19.                    "]}}"
  20.                ) and chunk_str_full.strip().startswith("{"):
  21.                    chunk_obj = json.loads(chunk_str_full)
  22.                    result = chunk_obj["outputs"]["outputs"]
  23.                    chunk_str_full = ""
  24.                    await websocket.send_text(result)
  25.    result_end = '{"status": "done"}'
  26.    await websocket.send_text(result_end)

上述代码中:

  • 使用 sagemaker-runtime 的 invoke_endpoint_with_response_stream 实现了流式调用。

  • 拿到流式输出之后,通过解析出结果,并且通过 websocket 输出给前端。

  • 由于 ChatGLM 的一次输出结果太长,通常会把 JSON 字符串截断,所以需要找到 ]}} 作为一行的结尾。

  • 整体输出完成之后,输出一个 {"status": "done"} 作为结束,方便前端处理。

3. 创意设计页

创意设计页,可以根据输入的提示词,生成相应的图片。也可以通过上传图片的方式,以图生图。更准确的提示词和反相提示词,生成的图片会更贴近你的构想设计。

例: 输入“帐篷”,及相关反向提示词(默认已经提供部分常用反向提示词)

caec006770452b91ab668a176d6ca8e1.png

即可获得一个帐篷设计图,我们也可以选择图片数量,在生成的图片中,选择最贴近设计思路的一个图片。

3a79f4716092d663ec9912cf3372f2ef.jpeg

3.1 创意设计架构图详解

  • 用户通过 Web 页面操作,向后端发出请求,包含正向提示词,反向提示词等内容。

  • 服务端调用 Amazon Translate 服务将用户输入的非英语的文本翻译为英文。

  • Amazon Translate 返回翻译后的英文文本。

  • 处理输入参数,调用 Amazon SageMaker 进行推理。

  • 返回推理等结果,即生成的图片。

  • 显示给前端 Web 页面。

200fdfebb8ad870d3cf73fa1e165f4a7.png

3.2 创意设计中应用层源码解析

本方案通过 Amazon SageMaker 的 SDK 进行调用(也可以通过 Boto3 进行调用)。

在图片输出场景下,Amazon SageMaker 的输出结果通常会封装成 base64 字符串进行输出,下面的代码获取了输出结果,直接输出到前端。

 Python 

  1. {
  2. from utils.aws import translate
  3. from sagemaker import Predictor, serializers, deserializers
  4. class Paint:
  5.    def __init__(self):
  6.        self.pd_predictor = Predictor(
  7.            endpoint_name="product-design-sd",
  8.            serializer=serializers.JSONSerializer(),
  9.            deserializer=deserializers.JSONDeserializer(),
  10.        )
  11.    def product_design(self, item: dict):
  12.        height = get_int(item, "height", 512)
  13.        width = get_int(item, "width", 512)
  14.        if height % 8 != 0 or width % 8 != 0:
  15.            return {"error": "height or width must be multiple of 8"}
  16.        if height > 1024 or width > 1024:
  17.            return {"error": "height or width must be less than 1024"}
  18.        prompt = translate(get_str(item, "prompt", None))
  19.        negative_prompt = get_str(item, "negative_prompt", None)
  20.        if negative_prompt:
  21.            negative_prompt = translate(negative_prompt)
  22.        else:
  23.            negative_prompt = "low quantity"
  24.        steps = get_int(item, "steps", 30)
  25.        seed = get_int(item, "seed", -1)
  26.        count = get_int(item, "count", 1)
  27.        item["prompt"] = prompt
  28.        item["negative_prompt"] = negative_prompt
  29.        item["steps"] = steps
  30.        item["seed"] = seed
  31.        item["height"] = height
  32.        item["width"] = width
  33.        item["count"] = count
  34.        item["output_image_dir"] = f"s3://{self.s3_bucket}/product-images/"
  35.        return self.pd_predictor.predict(item)
  36. }

上述代码中:

  • 通过 Amazon SageMaker SDK 进行调用推理。

  • 前端可以指定图片尺寸,在 Stable Diffusion 中,此尺寸需要是 8 的倍数,也不能太大,过大的尺寸会输出奇怪的图片,并且显存会溢出。

  • Stable Diffusion 当前版本只支持英文,为了支持多语言,调用了一个 Amazon translate 服务,可以将用户输入的语言翻译成英文。

  • 调用 Amazon SageMaker 推理后,直接将结果输出给前端。

Amazon SageMaker 推理端输出的是 PNG 的图片格式,前端只需要在 base64 的字符串前面加上 data:image/png;base64 , 即可渲染图片。

下面的代码处理了前端的图片渲染:

React JSX

<Image src={'data:image/png;base64,' + responseString} />

4. 背景变焕页

在背景变焕中,我们将现有的营销图片进行上传,并输入产品的描述(图片需要保留部分),和背景提示词(需要重新设计并更换的部分),准确的提示词,也是获得理想结果的必要条件。

例:上传一张赛车照片,输入产品描述“跑车”,背景提示词“乡村,公路,绿化”

95a9d96929b3d1f11b581645a348fc68.png

根据“背景描述”,生成了更换过背景的跑车图片。

a8597108ca0f2563f027f35f134264d3.jpeg

4.1 背景变焕模型介绍

背景变焕使用到了两个模型:Segment Anything Model (SAM) 和 stable-diffusion-2-inpainting

4.1.1 Segment Anything Model(SAM)

分割一切模型,根据点或框等输入提示生成高质量的对象蒙版,并且可用于为图像中的所有对象生成蒙版。基于 1,100 万张图像和 11 亿个掩模的数据集上进行训练,在各种分割任务上具有强大的零样本性能。

4.1.2 stable-diffusion-2-inpainting

  • 根据文本提示生成和修改图像

  • 基于 Stable Diffusion V2,遵循 https://github.com/advimman/lama 蒙版生成策略,额外训练 200k steps 得到的模型

通过这两个模型,实现了抠图(遮罩/蒙板),然后根据提示词更换背景的过程。原理如下图:

cce1269d37d48e8db13465e0c8af2c87.png

4.2 背景变焕架构图详解

  • 用户通过 Web 页面操作,向后端发出请求,包含正向提示词,反向提示词等内容。服务端调用 Amazon Translate 服务将用户输入的非英语的文本翻译为英文。

  • Amazon Translate 返回翻译后的英文文本。

  • 使用提示词(需要保留的内容)调用 SAM 模型进行图像分隔。

  • 模型将分隔的结果(蒙板图片)暂存到 S3,并将地址返回给应用服务端。

  • 输入原图片,蒙板图片以及提示词等参数,调用 SD Inpainting 模型进行图片的重新生成。

  • 图片返回给应用服务端。

  • 最终呈现给前端 Web 页面。

85f90c2e3fb94d7f9edec88a16611c9c.png

代码的编写于前述章节的类似。

5. 基于 Amazon Bedrock 的营销场景应用

在大模型快速发展的今天,越来越多优秀的公司提供了功能众多的模型。让使用者“应接不暇”的同时,也疲于开发和适配新的模型。作为以客户至上为导向的公司,亚马逊云科技也推出了自己的基础模型 Amazon Titan。在 Titan 之外,我们也将来自 AI21 Labs、Anthropic 和 Stability AI 等第三方的基础模型集成进来,通过 Amazon Bedrock 统一提供给大家。在保证客户数据私有化等同时,通过 Amazon Bedrock API 快捷高效的使用基础模型,完成应用的开发,而不需要管理基础设施,和担心数据安全。

接下来,我们详细介绍,如何在营销场景中,通过 Amazon Bedrock 来实现需求。

5.1 基于 Amazon Bedrock 的架构图详解

Amazon Bedrock 的推理非常简单,本质就是一个 API 调用的过程,如下架构图:

8cde38bc5a3620c0695e4aaa1391fbd5.png

5.2 Amazon Bedrock 代码解析

Amazon Bedrock 已经部署了很多优秀的模型。我们只需要通过相应的 SDK 即可进行 Bedrock 的调用。

5.2.1 下面的代码演示了以流式调用 Amazon Bedrock 的 Claude2 语言模型:

  1. {
  2.  
  3. bedrock = boto3.client(service_name="bedrock-runtime")
  4. async def ask_bedrock_claude2(websocket: WebSocket, prompt: str, history):
  5.    modelId = "anthropic.claude-v2"
  6.    accept = "*/*"
  7.    contentType = "application/json"
  8.    body = json.dumps(
  9.        {
  10.            "prompt": claude2_combine_history(history, prompt),
  11.            "max_tokens_to_sample": 2048,
  12.            "temperature": 0.5,
  13.            "top_p": 0.9,
  14.        }
  15.    )
  16.    response = bedrock.invoke_model_with_response_stream(
  17.        body=body,
  18.        modelId=modelId,
  19.        accept=accept,
  20.        contentType=contentType,
  21.    )
  22.    stream = response.get("body")
  23.    if stream:
  24.        for event in stream:
  25.            chunk = event.get("chunk")
  26.            if chunk:
  27.                chunk_obj = json.loads(chunk.get("bytes").decode())
  28.                # print(chunk_obj)
  29.                text = chunk_obj["completion"]
  30.                await websocket.send_text(text)
  31.        result_end = '{"status": "done"}'
  32.        await websocket.send_text(result_end)
  33. }

5.5.2 下面的代码演示了 Bedrock SDXL 的调用:

  1. def bedrock_product_design(self, item: dict):
  2.    height = get_int(item, "height", 512)
  3.    width = get_int(item, "width", 512)
  4.    if height != 512 and width != 512:
  5.        return {"error": "height or width must be 512"}
  6.    if height % 64 != 0 or width % 64 != 0:
  7.        return {"error": "height or width must be multiple of 64"}
  8.    if height > 1024 or width > 1024:
  9.        return {"error": "height or width must be less than 1024"}
  10.    steps = get_int(item, "steps", 30)
  11.    count = get_int(item, "count", 1)
  12.    prompt = translate(get_str(item, "prompt", None))
  13.    negative_prompt = get_str(item, "negative_prompt", None)
  14.    if negative_prompt:
  15.        negative_prompt = translate(negative_prompt)
  16.    style_preset = get_str(item, "style_preset", "3d-model")
  17.    request = json.dumps(
  18.        {
  19.            "text_prompts": (
  20.                [
  21.                    {"text": prompt, "weight": 1.0},
  22.                    {"text": negative_prompt, "weight": -1.0},
  23.                ]
  24.            ),
  25.            "cfg_scale": 10,
  26.            # "seed": -1,
  27.            "steps": steps,
  28.            "style_preset": style_preset,
  29.            "width": width,
  30.            "height": height,
  31.            "count": count,
  32.        }
  33.    )
  34.    modelId = "stability.stable-diffusion-xl"
  35.    response = self.bedrock.invoke_model(body=request, modelId=modelId)
  36.    response_body = json.loads(response.get("body").read())
  37.    return {"images": [response_body["artifacts"][0].get("base64")]}

通过上面的两个代码示例,可以看出 Amazon Bedrock 的调用特点:

  • 需要指定不同的 modelId,这个 modelId 对于每个模型和其版本 是固定的字符串。

  • 模型的调用方式是一致的,具体有两个方法: invoke_model,invoke_model_with_response_stream,有些模型支持流式,有些不支持,具体可以参考文档。

  • 每个模型的入参不一样。

  • 每个模型的输出结果结构不一样。

总结

感谢你的时间,看到这里,相信你对于营销场景的 AIGC 应用,已经有了清晰的理解和认识。或许已经激发出你动手体验的想法。为了方便深入理解和体验,我们也构建了 Workshop。你可以花上 2 个小时,跟随 Workshop 的步骤,深度体验 AIGC 营销场景。相信你会有更深刻的体会——AIGC 挺简单的!

文末,我们也为你呈上了完整的代码,并为每一段代码提供详细注释。

Workshop – 构建端到端生成式 AI 应用

https://catalog.us-east-1.prod.workshops.aws/workshops/4aec1efd-5181-46be-b7b1-2ee9292dae80/zh-CN

源码下载链接

为了精简易读,本文只列出核心代码及讲解。如需要深入研究,可根据需要从 Github 下载,我们公开了全部的源代码(并持续迭代更新)。

  1. CloudFormation 部署脚本亚马逊云科技基础环境部署代码,包含开通亚马逊云科技运行环境,部署应用测代码

    https://github.com/aws-east-ai/east-ai-deploy

  2. 生成式 AI 模型部署脚本基础模型部署,包含如下模型的部署:ChatGLM2,Stable Diffusion,SAM 等

    https://github.com/aws-east-ai/east-ai-models

  3. 前端应用 UI 代码使用 react 开发的前端应用

    https://github.com/aws-east-ai/east-ai-ui

  4. 应用服务端代码使用 Python 开发的应用服务端

    https://github.com/aws-east-ai/east-ai-backend

  5. 为了方便深入理解和体验,我们也构建了 Workshop。 根据 Workshop,可以自己动手,深度体验 AIGC 营销场景

    https://catalog.us-east-1.prod.workshops.aws/workshops/4aec1efd-5181-46be-b7b1-2ee9292dae80/zh-CN

参考文档

  • Amazon SageMaker

    https://aws.amazon.com/cn/sagemaker/

  • Amazon Translate

    https://aws.amazon.com/cn/translate/

  • Amazon SDK for Python (Boto3)

    https://boto3.amazonaws.com/v1/documentation/api/latest/index.html

  • HuggingFace

    https://huggingface.co/

  • FastAPI

    https://fastapi.tiangolo.com/zh/

  • ChatGLM2-6B

    https://github.com/thudm/chatglm2-6b

  • Product Design Model

    https://civitai.com/models/23893/product-design-

  • Stable Diffusion 2 inpainting model

    https://huggingface.co/stabilityai/stable-diffusion-2-inpainting

  • Segment Anything (SAM)

    https://github.com/facebookresearch/segment-anything

上下滑动获取完整地址

本篇作者

73c24eebfa5276fd4073277ca822b873.jpeg

许晓亮

亚马逊云科技解决方案架构师,负责基于亚马逊云科技云计算方案架构的咨询和设计,在国内推广亚马逊云科技云平台技术和各种解决方案。擅长数据库和大数据领域,结合云原生特性,为客户设计高效稳定的全球化系统方案。

a730d69710be948a64db46fd68d6be40.jpeg

谢正伟

亚马逊云科技资深解决方案架构师,致力于云计算方案架构设计、应用和推广。具有 20 多年 IT 行业工作经验,擅长应用的架构和开发,历任全栈开发工程师,应用架构师,系统架构师等。在加入亚马逊云科技之前,曾服务于优酷,阿里巴巴,腾讯等公司。

c245932aee22be563164a12e7cc590ec.jpeg

肖元君

亚马逊云科技解决方案架构师,负责基于亚马逊云科技云计算方案的架构咨询和设计实现,同时致力于数据分析与 AI 的研究与应用。

a9546312938d33ec095a655fc0cb75c1.jpeg

吴万涛

亚马逊云科技解决方案架构师,负责亚马逊云科技云上解决方案架构设计和咨询,十几年 IT 行业从业经历,在网络、应用架构、容器等领域有丰富的经验。

a421c5508a0fd8a4be5893aaab1d8c10.png

梁风飚

亚马逊云科技解决方案架构师经理,服务华东地区独立软件开发商(ISV)和企业客户。有丰富的软件开发,IT 系统架构设计,产品及项目管理经验。

44fdd1bf848975fd44dbfadaa0c78ff6.gif

星标不迷路,开发更极速!

关注后记得星标「亚马逊云开发者」

c786ee2bc15a8e913534da812d598567.gif

听说,点完下面4个按钮

就不会碰到bug了!

a5a34b268dc44a8171c63982919b7ddd.gif

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/我家小花儿/article/detail/366052
推荐阅读
相关标签
  

闽ICP备14008679号