見出し画像

Langchain新機能: エビデンスの引用付きの解答が得られるQA機能(citation_fuzzy_match_chain)

またまた、Langchainの新機能「citation_fuzzy_match_chain」 が公開されていました。OpenAI APIの 「Function Calling機能」を利用して、回答に加えて裏付けとなるエビデンスを引用で示すことが出来るもののようです。

何はともあれ試食します😊

ライブラリなどの準備

!pip install langchain >/dev/null
!pip install openai >/dev/null

# 環境変数の準備
import os
os.environ["OPENAI_API_KEY"] = "YOUR OPENAI_API_KEY"

質問とコンテキストの設定

question = "ぼっちとギターヒーローの関係を教えて"
context = """
後藤 ひとり(ごとう ひとり)
声 - 青山吉能[22]
誕生日:2月21日 / 身長:156cm[23] / 体重:50kg[23] / 血液型:O型[24]
本作の主人公[4]。リードギター・作詞担当。秀華高校1年→2年。ニックネームはリョウが名前から付けた「ぼっち(ちゃん)[注 7][25]」。金沢八景付近に在住[注 8]。髪型はピンク色のロングヘアーで、右側に水色と黄色の2つの立方体型の髪留めを付けている。服装は常にジャージ[注 9]、家では暗い押し入れでギターばかり弾いている、いわゆる陰キャ少女。休みもどこかへ出かけることはなく、ずっと家に引きこもるなどインドア派[注 10]。
対人コミュニケーションが非常に苦手で、初対面の相手へ話しかけるのはほぼ不可能かつ目も合わせられない。辛うじて会話できても吃り気味で他人からの圧しには弱く、頼みを断れない。何とか場を盛り上げようとしても、スベったりやりすぎたりして失敗することが多い。感情が表に出やすく、切羽詰まった場面では顔面が崩壊する。何かあるとすぐゴミ箱や段ボール箱の中などに隠れようとする(初ライブは段ボール箱の中から演奏した)。友達もおらず中学3年間を寂しく過ごしたなど[28]青春に対してコンプレックスがあり、学校(特に体育祭などの学校行事)を忌み嫌い高校もバンドで成功して早く中退したいといちいち口にする。青春話には嘔吐・吐血・身体が崩れ去るなどの拒否反応を示す。その反動からか承認欲求の強い面がありバンド活動に憧れるのも「ちやほやされたいため」という点が大きく、褒められるとあっさり調子に乗る。妄想癖が強く、プラス方面にもマイナス方面にも想像が極端[注 11]。己と逆のタイプである所謂「陽キャ」「パリピ」に強い偏見があり、他者を自分にとってのヒール役に見立て妄想することもある。一方でバンドメンバーや他人をよく見ており、誰かが悩みやプレッシャーなどを抱えているといち早く気付いている。
先述の性格に加え、運動や勉強など取り柄と言えるものがないというコンプレックスを持っていたところ、中学1年時に暗い学生時代から一転してスターとなったバンドマンのインタビューを目にしたことで、父親の直樹から借りたギターに没頭する[29][30]。高校入学後はギターを持って公園にいたところを虹夏から声を掛けられ、逃げた郁代の代わりとして臨時で結束バンドのギターを務める運びになり、その流れで結束バンドに加入した。その後は改めて加入した郁代とギターの指導による師弟関係を結び、また虹夏やリョウとの交流を経て当初は自分のためとしてやっていた音楽の道を、結束バンドの皆と一緒に進みたいと思えるようになった。また、きくりとの出会いや様々なライブを経て、人間的に成長していく。
毎日6時間以上ギターの練習を約3年間欠かさずやってきたため[31]、プロレベルと称されるほど個人としての演奏技術はずば抜けて高く[30]、文化祭のライブでペグの故障によりチューニングが出来なかった際には酒瓶を使ったスライドギター(ボトルネック奏法)で乗り切るなど演奏に関しての知識も持ち合わせている。一方で人前が苦手な性格や、他人と合わせながら演奏する経験の不足からバンド演奏では実力を十分に発揮できず、時折その片鱗を覗かせるに留まっている。結束バンドでは作詞を請け負っているものの、青春に関連したNGワードを避けており自ずと暗めの歌詞になる。レーベルミニアルバム制作時には作曲・編曲にも挑戦したものの、編曲の方がうまくいかずリョウにより遠回しに遠ざけられ[32]、結局ひとりが作曲したものをリョウが編曲することになった[33]。
虹夏や郁代によると(普段の奇行のせいで忘れられがちだが)美少女[26]。文化祭でのクラスの出し物でメイド服を着させられた際は皆から似合うと讃えられ、リョウからは「ビジュアル方面で売り出すのもあり」「ダイヤの原石」と評された[34]。タピオカチャレンジ(胸の上へタピオカ飲料のカップを乗せて飲む催し)が可能なほどスタイルも抜群で[35]、虹夏や郁代からは嫉妬混じりの冷たい視線を向けられることもある[36][37]。郁代によると、顔を上げ表情も整えればアイドル事務所も狙えるほどのルックスだが、その顔は10秒と持たない[38]。そして自己評価が極めて低く、ひとり自身は外見やスタイルを全く意識していない。
初期設定では普通の可愛い女の子だったが、担当編集から「もっとガチにした方がいい」と指摘を受けて修正していき、たちまち現在の設定となった[4]。
ギターヒーロー
ひとりが動画投稿サイトで活動する際に用いるハンドルネーム。ひとりが普段人前に出せないが内面に抱えている承認欲求の象徴とも言えるもので、現実のひとりからはかけ離れた「バスケ部エースの彼氏持ち」や「ラインの友達数は1000人超え」といった設定がつけられている[注 12][39]。顔を隠すアングルから撮影された人気バンドのカバー動画を投稿しており、投稿サイトでの登録者数は8万人近く[40]。ぽいずん♡やみのような音楽関係者からも注目を集めている。動画は直樹によって収益化されており、文化祭ライブで壊れたギターを新調する費用等に充てられた[41]。
ライブでの現在の自身の実力ではギターヒーローの名前でファンを集めても満足させるだけの演奏ができないというひとりの考えから、正体が「結束バンドの後藤ひとり」であることは公にはされていない[注 13]。

コンテキストはwikipediaから拝借 https://ja.wikipedia.org/

LLMには0613系を指定

llm = ChatOpenAI(temperature=0, model="gpt-4-0613")

今回の目玉citation_fuzzy_match_chain

chain = create_citation_fuzzy_match_chain(llm)

検索を実行!

生成したchainに、質問とコンテキストを投げると、answerとファクト部分の引用付きで解答が返ってきます。

result = chain.run(question=question, context=context)
print(result)

question='ぼっちとギターヒーローの関係を教えて' answer=[FactWithEvidence(fact='ぼっちとは本作の主人公、後藤ひとりのニックネームであり、ギターヒーローは彼女が動画投稿サイトで活動する際に用いるハンドルネームです。', substring_quote=['後藤 ひとり(ごとう ひとり)', 'ギターヒーロー\nひとりが動画投稿サイトで活動する際に用いるハンドルネーム'])]

ハイライト部分の整形コード

# 該当箇所の前後を含めてハイライト表示
def highlight(text, span):
    return (
        "..."
        + text[span[0] - 20 : span[0]]
        + "*"
        + "\033[91m"
        + text[span[0] : span[1]]
        + "\033[0m"
        + "*"
        + text[span[1] : span[1] + 20]
        + "..."
    )

出力イメージ

for fact in result.answer:
    print("Statement:", fact.fact)
    for span in fact.get_spans(context):
        print("Citation:", highlight(context, span))
    print()

Statement: ぼっちとは本作の主人公、後藤ひとりのニックネームであり、ギターヒーローは彼女が動画投稿サイトで活動する際に用いるハンドルネームです。
Citation: ...*後藤 ひとり(ごとう ひとり)* 声 - 青山吉能[22] 誕生日:2月...
Citation: ...き、たちまち現在の設定となった[4]。 *ギターヒーロー ひとりが動画投稿サイトで活動する際に用いるハンドルネーム*。ひとりが普段人前に出せないが内面に抱え...

これまた、かなり使えそうな機能ですね。😆

現場からは以上です。

この記事が気に入ったらサポートをしてみませんか?