AIを活用した法令案における誤り防止の考察

内閣法制局は、内閣提出の法案及び政令案における誤りの防止 について、チェック態勢やチェクリストなどのガイドラインを定めて、誤り発生の再発防止に取り組んでいます。
この取り組みに対して、生成AIの有用性を考察します。

結論:ガイドラインの一部を実験したところ、GPT-4レベルであれば、充分にチェックリストの自動運用が可能であるという手応えが得られました。(GPT-3.5レベルでは難しい、という実験結果。)
システムアーキテクチャとしては、チェック対象の法案に対して、チェックリストの項目1つ1つを順次LLMでチェックし、エラー検出結果をまとめて報告する、というロジック構成で実現可能と思われます。また、チェックルールをベクトル化し、RAGアーキテクチャでLLMのプロンプトに埋め込むことで、ハルシネーションを抑え込んだ、実用に耐える誤り検出システムが実現できると思われます。

【実験コード】

import openai
import os

openai.api_key = os.environ[“OPENAI_API_KEY”]

def generate_prompt(text, checklist, examples):
prompt = f”””
以下は法令案のテキストです。
テキスト:
{text}

以下は法令案における誤りの防止に関するチェクリストです。
チェックリスト:
{checklist}

以下は誤りの具体例です。
具体例:
{examples}

上記のテキストに基づいて、チェックリストを使用して法令案の誤りをチェックしてください。特に、改正する規定の特定が正確であるかを確認し、誤りがあれば詳細なエラーメッセージを生成してください。
"""
return prompt

from openai import OpenAI
client = OpenAI()

def call_openai_api(prompt):
completion = client.chat.completions.create(
model=”gpt-3.5-turbo”,
#model=”gpt-4o”,
messages=[
{“role”: “system”, “content”: “You are Helpful assistant.”},
{“role”: “user”, “content”: prompt}
]
)

return completion.choices[0].message

def main():
# サンプルの法令案テキスト
law_text = “””
第三条第一項
第四条第七号
第五条第二項第三号
“””

# チェックリスト
checklist = """
1 改正する規定の特定が正確であることをチェックすること。 
[要点]
(1) 改正箇所を示す「第○条」、「第○条第○項」、「第○条第○項第○号」、「各号列記以外の部 分」、「...本文」、「...ただし書」、「...前段(後段)」等によって指定され た規定が存在するか、また、その指定する規定の範囲が適当かについて、 実際に当該規定に当たって確かめること。
(2) 枝番(特に孫番)の誤記は見逃しやすいので注意すること。
"""

# 誤りの具体例
examples = """
[誤り事例]
例1 適用読替の規定である第X条を改める際、同条が「・・・された場合における第Y条、・・・の規定の適用については、第Y条中・・・とする。」という1文から構成されているにもかかわらず、2文から成るものと錯覚し、「第X条前段中」と記載してしまった。
例2 A法附則第X条において、B法の規定を改める際、改正対象規定を「第Y条第一項第七号中」とすべきところ、「第Y条第七号中」として、「第一項」という文言を書き漏らしてしまった。
"""

# プロンプトの生成
prompt = generate_prompt(law_text, checklist, examples)

# OpenAI APIを呼び出して結果を取得
result = call_openai_api(prompt)

# 結果をユーザーに提示
print("Check Result:")
print(result)

if name == “main“:
main()

【実験結果(gpt-3.5-turbo)】

以下のように、誤りを指摘できませんでした。

Check Result:
ChatCompletionMessage(content='チェックリストに基づいて、与えられた法令案のテキストをチェックします。\n\n1. 改正箇所を示す「第○条」、「第○条第○項」、「第○条第○項第○号」が正確に特定されているか確認します。\n\nテキストに書かれた内容をチェックします。\n\n- 第三条第一項: 改正箇所が正確に特定されています。\n- 第四条第七号: 改正箇所が正確に特定されています。\n- 第五条第二項第三号: 改正箇所が正確に特定されています。\n\nすべての改正箇所が正確に特定されているため、特に問題はありません。\n\n以上が法令案のチェック結果です。', role='assistant', function_call=None, tool_calls=None)

【実験結果(gpt-4o)】

以下のように、「第四条第七号」の記載に対して、「第○項」の記載が抜けていることの指摘に成功しました。

Check Result:
ChatCompletionMessage(content='チェックリストに基づき、改正する規定の特定が正確であるかを以下のテキストについて確認します。\n\n### テキスト\n1. 第三条第一項\n2. 第四条第七号\n3. 第五条第二項第三号\n\n### チェックリストの確認\n\n1. **第三条第一項**\n    - チェック項目:\n        - 「第○条」、「第○条第○項」が存在するか。\n    - 確認:\n        - はい、「第三条第一項」として存在します。\n    - 結論:\n        - 問題ありません。\n\n2. **第四条第七号**\n    - チェック項目:\n        - 「第○条」、「第○条第○項第○号」が存在するか。\n    - 確認:\n        - 「第○条第○項」の指定がなく、直接「第七号」となっています。「第四条第七号」と記載されていますが、通常、号が直接示されるのは項が指定されている場合が多いです。この記載は不適切である可能性があります。\n    - エラーメッセージ:\n        - 誤り: 「第四条第七号」と記載されていますが、「第○条第○項第○号」とする必要があります。「第四条第○項第七号」と記載することを確認してください。\n\n3. **第五条第二項第三号**\n    - チェック項目:\n        - 「第○条第○項第○号」が存在するか。\n    - 確認:\n        - はい、「第五条第二項第三号」として存在します。\n    - 結論:\n        - 問題ありません。\n\n### 詳細なエラーメッセージ\n- **第四条第七号の記載に関するエラー**\n    - エラーメッセージ: 「第四条第七号」と記載されていますが、この形式では「第○項」の指定が欠けている可能性があります。通常、号は項の中に含まれるため、「第四条第何項第七号」と具体的に記載する必要があります。正しい記載形式を確認してください。\n\n以上がチェックリストに基づいた法令案の誤りの確認結果です。', role='assistant', function_call=None, tool_calls=None)

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です