業務用スクリプトの依頼文に入力・出力・エラー処理のルールを入れる
「これを自動化して」を、実行可能な task description に変えます。sensitive data を含まない合成 sample と、手作業で確認した expected result を添えて、team ごとの work logs を集計する script request を完成させます。
AIが示した参考資料はもっともらしく見えても、リンクが存在しなかったり、実際の内容がAIの説明と一致しなかったりすることがあります。小さな合成例を使って、リンクの存在と主張との対応を確認します。
この翻訳はAIで作成しました。コード、単位、数値は原文と併せて確認してください。各言語のネイティブ話者による校閲は、まだ完了していません。 English
対象読者AIチャットアシスタントを調査、レポート、文書作成に使い、引用された参考資料を自分で確認したい人向けです。
専門的に見える参考資料でも、自動的に信頼できるとは限りません。AIの回答には、実在するURLでも説明が不正確なもの、すでに存在しないURL、完全に作られた参考資料が含まれることがあります。そのため、確認は2つの問いに分けます。参考資料が実在するか、そしてその資料がAIの主張を実際に裏付けているかです。
次の例は合成データです。AIチャットアシスタントに、URLを開く方法とJSONを扱う方法を説明するPython標準ライブラリの公式資料を尋ねたとします。業務メモに参考資料を載せる前に、自分で確認する場面です。
AIへの依頼例: URLを開く方法とJSONを読み書きする方法について、Pythonの公式参考資料を教えてください。各参考資料が裏付ける具体的な主張を1つと、正確なURLも示してください。
| 参考資料 | AIの主張 | URL |
|---|---|---|
| urllib.request | PythonはURLを開くためのurllib.requestを提供している。 | https://docs.python.org/3/library/urllib.request.html |
| json | PythonのjsonモジュールはJSONのエンコードとデコード機能を提供している。 | https://docs.python.org/3/library/json.html |
| 合成した偽の参考資料 | このページはAI専用の参考資料検証ツールを説明している。 | https://example.invalid/fake-reference |
3行目は、この合成例のために意図的に作った偽の参考資料です。目的は、引用の見た目を信用するのではなく、確認手順でこのような項目を検出することです。
自然言語の主張全体が正しいかどうかをPythonだけに判断させるのは避けます。代わりに、URL、AIの主張、そのページが関連しているなら現れそうな少数の語を記録します。これらの語は、あくまで一次確認の補助です。
| URL | 確認する語 |
|---|---|
| https://docs.python.org/3/library/urllib.request.html | urllib.request; URL |
| https://docs.python.org/3/library/json.html | json; encoding; decoding |
| https://example.invalid/fake-reference | reference; verifier |
次の標準ライブラリだけを使うスクリプトは、各ページへアクセスし、最終URLとHTTPステータスを記録し、基本的な表示テキストを抽出して、指定した語が含まれるか確認します。結果はoutputs/reference_check.jsonに保存します。以前の確認結果を上書きしないように、outputsフォルダがすでに存在する場合は停止します。
from pathlib import Path
from urllib.request import Request, urlopen
from urllib.error import HTTPError, URLError
import html
import json
import re
checks = [
{
"reference": "urllib.request",
"url": "https://docs.python.org/3/library/urllib.request.html",
"claim": "Python provides urllib.request for opening URLs.",
"terms": ["urllib.request", "URL"],
},
{
"reference": "json",
"url": "https://docs.python.org/3/library/json.html",
"claim": "Python's json module provides JSON encoding and decoding.",
"terms": ["json", "encoding", "decoding"],
},
{
"reference": "Synthetic fake reference",
"url": "https://example.invalid/fake-reference",
"claim": "This page documents an AI-specific reference verifier.",
"terms": ["reference", "verifier"],
},
]
output_dir = Path("outputs")
if output_dir.exists():
raise SystemExit("outputs already exists; remove or rename it before running again")
output_dir.mkdir()
results = []
for item in checks:
result = {
"reference": item["reference"],
"url": item["url"],
"claim": item["claim"],
"reachable": False,
"status": None,
"final_url": None,
"term_matches": {},
"error": None,
}
try:
request = Request(
item["url"],
headers={"User-Agent": "Worknote reference checker/1.0"},
)
with urlopen(request, timeout=10) as response:
result["status"] = response.status
result["final_url"] = response.geturl()
raw = response.read(500_000).decode("utf-8", errors="replace")
text = re.sub(r"<script.*?</script>", " ", raw, flags=re.I | re.S)
text = re.sub(r"<style.*?</style>", " ", text, flags=re.I | re.S)
text = re.sub(r"<[^>]+>", " ", text)
text = html.unescape(text)
text = re.sub(r"\s+", " ", text)
result["reachable"] = True
lowered = text.casefold()
result["term_matches"] = {
term: term.casefold() in lowered for term in item["terms"]
}
except HTTPError as exc:
result["status"] = exc.code
result["error"] = f"HTTPError: {exc}"
except URLError as exc:
result["error"] = f"URLError: {exc.reason}"
except Exception as exc:
result["error"] = f"{type(exc).__name__}: {exc}"
results.append(result)
report_path = output_dir / "reference_check.json"
report_path.write_text(
json.dumps(results, indent=2, ensure_ascii=False),
encoding="utf-8",
)
for result in results:
print(result["reference"])
print(" reachable:", result["reachable"])
print(" status:", result["status"])
print(" final URL:", result["final_url"])
print(" term matches:", result["term_matches"])
print(" error:", result["error"])
print(f"Saved: {report_path}")ページにアクセスでき、確認語も見つかった場合でも、「手動確認が必要な候補」と考えるべきです。自動的に検証済みの主張とは扱いません。単純な文字列一致では、文脈、適用範囲、否定表現、例外条件、AIによる誇張までは判断できません。
| 結果 | 解釈 | 次の対応 |
|---|---|---|
| アクセス可能・確認語あり | 関連ページである可能性がある。 | 該当セクションを読み、AIの正確な主張と比較する。 |
| アクセス可能・確認語なし | URLは存在するが、簡易確認では想定した表現が見つからなかった。 | ページを手動確認し、AIが別のページを誤って引用していないか調べる。 |
| HTTPエラー | サーバーがエラーステータスを返した。 | URL、リダイレクト、アクセス条件、資料の移動を確認する。 |
| ネットワークまたはDNSエラー | スクリプトがアドレスへ到達できなかった。 | スペルを確認し、別の方法で資料の存在を確認する。 |
学術資料では、著者、タイトル、年、学術誌、DOI、実際の論文本文も確認する必要があります。単純なURL確認スクリプトだけでは、学術的妥当性の判断、撤回論文の検出、研究手法の信頼性評価まではできません。
2026-09-21 · hand-checked example · Python 3.12
説明と例は独自に作成しました。関連する動作や概念は、以下の公式資料で確認できます。