AIが書いた文章の信頼性に悩む時代に、AI自身に「どちらのAIがよりマシか」を判定させる、という新しい視点のツールです。既存のファクトチェックツールが単一テキストの正誤を判定するのに対し、本作は2つの選択肢を並べて「比較」し、天秤が傾くという直感的なUIで優劣を示します。これにより、利用者は単なるスコアではなく「防御可能な選択」を行えます。技術的には、大規模言語モデルを用いてテキストの主張と根拠を抽出し、その論理的整合性や出典の確かさを評価するパターンを活用しており、AI時代の新たな情報リテラシーを体験できます。
Provenance Balancer
2つのAIテキストを比較し信頼性を天秤にかける
2つのAI生成テキストを入力として貼り付けます。ユーザーが比較ボタンをクリックすると、AIがそれぞれのテキストの根拠の確かさを比較採点します。これにより、どちらのAIテキストがより信頼できるか、直感的なUIで優劣が示されます。
今後は、現在は単一のサンプル比較しかできませんが、将来的にはユーザーが自由なテキストを入力できるようにし、評価ロジックの透明性を高める解説機能も追加したいです。最終的には、AIライティングツールの標準的なレビュー機能になることを目指しています。
使い方
この作品の使い方と、画面で確認するポイントをまとめて表示します。
AIが生成した2つのテキストの信頼性を比較し、どちらがより確かであるかを判断します。
比較したい2つのテキストを用意する
ユーザーは比較したいAI生成テキストを2つ用意します。デモでは、以下のサンプルテキストが事前に入力されています。例: 「地球温暖化は主に太陽活動の変化によって引き起こされています。
テキストの主張と根拠を抽出する
AIは各テキストを分析し、主要な主張、引用された参照、および論理的なギャップを抽出する設計です。これは、テキストの根拠の確かさを評価するための基礎情報となります。
根拠の確かさを多角的に採点する
抽出された情報に基づき、AIはテキストの信頼性を「参照の質」「論理的一貫性」「幻覚リスク」の3つの観点から採点する設計です。これらのスコアから総合的な信頼性スコアが算出されます。
比較結果と推奨を生成する
2つのテキストの信頼性スコアを比較し、AIがどちらがより信頼できるかを判断する設計です。決定的な違いを説明する簡潔なサマリーが生成され、推奨されるテキストが示されます。例: 「テキストBは、国際的な権威であるIPCCの報告書という具体的で信頼性の高い出典を明記しています。
制作メモ
この作品でAIが重視した制作方針を、公開向けに整理して表示します。
コメント
この作品に対するコメントとAIレビューをまとめて表示します。
天秤の傾きで優劣を示すUIは直感的だが、その評価がどのような観点で行われたのか、具体的に示されないと判断の根拠が不明瞭になる。スコアの算出根拠となる論理的整合性や出典の確かさについて、各テキストのどの部分がどう評価されたのか、詳細な内訳が表示されると判断の透明性が高まるだろう。
ソース
この作品で保存されているコードと確認用ファイルをまとめて表示します。
主要ファイル
コードプレビュー
'use client';
import React, { useState, useEffect } from 'react';
import { sampleTrace } from '../data/sample-trace';
// Re-declare types locally. DO NOT import from ../core/**
type ProvenanceScores = {
referenceQuality: number;
logicalConsistency: number;
hallucinationRisk: number;
overallTrustScore: number;
};
type ComparisonResult = typeof sampleTrace.finalOutput | null;
const ScoreDisplay = ({ scores }: { scores: ProvenanceScores }) => (
<div style={{ marginTop: '1rem', padding: '1rem', border: '1px solid #eee', borderRadius: '8px' }}>
<h3 style={{ marginTop: 0 }}>信頼性スコア</h3>
<p style={{ margin: '0.5rem 0' }}><strong>総合: {Math.round(scores.overallTrustScore * 100)} / 100</strong></p>
<div style={{ fontSize: '0.9rem', color: '#555' }}>
<p style={{ margin: '0.2rem 0' }}>根拠の質: {Math.round(scores.referenceQuality * 100)}</p>
<p style={{ margin: '0.2rem 0' }}>論理的一貫性: {Math.round(scores.logicalConsistency * 100)}</p>
<p style={{ margin: '0.2rem 0' }}>ハルシネーションリスク: {Math.round(scores.hallucinationRisk * 100)}</p>
</div>
</div>
);
const BalanceVisual = ({ tilt }: { tilt: 'left' | 'right' | 'center' }) => {
const tiltAngle = tilt === 'left' ? -15 : tilt === 'right' ? 15 : 0;
return (
<div data-proof="balance-visual" style={{ margin: '2rem auto', width: '200px', height: '100px', position: 'relative' }}>
<div style={{ width: '200px', height: '10px', backgroundColor: '#999', borderRadius: '5px', position: 'absolute', top: '45px', left: '0', transform: `rotate(${tiltAngle}deg)`, transition: 'transform 0.5s ease-in-out' }
...