0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

LLMO調査のためのAI引用元トラッキング:AnswerSiftとPythonで出典を整理する

0
Posted at

AI回答を使って技術調査や製品比較をしていると、「どのWebサイトが出典として表示されたのか」を後から確認したくなります。タブやスクリーンショットだけでは、質問・回答・引用元の対応関係を追いにくくなります。

この記事では、AI引用元を記録するときの分類、集計の単位、比較時の注意点を整理します。記録には、自作のChrome拡張 AnswerSift を使う手順を紹介します。集計部分は、他の方法で記録したデータにも応用できるPythonの小さな例で説明します。

筆者はAnswerSiftの開発・運営に関わっています。製品紹介を含みます。コード例のデータは説明用の架空データであり、実測結果や実際のエクスポート形式ではありません。本文の作成にはAIを補助的に使用し、製品説明は公開仕様と照合、コード例は実行して確認しています。

1. ブランド言及・引用・検索ソースを分ける

最初に決めたいのは、「何を1件として記録するか」です。

分類 観測するもの そこから断定できないこと
ブランド言及 回答本文に現れるブランド名 公式サイトが引用されたこと
回答中の引用 回答の出典として示されたURL AIが内部で参照した全情報
検索・取得ソース 検索結果やソース欄に表示されたページ 回答本文でそのページが引用されたこと
通常のリンク 本文にある一般的なリンク 出典として使われたこと

たとえば、ある開発ツールの名前が回答に出ても、その公式ドキュメントが引用されているとは限りません。逆に、公式ドキュメントへの引用があっても、製品名が目立つ形で言及されるとは限りません。

LLMOやGEO/AEO、AI検索最適化の調査では、この違いを混ぜると「ブランドの露出」と「引用元の傾向」が同じ指標になってしまいます。まずは観測できた事実を分けて残します。

2. 質問・回答・日時をURLと一緒に残す

URLだけでは、どの質問に対する引用だったのか分かりません。調査用の表には、少なくとも次の項目を用意すると再確認しやすくなります。

  • 質問文と回答本文
  • AIプラットフォームと観測日時(タイムゾーンを明記)
  • 調査テーマやウォッチグループ
  • ソースの種類、URL、会話に戻るためのリンク
  • ソースを確認できたか、取得できなかったか

これは分析用の項目案です。AnswerSiftの内部スキーマやCSVの列名を定義しているわけではありません。

「ソースを取得できなかった」と「引用がなかった」は別の状態です。画面の読み込み途中や表示仕様の違いによる欠損を、引用ゼロとして処理しないようにします。

3. AnswerSiftで調査記録をためる

AnswerSiftは、閲覧中のAI回答から、条件に合う質問・回答・取得可能なソースを整理するためのツールです。日常のリサーチを、後で見返せる記録につなげる用途を想定しています。

  1. Chrome Web StoreからAnswerSiftをインストールします。
  2. アカウントにログインし、利用権限を確認します。現在の料金・利用条件はAnswerSift公式サイトで確認できます。
  3. 製品や業界のキーワードでウォッチグループを作ります。必要に応じてブランド名・別名・Webサイトを追加します。
  4. 対象AIサイトを有効にし、必要なサイト権限を許可したうえで、普段の調査を進めます。
  5. 保存した回答とソースを確認し、プラットフォーム・グループ・期間で絞り込みます。追加分析には回答・ソースのCSV出力を使えます。

たとえば「APIドキュメント」をテーマに、「認証方式」「SDK」「レート制限」などの質問を調べる場合、同じグループに記録をまとめると、出典ページを元の回答と照合しやすくなります。この例は利用方法の説明であり、特定サイトでの収集成功例を示すものではありません。

現在のサービスはクラウドアカウントに記録を保存し、拡張側にローカルの作業画面とキャッシュを持ちます。完全にローカルだけで完結する構成ではありません。機密情報を含む会話を扱う前には、収集対象と保存先を確認してください。

自動収集は、有効化・許可したAIサイトを閲覧している間の対象回答が中心です。過去の全会話の一括取得や、プロンプトの定期実行を行うツールとしては扱いません。

4. Pythonで「回答単位の引用ドメイン数」を数える

引用URLの本数だけを数えると、1つの回答が同じサイトを何度も引用した場合に、そのサイトが過大に見えることがあります。

次の例では、同じ回答内の同じホスト名を1回にまとめる方法を使います。入力は説明用に作ったデータです。AnswerSiftからCSVを出力する場合は、実際の列を確認し、分析用の形式に変換してから使ってください。

from collections import Counter
from urllib.parse import urlsplit

# 架空データ。citedとretrievedを分けて保持する。
answers = [
    {"id": "a1", "cited": ["https://docs.example/start",
                           "https://docs.example/auth"],
     "retrieved": ["https://blog.example/guide"]},
    {"id": "a2", "cited": ["https://docs.example/sdk"],
     "retrieved": []},
    {"id": "a3", "cited": [], "retrieved": []},
]

counts = Counter()
for answer in answers:
    hosts = {urlsplit(url).hostname for url in answer["cited"]}
    counts.update(host for host in hosts if host)

for host, count in counts.most_common():
    print(f"{host}: {count}/{len(answers)} answers")

実行結果は docs.example: 2/3 answers です。同じ回答内の2つのURLは1回として数え、検索・取得ソースの blog.example は引用の集計に加えていません。

この例の分母は、ソースの有無を確認済みと仮定した架空の3回答です。実データでは、取得状態を別途管理し、未確認レコードをどう扱ったか明記します。また、このコードはホスト名単位なので、サブドメインは別扱いです。登録可能ドメイン単位で集計したい場合は、Public Suffix Listなどに基づく別の処理が必要です。

5. 期間比較ではサンプル条件をそろえる

引用数が増えても、質問数や質問内容が変わっていれば、単純に改善とは言えません。比較するときは、質問セット、言語、AIプラットフォーム、観測期間、回答件数をそろえるか、違いを記録します。

普段の閲覧から集める記録には、自分が調べたテーマへの偏りもあります。得られるのは保存した回答の観測サンプルであり、AIプロバイダーの完全なインデックスではありません。ソース一覧だけから、内部の検索・選択アルゴリズムを確定することもできません。

LLMOツールを使った調査では、「よく現れる出典の候補」を見つけた後、そのページを読み、質問との関連性や内容の正確性を確認する段階が必要です。引用頻度だけで掲載依頼先やコンテンツ方針を決めず、次の検証の材料として使います。

おわりに

AI引用元の分析では、収集量を増やす前に、分類・集計単位・欠損の扱いを決めると記録を再利用しやすくなります。AnswerSiftは、そのための質問・回答・ソースの整理を支援します。保存した根拠へ戻れる状態を作り、引用傾向の確認やコンテンツ調査につなげてください。

製品の機能と利用条件はAnswerSift公式サイトに掲載しています。

0
0
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
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?