11
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Oracle Cloud InfrastructureAdvent Calendar 2024

Day 17

OCI Generative AI AgentsをGradioに実装してみた

Last updated at Posted at 2024-12-17

はじめに

OCI Generative AI Agents サービスはAIエージェントのマネージドサービスで、OCIのWebコンソール上でのチャット機能を標準で提供しています。
image.png
このようにOCIにログインしてWebコンソールから利用する方法以外に、APIで外部サービスからチャットを利用する方法について検証してみました。

Generative AI Agentsの基本的な機能については下記にまとめていただいています。

OCI Python SDK を利用したGenerative AI Agents の操作については下記を参考にさせていただいております。

構成

本記事の内容は、OCI Generative AI Agentsのナレッジベースやチャットは設定できており、正常に動作している事を前提としています。
構成としては下記となりますが、本記事は主に左のComputeについてのお話となります。
image.png

事前準備

今回はUbuntu 24.04 と Python 3.12を利用していますが、他の環境でも大きくは変わらないと考えています。

OSの下準備

OSの下準備
# OSの最新化
sudo apt update
sudo apt upgrade -y

# venvのインストール
sudo apt install python3.12-venv -y

# アプリ用のvenvの作成
python3 -m venv ~/agents01
source ~/agents01/bin/activate
mkdir ./agents_app/
cd ./agents_app/

# 必要ライブラリのインストール
pip install gradio oci

OCIのAPIの利用準備

OCIのAPIが利用できるように認証の設定を行います。
詳細は下記の記事などをご参考にしてください。

今回は ~/.oci/config にOCI接続の設定が記載されていて、正常にAPIが実行できる前提でのお話となります。

Gradioのスクリプトを作成

ライブラリのインポートと変数の定義

必要ライブラリと事前に定義できそうな変数を記載します

app.py
import oci
import gradio as gr

# 作成したGenerative AI Agents のエンドポイントの OCID
agent_endpoint_id = "ocid1.genaiagentendpoint.oc1.us-chicago-1.XXXXXXXXXXXXXXXXXXXXXXXXXX"
# Generative AI Agents を実行するためのエンドポイントを明記(現在はシカゴにしか無いため)
service_endpoint = "https://agent-runtime.generativeai.us-chicago-1.oci.oraclecloud.com"

Generative AI Agentsのクライアントの初期化

Generative AI Agentsとの通信を行うためのクライアントを定義して初期化します

app.py
# クライアントの初期化
# 認証情報が ~/.oci/config に入ってる場合
config = oci.config.from_file("~/.oci/config")
agent_runtime_client = oci.generative_ai_agent_runtime.GenerativeAiAgentRuntimeClient(
    config=config,
    service_endpoint=service_endpoint
)

チャットのセッションを作成する関数

セッション作成しないとチャットできないので、最初にセッションを作成する。

app.py
def create_agent_session():
    response = agent_runtime_client.create_session(
        create_session_details=oci.generative_ai_agent_runtime.models.CreateSessionDetails(
            display_name="EXAMPLE-agent", # 任意のdisplay name
            description="EXAMPLE-description"), # 任意の説明
        agent_endpoint_id=agent_endpoint_id, # AgentのエンドポイントOCID
    )
    # response.data.id に session id が入っている
    return response.data.id

チャットを実行する関数

ユーザー入力を受け取り、OCIのAPIと通信してAgentsに問合せ、帰ってきた結果を返す

app.py
def get_agent_response(session,user_input):
    response = agent_runtime_client.chat(
        agent_endpoint_id = agent_endpoint_id,
        chat_details=oci.generative_ai_agent_runtime.models.ChatDetails(
            user_message=user_input,
            should_stream=False,
            session_id=session),
    )
    # response.data.message.content.text にAgentの答えが入っている
    return response.data.message.content.text

Gradioの画面にチャットを表示する関数

Agentsから帰ってきた答えをGradioのチャット画面に表示する関数

app.py
def chat_response(session, history, user_input):
    # 応答を生成する
    agent_response=get_agent_response(session, user_input)
    bot_response = f"回答: {agent_response}"
    history.append(("質問: " + user_input, bot_response))
    print (bot_response)
    return session, history, ""

Gradioのインターフェース作成

Gradioで簡易UIを作成

app.py
with gr.Blocks() as chat_interface:
    # タイトル
    gr.Markdown("## OCIの疑問にお答えbot")
    
    # チャット履歴用のコンポーネント
    chat_history = gr.Chatbot()
    
    # 入力ボックスと送信ボタン
    user_input = gr.Textbox(label="OCIに関する疑問を入力してください", placeholder="ここに質問を入力", lines=1)
    send_button = gr.Button("Send")
    
    #Agentのsession初期化
    session_id=create_agent_session()
    
    # 状態管理
    session = gr.State(session_id) #セッションIDをここに保持
    history_state = gr.State([]) #チャット履歴をここに保持
    
    # ユーザー入力時の動作
    send_button.click(
        chat_response,
        inputs=[session, history_state, user_input], 
        outputs=[session, chat_history, user_input]
    )

# 実行
chat_interface.launch(
    server_name="0.0.0.0"
)

アプリ実行

# OCIはデフォルトでファイアーウォール有効なので、必要に応じて通信の許可
# また、OCIのセキュリティリストで TCP 7860 のイングレスが許可されていること
sudo iptables -F
# Gradio UI の実行
python3 app.py

インスタンスのパブリックIP:7860 にアクセスするとチャット画面が表示されます。
Agentsと同様の受け答えが可能です。
image.png

まとめ

以上が外部アプリからの Generative AI Agentsの利用方法の例となります。
Gradio以外でも大まかに同様の方法でチャット機能を実装できますので、参考になれば幸いです。

11
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
11
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?