TECH PLAY

Elm

イベント

該当するコンテンツが見つかりませんでした

マガジン

技術ブログ

G-gen の佐々木です。当記事では、法令 API を使用して日本の法令を検索できる AI エージェントを構築し、Google Cloud 上で動作するチャットボットとして利用できるようにします。 構成 法令 API エージェント Google Cloud 上の構成 当記事で使用するもの 法令 API Agent Development Kit(ADK) Vertex AI Agent Engine Cloud Run バックエンドの構築 バックエンドの概要 法令 API エージェントの開発 ディレクトリ構成 プロジェクトの準備 agent.py init.py requirements.txt .env ローカルでの動作確認(ADK Web UI) エージェントのデプロイ Google Cloud の認証と設定 Agent Engine へのデプロイ フロントエンドの構築 フロントエンドの概要 チャットボットの開発 ディレクトリ構成 プロジェクトの準備 app.py Dockerfile OAuth 同意画面の構成 Cloud Run へのデプロイ サービスアカウントの作成 デプロイ 動作確認 機能の拡張について 判例検索エージェントの追加 Memory Bank による長期記憶の実装 構成 法令 API エージェント 当記事では、 Agent Development Kit (ADK) で定義された AI エージェントが Gemini モデルを LLM として使用し、ユーザーの質問に応じて 法令 API を呼び出すように構成していきます。 具体的には、ユーザーがチャットで質問を送ると Gemini がその意図を解釈し、エージェントに定義されたツール関数(法令 API を呼び出す関数)を選択・実行します。法令 API から返された検索結果や条文データは Gemini によって要約・整形され、自然言語による回答がユーザーに返ります。 法令 API エージェントの構成 Google Cloud 上の構成 当記事では、ADK で定義した AI エージェントを Vertex AI Agent Engine に、エージェントを利用するチャットボットを Cloud Run にデプロイします。 この2つのサービスは、いずれも ユーザーによるインフラ管理が不要 なフルマネージドな実行基盤を提供し、また リクエストを処理しているときだけ料金が発生する という特徴があります。 また、Cloud Run で Identity-Aware Proxy(IAP) を有効化することで、Google アカウントで認証したユーザーのみがチャットボットを利用できるようにします。 法令検索チャットボットの構成 参考 : Identity-Aware Proxy の概要 当記事で使用するもの 法令 API 法令 API はデジタル庁が提供している「e-Gov 法令検索」に格納されている法令(法律・政令・省令など)のデータを取得できる API であり、HTTP リクエストで法令一覧や法令の本文を取得したり、キーワード検索を行ったりできます。 API 仕様書は OpenAPI Specification(OAS)に基づいて作成されており、Swagger UI 上で各エンドポイントの仕様確認やリクエストの試行が可能です。また、YAML 形式の仕様ファイルも公開されています。 API の利用にあたっては認証や API キーの取得は不要であり、誰でも無料で利用できます。 参考 : e-Gov 法令検索 参考 : 法令API Version 2 参考 : デジタル庁における法令API、法令×デジタルの取り組みについて Agent Development Kit(ADK) Agent Development Kit (以下、 ADK )は、Google Cloud が提供する AI エージェント構築のためのオープンソース フレームワークであり、単純なタスクをこなすエージェントから複数のエージェントが協働する複雑なワークフローまで容易に実装できます。 参考 : Agent Development Kit 参考 : Agent Development Kit の概要 Vertex AI Agent Engine Vertex AI Agent Engine (以下、 Agent Engine )は AI エージェントの実行基盤を提供するフルマネージドサービスです。 Agent Engine ではエージェントとのマルチターン会話を実現する セッション機能 が組み込みで提供されており、その他、エージェントの機能拡張に必要な様々な機能を利用できます。 Agent Engine の詳細については、以下の記事をご一読ください。 blog.g-gen.co.jp Cloud Run Cloud Run は Google Cloud のマネージドなコンテナ実行環境でアプリケーションを実行できる、サーバーレス コンテナコンピューティング サービスです。 Cloud Run はエージェントの実行基盤としても有用なサービスです。Agent Engine と比較すると、インフラ環境のカスタマイズ性に優れる反面、セッションなどエージェント特有の機能は独自に実装していく必要があります。 当記事では、エージェント自体の実行基盤としては Agent Engine を利用し、フロントエンドとしてエージェントとやり取りを行うチャットボットを Cloud Run に構築していきます。 Cloud Run の詳細については、以下の記事をご一読ください。 blog.g-gen.co.jp バックエンドの構築 バックエンドの概要 バックエンドとして、法令 API を呼び出す AI エージェントを ADK で開発し、Agent Engine にデプロイします。 バックエンドとして構築する範囲 法令 API エージェントの開発 ディレクトリ構成 最終的なディレクトリ構成は以下の通りになります。 lawapi_agent ディレクトリで AI エージェントを実装していきます。 . ├── lawapi_agent │ ├── agent.py │ ├── .env │ ├── __init__.py │ └── requirements.txt ├── pyproject.toml # 自動で作成 └── uv.lock # 自動で作成 ADK ではエージェントのパッケージ(ここでは lawapi_agent ディレクトリ)内に agent.py を配置し、そこにツール関数とエージェント定義を実装します。 プロジェクトの準備 エージェント開発用のディレクトリでプロジェクトを初期化します。 # uv プロジェクト初期化 $ uv init --no-readme # パッケージの追加 $ uv add " google-adk>=1.27.3 " " google-cloud-aiplatform[agent-engines]>=1.142.0 " " httpx>=0.28 " " python-dotenv>=1.1 " agent.py エージェントが法令検索を実行するためのツールとして、以下のツール関数を実装し、それらを使用するエージェントを ADK で定義します。 ツール関数名 処理内容 search_laws_by_keyword キーワードによる法令の全文検索を行います。該当した法令の条文テキストも一部取得します。 list_laws 法令名(部分一致)や法令種別などの条件を指定して、法令の一覧や法令 ID を取得します。 get_law_detail 法令 ID や法令番号を指定して、対象の法令データ(全文または特定の要素)を取得します。 ツール関数の docstring は ADK を通じて Gemini に渡されるため、引数の説明を正確に記述することが重要です。 コード末尾の root_agent でエージェントを定義しています。使用するモデルや振る舞いを指示するプロンプト( instruction )と、上記3つのツール関数を指定しています。 import httpx from google.adk.agents import Agent BASE_URL = "https://laws.e-gov.go.jp/api/2" def search_laws_by_keyword (keyword: str , limit: int = 10 ) -> dict : """法令の本文をキーワードで全文検索します。 Args: keyword: 検索キーワード。AND/OR/NOT検索やワイルドカード(*,?)が使えます。 limit: 取得件数の上限(デフォルト10、最大1000)。 Returns: dict: 検索結果。ヒットした法令と該当箇所のテキストを含みます。 """ try : resp = httpx.get( f "{BASE_URL}/keyword" , params={ "keyword" : keyword, "limit" : limit}, timeout= 30 , ) resp.raise_for_status() data = resp.json() total = data.get( "total_count" , 0 ) items = [] for item in data.get( "items" , []): law_info = item.get( "law_info" , {}) sentences = item.get( "sentences" , []) items.append({ "law_title" : law_info.get( "law_title" ), "law_num" : law_info.get( "law_num" ), "law_id" : law_info.get( "law_id" ), "matched_sentences" : [ { "position" : s.get( "position" ), "text" : s.get( "text" )} for s in sentences[: 5 ] ], }) return { "status" : "success" , "total_count" : total, "items" : items} except httpx.HTTPStatusError as e: return { "status" : "error" , "error_message" : f "APIエラー: {e.response.status_code}" } except Exception as e: return { "status" : "error" , "error_message" : str (e)} def list_laws (law_title: str = "" , law_type: str = "" , category_cd: str = "" , limit: int = 10 ) -> dict : """条件を指定して法令の一覧を取得します。 Args: law_title: 法令名(部分一致)。例: "個人情報", "労働基準" law_type: 法令種別。Constitution,Act,CabinetOrder,ImperialOrder,MinisterialOrdinance,Rule,Misc から指定。 category_cd: 事項別分類コード(001〜050)。例: "046"(民事), "002"(刑事) limit: 取得件数の上限(デフォルト10)。 Returns: dict: 法令一覧。法令名、法令番号、法令IDなどを含みます。 """ try : params = { "limit" : limit} if law_title: params[ "law_title" ] = law_title if law_type: params[ "law_type" ] = law_type if category_cd: params[ "category_cd" ] = category_cd resp = httpx.get(f "{BASE_URL}/laws" , params=params, timeout= 30 ) resp.raise_for_status() data = resp.json() total = data.get( "total_count" , 0 ) laws = [] for law in data.get( "laws" , []): info = law.get( "law_info" , {}) laws.append({ "law_title" : info.get( "law_title" ), "law_num" : info.get( "law_num" ), "law_id" : info.get( "law_id" ), "law_type" : info.get( "law_type" ), }) return { "status" : "success" , "total_count" : total, "laws" : laws} except httpx.HTTPStatusError as e: return { "status" : "error" , "error_message" : f "APIエラー: {e.response.status_code}" } except Exception as e: return { "status" : "error" , "error_message" : str (e)} def get_law_detail (law_id: str , elm: str = "" ) -> dict : """法令IDを指定して法令の本文を取得します。 Args: law_id: 法令ID(例: "322CO0000000016")または法令番号(例: "昭和二十二年政令第十六号")。 elm: 取得する要素のパス。省略すると全文を取得します。 例: "MainProvision-Article_1" で第1条を取得。 Returns: dict: 法令の本文データ(JSON light形式)。 """ try : params = { "response_format" : "json" , "json_format" : "light" } if elm: params[ "elm" ] = elm resp = httpx.get(f "{BASE_URL}/law_data/{law_id}" , params=params, timeout= 30 ) resp.raise_for_status() data = resp.json() law_info = data.get( "law_info" , {}) revision_info = data.get( "revision_info" , {}) law_full_text = data.get( "law_full_text" , {}) return { "status" : "success" , "law_title" : law_info.get( "law_title" ), "law_num" : law_info.get( "law_num" ), "amendment_date" : revision_info.get( "amendment_date" ), "law_full_text" : law_full_text, } except httpx.HTTPStatusError as e: return { "status" : "error" , "error_message" : f "APIエラー: {e.response.status_code}" } except Exception as e: return { "status" : "error" , "error_message" : str (e)} root_agent = Agent( name= "law_search_agent" , model= "gemini-2.5-flash" , description= "日本の法令を検索・閲覧できるAIエージェント" , instruction=( "あなたは日本の法令を検索・調査する専門アシスタントです。 \n " "e-Gov法令APIを使って、ユーザーの質問に回答してください。 \n\n " "## 使い方のガイドライン \n " "- ユーザーが法律の内容について質問した場合、まず search_laws_by_keyword や list_laws で該当する法令を特定してください。 \n " "- 特定の法令の条文を確認したい場合は get_law_detail を使ってください。 \n " "- 条文を引用する際は、法令名と条番号を明記してください。 \n " "- 法令の解釈については、条文の内容を正確に伝えた上で、一般的な解釈を説明してください。 \n " "- 専門的な法的判断が必要な場合は、弁護士等の専門家への相談を推奨してください。 \n " ), tools=[search_laws_by_keyword, list_laws, get_law_detail], ) init .py ADK がエージェントパッケージを認識するために必要なファイルです。以下の1行だけ記述しておきます。 from . import agent requirements.txt Agent Engine へのデプロイ時に使用される依存関係の定義です。ローカル開発ではルートの pyproject.toml が使用されるため、このファイルはデプロイ専用です。 google-adk httpx google-cloud-aiplatform[adk,agent_engines] .env Gemini モデルを使用するための Vertex AI の接続設定を記述します。 adk web コマンドによるエージェントのローカル実行時に自動で読み込まれます。Agent Engine 上では Vertex AI の設定が自動で適用されるため、このファイルはローカル実行専用のものです。 GOOGLE_GENAI_USE_VERTEXAI = 1 GOOGLE_CLOUD_PROJECT = < プロジェクトID > GOOGLE_CLOUD_LOCATION =asia-northeast1 ローカルでの動作確認(ADK Web UI) 以下のコマンドを実行すると ADK の Web UI がローカルで起動します。ブラウザで http://localhost:8000 を開き、チャットでエージェントが正しく動作することを確認します。 # ADK Web UI の起動 $ uv run adk web . # ----- 出力の抜粋 ----- INFO: Started server process [ 49931 ] INFO: Waiting for application startup. +--------------------------------------------------------------------------- -- + | ADK Web Server started | | | | For local testing, access at http:// 127 . 0 . 0 .1:8000. | +--------------------------------------------------------------------------- -- + INFO: Application startup complete . INFO: Uvicorn running on http:// 127 . 0 . 0 .1:8000 ( Press CTRL+C to quit ) チャット UI から法令に関する質問を送信してみます。 ADK Web UI を使用したローカルでのエージェントの動作確認 エージェントが質問内容から適切なツール関数を判断・実行することで、法令 API からデータを取得して回答を行っています。 エージェントのデプロイ Google Cloud の認証と設定 デプロイの前に、Google Cloud CLI での認証を行っておきます。 # プロジェクト ID をシェル変数にセット $ PROJECT_ID = < プロジェクトID > # 認証 $ gcloud auth login $ gcloud auth application-default login # プロジェクトの設定 $ gcloud config set project $PROJECT_ID Agent Engine へのデプロイ adk deploy コマンドを使用して、 Agent Engine にエージェントをデプロイします。 # Agent Engine にエージェントをデプロイ $ uv run adk deploy agent_engine \ --project = $PROJECT_ID \ --region = asia-northeast1 \ --display_name =" Law Search Agent " \ lawapi_agent デプロイが成功すると、以下のように Agent Engine のリソース名が出力されます。 ✅ Created agent engine: projects/ < プロジェクト番号 > /locations/asia-northeast1/reasoningEngines/ < エージェント固有の数字 > このリソース名はチャットボットのデプロイ時に使用するため、シェル変数にセットしておきます。 # シェル変数にリソース名をセット ENGINE_ID =projects/ < プロジェクト番号 > /locations/asia-northeast1/reasoningEngines/ < エージェント固有の数字 > フロントエンドの構築 フロントエンドの概要 機械学習モデルのデモ用 Web UI を容易に作成できる Gradio という Python ライブラリを使用してチャットボットを実装します。 チャットボットは、コンテナイメージ化して Cloud Run にデプロイし、Web サービスとして公開できるようにします。 フロントエンドとして構築する範囲 参考 : Gradio チャットボットの開発 ディレクトリ構成 フロントエンドはエージェントとは別のディレクトリで構築します。 最終的なディレクトリ構成は以下の通りになります。 app.py にチャットボットを実装していきます。 . ├── app.py ├── Dockerfile ├── pyproject.toml # 自動で作成 └── uv.lock # 自動で作成 プロジェクトの準備 エージェントとは別のディレクトリで uv プロジェクトを初期化します。 # uv プロジェクト初期化 $ uv init --no-readme # パッケージの追加 $ uv add " google-cloud-aiplatform[agent-engines]>=1.142.0 " " gradio>=5.29 " app.py app.py では以下の処理を実装しています。 vertexai.init() で Vertex AI に接続し、 agent_engines.get() で Agent Engine にデプロイしたエージェントを取得 Agent Engine のセッション機能( create_session )を使い、ユーザーごとにマルチターンの会話を管理 agent.stream_query() でエージェントにメッセージを送信し、ストリーミングで応答を受信 gr.Blocks で Gradio のチャット UI を構築 import os import uuid import gradio as gr import vertexai from vertexai import agent_engines AGENT_ENGINE_ID = os.environ[ "AGENT_ENGINE_ID" ] def get_agent (): vertexai.init( project=os.environ.get( "GOOGLE_CLOUD_PROJECT" ), location=os.environ.get( "GOOGLE_CLOUD_LOCATION" ), ) return agent_engines.get(AGENT_ENGINE_ID) agent = get_agent() def chat (message: str , history: list , session_state: dict ) -> tuple [ str , dict ]: user_id = session_state.get( "user_id" ) if not user_id: user_id = str (uuid.uuid4()) session_state[ "user_id" ] = user_id session_id = session_state.get( "session_id" ) if not session_id: session = agent.create_session(user_id=user_id) session_id = session[ "id" ] session_state[ "session_id" ] = session_id response_text = "" for event in agent.stream_query( message=message, user_id=user_id, session_id=session_id, ): if event.get( "content" ) and event[ "content" ].get( "parts" ): for part in event[ "content" ][ "parts" ]: if part.get( "text" ): response_text += part[ "text" ] yield response_text, session_state with gr.Blocks( title= "法令検索エージェント" , fill_height= True , css= """ .title-row { text-align: center; margin-bottom: 0; } .caption-row { text-align: center; margin-top: 0; color: #666; font-size: 0.9em; } .input-row { position: sticky; bottom: 0; background: var(--background-fill-primary); padding: 10px 0; } """ , ) as demo: gr.Markdown( "<h1 class='title-row'>⚖️ 法令検索エージェント</h1>" "<p class='caption-row'>e-Gov法令APIを使って日本の法令を検索します</p>" ) session_state = gr.State(value={}) chatbot = gr.Chatbot( show_label= False , scale= 1 , avatar_images=( None , "https://em-content.zobj.net/source/google/412/balance-scale_2696-fe0f.png" ), placeholder= "質問を入力すると、ここに会話が表示されます" , ) with gr.Row(elem_classes= "input-row" ): textbox = gr.Textbox( placeholder= "法令について質問してください(例: 個人情報保護法の目的は?)" , show_label= False , container= False , scale= 7 , ) def respond (message, history, session_state): history = history + [ { "role" : "user" , "content" : message}, ] yield history, session_state, gr.update(value= "" , interactive= False ) assistant_text = "" for text, updated_state in chat(message, history, session_state): assistant_text = text session_state = updated_state yield ( history + [{ "role" : "assistant" , "content" : assistant_text}], session_state, gr.update(interactive= False ), ) yield ( history + [{ "role" : "assistant" , "content" : assistant_text}], session_state, gr.update(interactive= True ), ) textbox.submit( respond, inputs=[textbox, chatbot, session_state], outputs=[chatbot, session_state, textbox], ) if __name__ == "__main__" : port = int (os.environ.get( "PORT" , 8080 )) demo.launch(server_name= "0.0.0.0" , server_port=port) Dockerfile Cloud Run にデプロイするためのコンテナイメージを定義します。uv の公式イメージからバイナリをコピーし、依存パッケージのインストールとアプリケーションの起動を行います。 FROM python:3.14-slim COPY --from=ghcr.io/astral-sh/uv:latest /uv /uvx /bin/ WORKDIR /app COPY pyproject.toml uv.lock ./ RUN uv sync --frozen --no-dev COPY app.py . EXPOSE 8080 CMD [ " uv ", " run ", " python ", " app.py " ] OAuth 同意画面の構成 Cloud Run で IAP を有効化すると、Cloud Run 上のサービスへのアクセス時に Google アカウントでのログインが求められるようになり、許可されたユーザーのみがチャットボットを利用できます。 プロジェクトで OAuth 同意画面の構成をまだ行っていない場合、以下のドキュメントを参照して実施してください。 参考 : OAuth 同意画面を設定し、スコープを選択する Cloud Run へのデプロイ サービスアカウントの作成 Cloud Run 用のカスタムサービスアカウントを作成し、Agent Engine へのアクセスに必要な Vertex AI ユーザー ( roles/aiplatform.user )ロールを付与します。 # サービスアカウントの作成 $ gcloud iam service-accounts create lawapi-frontend \ --display-name =" Law API Frontend " # Vertex AI User ロールの付与 $ gcloud projects add-iam-policy-binding $PROJECT_ID \ --member =" serviceAccount:lawapi-frontend@ ${PROJECT_ID} .iam.gserviceaccount.com " \ --role =" roles/aiplatform.user " デプロイ gcloud run deploy コマンドで Cloud Run にデプロイします。 --source オプションを指定すると、Cloud Build によるコンテナイメージのビルドとデプロイが自動で行われます。 --no-allow-unauthenticated と --iap を指定することで、IAP で認証されたユーザーのみがアクセスできるようにしています。 --service-account で先ほど作成したカスタムサービスアカウントを指定します。 $ gcloud run deploy lawapi-frontend \ --source . \ --region asia-northeast1 \ --set-env-vars " GOOGLE_CLOUD_PROJECT= $PROJECT_ID ,GOOGLE_CLOUD_LOCATION=asia-northeast1,AGENT_ENGINE_ID= $ENGINE_ID " \ --service-account lawapi-frontend@ ${PROJECT_ID} .iam.gserviceaccount.com \ --cpu 1 \ --memory 1Gi \ --no-allow-unauthenticated \ --iap Cloud Run の各種設定項目の詳細については、以下の記事もご一読ください。 blog.g-gen.co.jp 動作確認 デプロイが完了したら、Cloud Run サービスの URL にブラウザでアクセスします。 # デプロイ後に出力されるサービス URL Service URL: https://lawapi-frontend- < プロジェクト番号 > .asia-northeast1.run.app IAP が有効化されているため、Google アカウントでのログインが求められます。 IAP で保護されたウェブアプリ ユーザー ( roles/iap.httpsResourceAccessor )ロールが付与されたユーザーでログインします。 Google アカウントでログインする ログイン後、チャット画面が表示されるので、法令に関する質問を入力してエージェントの動作を確認します。 例えば「個人情報保護法の目的は?」と質問すると、エージェントが法令 API を通じて個人情報保護法の条文を検索し、第1条の目的規定を引用しながら回答を返します。 チャットボットの動作確認 エージェントは会話のコンテキスト(文脈)を保持しているため、続けて「罰則はある?」のように追加の質問をすると、同じ法令の関連する条文を検索して回答します。 セッションによってコンテキストが保持されているかを確認 機能の拡張について 判例検索エージェントの追加 当記事で構築したエージェントは法令 API による法令の検索に特化していますが、ADK や Agent Engine の機能を活用することで、さらに高度なユースケースに対応させることができます。 たとえば、法令の条文だけでなく、実際の判例や裁判例を参照したいケースも多くあります。ADK では google_search ツールが組み込みで提供されており、以下のように判例を Web 検索するエージェントを構築できます( agent.py の追加実装例)。 from google.adk.tools import google_search case_search_agent = Agent( name= "case_search_agent" , model= "gemini-2.5-flash" , description= "日本の判例・裁判例をWeb検索するサブエージェント。判例の検索、要旨の確認、判例の解説ができます。" , instruction=( "あなたは日本の判例・裁判例を検索・調査する専門アシスタントです。 \n " "Google検索を使って、ユーザーの質問に関連する判例を検索してください。 \n\n " "## 使い方のガイドライン \n " "- 判例を検索する際は「判例」「裁判例」「最高裁」「判決」などのキーワードを組み合わせてください。 \n " "- 裁判所のウェブサイト(courts.go.jp)の情報を優先してください。 \n " "- 判例を引用する際は、裁判所名、判決日、事件番号を明記してください。 \n " "- 判例の要旨や判旨を正確に伝えてください。 \n " "- 判例の解釈については、一般的な学説・通説を踏まえて説明してください。 \n " "- 専門的な法的判断が必要な場合は、弁護士等の専門家への相談を推奨してください。 \n " ), tools=[google_search], ) このような判例検索エージェントを法令検索エージェントのツールの一つとして組み込むことで、エージェントはユーザーの質問内容に応じて適切なツールを使い分けます。法令と判例の両方に関わる質問では、両方のツールを同一ターンで呼び出すことも可能です。 from google.adk.tools.agent_tool import AgentTool root_agent = Agent( name= "legal_research_agent" , model= "gemini-2.5-flash" , description= "日本の法令検索と判例検索を統合したリーガルリサーチAIエージェント" , instruction=( "あなたは日本の法律に関するリーガルリサーチを支援する統合アシスタントです。 \n " "法令検索ツールと判例検索ツールを使い分けてください。 \n\n " "## ツールの使い分け \n " "- **search_laws_by_keyword / list_laws / get_law_detail**: 法律・政令・省令などの法令の条文を検索・閲覧したい場合に使ってください。 \n " "- **case_search_agent**: 判例・裁判例を検索したい場合に使ってください。 \n\n " "## ガイドライン \n " "- ユーザーの質問に応じて、適切なツールを選択してください。 \n " "- 法令と判例の両方が関連する質問の場合は、両方のツールを活用してください。 \n " "- 最終的な回答は、法令の条文と判例を総合して分かりやすくまとめてください。 \n " "- 専門的な法的判断が必要な場合は、弁護士等の専門家への相談を推奨してください。 \n " ), tools=[ search_laws_by_keyword, list_laws, get_law_detail, AgentTool(agent=case_search_agent), ], ) 以下のスクリーンショットは、法令と関連する判例を同時に質問した際のエージェントの動作例です。まず法令 API による条文検索が実施され、その後、ツールとして組み込んでおいた判例検索エージェントによる Web 検索が行われています。最終的には、それらの検索結果を整理したものが回答されています。 まず法令 API を使用して条文を検索するツールを実行する その後、判例検索エージェントが関連する判例を Web 検索・要約する 参考 : Google Search Grounding for agents Memory Bank による長期記憶の実装 当記事のチャットボットでは Agent Engine のセッション機能を使って会話のコンテキストを保持していますが、セッションはあくまで一連の会話の中での短期的な記憶です。 Agent Engine では Memory Bank という長期記憶の機能が提供されており、過去のセッションの内容をユーザーごとに記憶として蓄積し、新しいセッションでも参照できます。 例えば、あるユーザーが以前の会話である法令について調べていた場合、別の日に新しいセッションで「前回調べていた法律の最新の改正内容を教えて」と質問すると、Memory Bank に保存された過去のコンテキストをもとに適切な回答を返すことが期待できます。 このように、Memory Bank を活用することで、ユーザーごとにパーソナライズされた法令調査アシスタントを構築することが可能になります。 参考 : Vertex AI Agent Engine Memory Bank の概要 佐々木 駿太 (記事一覧) G-gen 最北端、北海道在住のクラウドソリューション部エンジニア 2022年6月に G-gen にジョイン。Google Cloud Partner Top Engineer に選出(2024 / 2025 Fellow / 2026)。好きな Google Cloud プロダクトは Cloud Run。 趣味はコーヒー、小説(SF、ミステリ)、カラオケなど。 Follow @sasashun0805
こんにちは、エンジニアの澤田です。 最近、社内でRustで書かれたプログラムを見かけることが増え、社内ライブラリにRustが導入されたりなど、社内でRustを使う気運が高まっているのを感じ、自分もRustを勉強してプログラムを書いてみよう!と思いました。 自分の業務に近いところでRustを使うのによさそうなテーマを考えたとき、前回書いた記事「 Haskellで階層化されたリストを1次元リストのリストに展開する 」ではXMLからデータを取りだすところができていなかったので、それをRustでやってみようと思います! ※rustc と cargo はバージョン 1.74.0 を使用しています。
こんにちは、エンジニアの澤田です。 普段の業務で、XMLなどから値を取り出して扱う際、データを処理しやすいように一度DBに格納して、DB上でデータを処理することがあるのですが、 XMLなどは階層構造になっているため、取り出したデータも階層構造になることが多く、そのままではDBに格納することが難しくなっています。 (FORCIAでよく使っているPostgresでは配列や階層化された配列を格納できますが、階層化された配列の場合、同一階層の配列は長さが同じでなければならない等の制約があります) 今回は、最近少しずつ勉強しているHaskellを使って、階層化された配列をDBに格納しやすい形に変換

動画

該当するコンテンツが見つかりませんでした

書籍

プログラミングElm

発売日:

Bookmark Icon

プログラミングElm