为了账号安全,请及时绑定邮箱和手机立即绑定

亚马逊Bedrock新功能详解——Converse API和Anthropic Claude 3模型结合使用轻松上手

使用 Converse API 和工具和技术在 Amazon Bedrock 上用 Claude 3 达到新高度

作者的图片

在这次博客里,我们将探讨亚马逊Bedrock的新特性,重点介绍Converse API及其与Anthropic Claude 3的工具使用。这些更新让开发者能够更轻松地创建动态且用户友好的AI互动。利用Converse API,管理多轮对话变得简单且一致。此外,调用工具或函数的能力意味着模型能够访问外部数据,从而提供更准确和有用的回复。

对话API vs 调用API

我知道这挺复杂的,我来帮帮你的。

亚马逊Bedrock(Bedrock)推出新的Converse API - 了解更多有关亚马逊AWS的最新消息aws.amazon.com

5月30日,亚马逊Bedrock推出了新的Converse API,提供了一种统一的方法,让开发人员能够调用亚马逊Bedrock模型并管理多轮对话。此API通过消除了需要针对特定模型进行调整的需求,并启用结构化的对话历史记录,简化了流程。此外,它支持选定模型中的工具使用(功能调用),允许开发人员访问外部工具和API,从而扩展应用程序的功能。

要使用Converse API,您需要使用这些Amazon Bedrock模型。

支持 Converse API 的模型有 — 参考:使用 Converse API 的方法,Amazon Bedrock 文档中的相关内容

我们先深入了解一下API本身,这部分的价值就体现在那里。为了方便举例说明,这里我不会使用流式API,但请注意,模型调用和Converse API都支持答案流式传输。以下所有示例都将基于Anthropic Claude 3 Haiku。

首先,我们来看看针对Anthropic Claude 3模型的经典API调用。这里是你需要这样写(使用boto3,不使用Converse API)的。

    # 使用原生推断 API 向 Anthropic Claude 发送文本消息。  
    import boto3  
    import json  
    from botocore.exceptions import ClientError  

    # 在您选择的 AWS 区域以创建一个 Bedrock Runtime 客户端。  
    client = boto3.client("bedrock-runtime", region_name="us-east-1")  

    # 指定模型 ID,例如,Claude 3 Haiku。  
    model_id = "anthropic.claude-3-haiku-20240307-v1:0"  

    # 定义模型使用的提示。  
    prompt = "用一句话描述 'hello world' 程序的目的。"  

    # 使用模型的原生格式格式化请求负载。  
    native_request = {  
        "anthropic_version": "bedrock-2023-05-31",  
        "max_tokens": 512,  
        "temperature": 0.5,  
        "messages": [  
            {  
                "role": "user",  
                "content": [{"type": "text", "text": prompt}],  
            }  
        ],  
    }  

    # 将原生请求转换为 JSON 格式。  
    request = json.dumps(native_request)  

    try:  
        # 使用请求调用模型。  
        response = client.invoke_model(modelId=model_id, body=request)  

    except (ClientError, Exception) as e:  
        print(f"错误:无法调用模型 '{model_id}'。原因:{e}")  
        exit(1)  

    # 解析响应正文。  
    model_response = json.loads(response["body"].read())  

    # 提取并打印响应中的文本。  
    response_text = model_response["content"][0]["text"]  
    print(response_text)

现在,我们来看看这次用Converse API调用该模型的场景:

    # 使用Conversation API向Anthropic的Claude发送一条文本消息。

    import boto3
    from botocore.exceptions import ClientError

    # 在您想要使用的AWS区域中创建Bedrock Runtime客户端。
    client = boto3.client("bedrock-runtime", region_name="us-east-1")

    # 设置模型ID,例如 'Claude 3 Haiku'。
    model_id = "anthropic.claude-3-haiku-20240307-v1:0"

    # 使用用户消息开始对话。
    user_message = "用一句话描述'hello world'程序的目的。"
    conversation = [
        {
            "role": "user",
            "content": [{"text": user_message}],
        }
    ]

    try:
        # 使用基本推理配置将消息发送到模型。
        response = client.converse(
            modelId=model_id,
            messages=conversation,
            inferenceConfig={"maxTokens": 512, "temperature": 0.5, "topP": 0.9},
        )

        # 提取并打印响应中的文本。
        response_text = response["output"]["message"]["content"][0]["text"]
        print(response_text)

    except (ClientError, Exception) as e:
        print(f"错误:无法调用 '{model_id}'。原因:{e}")
        # 退出程序并返回错误代码1。
        exit(1)

你可能会想问:“这里到底有什么不同呢?”这确实是个合理的问题,因为最初看,似乎没什么变化。不过,仔细一瞧,就能发现几个重要的不同之处。

  1. 一致性和简化 — Converse API 提供了一个与所有支持消息的模型一致的接口,将参数移出对话内容本身。这意味着你不必担心根据每个模型的原生格式来构建请求负载,从而简化了你的代码并减少了潜在的错误。
  2. 消息处理 — 在 Converse API 中,消息的处理方式模仿了自然对话的流程,使交互更加直观,符合典型的对话式AI使用场景。
  3. 推理配置 — 在 Converse API 中,推理配置(如 maxTokenstemperature)作为单独的参数,使对话负载更加干净和易读。

通过使用Converse API,你可以获得更流畅和一致的与模型互动的方式,这可以显著提升你的开发体验,并使代码库更易于维护。

工具使用 / 调用函数

Converse API调用示例流程 — 作者提供

Amazon Bedrock工具使用(功能调用)

您可以使用Amazon Bedrock API让模型访问工具,这些工具可以帮助生成回复。

切换到Converse API的一个好处是,可以使用工具来回答请求,也称为功能调用。在使用Amazon Bedrock模型时,加入工具可以显著提高模型生成准确且上下文相关回答的能力。功能调用涉及定义模型在推理过程中可以请求使用的工具。让我们通过Converse API来探索一下这个过程。

步骤1:发送消息及工具定义

滞留 — 图片来自作者

首先,使用 JSON 架构定义工具,并将该工具与用户的请求一起传递到 Converse API 请求中。例如,一个获取广播电台最热门歌曲的工具可以定义如下:

{
  "tools": [  
    {  
      "toolSpec": {  
        "name": "top_song",  
        "description": "获取某广播电台播放的最热门歌曲。",  
        "inputSchema": {  
          "json": {  
            "type": "object",  
            "properties": {  
              "sign": {  
                "type": "string",  
                "description": "广播电台的呼号,例如WZPZ或KPOP。"  
              }  
            },  
            "required": ["sign"]  
          }  
        }  
      }  
    }  
  ]  
}

用户的留言也被包含在内。

    [  
     {  
     "role": "角色",  
     "content": [{ "text": "哪首歌在Radio XYZ上最受欢迎?"}]  
     }  
    ]

接下来:获取模型的工具请求

智能LLM,作者的图片

收到请求后,模型会判断是否需要用到工具来生成响应。如果需要,它会返回一个响应,说明需要工具,并附上所需输入参数。

步骤 3.:让工具为模型发出请求

作者供图:工具使用不过是输入和输出之间的交易。

使用提供的工具信息,运行这个工具请求。生成实际结果的关键环节在于结果反馈回LLM生成答案之前。在这个阶段,你应该实现自己的业务逻辑。这个工具可以是:

  • 本地代码执行(比如运行计算器)
  • 调用一个 API(比如获取一些信息)
  • 一个外部的服务

然后,将结果通过后续消息反馈给模型。注意,这条消息需要设置为由用户发送(即设置为 "role": "user")。

{  
 "role": "user",  
 "content": [  
   {  
     "toolResult": {  
       "toolUseId": "工具使用ID",  
       "content": [  
         {  
           "json": {  
             "song": "Never Gonna Give You Up",  // 《永不放弃你》, 艾瑞克·拉斯利的歌曲  
             "artist": "Rick Astley"  // 艾瑞克·拉斯利  
           }  
         }  
       ]  
     }  
   }  
 ]  
}
第 4 步:得到模型的回复

最后,模型利用工具的结果生成对最初的查询的全面答案。是的,你可能在2024年中了rickroll的招。rickrolled(rickroll是指一个经典的网络恶作剧,通常会播放老歌《Never Gonna Give You Up》)。

代码例子

下面是使用Converse API(Converse API)的工具使用示例。

    import boto3  
    import json  
    from botocore.exceptions import ClientError  

    client = boto3.client("bedrock-runtime", region_name="us-east-1")  
    model_id = "anthropic.claude-3-haiku-20240307-v1:0"  

    def get_top_song(sign: str):  
        # 获取热门歌曲
        return {  
          "title": "Never Gonna Give You Up",  
          "author": "Rick Astley",  
          "played_times": 420  
        }  

    tool_config = {  
        "tools": [  
            {  
                "toolSpec": {  
                    "name": "top_song",  
                    "description": "获取某个电台播放次数最多的热门歌曲。",  
                    "inputSchema": {  
                        "json": {  
                            "type": "object",  
                            "properties": {  
                                "sign": {  
                                    "type": "string",  
                                    "description": "电台的呼号。"  
                                }  
                            },  
                            "required": ["sign"]  
                        }  
                    }  
                }  
            }  
        ]  
    }  

    messages = [  
        {  
            "role": "user",  
            "content": [{"text": "Radio XYZ 上播放次数最多的歌曲是什么?"}]  
        }  
    ]  

    try:  
        response = client.converse(modelId=model_id, messages=messages, toolConfig=tool_config)  
        tool_request = response['output']['message']['content'][0]['toolUse']  

        ##### 在此实现你的工具逻辑 #####  
        tool_result = get_top_song(tool_request['input']['sign'])  
        ##########################################  

        tool_result_message = {  
            "role": "user",  
            "content": [  
                {  
                    "toolResult": {  
                        "toolUseId": tool_request['toolUseId'],  
                        "content": [{"json": tool_result}]  
                    }  
                }  
            ]  
        }  

        final_response = client.converse(modelId=model_id, messages=[tool_result_message])  
        print(final_response['output']['message']['content'][0]['text'])  

    except ClientError as e:  
        print(f"错误: {e}")

此代码可以在AWS Lambda函数中非常轻松且成本低廉地运行,甚至在本地PC上运行,只要你已经正确配置了AWS凭证。

通过按照这些步骤操作,您可以将相关工具有效地集成到与Amazon Bedrock模型的互动中,从而获得更动态和准确的实时响应。

结论部分

恭喜,(作者提供图片)

通过使用Converse API和工具集成,开发人员可以借助Amazon Bedrock和Anthropic Claude 3将他们的AI应用程序提升到一个新的层次。这些功能不仅简化了开发过程,还增强了模型的能力,使其更加准确和情境感知,从而实现了更准确和情境感知的交互。通过采用这些创新,您将能够构建更复杂、更用户友好的AI解决方案。更多详细信息请参阅Amazon Bedrock的用户指南。

感谢你阅读这篇 Medium 博客文章。如果你喜欢生成式 AI 应用程序开发、低代码/无代码的机器学习以及一般的技术新闻和资讯,请你感兴趣的话,可以关注我并通过电子邮件订阅新博客。欢迎通过我的 LinkedIn 联系我,提出新的主题或合作想法!

点击查看更多内容
TA 点赞

若觉得本文不错,就分享一下吧!

评论

作者其他优质文章

正在加载中
Web前端工程师
手记
粉丝
48
获赞与收藏
218

关注作者,订阅最新文章

阅读免费教程

  • 推荐
  • 评论
  • 收藏
  • 共同学习,写下你的评论
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦
今天注册有机会得

100积分直接送

付费专栏免费学

大额优惠券免费领

立即参与 放弃机会
意见反馈 帮助中心 APP下载
官方微信

举报

0/150
提交
取消