继续浏览精彩内容
慕课网APP
程序员的梦工厂
打开
继续
感谢您的支持,我会继续努力的
赞赏金额会直接到老师账户
将二维码发送给自己后长按识别
微信支付
支付宝支付

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

开心每一天1111
关注TA
已关注
手记 529
粉丝 49
获赞 218
使用 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 联系我,提出新的主题或合作想法!

打开App,阅读手记
0人推荐
发表评论
随时随地看视频慕课网APP