深入调研亚马逊云科技AI平台Amazon Bedrock热门开发功能

devtools/2024/9/23 1:41:38/

国际数据公司(IDC)在2024 年 8 月发布了《 中国大模型平台市场份额, 2023 :大模型元年——初局 》调研报告 。IDC的数据显示,2023年中国大模型平台及相关应用市场规模达惊人的17.65亿元人民币,且科学计算大模型仍处于蓝海市场,市场中有大量的AI相关的市场和岗位需求。根据麦肯锡报告显示,对该领域的人才需求将从目前的100万增长到2030年的600万,这表明在未来AI就业市场仍有大量机会,提前布局学习AI相关技能将提前享受AI带来的红利。

今天小李哥就带大家学习、深入调研来自目前全球市场规模最大的云计算厂商亚马逊云科技AWS推出的大模型平台Amazon Bedrock,学习国际目前最前沿的AI热门技术和方案,沉浸式体验Bedrock一些列的云开发实用功能,并将其应用到日常工作、项目中,提升实操技能的同时加速职场。

方案所需基础知识

Amazon Bedrock 是一项完全托管的服务,通过统一的 API 提供来自 AI21 Labs、Anthropic、Cohere、Meta、Mistral AI、Stability AI 和 Amazon 等领先 AI 公司的高性能基础模型(FMs),同时提供广泛的功能,让开发者能够在确保安全、隐私和负责任 AI 的前提下构建生成式 AI 应用。

使用 Amazon Bedrock,开发者们可以:

  • 轻松地测试、评估开发者的用例在不同基础模型下的表现;
  • 使用微调和检索增强生成(RAG)等技术定制化开发应用程序;
  • 构建可以使用开发者的企业系统和数据源自动执行任务的智能 Agents。

由于 Amazon Bedrock 是 Serverless 的服务,开发者无需管理任何基础设施,并且可以使用开发者已经熟悉其它的亚马逊云科技服务安全地集成和部署生成式 AI 功能到开发者的应用中。

成本预估:

在本实践中,我们主要介绍通过 Amazon Bedrock 基础模型及其使用方法、模型评估、安全围栏等功能。 不同功能模块的价格计费方式不同,具体可以参考亚马逊云科技官方计费模型。

如果大家按照我指导的内容完成本动手实践,其消耗的云服务成本应小于 5 美元(约35元人民币)。

本实践包括的内容

1. 使用控制台和API代码调用的方式与AI大模型交互

2. 利用Amazon Bedrock模型评估功能对大模型性能评估

3. 利用Amazon Bedrock Guardrails功能筛选AI大模型输入、输出内容中的有害内容,构建负责任的AI

功能实践具体步骤

使用控制台和API代码调用的方式与AI大模型交互

1. 进入亚马逊云科技Amazon Bedrock服务主页,

2. 在左侧导航栏,在 Playgrounds 中我们可以看到 Chat, Text, Image 三个功能模块,含义分别为:

  • Chat: 在对话式界面中,轻松尝试各种语言处理任务。您可以体验多种预训练模型。
  • Text: 通过快速迭代,在各种语言处理任务中进行实验,尝试多种预训练模型。
  • Image: 只需向预训练模型提供文字提示,即可轻松生成引人入胜的图像。

3. 我们点击左侧的Chat功能,并点击”Slect Model“选择模型。

4.我们选择Meta最新的AI大模型Llama 3.1 70B,来体验其强大的推理能力和中文处理能力,点击应用(Apply):

5. 接下来我们利用Llama 3.1大模型的生成能力,帮我们设计一个上海2日游的行程。将该问题输入到聊天窗口中,将响应长度调整到 2048(防止返回结果因为 token 限制被截断;UI 上的限制为 2048 token,此模型 API 支持的最大 token 为 8k),点击运行(Run):

6. 我们得到大模型给我们回复的行程计划

**Day 1****上午*** 9:00 am: 开始于上海的标志性建筑 - 东方明珠电视塔( Oriental Pearl Tower),登塔顶俯瞰上海全景。
* 10:30 am: 从东方明珠电视塔步行到浦东陆家嘴金融区,欣赏上海的摩天大楼和繁华都市景象。**下午*** 1:00 pm: 去人民广场(People's Square)附近的南京路步行街,感受上海的商业气息和人流。
* 3:00 pm: 访问上海博物馆(Shanghai Museum),了解上海的历史和文化。**晚上*** 7:00 pm: 去外滩(The Bund)欣赏黄浦江两岸的美景,观看夜晚的灯光秀。
* 9:00 pm: 在外滩附近的餐厅享用上海特色小吃和美食。**Day 2****上午*** 9:00 am: 访问豫园(Yu Garden),欣赏中国古典园林的美景。
* 11:30 am: 去城隍庙(City God Temple)附近的老城厢,感受上海的传统文化和生活气息。**下午*** 1:30 pm: 去法国梧桐街(French Concession)附近的徐汇区,欣赏上海的法式建筑和浪漫气息。
* 4:00 pm: 访问上海自然博物馆(Shanghai Natural History Museum),了解自然科学和生物多样性。**晚上*** 7:00 pm: 去静安寺(Jing'an Temple)附近的宁波路,感受上海的夜生活和娱乐气息。
* 9:00 pm: 结束上海 2 日游的行程,带着美好的回忆离开上海。

7. 同时Llama大模型还可以根据我们的需求生成代码,我们输入框中输入以下问题,生成一个网页爬虫脚本。

Write a short and high-quality python script for the following task, something a very skilled python expert would write. You are writing code for an experienced developer so only add comments for things that are non-obvious. Make sure to include any imports required. NEVER write anything before the ```python``` block. After you are done generating the code and after the ```python``` block, check your work carefully to make sure there are no mistakes, errors, or inconsistencies. If there are errors, list those errors in tags, then generate a new version with those errors fixed. If there are no errors, write "CHECKED: NO ERRORS" in tags. Here is the task: A web scraper that extracts data from multiple pages and stores results in a SQLite database. Double check your work to ensure no errors or inconsistencies.
 

8. 大模型生成以下回复:

import requests
from bs4 import BeautifulSoup
import sqlite3
from urllib.parse import urljoin, urlparse
from concurrent.futures import ThreadPoolExecutor# Database connection
conn = sqlite3.connect('data.db')
cursor = conn.cursor()# Create table if not exists
cursor.execute('''CREATE TABLE IF NOT EXISTS data(id INTEGER PRIMARY KEY, url TEXT, title TEXT, content TEXT)''')
conn.commit()# Base URL and pages to scrape
base_url = 'https://example.com'
pages_to_scrape = ['/page1', '/page2', '/page3']def scrape_page(url):# Send request and get HTML responseresponse = requests.get(urljoin(base_url, url))soup = BeautifulSoup(response.text, 'html.parser')# Extract title and contenttitle = soup.find('h1').text.strip()content = soup.find('div', {'class': 'content'}).text.strip()# Insert data into databasecursor.execute("INSERT INTO data (url, title, content) VALUES (?, ?, ?)",(urljoin(base_url, url), title, content))conn.commit()print(f"Scraped {url}")# Scrape pages concurrently
with ThreadPoolExecutor() as executor:executor.map(scrape_page, pages_to_scrape)# Close database connection
conn.close()# CHECKED: NO ERRORS

9. 同时Amazon Bedrock上还支持多种图片生成大模型,我们以Amazon Titan Image Generator G1为例。在左侧导航栏点击图片(Image)链接,进入图片生成的页面。这里我们点击下方的“Generate images from a text prompt” 选择内置的文本生成图片的示例,输入问题”在桌子上放置的蓝色背包“:

10. 点击运行(Run)。默认情况下,模型会为我们生成 3 张图片,示例结果如下:

11. 接下来我们使用API调用的方式,利用Amazon Boto3 Python SDK调用大模型生成回复。此处我们使用了Amazon Bedrock基于多种模型提供的统一API接口,Amazon Bedrock Converse API。在本代码中,我们为大模型回复提供了文档背景信息,并利用针对RAG场景优化的模型Cohere Command R基于文档内容进行聊天(Document chat)。

import logging
import boto3from botocore.exceptions import ClientErrorlogger = logging.getLogger(__name__)
logging.basicConfig(level=logging.INFO)def stream_conversation(bedrock_client,model_id,messages,system_prompts,inference_config,additional_model_fields):"""Sends messages to a model and streams the response.Args:bedrock_client: The Boto3 Bedrock runtime client.model_id (str): The model ID to use.messages (JSON) : The messages to send.system_prompts (JSON) : The system prompts to send.inference_config (JSON) : The inference configuration to use.additional_model_fields (JSON) : Additional model fields to use.Returns:Nothing."""print("Streaming messages with model %s" % model_id)bedrock_params = {"modelId": model_id,"messages": messages,"inferenceConfig": inference_config,"additionalModelRequestFields": additional_model_fields,}system = [item for item in system_prompts if item.get('text')]if system:bedrock_params['system'] = systemresponse = bedrock_client.converse_stream( **bedrock_params )stream = response.get('stream')resp_text_buf = ''if stream:for event in stream:# print(colored(event, 'red'))if 'messageStart' in event:print(f"\nRole: {event['messageStart']['role']}")if 'contentBlockDelta' in event:delta_types = event['contentBlockDelta']['delta'].keys()if 'text' in delta_types:text_delta = event['contentBlockDelta']['delta']['text']print(colored(text_delta, 'green'), end="")resp_text_buf += text_deltadef main():model_id = "cohere.command-r-v1:0"# Message to send to the model.input_text = "中国的首都是哪里,今天天气如何?"print(colored(f"Question: {input_text}", 'red'))message = {"role": "user","content": [{"text": input_text}]}messages = [message]# System prompts.system_prompts = []# inference parameters to use.temperature = 0.9top_k = 200max_tokens = 2000# Base inference parameters.inference_config = {"temperature": temperature,"maxTokens": max_tokens,}# Additional model inference parameters.additional_model_fields = {"k": top_k,"documents": [{"title": "首都信息", "snippet": "北京是中国的首都,政治文化中心,历史悠久。长城故宫,美食荟萃。"}, {"title": "北京天气", "snippet": "北京今天的天气晴朗,温度26度,微风。"},{"title": "上海天气", "snippet": "上海今天天气多云,28度。"}, ]}try:bedrock_client = boto3.client(service_name='bedrock-runtime')stream_conversation(bedrock_client, model_id, messages,system_prompts, inference_config, additional_model_fields)except ClientError as err:message = err.response['Error']['Message']logger.error("A client error occurred: %s", message)else:print(f"\nFinished streaming messages with model {model_id}.")main()

模型评估 

Amazon Bedrock为用户提供了多种BenchMark测试集,帮助开发者评估模型性能,选择出符合需求的基础模型,衡量模型的准确性、稳健性和有害内容等指标。

1. 点击左侧的模型评估(Model Evaluation),在右侧创建模型评估(Create model evaluation)下拉框中选择自动化评估(Automatic)

2. 评估任务详情页,填入评估名称”Demo“,以及描述”模型评估-demo“,并选择模型”Amazon Titan Text G1“
 3. 选择任务类型为”文本生成“,场景为通用文本生成

4. 指标和数据集选择页面,根据开发者需要选择评估的指标以及数据集。这里我们选择 Toxicity, Robustness, Accuracy 指标,利用内置数据集测试:

5. 将模型评估结果保存在S3存储桶中

 6. 为模型评估测试配置IAM权限,用于访问S3存储桶和特定模型,最后点击Create创建开始评估

7. 等待评估作业完成之后,开发者可以在作业详情页面查看具体的评估结果。结果包括测试Promptt数量和得分。

 大模型安全围栏

接下来我会介绍如何利用Amazon Bedrock功能:安全围栏Guardrails,评估用户与大模型交互时的输入、输出内容,筛选有害内容,提供额外的安全保障层,目的是构建负责任的AI应用。

1. 首先我们进入Guardrails功能,点击Create创建一个围栏。

2. 为围栏起名为”demo“,点击Next

3. 点击Enable Harmful Categories Filters开启围栏,并选择默认过滤等级最高High,对输出内容过滤

4. 点击Enable PromptAttacks Filter开启对输入内容过滤。

 5. 在拒绝讨论的话题页面,添加一个名为 FSI 的话题,在”Definition for topic“输入栏输入我们要拒绝大模型回复的话题,我们输入”投资“等。

6. 在拒绝回复的关键词过滤页面,启用敏感词过滤器,并添加自定义的关键词。

7. 接下来进入到敏感词过滤器,我们点击添加敏感词类型,添加”名字“和”车牌识别代号(VIN)“,选择行为为"阻止回复",大模型回复内容将对该字段内容隐藏。

8. 设置上下文关联性检验页面设置策略,来验证模型响应是否基于参考源并与用户的查询相关,用来过滤模型幻觉。模型会对响应内容评估,当生成内容相关性评估分数小于0.7以及真实性评估小于0.6,模型将拒绝回复。我们最后点击Create创建该围栏。

9.点击我们创建的围栏进入详情页,再点击测试(Test),并输入提示词问题,选择模型以测试模型响应。点击Run运行该测试

 10. 针对我们配置的”拒绝话题“和“敏感信息阻止”设置进行提问,我们可以看到围栏成功阻止了大模型回复。

 11. 我们再对模型源信息真实性、响应和问题相关性测试,发现大模型成功阻止幻觉回复。

以上就是在亚马逊云科技上沉浸式体验大模型平台Amazon Bedrock的交互、模型评估和有害内容筛选功能的全部步骤。欢迎大家关注小李哥的亚马逊云科技AI服务深入调研系列,未来获取更多国际前沿的AWS云开发/云架构方案。 


http://www.ppmy.cn/devtools/103302.html

相关文章

CAD如何批量输出PDF?介绍了三种方式

CAD如何批量输出PDF?在工程设计、建筑制图以及产品设计等领域,CAD软件是不可或缺的工具。随着项目规模的扩大,如何将CAD图纸批量转换成PDF格式以便分享、打印或存档,成为了许多设计师面临的常见问题。下文将介绍三种高效的方法&am…

【功能自动化】自动识别测试用例

1.创建unitWebtours.py 将unitWebtours.py放在test文件夹下 unitWebtours.py 代码实现 from selenium import webdriver from selenium.webdriver.support.select import Select from time import sleep import unittestdriver Noneclass Webtours(unittest.TestCase):clas…

UE5-----Niagara粒子系统

在 Unreal Engine (UE) 中,Niagara 是一个粒子系统和视觉效果编辑器,用于创建高质量的实时粒子效果。Niagara 在 Unreal Engine 4.17 版本中首次推出,取代了之前的粒子系统,旨在提供更强大的性能和更高的灵活性。 Niagara 的主要…

挂个人-CSDN Java优秀内容博主rundreamsFly抄袭

事件起因 今天点开自己的CSDN博客,发现给我推了一篇文章抄袭我自己昨天18点发的文章。 就是这篇,一字不差,博主昵称是:rundreamsFly,账号是rundreams。 抄袭者文章 发布于2024-8-26 19:37:41秒,比我发布…

《重生到现代之从零开始的C语言生活》—— 指针4

字符指针变量 在指针类型中我们知道有一种指针类型为字符指针char* 如果我们想用他 int main() {char p w;char *d &p;return 0; }他可以存放字符变量的地址 也可以这么使用 int main() {char *d "hello"return 0 ; }其本质是把字符串"hello"的…

借老系统重构机会我写了个groovy规则引擎

公司老系统的重构计划早就有了,为了对Java硬编码的各种校验规则进行重构,特地参考了相关技术,最终选择了groovy进行了系统的学习,并编写了一个即插即用的轻量级规则引擎。 文章目录 项目背景技术选型groovy的性能统一Java运行环境…

[Labview] 表格改值后单元格编辑功能,更改颜色、字体、颜色等

效果如下所示: 例子中演示了单元格变色,具体需要什么修改,在相同的位置进行操作即可。 检测到[鼠标释放]事件,则记录被选中的单元格。 使用[鼠标按下]事件也可以,不过我个人测试下来,[按下]的判断精准度不…

LoadBalancer负载均衡

一、概述 1.1、Ribbon目前也进入维护模式 Spring Cloud Ribbon是基于Netflix Ribbon实现的一套客户端负载均衡的工具。 简单的说,Ribbon是Netflix发布的开源项目,主要功能是提供客户端的软件负载均衡算法和服务调用。Ribbon客户端组件提供一系列完善的…