Git Product home page Git Product logo

aws-samples / generative-ai-use-cases-jp Goto Github PK

View Code? Open in Web Editor NEW
590.0 14.0 104.0 67.05 MB

すぐに業務活用できるビジネスユースケース集付きの安全な生成AIアプリ実装

License: MIT No Attribution

JavaScript 1.87% TypeScript 97.27% HTML 0.21% CSS 0.10% Shell 0.26% Dockerfile 0.07% Python 0.22%
aws bedrock generative-ai chatbot image-generation llm rag sagemaker lambda react

generative-ai-use-cases-jp's Introduction

Important

This repository is currently developed for Japanese users. If you wish for multilingual support, please react to this issue.

Generative AI Use Cases JP (略称:GenU)

Generative AI(生成 AI)は、ビジネスの変革に革新的な可能性をもたらします。GenU は、生成 AI を安全に業務活用するための、ビジネスユースケース集を備えたアプリケーション実装です。

sc_lp.png

このリポジトリではブラウザ拡張機能も提供しており、より便利に 生成 AI を活用することができます。詳しくはこちらのページをご覧ください。

生成AIの進化に伴い、破壊的な変更を加えることが多々あります。エラーが発生した際は、まず最初にmainブランチの更新がないかご確認ください。

ユースケース一覧

ユースケースは随時追加予定です。ご要望があれば Issue に起票をお願いいたします。

チャット

大規模言語モデル (LLM) とチャット形式で対話することができます。LLM と直接対話するプラットフォームが存在するおかげで、細かいユースケースや新しいユースケースに迅速に対応することができます。また、プロンプトエンジニアリングの検証用環境としても有効です。

RAG チャット

RAG は LLM が苦手な最新の情報やドメイン知識を外部から伝えることで、本来なら回答できない内容にも答えられるようにする手法です。それと同時に、根拠に基づいた回答のみを許すため、LLM にありがちな「それっぽい間違った情報」を回答させないという効果もあります。例えば、社内ドキュメントを LLM に渡せば、社内の問い合わせ対応が自動化できます。このリポジトリでは Amazon Kendra か Knowledge Base から情報を取得します。

Agent チャット

Agent は LLM を API と連携することでさまざまなタスクを行えるようにする手法です。このソリューションではサンプル実装として検索エンジンを利用し必要な情報を調査して回答する Agent を実装しています。

文章生成

あらゆるコンテキストで文章を生成することは LLM が最も得意とするタスクの 1 つです。記事・レポート・メールなど、あらゆるコンテキストに対応します。

要約

LLM は、大量の文章を要約するタスクを得意としています。ただ要約するだけでなく、文章をコンテキストとして与えた上で、必要な情報を対話形式で引き出すこともできます。例えば、契約書を読み込ませて「XXX の条件は?」「YYY の金額は?」といった情報を取得することが可能です。

校正

LLM は、誤字脱字のチェックだけでなく、文章の流れや内容を考慮したより客観的な視点から改善点を提案できます。人に見せる前に LLM に自分では気づかなかった点を客観的にチェックしてもらいクオリティを上げる効果が期待できます。

翻訳

多言語で学習した LLM は、翻訳を行うことも可能です。また、ただ翻訳するだけではなく、カジュアルさ・対象層など様々な指定されたコンテキスト情報を翻訳に反映させることが可能です。

Web コンテンツ抽出

ブログやドキュメントなどの Web コンテンツを抽出します。LLM によって不要な情報はそぎ落とし、成立した文章として整形します。抽出したコンテンツは要約、翻訳などの別のユースケースで利用できます。

画像生成

画像生成 AI は、テキストや画像を元に新しい画像を生成できます。アイデアを即座に可視化することができ、デザイン作業などの効率化を期待できます。こちらの機能では、プロンプトの作成を LLM に支援してもらうことができます。

映像分析

マルチモーダルモデルによってテキストのみではなく、画像を入力することが可能になりました。こちらの機能では、映像の画像フレームとテキストを入力として LLM に分析を依頼します。

アーキテクチャ

この実装では、フロントエンドに React を採用し、静的ファイルは Amazon CloudFront + Amazon S3 によって配信されています。バックエンドには Amazon API Gateway + AWS Lambda、認証には Amazon Cognito を使用しています。また、LLM は Amazon Bedrock を使用します。RAG のデータソースには Amazon Kendra を利用しています。

arch.drawio.png

デプロイ

Important

このリポジトリでは、デフォルトのモデルとしてバージニア北部リージョン (us-east-1) の Anthropic Claude 3 Sonnet (テキスト生成)と、Stability AI の SDXL 1.0(画像生成) を利用する設定になっています。Model access 画面 (us-east-1)を開き、Anthropic Claude 3 Sonnet にチェックして Save changes してください。その他のモデル (Anthropic Claude 3 Haiku, Meta Llama3, Cohere Command-R など) を利用するために設定を変更する方法については Amazon Bedrock のモデルを変更する を参照してください。

GenU のデプロイには AWS Cloud Development Kit(以降 CDK)を利用します。Step-by-Step の解説、あるいは、別のデプロイ手段を利用する場合は以下を参照してください。

まず、以下のコマンドを実行してください。全てのコマンドはリポジトリのルートで実行してください。

npm ci

CDK を利用したことがない場合、初回のみ Bootstrap 作業が必要です。すでに Bootstrap された環境では以下のコマンドは不要です。

npx -w packages/cdk cdk bootstrap

続いて、以下のコマンドで AWS リソースをデプロイします。デプロイが完了するまで、お待ちください(20 分程度かかる場合があります)。

npm run cdk:deploy

その他

料金試算

GenU をご利用いただく際の、構成と料金試算例を公開しております。
この料金試算例は、Amazon Kendra を活用した RAG チャット機能を有効化する前提となっています。 セキュリティ強化のための AWS WAF や、ファイルのアップロード機能、Knowledge Base を活用したオプション機能などは含まれていない点にご注意ください。 従量課金制となっており、実際の料金はご利用内容により変動いたします。

お客様事例

yasashiite_logo.png GenUを活用した介護現場の記録・報告業務の効率化。介護利用者の家族や医師、ケアマネージャーが読みやすい報告業務の自動化を実現。介護記録データから個別作業手順の生成や自動更新を行ったり、ケアマネージャーと利用者の会話音声から標準項目に沿ったケアプランの作成を行う。中堅・中小企業向け事業戦略に関する説明会に登壇。

salsonido.png マーケターの記事執筆支援に GenU を活用。専門知識を持ったうえで記事の執筆が必要であり、記事制作に時間・人・スキルの面で課題があった。GenU の RAG を利用し、情報をもとに記事を作成することで課題を克服。リライト業務にかける時間を 70% 削減した。

tamura.png 製品の実験を行うにあたり、大量の製品書類があり必要な情報がどの文書に記載されているか特定が困難であるという課題があった。GenU の RAG を活用することで、文書の発見を容易にした。加えて、文字起こしや文書生成も活用し、議事録を簡単に作成できるようになったことで、情報の共有が活発化した。

jdsc.png GenU をリファレンスにし、Bedrock の生成AI の出力を実際にアプリケーションで確認しつつ、開発できたことが成功要因でした。海事産業特有の専門的な問合せについて、90%以上の性能改善ができたのは、Haiku, Sonnet, Opus の適宜の利用と、AWSの各種サービス活用によります。特に性能向上の観点で新たにSonnet 3.5 への適用、 Kendra から RDS for PostgreSQL の pgvector への切替など、確固たるGenUのベースと自社ノウハウを両立させられたのも良かったです。

活用頂いた事例を掲載頂ける場合は、Issueよりご連絡ください。

参照

Security

See CONTRIBUTING for more information.

License

This library is licensed under the MIT-0 License. See the LICENSE file.

generative-ai-use-cases-jp's People

Contributors

amazon-auto avatar calic0cat avatar cm-yamamoto-hiroki avatar danishi avatar dependabot[bot] avatar fsatsuki avatar gteu avatar ihara-kenta avatar k-hnd avatar kazuhitogo avatar konokenj avatar maekawataiki avatar nakayukl-demo avatar okamoto-aws avatar sugi275 avatar tbrand avatar tbrandaws avatar tomachi1201 avatar tomosooon avatar toshikwa avatar tosi29 avatar ttrdthsffr avatar wadabee avatar watany-dev avatar ymhiroki avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

generative-ai-use-cases-jp's Issues

新規会話 => 履歴に登録されたらそちらに切り替え => そちらで発言

概要

  • タイトル場合、当然会話履歴の方には発言が反映されるが、新規会話の方には反映されていない。(つまり同じ Chat を 2 つ開いている状態で片方で発言するともう片方で反映されない)

解決案

  • 会話履歴をクリックした段階で、今のチャットとユースケースと同じ chatId を持っているか state を確認する (画面が重複していないか確認する)
  • 重複している場合、新規チャット or ユースケースの方の state を全削除する

補足

  • 重複している場合に、片方で発言したらもう片方にも反映する、という実装自体は可能ではあるが、複雑性が増すため、一旦ユースケースの方を削除とした方がシンプル

新規会話開始時にDrawerの会話履歴を選択状態にする

新規会話を開始して会話履歴に会話が追加されたら、その新規追加された会話を選択状態にする
現在は、PathParamsと一致しているかで選択状態を判断しているため、そこの実装を変える必要がある

  • 選択状態を保持するStateを別途用意する
  • 新規会話を登録して、ChatIDが取得できたタイミングでリダイレクトする(画面ちらつきの原因になりそうなのでできればやりたくない)

AWS Interpreter 対応

ただの思いつきですが、チャット(既存のチャットとは別画面)から、

「echo する lambda 関数を作ってください」

と言ったら作ってくれると AWS っぽさが出る気がしました。

CodeBuildでビルドエラー発生

CDK Deployした際にCodeBuildで以下の通りエラーが発生しました。

> [email protected] build
--
238 | > tsc && vite build
239 |  
240 | src/components/ChatMessage.tsx(33,24): error TS18048: 'chatContent' is possibly 'undefined'.
241 | npm ERR! Lifecycle script `build` failed with error:
242 | npm ERR! Error: command failed
243 | npm ERR!   in workspace: [email protected]
244 | npm ERR!   at location: /codebuild/output/src2456308977/packages/web
245 |  
246 | [Container] 2023/09/11 15:48:41 Command did not exit successfully eval "$buildCommands" exit status 1
247 | [Container] 2023/09/11 15:48:41 Phase complete: BUILD State: FAILED
248 | [Container] 2023/09/11 15:48:41 Phase context status code: COMMAND_EXECUTION_ERROR Message: Error while executing command: eval "$buildCommands". Reason: exit status 1
249 | [Container] 2023/09/11 15:48:41 Entering phase POST_BUILD
250 | [Container] 2023/09/11 15:48:41 Running command echo Build completed on `date`
251 | Build completed on Mon Sep 11 15:48:41 UTC 2023

環境は以下の通りです。
マシン:Amazon EC2 (Amazon Linux 2023)
Node.js:v18.17.1
CDK:2.95.1 (build ae455d8)
ローカルのMacでも同様の症状が起きます。240行目にあるように型不一致が起きているようです。
ご確認の程よろしくお願いいたします。

CI/CDの整備

以下をGitHubActionsで整備する

  • フロントエンドのビルドエラー確認
  • CDKのSynthエラー確認

画像生成機能のユースケース

BedrockでStable Diffusionを実行することができるので、それを使ったユースケース。
TranslateかLLMをかませる形にして、日本語でプロンプトを入力できる形にする。

useChat 初期化時に Chat を fetch するように変更

今は以下のように、初期化時に chatId だけを入れているが
https://github.com/aws-samples/generative-ai-use-cases-jp/blob/main/packages/web/src/hooks/useChat.ts#L244-L251
これだと今後描写に必要な情報などが取れない可能性が高い。

例1: 今はタイトルの自動設定の判定を messages.length <= 3 で行なっているが、本当は title === '' で判定したい
例2: 会話履歴をクリックしたら上部にタイトルを出したい

そこで、以下のような実装により、useChat 初期化時に Chat を取るようにする。

  1. GET chat/:chatId で Chat を返すようにして、初期化時にそれを呼ぶ
  2. Chat 一覧ですでに Chat を取得しているので、それを useChat で使えるようにする

FAQ自動生成機能

FAQを作る条件を設定して、マニュアルを読み込ませると、LLMが自動でFAQを作成してくれる機能

README.md の手順修正

npx -w packages/cdk cdk bootstrap

コマンドが cdk.json の openai の secrets manager の arn を参照しているため、以下エラーが発生してしまう。
手順を変更する。

再現手順は、新アカウントで Cloud9 で実行する。

aws configure # region の設定だけ
npm ci
npx -w packages/cdk cdk bootstrap

発生エラー

Error: `secretCompleteArn` does not appear to be complete; missing 6-character suffix
    at Function.fromSecretAttributes (/home/ec2-user/environment/generative-ai-use-cases-jp/node_modules/aws-cdk-lib/aws-secretsmanager/lib/secret.js:1:7009)
    at Function.fromSecretCompleteArn (/home/ec2-user/environment/generative-ai-use-cases-jp/node_modules/aws-cdk-lib/aws-secretsmanager/lib/secret.js:1:5197)
    at new Api (/home/ec2-user/environment/generative-ai-use-cases-jp/packages/cdk/lib/construct/api.ts:28:27)
    at new GenerativeAiUseCasesStack (/home/ec2-user/environment/generative-ai-use-cases-jp/packages/cdk/lib/generative-ai-use-cases-stack.ts:12:17)
    at Object.<anonymous> (/home/ec2-user/environment/generative-ai-use-cases-jp/packages/cdk/bin/generative-ai-use-cases.ts:8:1)
    at Module._compile (node:internal/modules/cjs/loader:1198:14)
    at Module.m._compile (/home/ec2-user/environment/generative-ai-use-cases-jp/node_modules/ts-node/src/index.ts:1618:23)
    at Module._extensions..js (node:internal/modules/cjs/loader:1252:10)
    at Object.require.extensions.<computed> [as .ts] (/home/ec2-user/environment/generative-ai-use-cases-jp/node_modules/ts-node/src/index.ts:1621:12)
    at Module.load (node:internal/modules/cjs/loader:1076:32)
****************************************************
*** Newer version of CDK is available [2.92.0]   ***
*** Upgrade recommended (npm install -g aws-cdk) ***
****************************************************

Subprocess exited with error 1

Feedback の送信

bad を送るときに正しい文言を入力したいという要望もあるが、一旦は bad のみを送るようにする

狭い画面のDrawerを閉じやすくする

狭い画面のDrawerについて、現在は「X」ボタンでしか閉じることができないが、グレーアウト部分のどこをクリックしても閉じられるようにする。

プロンプトを編集可能にする

プロンプトをユーザが書き換えられるようにする。
以下対応案

  • プロンプトをJSONファイル化
    • TSファイルの書き換えは、非開発者にとってハードルが高いためJSONファイルにする
  • プロンプト編集画面を追加する
    • プロンプトはDDBに保存する?

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.