Toilを無くして徒然なるままに日暮し硯に向かひたい

生成AIアプリケーション開発などを行うエンジニアのブログです。

Google Cloud Vertex AI Agent Builderの使い方

RAG(Retrieval-Augmented Generation)

RAG(Retrieval Augmented Generation:検索拡張生成)は、検索機能と生成AIを組み合わせた技術です。従来の生成AIは、学習した情報に基づいてしか回答を生成できませんでしたが、RAGは外部の知識ベースから情報を検索し、生成AIの回答に組み込むことで、より正確で幅広い情報を提供することができます。

Google Cloudのマネージドサービスの説明

今回のハンズオンで使用するGoogle Cloudのマネージドサービスの説明をします。

Cloud Storage

Google Cloud Storage(GCS)は、Google Cloud 上で動作するオブジェクトストレージサービスです。あらゆる種類のデータを安全かつスケーラブルに保存することができ、データ分析、機械学習、アプリケーション開発など、様々な用途に活用できます。

Vertex AI

Vertex AIは、Google Cloud上で動作する、AIモデルの開発と運用を統合的に支援するプラットフォームです。データサイエンティスト、機械学習エンジニア、開発者など、様々なユーザーが効率的に AIや機械学習(ML) モデルを構築、トレーニング、デプロイ、運用できるよう、機能を提供します。GeminiなどのLLMはVertex AI上で使用できます。

Vertex AI Agent Builder

Vertex AI Agent Builderは、Google Cloud上で動作する、生成 AI エージェントを簡単に構築、デプロイ、管理できるプラットフォームです。元々はVertex AI Search and Conversationと呼ばれていました。コードを記述することなく、自然言語を使用して、インテリジェントな会話型 AI とプロセス自動化エージェントを作成できます。RAGを簡単に作成でき、今回のハンズオンではRAG作成のために利用します。

Google Cloudを用いたRAGハンズオン

Google CloudはGoogleアカウントがあると、簡単に使い始めることができます。初めて使う場合は$300 相当の無料クレジットが付与されます。

Cloud Storageのコンソール画面を開きましょう。

画面上側の「作成」を押してください。

バケットの名前をつけて、画面をスクロールして、一番下の「作成」のボタンを押してください。


「このバケットに対する公開アクセス禁止を適用する」にはデフォルトでチェックマークが入っているかと思います。

ここにはチェックマークをつけておくことをおすすめします。

「確認」ボタンを押します。

バケットができました。

RAGに入れるPDFを入手したいと思いますが、私はインターネット上で無料入手できる情報処理推進機構(IPA)のものを10種ダウンロードしました。 皆さんはご自身の好きなPDFをお使いください。

アップロード後、ファイルがあることを確認できます。

Agent Builderを使って、RAGを作っていきましょう。Cloud Storageのドキュメントをベクトル化してAgent Builderに蓄えます。コンソール上で簡単にできます。

Agent Builderのコンソール画面を開き、左のサイドバーからデータストアを開いてください。

「データストアの作成」ボタンを押します。

画面下にスクロールして、「Cloud Storage」を選択します。

インポートするファイル・フォルダを選択します。先ほど作成したフォルダを選択しましょう。今回はPDFですので、データの種類は「非構造化ドキュメント」を選択したままにしてください。

データストアの構成を決めていきましょう。Locationはデフォルトの「global」のままでいきましょう。データストア名を入力します。「作成」ボタンを押してデータストアを構成していきます。

データストアが構成できました。作ったデータストアを見ていきましょう。

「アクティビティ」タブを開くと、データのインポート状況を確認できます。時間がかかる場合もあります。終わるまで待ちましょう。

データのインポートが完了しました。Agent Builderのサイドバーの「アプリ」からアプリを作成していきます。

「CREATE APP」を選択します。

「検索」を選択します。

内容は「汎用」のままでいいです。下にスクロールします。

「アプリ名」、「会社名」を入力し、「続行」ボタンを押します。

作成したデータストアを選択します。下にスクロールして、「作成」ボタンを押します。

アプリが作成できました。サイドバーの「プレビュー」を押しましょう。

検索フォームに入力して、検索をしていきましょう。

ここで、「システム障害の予防策」と検索すると、関連する順番にPDFを羅列してくれ、検索文に関連するページも表示してくれます。今回はIPAのドキュメントで行いましたが、技術PDFをRAGに入れておくと、調査が捗りそうですね。

なお、オライリー書籍をEBookで購入すると、PDF版を入手でき、RAG作成に重宝しそうです。複数人でRAGを使う場合は、著作権侵害にならないよう十分ご注意ください。

法人では社内文書をRAGに配置することで、これまでの検索ではすぐに得られなかった情報へのアクセススピードが上がります。社内データの活用はDXの第一歩でもあります。生成AIの活用を機に、DXを進めていきましょう!

Gemini

Geminiは、Google AIが開発したマルチモーダル生成AIモデルです。2023年12月にBardとして発表され、2024年2月にGeminiへと改名されました。マルチモーダルとは、テキストだけでなく、画像や音声などのデータも扱うこともでき、より創造的で表現力豊かなコンテンツを作成することができます。また、高度な情報検索が可能で、Google検索の検索結果を活用することで、最新の情報や、専門性の高い知識にもアクセスできます。文章生成、言語翻訳、要約、コード生成、画像生成、音声生成など、様々なタスクを実行することができます。プレビュー版のGemini-1.5は100万トークンに対応しています。この記事もGeminiのWeb版を無料で使用して書いています。

生成AI RAGアプリ開発ハンズオン

shu-kob.hateblo.jp

↑前回の復習をしていきます。前回参加していない方も大丈夫です。

PDFをディレクトリに配置して、取り込む作業が面倒なので、画面からPDFをアップロードできるようにしましょう。

  • chainlit_upload_pdf.py
import os
import chainlit as cl
from langchain_community.chat_models import ChatOpenAI
from langchain_community.document_loaders import PyMuPDFLoader
from langchain_community.embeddings import OpenAIEmbeddings
from langchain.prompts import PromptTemplate
from langchain.schema import HumanMessage
from langchain.text_splitter import SpacyTextSplitter
from langchain_community.vectorstores import Chroma


embeddings = OpenAIEmbeddings(
  model="text-embedding-ada-002"
)

chat = ChatOpenAI(model="gpt-3.5-turbo")

prompt = PromptTemplate(template="""文章を元に質問に答えてください。

文章:
{document}

質問: {query}
""", input_variables=["document", "query"])

text_splitter = SpacyTextSplitter(chunk_size=300, pipeline="ja_core_news_sm")

@cl.on_chat_start
async def on_chat_start():
  files = None

  while files is None:
    files = await cl.AskFileMessage(
      max_size_mb=20,
      content="PDFを選択してください",
      accept=["application/pdf"],
      raise_on_timeout=False,
    ).send()
  file = files[0]

  if not os.path.exists("tmp"):
    os.mkdir("tmp")
  
  documents = PyMuPDFLoader(file.path).load()
  splitted_documents = text_splitter.split_documents(documents)

  database = Chroma(
    embedding_function=embeddings,
    # 今回はpersist_directoryを指定しないことでデータベースの永続化を行わない
  )

  database.add_documents(splitted_documents)

  cl.user_session.set(
    "database",
    database
  )

  await cl.Message(content=f"`{file.name}`の読み込みが完了しました。質問を入力してください。").send()

@cl.on_message
async def on_message(input_message):
  print("入力されたメッセージ: " + input_message.content)

  database = cl.user_session.get("database")

  documents = database.similarity_search(input_message.content)

  documents_string = ""

  for document in documents:
    documents_string += f"""
  -------------------------
  {document.page_content}
  """

  result = chat([
    HumanMessage(content=prompt.format(document=documents_string, 
    query=input_message.content))
  ])
  await cl.Message(content=result.content).send()
  • 前回の記事に書いた「prepare_db.py」を実行してDBを作っておく必要があります。

  • Chainlitアプリを実行し、PDFをアップロードし、PDFの内容について質問可能

chainlit run chainlit_upload_pdf.py -w

使ってみたいPDFをアップロードしてみましょう

なお、パスワード保護されているファイルは使えないはず

IPAが多数のPDFファイルを公開しているので、これらも使ってみましょう。

PDFに書かれていることがインプットされているかを確認するために、PDFの中身に関する質問をしてみましょう。

なぜ下流工程で問題が顕在化しやすいのでしょうか?
下流工程で問題が顕在化しやすい理由は、それまでの工程に起因する品質不良が下流工程に入り込みやすいためです。また、下流工程では問題が露呈しやすく、対応のための時間や手段が限定されているため、問題が早期に発見されても迅速に対処することが難しい状況にあるからです。そのため、下流工程での品質管理や問題解決には特に注意が必要とされています

定性的見える化アプローチのチェックシートの使い方を教えてください。
定性的見える化アプローチのチェックシートは、プロジェクトマネージャが自己評価を行うためのツールです。上流、中流、下流のそれぞれに対して35、38、40項目が設定されており、自己評価を行う際にそれぞれの項目に対してスコアをつけることで自己チェックを行います。また、専門家チーム(PMO)によるヒアリングシートもあり、上流、中流、下流それぞれに対して74、78、85項目が設定されています。専門家の客観的なチェックを受けることで、マネジメントの過不足を把握し、対策を検討することができます。自己評価と専門家の診断の差を認識し、専門家からの対策案を受け取ることで、プロジェクトの見える化を促進することができます。

色んな質問をしてみたり、様々なPDFをアップロードしてみましょう。

実際に体験してもらったところで、↓RAGなどの技術について過去資料を用いて解説したいと思います。

speakerdeck.com

参考文献

生成AIアプリケーション開発入門ハンズオン

genai-users.connpass.com

この記事は、日本生成AIユーザ会 #1 生成AIアプリケーション開発入門ハンズオンの資料です。

アーカイブ動画はこちら

youtu.be

自己紹介

小渕 周(こぶち しゅう)

2023年12月株式会社スリーシェイクに入社

Sreake事業部 エンジニア

生成AIアプリケーション開発に従事

sreake.com

発表内容

  • Python + LangChain + OpenAIで簡単なサンプルコードを実行しながら生成AIアプリケーション開発についてご説明していきます。
  • プロンプトエンジニアリングについても学べる内容となっています。
  • 最後に少しRAGアプリも紹介します。

使用するソースコード

https://github.com/shu-kob/langchain-sample-app

Pythonを使う理由

  • LangChainライブラリがJavaScript(TypeScript)版より情報が多い

OpenAIを使う理由

  • 情報が多いから
    • Python + LangChain + OpenAIの組み合わせの情報が最も多い

Python設定

python3 --version
Python 3.11.4
  • Python 3.11系を使ってください。
  • Python 3.12系だと、ライブラリの関係で、最後の「chainlit_chat_db.py」が実行できないかもしれません。

OpenAI API設定

  • https://platform.openai.com/
    • API KeysでSECRET KEYを取得
  • 無料枠
    • APIはアカウント開設してから3ヶ月間、$5.00 分利用可能
  • それ以降は課金する必要あり
    • 別でアカウント作っても、SMS認証に使う電話番号が同じであれば無料枠はもらえない模様
    • $5.00から課金可能
    • ChatGPTの有料プランとは異なるので注意
    • 以下のエラーが出たら課金する必要あり
openai.RateLimitError: Error code: 429 - {'error': {'message': 'You exceeded your current quota, please check your plan and billing details. For more information on this error, read the docs: https://platform.openai.com/docs/guides/error-codes/api-errors.', 'type': 'insufficient_quota', 'param': None, 'code': 'insufficient_quota'}}
  • 課金して数分すればエラーが出ず正常実行できるように

  • API Keyを環境変数に設定

export OPENAI_API_KEY=sk-***********************************

他のLLM

Gemini

  • Google CloudのVertex AIで利用可能

Claude 3

  • 上位 ← Opus、Sonnet、Haiku → 下位
  • AWSAmazon BedrockでOpus(最上位モデル)利用可能
  • Google CloudではSonnet(中位モデル)利用可能
    • OpusはComing Soon

OpenAI APIを使ったプログラミング

  • 無料枠でも利用可能なgpt-3.5-turboを使用
python3 -m pip install openai==1.16.1
  • openai_chat_completions.py
import os
from openai import OpenAI

client = OpenAI(
  # This is the default and can be omitted
  api_key=os.environ.get("OPENAI_API_KEY"),
)

chat_completion = client.chat.completions.create(
  model="gpt-3.5-turbo",
  messages=[
    {"role": "system", "content": "私は優秀なソフトウェアエンジニアです。"},
    {"role": "user", "content": "kubernetesについて説明してください。"}
  ]
)

print(chat_completion.choices[0].message.content)
  • 実行
python3 openai_chat_completions.py
Kubernetes(クーバーネティス)は、コンテナ化されたアプリケーションを管理するためのオープンソースのコンテナオーケストレーションツールです。Kubernetesは、複数のコンテナを効率的かつ柔軟に管理することができ、アプリケーションのデプロイメント、スケーリング、バージョン管理、ネットワーキングなどを自動化します。

Kubernetesは、クラウド上やオンプレミスの環境など、さまざまな環境で使用でき、高い信頼性、拡張性、セキュリティを提供します。また、リソースの効率的な管理や障害時の自己修復機能も持っています。

Kubernetesは、コンテナ化されたアプリケーションの展開や管理を容易にするための多くの機能やリソースを提供しており、クラウドネイティブなアプリケーションの開発や運用において非常に重要な役割を果たしています

LangChain

  • LLMの差分を吸収するライブラリ
  • Python版がメインで開発は先行
    • 情報が多い
  • 追従して、JavaScript(TypeScript)版が出る
    • Webフロントエンドと開発言語を合わせられる
  • LangChain以外のLLMライブラリはLlamaなど
python3 -m pip install langchain==0.1.14
python3 -m pip install langchain-openai==0.1.1
  • langchain_chat.py
from langchain_openai import ChatOpenAI
from langchain.schema import HumanMessage, SystemMessage

chat = ChatOpenAI(
  model="gpt-3.5-turbo",
)

result = chat.invoke(
  [
    SystemMessage(content="私は優秀なソフトウェアエンジニアです。"),
    HumanMessage(content="LangChainについて説明してください。"),
  ]
)
print(result.content)
  • 実行
python3 langchain_chat.py
LangChainは、ブロックチェーン技術を活用して言語学習者とネイティブスピーカーをつなぐプラットフォームです。言語学習者は、LangChainを通じてネイティブスピーカーとリアルタイムでコミュニケーションを取りながら、言語スキルを向上させることができます。ネイティブスピーカーは、言語学習者に言語を教えることで収入を得ることができます。ブロックチェーン技術によって、安全かつ透明な支払いシステムが提供され、利用者同士の信頼関係を築くことができます。LangChainは、言語学習をより効果的かつ楽しくする革新的なプラットフォームとして注目されています。
  • ハルシネーションが発生
  • 実行前にブロックチェーンの質問はしていないし、会話履歴は取得・使用していない
  • GPT-4でもハルシネーション
LangChainは、AIを活用した言語翻訳プラットフォームです。ブロックチェーン技術を導入することで、翻訳者は自分の作業を通じて報酬を得ることができます。また、LangChainは独自のトークン経済を持っており、翻訳作業の報酬やサービスの利用料金にそのトークンが使用されます。

LangChainの特徴は、AI技術を活用して高精度な自動翻訳を可能にしている点です。また、ブロックチェーンを活用して翻訳者とクライアント間の取引を透明化し、安全性と信頼性を確保しています。

さらに、LangChainはコミュニティ主導型のプラットフォームであり、ユーザーがサービスの改善や発展に直接貢献できることも大きな特徴です。

ただし、上記内容はLangChainについて一般的に説明したものであり、特定のLangChainとは異なる場合があります。具体的な情報は各LangChainの公式情報をご確認ください。

Chainlit

  • Pythonで稼動するLLMフレームワーク
  • すぐにリッチなUIを使える
  • カスタマイズは限定される
  • 自由にUI開発するならStreamitを使えば良い
python3 -m pip install chainlit==1.0.500
from langchain_openai import ChatOpenAI
from langchain.prompts import ChatPromptTemplate
from langchain.schema import StrOutputParser
from langchain.schema.runnable import Runnable
from langchain.schema.runnable.config import RunnableConfig

import chainlit as cl

@cl.on_chat_start
async def on_chat_start():
    model = ChatOpenAI(model="gpt-3.5-turbo", streaming=True)
    prompt = ChatPromptTemplate.from_messages(
        [
            (
                "system",
                "あなたはとても優秀なソフトウェアエンジニアです。",
            ),
            ("human", "{question}"),
        ]
    )
    runnable = prompt | model | StrOutputParser()
    cl.user_session.set("runnable", runnable)
    await cl.Message(content="こんにちは。私はAIです。質問をしてください。").send()

@cl.on_message
async def on_message(message: cl.Message):
    runnable = cl.user_session.get("runnable")  # type: Runnable

    msg = cl.Message(content="")

    async for chunk in runnable.astream(
        {"question": message.content},
        config=RunnableConfig(callbacks=[cl.LangchainCallbackHandler()]),
    ):
        await msg.stream_token(chunk)

    await msg.send()
  • 起動方法
chainlit run chainlit_app.py -w

-w をつけると、ソースの更新が即時反映

以下をChainlitのUIから実行

プロンプトエンジニアリング

プロンプトの工夫

  • システム開発しなくても、LLMデフォルトのUI上でプロンプトを工夫して欲しい結果を得られる
  • ChatGPTのUIでもプロンプトを登録可能
    • 左下のプロフィール > ChatGPTをカスタマイズする

役割を与える

  • あなたは〇〇の専門家です。
あなたはIT営業です。生成AIを企業のお客様にわかりやすく解説してください。
生成AIとは、人工知能の一種で、データから新しい情報やコンテンツを生成することができる技術です。例えば、文章や画像、音声など、さまざまな形式のデータを入力として与えると、生成AIはそのデータを分析し、それらに似た新しいデータを作成することができます。

企業が生成AIを活用することで、以下のようなメリットが得られます:
1. 新しい商品やサービスの開発:生成AIを使って市場のトレンドや消費者のニーズを分析し、新しい商品やサービスのアイデアを生み出すことができます。
2. マーケティング戦略の強化:生成AIを使って効果的な広告コピーを作成したり、ターゲットとなる顧客に最適なコンテンツを提供することができます。
3. プロセスの効率化:生成AIを活用して、自動で文章を生成したり、画像を加工したりすることで、業務プロセスを効率化し、作業効率を向上させることができます。

生成AIは、ビジネスのさまざまな分野で活用されており、企業の競争力を強化するための強力なツールとなっています。

文字数指定

  • 〇〇について200文字以内で教えてください。
AWSについて200文字以内で教えてください。
AWS(Amazon Web Services)は、Amazonが提供するクラウドコンピューティングサービスのことです。AWSを利用することで、サーバー、ストレージ、データベースなどのインフラストラクチャをクラウド上で提供し、スケーラビリティや柔軟性を実現します。多くのサービスが用意されており、企業や個人が必要なサービスを選択して利用することができます。AWSは世界中で広く利用されており、安定性やセキュリティ面でも信頼性が高いです。

箇条書き

  • 〇〇について箇条書きしてください。
良いプレゼンに必要なことを箇条書きで答えてください。
・ 明確な目的を持つ
・ 聴衆に合わせた内容とレベルを選定する
・ わかりやすい構成と論理展開
・ 魅力的なビジュアル要素の使用
・ 適切な言葉遣いとトーン
・ 質疑応答に備えた準備
・ タイムマネジメントを考慮したスピーチ時間の管理
・ 自信を持ってプレゼンする

簡単な回答を得る

  • 〇〇について小学5年生にもわかるような文章で教えてください。
公定歩合について小学5年生にもわかるような文章で教えてください。
公定歩合とは、日本銀行が決める金利のことです。これは、お金を借りたり貸したりするときに使われる金利の基準です。公定歩合が高いと、お金を借りるのがちょっと高くなってしまいます。逆に、公定歩合が低いと、お金を借りるのが安くなります。公定歩合は、経済や物価などに関係していて、政府や日本銀行が調整しています。

手順を書かせる

  • 賞味期限の近い食材を含め、今あるもので料理を作る、という想定
冷蔵庫に、キャベツ、豚肉、豆腐、味噌があります。これらの食材で作れる料理を教えてください。また、調理の手順を箇条書きで書いてください。
キャベツと豚肉の味噌炒めを作ることができます。以下に調理手順を箇条書きで示します。

材料:
- キャベツ
- 豚肉
- 味噌
- 豆腐(オプション)

調理手順:
1. キャベツを千切りにします。
2. 豚肉を食べやすい大きさに切ります。
3. フライパンに少量の油を熱し、豚肉を炒めます。
4. 豚肉に火が通ったら、キャベツを加えてさらに炒めます。
5. キャベツがしんなりとしたら、味噌を加えて全体を混ぜます。
6. ソースが全体になじんだら完成です。
7. 豆腐を加えてさらに煮込むと、豆腐も味を含んで美味しくなります。

是非お試しください!

ハッシュタグで条件を指定

  • メール作成や翻訳など、テンプレート化しておくと便利
# 役割:
あなたはITコンサルタントです。
# 目的:
生成AIを用いたシステム開発を見込み客に提案
# 条件:
・開発期間は2ヶ月
・予算は1,000万円
・見込み客は生成AIシステム開発は初めて
# 指示:
以上の条件をもとに事業企画書をA4用紙1枚分で出してください。

事業企画書

プロジェクト概要

  • プロジェクト名: 生成AIを活用したシステム開発プロジェクト
  • 目的: 見込み客の業務効率向上と競争力強化
  • 開発期間: 2ヶ月
  • 予算: 1,000万円

背景

  • 見込み客は生成AIシステム開発に初めて取り組む
  • 生成AIの活用により業務プロセスの自動化や品質向上が期待される

提案内容

  1. 要件定義および設計フェーズ
    • 要件ヒアリングとシステム設計の作成
    • 開発方針の決定と進行管理計画の策定
  2. 開発フェーズ
    • 生成AIモデルの構築と学習
    • システムの開発とテスト
  3. 導入および運用フェーズ
    • システムの導入支援とトレーニン
    • 運用保守体制の構築とサポート体制の整備

期待効果

  • 業務効率の向上と品質の向上
  • 競争力の強化と市場シェアの拡大

結言

  • 生成AIを活用したシステム開発は見込み客にとって未知の領域かもしれませんが、弊社の豊富な経験と専門知識により、成功への道筋を示すことができます。
  • ご検討いただければ幸いです。

プロンプトエンジニアリングガイド

Prompt Engineering Guide – Nextra

  • 基本的知識から様々な応用手法まで紹介
  • LangChainで実装できる手法も存在

RAG

speakerdeck.com

  • ライブラリをインストール
python3 -m pip install pymupdf-1.24.1
python3 -m pip install spacy==3.7.4
python3 -m spacy download ja_core_news_sm
python3 -m pip install tiktoken==0.6.0
python3 -m pip install chromadb==0.4.24
python3 -m pip install langchain-community==0.0.31
  • prepare_db.py
    • PDFの内容をベクトル化してChroma DBに格納
from langchain.document_loaders import PyMuPDFLoader
from langchain.embeddings import OpenAIEmbeddings
from langchain.text_splitter import SpacyTextSplitter
from langchain.vectorstores import Chroma

loader = PyMuPDFLoader("./sample.pdf")
documents = loader.load()

text_splitter = SpacyTextSplitter(
  chunk_size=300,
  pipeline="ja_core_news_sm"
)
splitted_documents = text_splitter.split_documents(documents)

embeddings = OpenAIEmbeddings(
  model="text-embedding-ada-002"
)

database = Chroma(
  persist_directory="./.data",
  embedding_function=embeddings
)

database.add_documents(
  splitted_documents,
)

print("データベースの作成が完了しました。")
  • PDFをベクトル化してDBに格納
python3 prepare_db.py
  • DBに格納したPDFの内容について質問可能なChainlitアプリ

  • chainlit_chat_db.py

import chainlit as cl
from langchain_openai import ChatOpenAI, OpenAIEmbeddings
from langchain.prompts import PromptTemplate
from langchain.schema import HumanMessage
from langchain_community.vectorstores import Chroma

embeddings = OpenAIEmbeddings(
  model="text-embedding-ada-002"
)

chat = ChatOpenAI(model="gpt-3.5-turbo")

prompt = PromptTemplate(template="""文章を元に質問に答えてください。

文章:
{document}

質問: {query}
""", input_variables=["document", "query"])

database = Chroma(
  persist_directory="./.data",
  embedding_function=embeddings
)

@cl.on_chat_start
async def on_caht_start():
  await cl.Message(content="準備ができました!メッセージを入力してください!").send()

@cl.on_message
async def on_message(input_message: cl.Message):
  print("入力されたメッセージ: " + input_message.content)
  documents = database.similarity_search(input_message.content)

  documents_string = ""

  for document in documents:
    documents_string += f"""
  -------------------------
  {document.page_content}
  """

  result = chat([
    HumanMessage(content=prompt.format(document=documents_string, query=input_message.content))
  ])
  await cl.Message(content=result.content).send()
  • Chainlitアプリを実行し、PDFの内容について質問可能
chainlit run chainlit_chat_db.py -w 

www.oreilly.co.jp

Terraformで再利用可能なモジュールを作成するためのコツを教えてください。
再利用可能なTerraformモジュールを作成するためのコツは、以下の点に注意することです。

小さなモジュールを作成する: 1つのモジュールに複数の機能やリソースを詰め込まず、1つの機能やリソースに焦点を当てた小さなモジュールを作成することで、再利用性が高くなります。

組み合わせ可能なモジュールを作成する: モジュール同士が疎結合であり、組み合わせて利用することが容易な設計を心がけることで、柔軟性が向上します。

テスト可能なモジュールを作成する: モジュールごとに適切なテストを実施し、品質を担保することが重要です。テストが容易に実施できるようなモジュールを作成することがポイントです。

バージョン管理されたモジュールを使用する: モジュールのバージョン管理を行い、変更やアップデートが容易に行えるようにすることが大切です。

これらのポイントに留意しながら、Terraformモジュールを設計・作成することで、効果的な再利用可能性を実現できます。
  • オライリー本をEbookで購入して、PDFをRAGに入れていけば便利そう
    • 詳解Terraformのベクトル化でEmbeddingモデルにかかった料金は$0.06

参考文献

OSC(Open Source Conference) 2024 Online/Springでセミナー発表とTokyo/Springでブース出展

2024年3月2日(土)、Open Source Conference 2024 Online/Spring でセミナー発表し、

event.ospn.jp

同年3月10日(日)、Open Source Conference 2024 Tokyo/Spring でブース出展しました。

event.ospn.jp

Online/Springのセミナー(以下、オンラインセミナー)では、日本生成AIユーザ会として、

生成AI入門というテーマで発表させていただきました。

日本生成AIユーザ会のデビュー戦でした。これまで日本暗号通貨ユーザ会などでブロックチェーン関連の発表はたくさんしてきましたが、

生成AIの発表は初めて。無事発表できてよかったです。

speakerdeck.com

youtu.be

なお、オンラインセミナーでは日本暗号通貨ユーザ会の発表は今回しておりません。

日本生成AIユーザ会と日本暗号通貨ユーザ会の2つの発表をやることはしんどいので、1つだけにしました。

一方、3月10日OSC東京はブース展示会でした。

会場は東京都立産業貿易センター台東館で、最寄りは浅草駅。

天気もよく、浅草駅前の吾妻橋交差点から見える東京スカイツリーアサヒビール本社屋上の金色のオブジェが綺麗に見えました!

浅草からの風景

↓金色のオブジェは聖火台の炎を表現していたのですね!今知りましたw

www.asahibeer.co.jp

ブース展示会では、日本生成AIユーザ会と日本暗号通貨ユーザ会の合同出展という形にしました。

ブースにはたくさんの方にきていただき、生成AI、暗号通貨(ブロックチェーン)ともに興味を持っていただけました。

皆様お疲れ様でした!

運営の皆様、出展させていただきありがとうございました。

ブースに来ていただいた皆様ありがとうございました。

これまでOSCのブース出展は、日本暗号通貨ユーザ会だけで行ってきましたが、 今回、日本生成AIユーザ会でも出展することで新たな気付きもたくさん得られました。

秋のOSC東京ではもっとブースをパワーアップして挑みたいと思います!

日本暗号通貨ユーザ会は次回、3月22日(金)20:00〜「ビットコインブロックチェーン入門」という講義形式(※)のオンライン勉強会を開催します。

※講義形式というのは、ハンズオンや輪読ではないということです。

発表者が説明して、質問を受け付けます。当てたりしませんので、ご安心をw!

cryptocurrency.connpass.com

日本生成AIユーザ会は次回、4月5日(金)20:00〜「生成AIアプリケーション開発入門ハンズオン」というハンズオン形式のオンライン勉強会を開催します。

ハンズオンですが、難しくなく皆さんがついてこられて、かつ楽しい内容にします!

genai-users.connpass.com

どちらもぜひご参加ください!

これからも両コミュニティをよろしくお願いいたしますm(._.)m

Google Cloud 主催 Generative AI Summit Tokyo '24に参加

2024年3月7日、GOOGLE CLOUD 主催 Generative AI Summit Tokyo '24 に参加しました!

cloudonair.withgoogle.com

株式会社スリーシェイクはスポンサーを務めておりました。

基調講演を除き、観たセッションはXにてスレッドで軽く実況を書いています。

全体を通しての感想は、キラーアプリはまだ出てきていないものの、 早期に生成AIを触り始めた企業さんは、事例をどんどん作っていると言う印象でした。

私も生成AIに携わるものとして、モチベーションが上がったので、 日々の業務に邁進していきたいと思います!

Google Cloud Digital Leader合格!

Google Cloud Platdorm(GCP)認定資格の第一歩、Cloud Digital Leaderに合格しました!

ちなみに、これまでの私の保有IT資格は、基本情報、応用情報、AWSクラウドラクティショナーです。

AWS資格の第一歩、クラウドラクティショナーはUdemyの模擬試験を1周したら合格できたので、

同様にGoogle Cloud Digital LeaderもUdemyの模擬試験を1周以上したら合格できました。

なお、AWSは最初、ソリューションアーキテクトアソシエイト受けたものの勉強不足で落ち、
クラウドラクティショナーならなんとかなるのでは?と思い、その2週間後に受けたら受かりました。

Udemyの模擬試験は途中保存もでき、採点、不正解のみ見直しなどができて便利ですよね。

次はGCPのAssociate Cloud Engineerに挑戦したいと思います!

皆さんもUdemyで勉強してIT資格をとりましょう!

AWSやGCPの資格をとるならUdemyで学ぼう!

生成AI活用の事例共有 - 大企業と中小企業・スタートアップでの違いに参加

2023年12月1日にスリーシェイクに入社し、SRE構築総合支援サービスSreake事業部のエンジニアとして2ヶ月が経ちました。

私は生成AIアプリケーション開発を行なっており、ちょうど良さげな勉強会に参加したので、参加レポートを書きたいと思います。

chatgptllm.connpass.com

参加したのは、LLM Tokyo主催の「生成AI活用の事例共有 - 大企業と中小企業・スタートアップでの違い」。

主催者は株式会社pipon代表の北爪聖也さん( @Seiyan1 )。

北爪さんともう一人の登壇者が株式会社LangCore代表の北原麦郎さん(@yuno_miyako2 )。

LangCore北原さんの事例発表

最初は、LangCore北原さんの事例発表。

LangCoreはAIの受託開発を行なっており、モジュール化して様々な案件に対応できるようにしている。

生成AIで個人の生産性向上よりも大きなインパクトを出せるようにすることが目標。

苦戦する案件もあるが、思った以上の成果を出せた案件もあった。

大企業が生成AIを活用するモチベーションは他社から遅れを取らないようにするため、というのが最も大きい。

検証項目は大きく分けて以下の3つ。
・社内ChatGPT
・社内データ検索
・精度検証

中小企業、スタートアップにおけるAI案件の課題としては、予算が限られていること。

案件の流れとしては以下。

ヒアリング

プロトタイプ開発

精度検証・改善

本開発・追加開発

pipon北爪さんの事例発表

・化粧品メーカーでの事例

化粧品メーカーが動物実験を減らすため、生成AIで実験結果の推測をする
化合物と化合物を組み合わせたときに毒性が出るかどうか

コンサルティングファームで社内の業務効率化

大量の類似した質問をChatGPT+RAGでさばく

・製薬会社のマーケティング

売れる営業とそうでない営業の効果測定

・自動車会社

生成AIを使った新規事業の模索

質疑応答

質問「スケジューリングまでLLMでできるのか?」
回答「完璧ではないが、簡易なものを書いてくれる。生成AIなしでやろうと思ったら実現不可能なほど非常に複雑なプログラムになっていただろう。
レストランの推薦をするとなれば、場所のレコメンドだけでなく、これまでできなかったスケジュールのレコメンドができることに価値がある。」

www.itmedia.co.jp

質問「行政の生成AIPoCで94%の精度では使えないという事例があったが、100%の精度が求められることはあるのか?」
回答「民間企業はPoCで精度も含めて検証する。100%は求められない。100%は実現不可。
レストランで、お店にないメニューをレコメンドしてしまうという問題もあった。
そういうプロジェクトは難しくなりがち。
裏側の人力の手作業を減らす業務改善からだと入っていきやすい。
エンタメ分野だとアバターが間違えても、可愛いと捉えられるので導入しやすい。」

「生成AIを使わなくても既存技術で解決できる課題も多かった。」

「何でもLLM回答を得るのではなく、コスト削減のために、キャッシュを使って、同じ質問に同じ回答を返すようなことをしている。

検証ツール: AzureだとAzure Machine Learning プロンプト フローがあり、 テストに使える。

「ファインチューニング、アノテーションはコストがかかるのであまりやらない。RAGを使う。」

pipon北爪さんはKindleでLLM書籍を出版されています。

ボリュームタップリで99円はお買い得!

Kindle書籍の詳細はこちら ⇒ https://amzn.to/4bhlmBQ

2月13日(火)に出版記念イベントを開催されるそうです。 (参加費は懇親会込みで4,000円)

chatgptllm.connpass.com

感想とまとめ

私も生成AI開発をやり始めたところですが、数多くの案件を手がけてきた方々の話を聞けて、
イメージが湧くとともにモチベーションが上がりました。