MENU
  • HOME
  • 取引実績
  • お問い合わせ
  • 資料DL
  • 会社概要
  • FAQ
  • Struccle記事
  • BigQuery記事
データ流通、検索エンジン開発のプロフェッショナル
DataStructor
  • HOME
  • 取引実績
  • お問い合わせ
  • 資料DL
  • 会社概要
  • FAQ
  • Struccle記事
  • BigQuery記事
DataStructor
  • HOME
  • 取引実績
  • お問い合わせ
  • 資料DL
  • 会社概要
  • FAQ
  • Struccle記事
  • BigQuery記事
  1. ホーム
  2. AI_Agent
  3. Agent開発
  4. AI Agent開発日記 2025/02/11

AI Agent開発日記 2025/02/11

2025 2/13
AI_Agent Agent開発
2025年2月12日2025年2月13日
目次

やりたいこと

Agent Builder を用いたデータストア参照型対話エージェントの作成において、
データストアのファイル数が増加することで回答率が低下する問題への対処を進める。

データストアファイルがCSVだった場合、ファイル数増加による回答率低下はみられるのか検証する。

  • 試したこと
    • 下記に記載している形式のGCSにインポート済みの1ファイルあたり100kbほどのcsvファイルと、データストアにファイルをインポートするコードを使ってファイル複数をアップしてファイル数増加による回答率低下はみられるのか検証する。
  • 結果
    • 下記エラーが発生し、ファイルをアップロードできなかった。
    • エラーの内容は、「ファイルにID列がなかった」というもので、ID列を追加してもアップロードできず、試しにウェブから手動でGCSにファイルをアップロードしたところ、正常にアップロード出来た。しかし、ウェブからの操作は不便なため、コードでアップロードする方法を調査する。

CSVファイル形式

answer,question
"所在地: 大阪府, 間取り: ワンルーム, 賃料: 30000円, 管理費: 0円, 敷金: 0円, 礼金: 0円",大阪府でワンルームの物件はありますか?
"所在地: 群馬県, 間取り: 1K, 賃料: 30000円, 管理費: 2000円, 敷金: 0円, 礼金: 0円",で1Kの物件はありますか?

データストアへファイルをアップロードするコード

from google.api_core.client_options import ClientOptions
from google.cloud import discoveryengine, storage
# Variables
def GCS_import_datastore(project_id,location,data_store_id,gcs_files):
 # Set client options
 client_options = (
  ClientOptions(api_endpoint=f"{location}-discoveryengine.googleapis.com")
  if location != "global"
  else None
 )
 # Create a client
 client = discoveryengine.DocumentServiceClient(client_options=client_options)
 # Set parent path
 parent = client.branch_path(
  project=project_id,
  location=location,
  data_store=data_store_id,
  branch="default_branch",
 )
 # Request to import documents
 request = discoveryengine.ImportDocumentsRequest(
  parent=parent,
  gcs_source=discoveryengine.GcsSource(
   input_uris=gcs_files, # リスト化したファイルを指定
   data_schema="content",
  ),
  reconciliation_mode=discoveryengine.ImportDocumentsRequest.ReconciliationMode.INCREMENTAL,
 )
 # Make the request
 operation = client.import_documents(request=request)
 print(f"Waiting for operation to complete: {operation.operation.name}")
 response = operation.result(timeout=6800)
 # Handle the response
 print("Response:", response)

データストアへファイルをアップロードするコードで発生したエラー

---------------------------------------------------------------------------
InvalidArgument                           Traceback (most recent call last)
Cell In[19], line 7
      5 for i in range(100):
      6     gcs_files.append(f"gs://{file_path}")
----> 7 GCS_import_datastore(project_id,location,data_store_id,gcs_files)

Cell In[18], line 41, in GCS_import_datastore(project_id, location, data_store_id, gcs_files)
     38 operation = client.import_documents(request=request)
     40 print(f"Waiting for operation to complete: {operation.operation.name}")
---> 41 response = operation.result(timeout=6800)
     43 # Handle the response
     44 print("Response:", response)

File /opt/anaconda3/envs/ab/lib/python3.11/site-packages/google/api_core/future/polling.py:261, in PollingFuture.result(self, timeout, retry, polling)
    256 self._blocking_poll(timeout=timeout, retry=retry, polling=polling)
    258 if self._exception is not None:
    259     # pylint: disable=raising-bad-type
    260     # Pylint doesn't recognize that this is valid in this case.
--> 261     raise self._exception
    263 return self._result

InvalidArgument: 400 Custom Document Id (`_id`) was not found in document. 3: Custom Document Id (`_id`) was not found in document.

日本語を使用していないtxtファイルでもファイル数増加で回答率が低下するか調べる

  • やりたいこと
    • データストアのファイル数増加による回答率の低下はデータの言語が日本語であることが原因かもしれない。そのため、json型txt物件ファイルのデータの日本語をローマ字に置き換えて回答率を調査してみる
  • 試したこと
    • pykakasi ライブラリを使用して、既存のjson型txtファイルすべての日本語をローマ字に変換し、それらのファイルをデータストアへアップロード。
    • ファイル数を100 400 1000の順番で検証
  • 結果
    • ファイル数400までは高確率で回答され、900から回答率が下がった

日本語をローマ字に置き換え前のデータ形式

[
  {
    "id": "物件ID1",
    "seller": null,
    "title": "物件名1",
    "price": {
      "administration": 0,
      "deposit": 0,
      "gratuity": 0,
      "rent": 23000
    },
    "address": "住所1",
    "years": 36,
    "stories": "5階建",
    "floor": "4階",
    "floor_plan": "ワンルーム",
    "occupation_area": "13.96m2",
    "description": null,
    "publish_id": "公開ID1",
    "dt": "日付1",
    "traffic": "交通情報1",
    "labels": "",
    "property_type": {
      "building": "large_apartment",
      "types": "rent"
    },
    "spec": null
  },
  {
    "id": "物件ID2",
    "seller": null,
    "title": "物件名2",
    "price": {
      "administration": 2000,
      "deposit": 0,
      "gratuity": 0,
      "rent": 29000
    },
    "address": "住所2",
    "years": 27,
    "stories": "2階建",
    "floor": "2階",
    "floor_plan": "1K",
    "occupation_area": "21.6m2",
    "description": null,
    "publish_id": "公開ID2",
    "dt": "日付2",
    "traffic": "交通情報2",
    "labels": "",
    "property_type": {
      "building": "apartment",
      "types": "rent"
    },
    "spec": null
  }
]

日本語をローマ字に置き換え後のファイル内容

[
  {
    "id": "物件ID1",
    "seller": null,
    "title": "物件名1",
    "price": {
      "administration": "0",
      "deposit": "0",
      "gratuity": "0",
      "rent": "23000"
    },
    "address": "住所1",
    "years": 36,
    "stories": "階数1",
    "floor": "階1",
    "floor_plan": "間取り1",
    "occupation_area": "13.96m2",
    "description": null,
    "publish_id": "公開ID1",
    "dt": "日付1",
    "traffic": "交通情報1",
    "labels": "",
    "property_type": {
      "building": "large_apartment",
      "types": "rent"
    },
    "spec": null
  },
  {
    "id": "物件ID2",
    "seller": null,
    "title": "物件名2",
    "price": {
      "administration": "2000",
      "deposit": "0",
      "gratuity": "0",
      "rent": "29000"
    },
    "address": "住所2",
    "years": 27,
    "stories": "階数2",
    "floor": "階2",
    "floor_plan": "間取り2",
    "occupation_area": "21.6m2",
    "description": null,
    "publish_id": "公開ID2",
    "dt": "日付2",
    "traffic": "交通情報2",
    "labels": "",
    "property_type": {
      "building": "apartment",
      "types": "rent"
    },
    "spec": null
  }
]

pykakasi参照記事

Qiita
【Python】漢字を平仮名やローマ字に変換する - Qiita 概要 Pythonで漢字をひらがなに変換する方法を調べてみた。 実行環境 Python 3.8.8 macOS Catalina v10.15.4 インストール pykakasiを使うと漢字をひらがなやローマ字にす...

人気記事

  • BigQueryの無料枠を活用しよう!制限と注意点、活用方法を解説
  • BigQueryでエラー解決!よくあるエラーと対処法
  • BigQueryのレベル別学習リソースまとめ!初心者から上級者まで役立つ情報源
  • 【SUUMOスクレイピング】Struccleで物件データを全件収集
  • BigQuery入門!無料データでSQLの基本文字列関数をマスター
AI_Agent Agent開発
よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!
目次
カテゴリー
  • AI_Agent (130)
    • Agent開発 (130)
  • BigQuery (100)
    • BigQueryTips (11)
    • BigQueryでデータ分析 (49)
    • BigQueryのFAQ (1)
    • BigQuery入門 (8)
    • BigQuery学習教材 (22)
    • BigQuery導入ガイド (3)
    • BigQuery最新情報 (3)
    • BigQuery活用事例 (4)
  • Struccle (153)
    • Struccleでスクレイピング (10)
      • suumoの物件データを収集&分析 (1)
      • アニマルジョブの電話番号、メールアドレスを全件収集 (1)
      • データ集計 (6)
      • ホットペッパービューティーのヘアサロンデータを収集&分析 (1)
      • 食べログの飲食店データを収集&分析 (1)
    • Struccleデータ料金事例 (142)
      • 商品分析 (15)
      • 営業リスト (88)
      • 競合分析&市場調査 (58)
      • 自動車 (11)
      • 自社活用 (7)
    • Struccle活用企業様の紹介 (1)
  • 当ブログのコーディング実行環境設定 (2)
目次