🪨

【AWS】Amzon Bedrock を使ってみる【生成系AI】

2023/11/18に公開

基盤モデルは日本語を扱える Claude v2 を利用します。

以下のような最低限の記述で呼び出してみます。
(Claude に指定できるパラメータはこちらにあります)

import boto3
import json

bedrock_runtime_client = boto3.client(service_name='bedrock-runtime')

body = json.dumps({
    "prompt": "\n\nHuman:Amazon Bedrock について教えてください。\n\n Assistant: ",
    "max_tokens_to_sample": 500,
})
response = bedrock_runtime_client.invoke_model(
    body=body, 
    modelId="anthropic.claude-v2",
)
response_body = json.loads(response.get('body').read())
print(response_body.get('completion'))

何やら怪しい回答が返ってきます。

 Amazon Bedrock は、Amazon Web Services (AWS) が提供するマネージドサービスです。主な特徴は以下の通りです。

- AWS の基盤サービス群を抽象化し、サーバーレスアプリケーションの構築を容易にするプラットフォームです。

- サーバーレスなアプリケーションの開発、デプロイ、運用を簡易化するためのツールとインターフェースを提供します。

- AWS Lambda、Amazon DynamoDB、Amazon API GatewayなどのAWSサービスをシームレスに利用できます。

- アプリケーションの状態を管理するための分散キャッシュとストレージを提供します。 

- サーバーレスアーキテクチャに適したベストプラクティスが組み込まれています。

- インフラやプロビジョニングの管理が不要で、アプリケーションの開発に集中できます。

- 自動スケーリング、モニタリング、ログ取得など運用機能が備わっています。

- 開発言語はNode.jsが公式サポートされていますが、他言語も利用できます。

Bedrockはサーバーレスアプリケーション開発の敷居を下げ、開発者のプロダクティビティ向上を目指したマネージドサービスです。AWSの管理面の負担を軽減し、アプリケーション開発に集中できるのが大きなメリットです。

それもそのはず。Claude は 2022 年の 12 月頃までの情報しか持っていません。

While we're constantly updating Claude's data, Claude was trained on data up until December 2022, but may know some events into early 2023. If you ask it about events after this date, it will be unaware of them.

https://support.anthropic.com/en/articles/8114494-how-up-to-date-is-claude-s-training-data

知らないことは人間同様インターネットで調べてもらいましょう。LangChain を利用して外部から情報を取得してみます。
LLM のフレームワークツールです。

from langchain.llms import Bedrock

llm = Bedrock(model_id="anthropic.claude-v2")
print(llm.predict("Amazon Bedrock について教えてください。"))
pip install duckduckgo-search
from langchain.llms import Bedrock
from langchain.agents import initialize_agent
from langchain.agents import AgentType
from langchain.agents import Tool
from langchain.tools import DuckDuckGoSearchRun

llm = Bedrock(model_id="anthropic.claude-v2")
search = DuckDuckGoSearchRun()

tools = [
    Tool(
        name="duckduckgo-search",
        func=search.run,
        description="useful for when you need to search for latest information in web",
    )
]

agent = initialize_agent(
    tools=tools,
    llm=llm,
    agent=AgentType.ZERO_SHOT_REACT_DESCRIPTION,
    verbose=True
)

agent.run("""
Human: Amazon Bedrock について教えてください。
Assistant:
""")
> Entering new AgentExecutor chain...
 Amazon Bedrockについての最新情報を調べるため、ウェブ検索を利用する。

Action: duckduckgo-search
Action Input: Amazon Bedrock

Observation: Amazon Bedrock, the easiest way to build and scale generative AI applications with foundation models (FMs), is now generally available. Amazon Bedrock is a fully managed service that offers a choice of high-performing FMs from leading AI companies including AI21 Labs, Anthropic, Cohere, Meta, Stability AI, and Amazon, along with a broad set of capabilities that you need to build generative AI ... Amazon Bedrock is a new service for building and scaling generative AI applications, which are applications that can generate text, images, audio, and synthetic data in response to prompts. Amazon Bedrock gives customers easy access to foundation models (FMs)—those ultra-large ML models that generative AI relies on—from the top AI startup ... Update October 10, 2023 — Amazon Bedrock is now available in 3 regions globally: US East (N. Virginia), US West (Oregon), and Asia Pacific (Tokyo). This April, we announced Amazon Bedrock as part of a set of new tools for building with generative AI on AWS.Amazon Bedrock is a fully managed service that offers a choice of high-performing foundation models (FMs) from leading AI companies ... Amazon Bedrock is the first fully managed generative AI service to offer Llama 2, Meta's next-generation LLM, through a managed API. Llama 2 models come with significant improvements over the original Llama models, including being trained on 40% more data and having a longer context length of 4,000 tokens to work with larger documents ... AWS Week in Review - Agents for Amazon Bedrock, Amazon SageMaker Canvas New Capabilities, and More - July 31, 2023. This July, AWS communities in ASEAN wrote a new history. First, the AWS User Group Malaysia recently held the first AWS Community Day in Malaysia. Another significant milestone has been achieved by the AWS User Group Philippines.
Thought: Amazon Bedrockは、Foundation Modelsを使ったジェネラティブAIアプリケーションの構築とスケーリングを簡単にする、AWSが提供するフルマネージドサービスだ。主要なAI企業のFoundation Modelsを選択でき、アプリケーションの構築に必要な機能がそろっている。

Final Answer: Amazon BedrockはAWSが提供するフルマネージドのジェネラティブAIサービスです。主要なAI企業のFoundation Modelsを選択でき、テキスト、画像、オーディオ、合成データなどのジェネレーティブAIアプリケーションの構築とスケーリングを簡単にできるサービスです。

> Finished chain.
'Amazon BedrockはAWSが提供するフルマネージドのジェネラティブAIサービスです。主要なAI企業のFoundation Modelsを選択でき、テキスト、画像、オーディオ、合成データなどのジェネレーティブAIアプリケーションの構築とスケーリングを簡単にできるサービスです。'

知らない情報を教えるアプローチとして他にも RAG があります。
プロンプトエンジニアリングの一つです。
https://python.langchain.com/docs/expression_language/cookbook/retrieval

pip install faiss-cpu tiktoken

BedrockEmbeddings を利用するので、Amazon Titan モデルの有効化を行っておく必要があります。
Bedrock のサービスページにある文章を渡してあげます。

from langchain.llms import Bedrock
from langchain.chat_models import BedrockChat
from langchain.embeddings import BedrockEmbeddings
from langchain.prompts import ChatPromptTemplate
from langchain.schema.output_parser import StrOutputParser
from langchain.schema.runnable import RunnablePassthrough
from langchain.vectorstores import FAISS

llm = Bedrock(model_id="anthropic.claude-v2", model_kwargs={"max_tokens_to_sample": 500})

vectorstore = FAISS.from_texts(
    ["""
     Amazon Bedrock は、AI21 Labs、Anthropic、Cohere、Meta、Stability AI、Amazon などの大手 AI 企業が提供する高性能な基盤モデル (FM) を単一の API で選択できるフルマネージド型サービスです。
     また、生成系 AI アプリケーションの構築に必要な幅広い機能も備えているため、プライバシーとセキュリティを維持しながら開発を簡素化できます。
     Amazon Bedrock の包括的な機能を使用すると、さまざまなトップ FM を簡単に試すこと、微調整や検索拡張生成 (RAG) などの手法を使用してデータを使用してプライベートにカスタマイズすること、そして旅行の予約や保険金請求の処理から広告キャンペーンの作成や在庫管理まで、複雑なビジネスタスクを実行するマネージドエージェントを作成することができます。これらはすべて、コードを記述することなく行えます。
     Amazon Bedrock はサーバーレスであるため、インフラストラクチャを管理する必要がありません。
     また、使い慣れた AWS サービスを使用して、生成系 AI 機能をアプリケーションに安全に統合してデプロイできます。
     """], embedding=BedrockEmbeddings()
)
retriever = vectorstore.as_retriever()

template = """
context に沿ってのみ質問に回答してください。 context:
{context}

質問: {question}
"""
prompt = ChatPromptTemplate.from_template(template)

chain = (
    {"context": retriever, "question": RunnablePassthrough()}
    | prompt
    | llm
    | StrOutputParser()
)

chain.invoke("Amazon Bedrock について教えてください。")
' Amazon Bedrockは、AI21 Labs、Anthropic、Cohere、Meta、Stability AI、Amazonなどの主要なAI企業が提供する高性能な基盤モデル(Foundation Model)を単一のAPIで利用できるフルマネージド型のサービスです。\n\n主な特徴は以下の通りです。\n\n- 多様な基盤モデルを簡単に試すことができる\n- マイクロチューニングや検索拡張生成(RAG)などの手法でデータを使ってカスタマイズ可能\n- 旅行予約や保険金請求などの複雑な業務をマネージドエージェントで実行できる\n- サーバーレスなのでインフラ管理が不要\n- AWSサービスとの統合が容易である\n\nつまり、Bedrockを利用することで、様々な基盤モデルを簡単に試し、データでカスタマイズし、アプリケーションに組み込んで利用できるようになる、ということです。プライバシーやセキュリティも重視されており、開発の効率化に役立つサービスのようです。'

以上

Discussion