Slide 1

Slide 1 text

OCI Generative AI Service 実践編 Oracle AI Brown Bag Seminar #7 Shuhei Kawamura Cloud Architect Oracle Digital, Oracle Corporation Japan February 22, 2024

Slide 2

Slide 2 text

Copyright © 2024, Oracle and/or its affiliates 2 • 所属 • ⽇本オラクル株式会社 • Oracle Digital • 普段の業務 • Digital Nativeなお客様を技術⾯でご⽀援 • コミュニティ • OCHaCafe • CloudNative Days – Observability team 川村 修平 (Shuhei Kawamura) @shukawam X/GitHub/Qiita

Slide 3

Slide 3 text

Copyright © 2024, Oracle and/or its affiliates 3 Agenda 1. OCI Generative AI Agents Service(Beta) 2. LangChain/LlamaIndex Integration

Slide 4

Slide 4 text

Copyright © 2024, Oracle and/or its affiliates 4 Oracle Cloud Infrastructure AI/ML 製品ポートフォリオ Applications Fusion Applications Fusion Analytics Industry Applications 3rd Party Applications Oracle AI Partners ML for data platforms OCI Data Science AI Vector Search in Oracle Database MySQL HeatWave Vector Store OCI Data Labeling AI infrastructure Compute bare metal instances and VMs with NVIDIA GPUs OCI Supercluster with RDMA networking Block, object, and file storage; HPC filesystems Data NetSuite OCI Generative AI OCI Generative AI Agents Digital Assistant Speech Language Vision Document Understanding AI Services

Slide 5

Slide 5 text

Copyright © 2024, Oracle and/or its affiliates 5 Oracle Cloud Infrastructure AI/ML 製品ポートフォリオ Applications Fusion Applications Fusion Analytics Industry Applications 3rd Party Applications Oracle AI Partners ML for data platforms OCI Data Science AI Vector Search in Oracle Database MySQL HeatWave Vector Store OCI Data Labeling AI infrastructure Compute bare metal instances and VMs with NVIDIA GPUs OCI Supercluster with RDMA networking Block, object, and file storage; HPC filesystems Data NetSuite Digital Assistant Speech Language Vision Document Understanding AI Services OCI Generative AI OCI Generative AI Agents

Slide 6

Slide 6 text

Copyright © 2024, Oracle and/or its affiliates 6 OCI Generative AI Agents Service

Slide 7

Slide 7 text

Copyright © 2024, Oracle and/or its affiliates 7 LLMが学習していないデータを含めたテキスト⽣成を可能にする構成 LLMが答えられない知識をその他の知識ベース(例えば、ベクトルデータベースなど)で補完する構成 検索拡張⽣成RAG(Retrieval-Augmented Generation) Vector Store LLM Application インターネット 企業 テキストデータ (企業内のデータ) テキストデータ (⼀般的に公開 されているデータ) prompt completion 連携 Oracleの新製品○○の 2024年の売り上げは︖ ○○の2024年の売り上げ は△△億円です。 以下のコンテキストに基づいて 「 Oracleの新製品○○の2024年の売り上げは︖ 」 に対する回答を作成してください。 --- ○○の2024年の売り上げは… Oracleの○○とは… … 知識ベースと連携し、LLM に渡すプロンプトを拡張 LLMと知識ベースの 合わせ技で回答

Slide 8

Slide 8 text

Copyright © 2024, Oracle and/or its affiliates 8 検索拡張⽣成RAG(Retrieval-Augmented Generation)の構成例 ベクトルデータベースを使ったRAGの代表的な構成要素 Application prompt completion code ①⼤規模⾔語モデル ü ドキュメントデータ、プロンプトの埋め込み ü テキスト⽣成、テキスト要約など ②ベクトルストア ü ドキュメントデータの保持 ü ベクトルの類似性検索 ③キャッシュストア ü プロンプト、⽣成テキストの保持、管理 ü プロンプトの内容に応じて参照 LLM Vector Store Cache Store PromptをLLMに⼊⼒ ベクトルデータベースの検索必要性を判別 ベクトル検索実⾏結果をLLMに連携 最終的なテキスト出⼒を⽣成 ベクトル検索実⾏ ベクトル検索実⾏結果取得 プロンプト、⽣成テキストのキャッシュ キャッシュの読み込み 各サービスの連携処理 フローを全て実装

Slide 9

Slide 9 text

Application code Copyright © 2024, Oracle and/or its affiliates 9 オーケストレーションツールを⽤いたRAGの代表的な構成例 prompt completion ①⼤規模⾔語モデル ü ドキュメントデータ、プロンプトの埋め込み ü テキスト⽣成、テキスト要約など ②ベクトルストア ü ドキュメントデータの保持 ü ベクトルの類似性検索 ③キャッシュストア ü プロンプト、⽣成テキストの保持、管理 ü プロンプトの内容に応じて参照 LLM Vector Store Cache Store ④オーケストレーション ü ⼊⼒プロンプトに対するナレッジベースの検索のプラン ü 各ナレッジベースの連携 Orchestration Tool プロンプトをオーケストレーション ツールに連携するコードのみ

Slide 10

Slide 10 text

Copyright © 2024, Oracle and/or its affiliates 10 n ユースケース • コールセンター業務の最適化 • 法的調査の迅速化 n 特⻑ • OCI Generative AI Serviceと、その他のサービスの オーケストレーションをフルマネージドのPaaSとして提供 • ノーコード、Web UIウィザードでの検索拡張⽣成 (RAG)のプロビジョニング • チャットUI機能 n 価格 2024/02現在、ベータ版のため未定 OCI Generative AI Agents(Beta) Input OCI Generative AI Agents Output + ⾃然⾔語で問い合わせ 1. ナレッジベースを検索 2. 検索結果をリランク 3. 関連上位の⽂書と元のクエリを LLMへ送信し、回答を作成する 4. 回答をユーザーに返却する 回答とレスポンスの作成に使⽤された ⽂書への参照を受け取る

Slide 11

Slide 11 text

Copyright © 2024, Oracle and/or its affiliates 11 OCI Generative AI Agents Service(Beta)を⽤いたRAG構成 Application prompt completion code LLM Vector Store Cache Store Orchestration Tool プロンプトをオーケストレーション ツールに連携するコードのみ OCI Generative AI Agents Service(Beta) OCI Generative AI Service OCI OpenSearch Service OCI Cache with Redis ※AI Vector Search(将来予定) ※MySQL HeatWave(将来予定)

Slide 12

Slide 12 text

Copyright © 2024, Oracle and/or its affiliates 12 デモシナリオ︓ • LLM(Generative AI Serviceのモデル)が学習していないデータをあらかじめOpenSearchに保存 • ユーザーからのプロンプトにLLMが応答できない場合、データソースを検索する • 検索により得られた情報をLLMに連携し、最終的な応答テキストを作成 Demo: Generative AI Agents Service(Beta)を⽤いたRAG構成 Application (Streamlit) prompt completion OCI Generative AI Agents Service Generative AI Service OCI Search Service w/ OpenSearch OCI Cache with Redis Identity Domains/ IDCS Access Token OAuth 2.0 (Client Credentials Grant) OCI Serviceに関する情報 が保存済み OCI Generative AI Serviceの テキスト⽣成モデル (command)を利⽤ ⼊⼒プロンプト、応答内容など の履歴が保持できるキャッシュ・ ストア(OCI Redis Service)を設 定済み

Slide 13

Slide 13 text

Copyright © 2024, Oracle and/or its affiliates 13 参考: デモ構成の解説 – Identity Domains/IDCS Data sourceから提供されるAPIをOAuth 2.0で保護するためのIdentity Domains/IDCSの設定例 ※本設定例は、IDCSによるものですが、Identity Domainsでも同様に実施いただけます 許可されるOAuth 2.0のGrant Typeを指定 (認可コードGrantの場合)リダイレクト先のURLを指定

Slide 14

Slide 14 text

Copyright © 2024, Oracle and/or its affiliates 14 参考: デモ構成の解説 – Identity Domains/IDCS Data sourceから提供されるAPIをOAuth 2.0で保護するためのIdentity Domains/IDCSの設定例 aud(トークンの発⾏先)として、 AgentのAPI Endpointを指定 Data Storeの検索APIを 実⾏するためのscopeを作成 作成したscopeを指定

Slide 15

Slide 15 text

Copyright © 2024, Oracle and/or its affiliates 15 PUT ${OPENSEARCH_ENDPOINT}/_plugins/_security/api/securityconfig/config 参考: デモ構成の解説 – OCI Search Service w/ OpenSearch { "dynamic": { "authc": { "openid_auth_domain": { "http_enabled": true, "transport_enabled": true, "order": 0, "http_authenticator": { "challenge": false, "type": "openid", "config": { "subject_key": "sub", "roles_key": "scope", "openid_connect_url": "https://...oraclecloud.com/.well-known/openid-configuration" } }, "authentication_backend": { "type": "noop", "config": {} }, "description": "Authenticate using OpenId connect" }, "basic_internal_auth_domain": { "http_enabled": true, "transport_enabled": true, "order": 1, "http_authenticator": { "challenge": true, "type": "basic", "config": {} }, "authentication_backend": { "type": "intern", "config": {} }, "description": "Authenticate via HTTP Basic against internal users database" } }, "authz": null } } OpenSearchに対するセキュリティ設定 (OpenID Connect)

Slide 16

Slide 16 text

Copyright © 2024, Oracle and/or its affiliates 16 PUT ${OPENSEARCH_ENDPOINT}/_plugins/_security/api/roles/genaiagent PUT ${OPENSEARCH_ENDPOINT}/_plugins/_security/api/rolesmapping/genaiagent 参考: デモ構成の解説 – OCI Search Service w/ OpenSearch { "description": "Role to be used by Generative AI Agent having read only permission to all Indexes", "cluster_permissions": [ "cluster_composite_ops_ro" ], "index_permissions": [ { "index_patterns": [ "*" ], "fls": [], "masked_fields": [], "allowed_actions": [ "read" ] } ], "tenant_permissions": [] } { "backend_roles": [ "genaiagent" ], "hosts": [], "users": [] } 全てのIndexに対するread操作が許可されたRoleを作成 作成したRoleを紐づける(マッピングさせる)対象の設定 今回は、genaiagentというスコープが含まれているAccess TokenであればOK (roles_keyにscopeを指定しているため)

Slide 17

Slide 17 text

Copyright © 2024, Oracle and/or its affiliates 17 参考: デモ構成の解説 – OCI Generative AI Agents Service(Beta) 使⽤するData sourceを選択 (今回は、OpenSearch v2.3.0) 使⽤するCache storeを選択 使⽤するIdentity Domains or IDCSに関する設定

Slide 18

Slide 18 text

Copyright © 2024, Oracle and/or its affiliates 18 LangChain/LlamaIndex Integration

Slide 19

Slide 19 text

Copyright © 2024, Oracle and/or its affiliates 19 LangChain • ⾔語モデルを利⽤したアプリケーション開発のためのフレームワーク • LangChain(Python), LangChain JS(JavaScript/TypeScript) • モジュール • Model I/O: ⾔語モデルとのインタフェース • Retrieval: アプリケーション固有のデータとのインタフェース • Agents: ⾔語モデルを推論エンジンとして使⽤し、どのアクションをどの順番で実⾏するかを決定する • Chains: データの前処理や⾔語モデル、各ツールにおける呼び出しのシーケンスを構築する • Memory: チェーンの実⾏間でアプリケーションの状態を保持する • Callbacks: 様々なステージにフックできるコールバックシステムを提供 LangChain

Slide 20

Slide 20 text

Copyright © 2024, Oracle and/or its affiliates 20 v0.1.4のリリースでOCI Generative AI Serviceとの統合がサポート …

Slide 21

Slide 21 text

Copyright © 2024, Oracle and/or its affiliates 21 LangChain + OCI Generative AI Service Generate Texts from os import getenv from dotenv import load_dotenv from langchain_community.llms.oci_generative_ai import OCIGenAI load_dotenv() COMPARTMENT_ID = getenv("COMPARTMENT_ID") # https://inference.generativeai.us-chicago-1.oci.oraclecloud.com SERVICE_ENDPOINT = getenv("GEN_AI_INFERENCE_ENDPOINT") llm = OCIGenAI( service_endpoint=SERVICE_ENDPOINT, compartment_id=COMPARTMENT_ID, model_id="cohere.command", # auth_type=“API_KEY”, # デフォルトでは、API Keyが認証⽅式として使⽤される auth_profile="CHICAGO" ) response = llm.invoke("Tell me a joke", temperature=0.7) print(response) # Why was the computer cold? Because it left its Windows open! ...

Slide 22

Slide 22 text

Copyright © 2024, Oracle and/or its affiliates 22 LangChain + OCI Generative AI Service Embeddings from os import getenv from dotenv import load_dotenv from langchain_community.embeddings.oci_generative_ai import OCIGenAIEmbeddings load_dotenv() COMPARTMENT_ID = getenv("COMPARTMENT_ID") # https://inference.generativeai.us-chicago-1.oci.oraclecloud.com SERVICE_ENDPOINT = getenv("GEN_AI_INFERENCE_ENDPOINT") embeddings = OCIGenAIEmbeddings( model_id="cohere.embed-english-v3.0", service_endpoint=SERVICE_ENDPOINT, compartment_id=COMPARTMENT_ID ) response = embeddings.embed_query(text="This is a query in English.") print(response) # [-0.008598328, -0.030687425, -0.00093364716, ...

Slide 23

Slide 23 text

Copyright © 2024, Oracle and/or its affiliates 23 • LangChainには、拡張⽬的の基底クラスが存在する • LLM → langchain_core.language_models.llms.LLM • Embeddings → langchain_core.embeddings.Embeddings • VectorStore → langchain_core.vectorstores.VectorStore • … • これらを継承することで、あらゆるLLM, VectorStore, …をLangChainに対応させることができる • OCI Generative AI Services • community/langchain_community/llms/oci_generative_ai.py • community/langchain_community/embeddings/oci_generative_ai.py 参考: LangChainの拡張

Slide 24

Slide 24 text

Copyright © 2024, Oracle and/or its affiliates 24 Session Token Instance Principal Resource Principal LangChain + OCI Generative AI Service その他の認証⽅式(Session Token, Instance Principal, Resource Principal)をサポート llm = OCIGenAI( # ... omit ... auth_type="SECURITY_TOKEN", auth_profile="langchain" ) llm = OCIGenAI( # ... omit ... auth_type="INSTANCE_PRINCIPAL", ) llm = OCIGenAI( # ... omit ... auth_type="RESOURCE_PRINCIPAL", )

Slide 25

Slide 25 text

Copyright © 2024, Oracle and/or its affiliates 25 LangChainを⽤いた最⼩限のRAGの実装例 embeddings = OCIGenAIEmbeddings( # ... omit ... ) vectorstore = FAISS.from_documents( documents=documents, embedding=embeddings ) retriever = vectorstore.as_retriever() template = """Answer the question based only on the following context: {context} Question: {question} """ prompt = PromptTemplate.from_template(template=template) llm = OCIGenAI( # ... omit ... ) chain = ( {"context": retriever, "question": RunnablePassthrough()} | prompt | llm | StrOutputParser() ) print(chain.invoke("What is region?")) クエリに関連するドキュメントをFAISS*(Facebook AI Similarity Search)から返却する *: Facebook(現Meta)が開発した類似検索⽤ライブラリ LLMに最終的に渡すプロンプトの定義 どのような順番で実⾏されるのか(=チェーン)を定義︓ 1. クエリの内容を元にFAISSに問い合わせて、関連度の⾼い ドキュメントを取得 2. 取得したドキュメントと質問内容をテンプレートに埋め込み 3. LLMに作成したプロンプトを渡して回答を⽣成させる

Slide 26

Slide 26 text

Copyright © 2024, Oracle and/or its affiliates 26 あらゆる⽣成AIをサポートする、データ・プラットフォーム AIアプリケーション開発の⽣産性向上 • ベクトル・データを含む、あらゆるデータタイプを⼀つのデータベースで • 構造化データとベクトル・データのベクトル検索をSQLで ⾼速なベクトル検索 • パーティション化された、ベクトル索引 • グラフ・テクノロジーを活⽤した、ベクトル検索 ⾼可⽤性、スケーラビリティ、セキュリティ • データ整合性を保持し、スケールアウトを可能 • Exadata Cloudの持つ、⾼性能、⾼可⽤性、堅牢なセキュリティを ベクトル検索に Oracle Database 23c AI Vector Search Oracle Databaseが新たにベクトル・データをサポート 7 1 4 9

Slide 27

Slide 27 text

Copyright © 2024, Oracle and/or its affiliates 27 デモシナリオ︓ • LLM(Generative AI Serviceのモデル)が学習していないデータをあらかじめOracle Database 23cに保存 • ユーザーからのプロンプトにLLMが応答できない場合、データソースを検索する • 検索により得られた情報をLLMに連携し、最終的な応答テキストを作成 Demo: LangChain + Generative AI Serviceを⽤いたRAG構成 Application (Streamlit) prompt completion Generative AI Service Oracle Database 23c OCI Serviceに関する情報 が保存済み OCI Generative AI Serviceの テキスト⽣成モデル (command)を利⽤

Slide 28

Slide 28 text

Copyright © 2024, Oracle and/or its affiliates 28 • Generative AI Agents • https://www.oracle.com/jp/artificial-intelligence/generative-ai/agents/ • Generative AI Agents – API Reference • https://docs.public.oneportal.content.oci.oraclecloud.com/en-us/iaas/api/ - /en/generative-ai- agents/20240331/ • LangChain • https://github.com/langchain-ai/langchain • デモで使⽤したコード • https://github.com/oracle-japan/ai-bbs-genai-practice 参考情報

Slide 29

Slide 29 text

Thank you Copyright © 2024, Oracle and/or its affiliates 29