Amazon Bedrock 实践 | 动手玩转 Claude 3

生成式 AI 和大模型在 2024 年已经进入落地实践阶段。因此,围绕开发者在生成式应用程序开发中的主要痛点和需求,我们组织了这个 “Amazon Bedrock 实践” 的系列,希望可以帮助开发者高效地上手生成式 AI 和大模型的应用开发,本篇为第一篇。

亚马逊云科技开发者社区为开发者们提供全球的开发技术资源。这里有技术文档、开发案例、技术专栏、培训视频、活动与竞赛等。帮助中国开发者对接世界最前沿技术,观点,和项目,并将中国优秀开发者或技术推荐给全球云社区。如果你还没有关注/收藏,看到这里请一定不要匆匆划过,点这里让它成为你的技术宝库!

Amazon Bedrock 是亚马逊云科技提供的一项服务,可以让开发者轻松使用称为基础模型(Foundation Model)的强大 AI 模型。以下是其关键功能概述:

  • 访问高性能基础模型: Amazon Bedrock 提供对由领先 AI 公司和亚马逊自身开发的各种基础模型的访问权限。这些基础模型在大量数据上进行训练,可以执行各种任务,包括文本生成、图像识别和代码完成等

  • 统一的 API: 开发者可以通过单个 API 与所有可用的基础模型进行交互,简化了在应用程序中使用基础模型的复杂过程,这消除了为每个基础模型学习不同 API 的必要性

  • 轻松集成: Amazon Bedrock 是一项完全托管的服务,这意味着亚马逊云科技会负责管理底层基础设施,使开发者可以专注于构建应用程序,而无需担心服务器设置和维护

  • 安全性和隐私性: Amazon Bedrock 提供了相关的功能来帮助开发者构建安全和私密的 AI 应用程序,开发者可以控制对基础模型和数据的访问,从而保护开发者的数据隐私

  • 专注于生成式 AI: 虽然基础模型可以执行各种任务,但 Amazon Bedrock 特别关注生成式 AI 应用程序,这些应用程序使用 AI 创建新内容,例如文本、图像或代码等

总体而言,Amazon Bedrock 是一个功能强大的工具,适用于希望利用尖端 AI 模型的功能的开发人员,而无需管理底层基础设施的复杂性。

本文主要以 Claude 3 模型为例,探讨如何使用 Amazon Bedrock 构建不同业务场景的生成式 AI 应用程序。本文主要包括四部分内容:

  • 在 Amazon Bedrock 中设置和获取模型访问权限

  • 在 Amazon Bedrock 控制台中使用模型

  • 调用 Amazon Bedrock API 来使用模型

  • Amazon Bedrock 参考资料

本篇探讨的 Anthropic Claude 3 模型,目前仅在亚马逊云科技的海外账户可用。

在 Amazon Bedrock 中设置和获取模型访问权限

首先我们需要在 Amazon Bedrock 中,获取特定模型的访问权限。以下将以 Claude 3 模型为例,逐步指导开发者们配置和获取模型的访问权限。

第一步:进入到 Amazon Bedrock 的 UI 控制台。 点击 Get started:

image.png

在这里我们可以看到 Amazon Bedrock 支持多个基础模型(foundation model),其中包括 Amazon Titan,Claude,Jurassic,Command,Mistral,Stable Diffusion 以及 Llama2。如下图所示:

image.png

确认右上角区域,若已是 Oregon,这一步跳过。若不是,请在右上角选择 Oregon,选择 us-west-2:

image.png

左侧的导航栏中点击 Model access,如下图所示:

image.png

若已有相应模型权限,即模型后面是 Access granted,可跳过这一步。否则,点击 Manage model access:

image.png

点击“Submit use case details” 来申请访问相关模型。如果你有详细的使用场景案例,你可以简述你的使用场景。对于一般测试,你可参考下图填写相关内容。在这个弹出的窗口里填写完成后,点击“Submit”提交:

image.png

成功提交之后,选择左上角的 CheckBox 选中所有 model,之后点击“Request model access”:

image.png

如果你已经完成提交并已经获得模型的访问权,你会看到如下图所示:

image.png

接下来,我们先探索在控制台使用 Playgrounds 的方式,测试 Claude 3 模型。

首先,在左侧的导航栏中点击 “Playgrounds – Chat” 进入聊天界面:

image.png

点击 Select model 来选择我们要使用的基础模型

image.png

我们选择 Anthropic 的 Claude 3 模型(Sonnet v1 或者 Haiku v 1)来体验其强大的推理能力和中文处理能力,点击“Apply”:

image.png

可以调整右侧的参数,然后就可以在聊天窗口中输入提示词和上传图片,回车或点击 “Run” 按钮获取模型输出。如下图所示:

image.png

至此,我们已经完全了解了如何在 Amazon Bedrock 中,获取 Claude 3 模型的访问权限。

在下一节里,我们将通过几种实际场景,详细诠释如何在控制台使用 Claude 3 模型。

在Amazon Bedrock 控制台中使用模型

本节将以 Claude 3 模型为例,阐述如何在Amazon Bedrock 控制台中使用模型。

翻译场景

首先我们测试下 Claude 3 模型的翻译场景。

测试的内容节选自了 3 月初 NVIDIA CEO (Jensen Huang) 在 Stanford University 的访谈视频。如果你是 AI 和机器学习行业的开发者、工程师、数据科学家等,该视频非常值得观看。在这个一小时左右的视频中,Jensen 在分享他眼中 AI 的未来之外,也分享了他对创业、人生选择、以及人类未来命运等经验和精彩观点,这些经验和观点建议,对从事该领域的年轻人非常有借鉴意义。

视频在 B 站上的链接如下:https://www.bilibili.com/video/BV15S421w7pd/?trk=cndc-detail (有中文字幕)

回到我们这个用 Claude 3 测试翻译场景的例子。

我们先在 Amazon Bedrock Playground 中,输入以下提示词(prompt)。其中“<org></org>”定义的英文脚本,节选自以上访谈视频的内容:

你是一个帮助翻译剧本的助理。 你的任务是将中的英文源文本翻译成中文。翻译时,请遵守以下规则:

1/ 不要改变初衷

2/ 翻译前先了解上下文,保持语义连贯,阅读流畅,但不要故意夸大

3/ 原文大多是对话式的,因此翻译仍应符合 TikTok/ 短视频/视频博客 /Youtube 视频的上下文。注意避免使用通常不用于日常聊天的词语

4/适当的时候保留一些专有名词或专业术语未翻译,注意前后一致

5/ 在<result><result>中回复翻译。不要包含任何额外的内容

<org>“Stanford Business Graduate School of Business student Jose: My name's Jose, I'm a class with the 2023 from the GSB. My question is, are you worried at all about the pace at which we're developing AI? And do you believe that any sort of regulation might be needed? Thank you.

Jensen Huang: Yeah, the answer is yes and no. The greatest breakthrough in modern AI, of course deep learning, and it enabled great progress. But another incredible breakthrough is something that humans know and we practice all the time. And we just invented it for language models called grounding, reinforcement learning human feedback. I provide reinforcement learning human feedback every day. That's my job. And for the parents in the room, you're providing reinforcement learning human feedback all the time, okay? Now, we just figured out how to do that at a systematic level for artificial intelligence.”</org>

image.png

点击“Run”,查看模型输出的翻译结果。如下图所示:

image.png

由翻译结果可见,Claude 3 还是翻译地比较自然的。

事实问答场景

接下来我们探索事实问答场景。在 Playground 中输入以下提示词(prompt)。

先用英文向 Claude 3 模型发问:

Could you please list the major events that happened in Istanbul between 1800 and 1900?

image.png

再用中文向 Claude 3 模型发问:

请罗列在 1800-1900 年伊斯坦布尔发生的大事。

image.png

可见,无论是中文还是英文发问,Claude 3 都抓住了历史上的主要事件,没有明显的事实错误和编造。

各位开发者可以自行修改提示词中的内容,进行更多事实问答的测试。

小说续写场景

然后是小说续写场景,看看如何用 Claude 3 大模型来写一篇精彩的小说。

在 Playground 中输入以下提示词(prompt):

小说续写 “剑·花·烟雨江南" 要有画面感和沧桑感,字数在 300 字以内

image.png

我们修改下 prompt,增加 story 风格的要求,修改提示词(prompt)如下:

模仿小说家古龙的风格, 小说续写 “剑·花·烟雨江南" 要有画面感和沧桑感,字数在 300 字以内

image.png

我们修改下 prompt,再修改下对故事风格的要求,修改的提示词(prompt)如下:

模仿莎士比亚的风格, 小说续写 “剑·花·烟雨江南" 要有画面感和沧桑感,字数在 300 字以内

image.png

你也可以在 Chat playground 里,比较两个不同的 Claude 3 模型(Haiku 和 Sonnet)的反应速度和输出,打开如下这个开关即可:

image.png

你会发现 Claude 3 Haiku 反应非常之快,对比于 Claude 3 Sonnet 模型,使用同样的提示词(prompt):

模仿小说家古龙的风格, 小说续写 “剑·花·烟雨江南" 要有画面感和沧桑感,字数在 300 字以内

在你点击完“Run”按钮之后,几乎 1 秒内就得到了返回结果。如下图所示:

image.png

图像理解场景

接下来是图像理解场景。

下图我在广州高铁站的星巴克里消费的一张小票,我准备发给 Claude 3 模型去理解,看看它怎么分析这张小票。

image.png

image.png

如果我们继续输入对 Claude 3 模型的要求,比如:

请用简体中文描述你理解的图片中的内容

image.png

好的, 我用简体中文描述图片中的内容:

这是一张星巴克咖啡店的收银小票,位于广州市南站 3F-A5 店铺。小票上显示了店铺地址、顾客姓名(张 Ashley)、订购的商品和价格、总金额以及交易时间。图片中没有出现任何人物照片,因此不需要避免识别人物身份。

小结

我们发现 Claude 3 理解基本正确,除了把这张收据上的“Ashley ZHANG”理解成了顾客(其实是星巴克当时的下单售货员)。其实这也不是 Claude 3 的错,因为在这张原始的收据上,从字面并没有说清楚“Ashley ZHANG”到底是顾客,还是星巴克的销售员呢!

还有很多有趣并实用的场景,我们将在下一集提高篇里,继续和大家分享。

调用 Amazon Bedrock API 使用模型

在前面的章节里,我们探讨了在 Amazon Bedrock 控制台访问模型。在本节中,我们将探讨如何编写一些简单代码,调用 Amazon Bedrock API 来使用模型。

运行环境配置

本例中使用了 Amazon SageMaker Notebook instances 环境,来调用 Amazon Bedrock API 访问各种大模型。如下图所示:

image.png

提醒:运行这个 notebook instance 的 role,需要具有访问 Amazon Bedrock 的权限。

本例中作者配置了 sagemaker-demo-role-haowen 这个自定义的 role 来运行 notebook instance。这个自定义的 role 中,包含了可以完全访问 Bedrock 的策略AmazonBedrockFullAcess,这个策略赋予了访问 Bedrock 服务的 full access 权限。如下图所示:

image.png

如果你想在本地电脑运行以上代码,需要在你的本地电脑先配置 Credentials,具体可参考: Credentials - Boto3 1.34.68 documentation

代码功能分析

我们仍然以 Claude 3 模型为例,以下 Python 代码示例展示了如何使用 Amazon Bedrock,分别调用 Claude 3 的 Sonnet 模型和 Haiku 模型,描述一个输入的图像,并打印出其耗时等信息。另外,代码还比较了非流式、流式两种不同的调用方式。

代码涉及的主要功能如下:

编码图像:将给定图像转换为用于传输的 base64 编码字符串

调用大型语言模型生成文本:调用了两个模型(Sonnet 和 Haiku)来生成文本

处理模型响应:以两种模式(流式和非流式)分别来捕获模型输出

测量性能指标:记录输入和输出文本片段(token)计数、首字节延迟和整体调用延迟

完整代码如下所示:

!pip install -qU boto3 

import json
import os
import sys
import boto3
import base64
import requests
import time
import pprint
from datetime import datetime

#获得模型的modelARN
region = 'us-east-1'#'us-west-2' #
boto3_bedrock = boto3.client('bedrock',region)
boto3_bedrock.list_foundation_models()

#获得实验图像,你也可以在这里替换为任何你自己想描述的图像
!wget https://cats.com/wp-content/uploads/2020/10/tabby-maine-coon-768x384.jpg

stream = False
# Function to encode the image 编码图像的函数
def encode_image(image_path):
  with open(image_path, "rb") as image_file:
    return base64.b64encode(image_file.read()).decode('utf-8')

# non streaming mode 非流式调用方式
def anthropic_claude_3(modelId,image_path,max_tokens):
    bedrock_runtime = boto3.client('bedrock-runtime')
    base64_image = encode_image(image_path)
    payload = {
        "modelId": modelId,
        "contentType": "application/json",
        "accept": "application/json",
        "body": {
            "anthropic_version": "bedrock-2023-05-31",
            "max_tokens": max_tokens,
            "messages": [
                {
                    "role": "user",
                    "content": [
                        {
                            "type": "image",
                            "source": {
                                "type": "base64",
                                "media_type": "image/png",
                                "data": base64_image
                            }
                        },
                        {
                            "type": "text",
                            #"text": "Write me a detailed description of these two photos, and then a poem talking about it."
                            "text": f"What’s in this image? output {max_tokens} tokens"
                        }
                    ]
                }
            ]
        }
    }

    # Convert the payload to bytes 转换负荷到字节
    body_bytes = json.dumps(payload['body']).encode('utf-8')

    # Invoke the model 调用模型
    response = bedrock_runtime.invoke_model(
        body=body_bytes,
        contentType=payload['contentType'],
        accept=payload['accept'],
        modelId=payload['modelId']
    )

    # Process the response 处理响应
    response_body = json.loads(response['body'].read().decode('utf-8'))
    pprint.pprint(response_body)
    #return round(end-start,2),response_body["usage"]["input_tokens"],response_body["usage"]["output_tokens"]
    return round(float(response['ResponseMetadata']['HTTPHeaders']['x-amzn-bedrock-invocation-latency'])/1000,2),int(response['ResponseMetadata']['HTTPHeaders']['x-amzn-bedrock-input-token-count']),int(response['ResponseMetadata']['HTTPHeaders']['x-amzn-bedrock-output-token-count'])

# streaming mode 流式调用方式
def anthropic_claude_3_stream(modelId,image_path,max_tokens):
    bedrock_runtime = boto3.client('bedrock-runtime')
    base64_image = encode_image(image_path)
    payload = {
        "modelId": modelId,
        "contentType": "application/json",
        "accept": "application/json",
        "body": {
            "anthropic_version": "bedrock-2023-05-31",
            "max_tokens": max_tokens,
            "messages": [
                {
                    "role": "user",
                    "content": [
                        {
                            "type": "image",
                            "source": {
                                "type": "base64",
                                "media_type": "image/png",
                                "data": base64_image
                            }
                        },
                        {
                            "type": "text",
                            #"text": "Write me a detailed description of these two photos, and then a poem talking about it."
                            "text": f"What’s in this image? output {max_tokens} tokens"
                        }
                    ]
                }
            ]
        }
    }

    # Convert the payload to bytes
    body_bytes = json.dumps(payload['body']).encode('utf-8')

    # Invoke the model
    response = bedrock_runtime.invoke_model_with_response_stream(
        body=body_bytes, modelId=payload['modelId'], accept=payload['accept'], contentType=payload['contentType']
    )
    stream = response.get('body')
    chunk_obj = {}

    if stream:
        for event in stream:
            chunk = event.get('chunk')
            if chunk:
                chunk_obj = json.loads(chunk.get('bytes').decode())
                pprint.pprint(chunk_obj)

    # Process the response
    #response_body = json.loads(response['body'].read().decode('utf-8'))
    #pprint.pprint(response_body)
    {'type': 'message_stop', 'amazon-bedrock-invocationMetrics': {'inputTokenCount': 92, 'outputTokenCount': 277, 'invocationLatency': 3679, 'firstByteLatency': 677}}
    return round(float(chunk_obj['amazon-bedrock-invocationMetrics']['firstByteLatency'])/1000,2),round(float(chunk_obj['amazon-bedrock-invocationMetrics']['invocationLatency'])/1000,2),chunk_obj['amazon-bedrock-invocationMetrics']['inputTokenCount'],chunk_obj['amazon-bedrock-invocationMetrics']['outputTokenCount']

# 调用结果
image_path = "tabby-maine-coon-768x384.jpg"
max_tokens = 200
#haiku
print("Haiku:")
modelId = "anthropic.claude-3-haiku-20240307-v1:0"
print(anthropic_claude_3(modelId,image_path,max_tokens))
print(anthropic_claude_3_stream(modelId,image_path,max_tokens))  
#sonnet
print("Sonnet:")
modelId = "anthropic.claude-3-sonnet-20240229-v1:0"
print(anthropic_claude_3(modelId,image_path,max_tokens))
print(anthropic_claude_3_stream(modelId,image_path,max_tokens))
模型输出分析

以下摘要分析了两个不同的模型(Haiku 和Sonnet)的有趣输出结果。

对于 Haiku 模型

{'content': [{'text': 'This image depicts a beautiful Maine Coon cat sitting '
                      'on a scratching post or cat tree. The cat has a thick, '
                      'fluffy coat with a distinctive tabby pattern of stripes '
                      'and markings. Its eyes are alert and focused, adding a '
                      "regal and intelligent expression to the feline's "
                      'appearance. The background appears to be a cozy indoor '
                      'setting, with the cat perched comfortably on the '
                      'scratching post. Maine Coon cats are known for their '
                      'large size, friendly personalities, and impressive '
                      'physical features, and this image captures the essence '
                      'of this majestic breed perfectly.',
              'type': 'text'}],
……
{'amazon-bedrock-invocationMetrics': {'firstByteLatency': 291,
                                      'inputTokenCount': 489,
                                      'invocationLatency': 3431,
                                      'outputTokenCount': 128},
……

对于 Sonnet 模型

{'content': [{'text': 'This image shows a beautiful Maine Coon cat resting on '
                      'a cat tree or scratching post. The Maine Coon is a '
                      'large semi-longhaired breed known for its fluffy fur, '
                      'tufted ears, and bushy tail.\n'
                      '\n'
                      'The cat in the picture has a brown tabby coat with '
                      'distinctive striped markings. Its face has a '
                      'distinctive "M" marking above the eyes, typical of '
                      "tabby cats. The cat's large, expressive eyes are a "
                      'striking yellow-green color, giving it an intense yet '
                      'gentle gaze.\n'
                      '\n'
                      'The feline is lounging comfortably on a beige carpeted '
                      'platform, with one paw tucked under its body and the '
                      'other extending forward. The cat tree or post appears '
                      'to be made of sisal rope wrapped around a wooden frame, '
                      'providing an ideal surface for the cat to scratch and '
                      'stretch.\n'
                      '\n'
                      'The background is slightly blurred, but it seems to be '
                      'an indoor setting, perhaps a living room',
              'type': 'text'}],
……
{'amazon-bedrock-invocationMetrics': {'firstByteLatency': 1752,
                                      'inputTokenCount': 443,
                                      'invocationLatency': 9279,
                                      'outputTokenCount': 139},
 'type': 'message_stop'}

从 invocationLatency 指标以及firstByteLatency 指标,可以清晰的看到 Haiku 模型比 Sonnet 模型响应速度快得多,这一点和 Claude 3 模型系列的亚马逊官方网站介绍是一致的,即:

“该系列包括三种型号:Claude 3 Haiku,最快、最紧凑的型号,可实现近乎即时的响应;Claude 3 Sonnet,技能和速度的理想平衡模型;Claude 3 Opus,最智能的产品,可在高度复杂的任务上实现顶级性能。”

( 原文引用自:Anthropic’s Claude 3 Haiku model is now available on Amazon Bedrock | AWS News Blog )

下一篇,我们将继续分析在 Amazon Bedrock 上使用 Claude 3 模型的更复杂场景和实现,敬请期待。

参考资料

  • Amazon Bedrock 用户手册

  • Amazon Bedrock API 参考手册

  • 在 Amazon Bedrock 上调用 Claude 3

  • Amazon Bedrock Claude 3 workshop

  • Anthropic's Claude 3 Haiku model is now available on Amazon Bedrock

文章来源:Amazon Bedrock 实践 | 动手玩转 Claude 3

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/479208.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Spring:面试八股

文章目录 参考Spring模块CoreContainerAOP 参考 JavaGuide Spring模块 CoreContainer Spring框架的核心模块&#xff0c;主要提供IoC依赖注入功能的支持。内含四个子模块&#xff1a; Core&#xff1a;基本的核心工具类。Beans&#xff1a;提供对bean的创建、配置、管理功能…

第十三届蓝桥杯省赛真题 Java B 组【原卷】

文章目录 发现宝藏【考生须知】试题 A: 星期计算试题 B: 山试题 C: 字符统计试题 D: 最少刷题数试题 E \mathrm{E} E : 求阶乘试题 F : \mathrm{F}: F: 最大子矩阵试题 G: 数组切分试题 H: 回忆迷宫试题 I: 红绿灯试题 J 拉箱子 发现宝藏 前些天发现了一个巨牛的人工智能学习…

C++ 侯捷 程序设计(Ⅱ)兼谈对象模型 笔记

Conversion function 转换函数 侯捷老师使用分数 Fraction举例&#xff0c;分数理应可以被看作是小数 提供了Fraction类对象一个转换为double的方法&#xff0c;当碰到需要转换为double的情况下&#xff0c;会调用该方法。 黄色的就是转换函数&#xff0c;没有return type&am…

【免费】基于扩展(EKF)和无迹卡尔曼滤波(UKF)的电力系统动态状态估计

目录 1 主要内容 2 部分代码 3 程序结果 4 下载链接 1 主要内容 该程序对应文章《Power System Dynamic State Estimation Using Extended and Unscented Kalman Filters》&#xff0c;电力系统状态的准确估计对于提高电力系统的可靠性、弹性、安全性和稳定性具有重要意义&a…

RIPGeo代码理解(五)utils.py( 辅助函数)第一部分

​ 代码链接:RIPGeo代码实现 ├── lib # 包含模型(model)实现文件 │ |── layers.py # 注意力机制的代码。 │ |── model.py # TrustGeo的核心源代码。 │ |── sublayers.py # layer.py的支持文件。 │ |── utils.p…

详解Python的函数嵌套

Python语言允许在定义函数的时候&#xff0c;其函数体内又包含另外一个函数的完整定义&#xff0c;这就是我们通常所说的嵌套定义。 实例1&#xff1a; def OutFun(): #定义函数OutFun()&#xff0c;m3 #定义变量m3;def InFun(): #在OutFun内定义函…

python学生作业管理系统flask-django-nodejs-php

课题主要分为三大模块&#xff1a;即管理员模块和学生、教师模块&#xff0c;主要功能包括&#xff1a;学生、教师、作业信息、学习模块、教学评价、学习情况等&#xff1b; 关键词&#xff1a;学生作业管理系统&#xff1b;作业信息 目录 摘 要 I Abstrac II 目录 III 1绪论 1…

jmeter接口导入方式

curl直接导入 1、操作页面后&#xff0c;F12查看接口&#xff0c;右击接口-copy-copy as cURL 2、jmeter 工具-import from cURL&#xff0c;粘贴上面复制的curl 根据接口文档导入 1、接口文档示例如下&#xff1a; Path&#xff1a; /api/jobs/xps/exec Method&#xf…

图像几何变换(仿射变换和透视变换...)及python-opencv实现

文章目录 图像变换类型仿射变换透视变换python-opencv实现参考文献 图像变换类型 图像几何变换主要包括以下几种类型&#xff1a; 平移&#xff08;Translation&#xff09;&#xff1a;将图像在水平或垂直方向上移动&#xff0c;不改变图像的尺寸和形状。缩放&#xff08;Sca…

理解静态库、动态库加载

个人主页&#xff1a;Lei宝啊 愿所有美好如期而遇 系统角度理解 我们先来谈谈进程地址空间&#xff0c;当我们将一个可执行程序跑起来的时候&#xff0c;操作系统首先会在内存中创建出task_struct&#xff0c;也就是进程控制块&#xff0c;然后将可执行程序的代码和数据加载…

整数和浮点数在内存中存储

整数在内存中的存储 整数的2进制表⽰⽅法有三种&#xff0c;即原码、反码和补码。 对于整形来说&#xff0c;数据存放内存中的其实是补码。 在计算机系统中&#xff0c;数值一律用补码来表示和存储。原因是&#xff0c;使用补码&#xff0c;可以使符号位和数值域统一处理&am…

ARMday7

VID_20240322_203313 1.思维导图 2.main.c #include"key_inc.h" //封装延时函数 void delay(int ms) {int i,j;for(i0;i<ms;i){for(j0;j<2000;j){}} } int main() {//按键中断的初始化key1_it_config();key2_it_config();key3_it_config();while(1){printf(&q…

备战蓝桥杯Day34 - 每日一题

题目描述 解题思路 1.输入数据n&#xff0c;并将字符串类型转换成整数类型 2.求出输入n是2的几次幂&#xff08;调用math库中的求对数的方法&#xff09;&#xff0c;在下面的循环中要用到 3.定义sum和&#xff0c;将抽取到的牌的总数加起来存储 4.count 0 # 记录 2 的第几…

台达变频通过Modbus转Profinet网关可以在环网冗余中使用

Modbus转Profinet网关&#xff08;如XD-MDPN100&#xff09;是一种能够实现Modbus协议与Profinet协议之间转换的设备。它支持Modbus RTU协议和Profinet协议还支持MRP环网冗余系统&#xff0c;,可以通过配置软件进行协议转换&#xff0c;使得原本只能使用Modbus协议的设备可以与…

微服务day05(中) -- ES索引库操作

索引库就类似数据库表&#xff0c;mapping映射就类似表的结构。 我们要向es中存储数据&#xff0c;必须先创建“库”和“表”。 2.1.mapping映射属性 mapping是对索引库中文档的约束&#xff0c;常见的mapping属性包括&#xff1a; type&#xff1a;字段数据类型&#xff0c;…

中兴通讯服务器荣获滴滴“最佳需求响应「和衷共济」奖”

在数字经济加速发展的背景下&#xff0c;算力成为数字产业的核心支撑力量&#xff0c;而服务器和存储产品更是为互联网创新体验提供了底层基础设施保障。在此背景下&#xff0c;中兴通讯服务器产品有效支撑滴滴出行智慧交通解决方案&#xff0c;凭借卓越表现&#xff0c;获得滴…

QGraphicsView的使用,view坐标,scene坐标,item坐标

Graphics View绘图构架 QGraphicsScene&#xff08;场景&#xff09;&#xff1a;可以管理多个图形项QGraphicsItem&#xff08;图形项&#xff09;&#xff1a;也就是图元&#xff0c;支持鼠标事件响应。QGraphicsView&#xff08;视图&#xff09;&#xff1a;关联场景可以让…

基于python+vue学生作业管理系统flask-django-nodejs-php

快速发展的社会中&#xff0c;人们的生活水平都在提高&#xff0c;生活节奏也在逐渐加快。为了节省时间和提高工作效率&#xff0c;越来越多的人选择利用互联网进行线上打理各种事务&#xff0c;然后线上管理系统也就相继涌现。与此同时&#xff0c;人们开始接受方便的生活方式…

IDEA/Android Studio格式化代码快捷键失效的解决

问题描述 用AS写一个项目的时候&#xff0c;发现CtrlAltL的格式化快捷键并不生效&#xff0c;按下之后没有任何反应。而格式化文件快捷键CtrlAltShiftL依旧生效&#xff0c;难道是设置出了问题&#xff1f; 打开设置页面发现快捷键设置很正确&#xff0c;并没问题&#xff0c…

掌握C语言结构体,开启编程新世界

✨✨欢迎&#x1f44d;&#x1f44d;点赞☕️☕️收藏✍✍评论 个人主页&#xff1a;秋邱博客 所属栏目&#xff1a;C语言 &#xff08;感谢您的光临&#xff0c;您的光临蓬荜生辉&#xff09; 前言 前面我们也涉及到了结构体的讲解&#xff0c;但是只是粗略的讲了一下。 接下…