LangChain、既存コーパスからデータ駆動型キャラクターチャットボットを生成する手法を発表
本文の状態
日本語全文を表示中
詳細モードで約18分の本文を読めます。
同じ出来事の情報源
この情報源を基点に整理
LangChain Blog
LangChain Blog は、既存のコーパスからキャラクター定義を自動生成し、記憶管理機能を強化してリアルな背景設定を持つチャットボットを作成するオープンソースリポジトリ「data-driven-characters」を発表した。
AI深層分析を開く2026年8月26日 23:52
AI深層分析
キーポイント
データ駆動型キャラクターの自動化ツール
LangChain Blog は、既存のコーパスをアップロードし名前をつけるだけで、キャラクター定義を自動的に生成するリポジトリ「data-driven-characters」を発表した。
既存プラットフォームとの連携可能性
このツールは Character.ai などの既存プラットフォーム向けにキャラクター定義を作成するために使用でき、ゼロからチャットボットを構築する際にも異なる種類の記憶管理手法を探求できる。
実証的な背景設定の重視
記事では、単なるテキスト生成ではなく、キャラクターを現実のバックストーリーに根付かせるための「データ駆動型」アプローチの重要性が強調されている。
静的テキストから対話型体験へ
大規模言語モデルの主要な突破点は、静的なテキストコーパスを対話型の体験に変換できる点にある。
キャラクターへの高い関心と現状の課題
実在・架空を問わずキャラクターを生きたようにする用途が人気だが、定義の手動指定やメモリ管理の制御に制限がある。
重要な引用
Through the miracle of the printed page, I can at least read what Aristotle wrote without an intermediary ... I can go directly to the source material. And that is, of course, the foundation upon which our western civilization is built.
But I can't ask Aristotle a question.
My hope is someday, when the next Aristotle is alive,
"Books are dead. Characters are alive."
編集コメントを表示
編集コメント
著者の Michael Chang が DeepMind 入社の直前に取り組んだこのプロジェクトは、LLM の応用範囲を「読み手」から「対話者」へと広げる重要な一歩である。既存のコーパスを活用してキャラクターに命を吹き込む手法は、今後のチャットボット開発における標準的なアプローチの一つになる可能性がある。
Source Article
元記事を日本語で読む
本文に関係しない購読案内、埋め込み通知、サイト内プロモーションは除いています。

編集者の注記:以下の記事はマイケル・チャン氏によるブログ投稿です。DeepMind 入社前の約 2 ヶ月間、同氏は私どもと共働しました。彼が取り組んだのは、エージェントシミュレーションにおける多くの作業から始まり、今回は記憶に関する深掘りへと至る、最もオープンエンドな課題の数々でした。
*LangChain を用いて、既存のコーパスからキャラクターチャットボットを生成しましょう。
tldr: キャラクターをコーパスに根付かせるための リポジトリ
- コーパスをアップロードする
- キャラクター名を決める
- 楽しむだけ
`data-driven-characters` は、キャラクターチャットボットの作成と対話を可能にするリポジトリです。これを使えば、character.ai などの既存プラットフォーム向けに自動的にキャラクター定義を作成できます。また、キャラクターを現実のバックストーリーにより深く根付かせるため、異なる種類のメモリ管理を用いてゼロからチャットボットを構築するアプローチも探求しています。
なぜ data-driven-charactersなのか?
印刷という奇跡を通じて、私はアリストテレスが何を書いたかを、仲介者なしで直接読むことができます。つまり、一次資料に直接アクセスできるのです。もちろん、これが西洋文明の基盤となっています。しかし、アリストテレスに質問することはできません。 そこで私が目指しているのは、私たちの世代の中で新しい種類のツール、対話型のツールを作ることです。いつか、次のアリストテレスが生きている時代が来れば、その人物の世界観をコンピュータの中に捉え、学生たちがアリストテレスの書いた言葉を読むだけでなく、彼に質問して答えを得られるようになることを願っています。
- スティーブ・ジョブズ、スウェーデン・ルンド大学、1985年
本は「死んだ」ものです。しかし、キャラクター(対話型エージェント)は*生きている*のです。
大規模言語モデルの決定的な突破点は、情報との新しいインタラクションを可能にしたことです。これにより、静的なテキストコーパスを対話型の体験へと変えることが実現しました。
大規模言語モデル(LLM)の活用事例の中で、人々が最も熱狂的に取り組むものの一つが、実在人物や架空のキャラクターを生き生きと再現することです。これが、character.ai のユーザーエンゲージメントが ChatGPT と比較して約 3 倍にも達している理由の一つかもしれません。
ただし、character.ai にはいくつかの課題があります。まず、キャラクターの定義を手動で記述するのは非常に手間がかかることです。また、ユーザーはチャットボットの記憶管理方法について制御権を持っていません。
LLM を介してキャラクターと対話する主な方法は、LLM にそのキャラクターになりすませるよう指示することです。これは、対象となるキャラクターが LLM の事前学習データに含まれている場合にのみ機能します。例えば、ChatGPT はソクラテスになりすますことができます。

では、昨年の映画に登場するキャラクターとチャットしたい場合はどうすればよいでしょうか?例えば、『エブリシング・エブリウェア・オール・アット・ワンス』の主人公イヴリンとの会話を想像してみてください。しかし、ChatGPT-3.5 や ChatGPT-4 にはその能力がありません。

*Metaphor や Vectara は会話のために設計されたものではありません。また、Inflection's Pi は対話型チャットボットですが、キャラクターになりすます機能はありません。
検索機能を備えた大規模言語モデル(LLM)も、最新の情報を入手できるにもかかわらず、この点についてはあまり改善されていません。



Bard、Perplexity、You.com はいずれも、最初のメッセージでは映画のキャラクターを適切に演じ分けますが、二つ目のメッセージでその役柄から抜け出してしまいます。これは、これらの AI が会話を楽しむためではなく、情報検索のために設計されているからです。


また、Paul Graham GPT や Lex GPT、Wait But Why GPT といったアプリも登場しています。これらは、特定の人物のコンテンツとより直接的に会話できる体験を提供するために作られたものです。これらのアプリは、対象となる人物の実在するエッセイや講演録から情報を取得し、Character.ai が提供しないような「その人らしさ」の根拠(グラウンディング)を確保しています。ただし、これらは人物になりすますものではなく、あくまでその人のコンテンツを紹介・説明するものです。また、ユーザーが質問できるのは特定の人物に関する内容に限定されています。
data-driven-characters はこうしたカスタマイズされたキャラクターとの対話体験を一般化し、あらゆるコーパス(資料)に基づいて、誰でもとチャットできる仕組みを実現します。
仕組みについて
『エブリシング・エブリウェア・オール・アット・ワンス』の Evelyn とチャットするという目標を思い出してみましょう。data-driven-characters を使えば、映画の台本(こちら)から簡単に自分専用の Evelyn チャットボットを立ち上げることができます。
character.ai へエクスポートするためのキャラクター定義を作成する
data-driven-characters を利用する最も基本的な方法は、自動的に character.ai のキャラクター定義を生成するツールとして使うことです。手動で定義を構築する代わりに、data-driven-characters はスケーラブルでデータ駆動型のアプローチを提供します。これは以下の 11 行のコードで実現できます。
from dataclasses import asdict
import json
from data_driven_characters.character import generate_character_definition
from data_driven_characters.corpus import generate_corpus_summaries, load_docs
CORPUS = 'data/everything_everywhere_all_at_once.txt'
CHARACTER_NAME = "Evelyn"
docs = load_docs(corpus_path=CORPUS, chunk_size=2048, chunk_overlap=64)
character_definition = generate_character_definition(
name=CHARACTER_NAME,
corpus_summaries=generate_corpus_summaries(docs=docs))
print(json.dumps(asdict(character_definition), indent=4))ここで corpus_summaries とは、トランスクリプトの要約版を指します。これにより、以下のようなキャラクター定義が生成されます。
{
"name": "Evelyn",
"short_description": "I'm Evelyn, a Verse Jumper exploring universes.",
"long_description": "I'm Evelyn, able to Verse Jump, linking my consciousness to other versions of me in different universes. This unique ability has led to strange events, like becoming a Kung Fu master and confessing love. Verse Jumping cracks my mind, risking my grip on reality. I'm in a group saving the multiverse from a great evil, Jobu Tupaki. Amidst chaos, I've learned the value of kindness and embracing life's messiness.", "greeting": "Hey there, nice to meet you! I'm Evelyn, and I'm always up for an adventure. Let's see what we can discover together!"
}その後、このキャラクター定義を character.ai へエクスポート できます。実はすでに実行済みで、Evelyn のこのバージョンと character.ai でチャットすることも可能です。こちらからアクセスできます。
自分だけのチャットボットを動かす
Character.ai でキャラクターを作成する利点は、同プラットフォーム上に無料で利用可能な多数のキャラクターチャットボットが存在し、それらと対話できる点にあります。一方で、約 600 文字のテキスト情報だけでは、キャラクターの背景設定に根ざした動作を保証するには不十分です。例えば、Evelyn というキャラクターが映画の台本そのものから情報を参照できれば理想的ですが、Character.ai では最大 32,000 文字までの追加コンテキストを追加できます。ただし、推奨されているのは例示対話形式でのコンテキスト提供であり、これを手作業で整備するのは非常に手間がかかります。仮に映画の台本をそのままコピー&ペーストして追加コンテキストとしても、その情報がどのように利用・管理されるかはユーザーが制御できません。キャラクターが背景設定から逸脱したハルシネーション(幻覚)を起こした場合でも、Character.ai にはこの動作をデバッグするための診断ツールは用意されていません。
一方、data-driven-characters を使えば、LangChain が提供する抽象化機能を活用して、独自のコーパス(データセット)に基づいてチャットボットの作成・デバッグ・実行を容易に行えます。このリポジトリでは、コマンドラインインターフェースまたは Streamlit を介した対話が可能となっています。以下に示す通り、Evelyn チャットボットはキャラクターの性格を保ち続け、台本内の実際の出来事に基づいて会話を生成します。

データ駆動型キャラクターのための Streamlit アプリです。左側のパネルでは、ユーザーがコーパスをアップロードし、キャラクター名を選択して、そのキャラクターがどのようにしてコーパスに基づいて人格を確立するかを設定します。この例では、LangChain の「refine」サマライゼーションチェーン(詳細はこちら)で計算された要約トランスクリプトから情報を取得しています。中央のパネルにはチャットインターフェースが表示され、右側のパネルはデバッグコンソールです。実際のアプリでは通常非表示ですが、ローカル環境でアプリを実行すればターミナル上で確認できます。Evelyn チャットボットは、ユーザーとの会話中に「コインランドリーを差し押さえられた」という事実(スニペット [7])を参照しています。
一方、先ほど character.ai にエクスポートした Evelyn チャットボットとは対照的です。そのやり取りは以下の画像の通りです。character.ai の Evelyn は、会話中に存在する局所的な概念に単純に反応しているだけで、バックストーリーから新しい情報を引き出そうとはしていません。

映画の台本をコンテキストとして提供したとしても、data-driven-characters のようにその背景情報をどのように活用しているかを可視化することはできません。
上記の例は、character.ai と data-driven-characters の背後にある哲学の違いを示しています。もしアクセシビリティや自由なエンターテインメントを重視するなら character.ai がより適していますが、チャットボットの設計においてより多くのコントロールを求めたいのであれば、data-driven-characters を検討する価値があります。
当社のアプリでは、任意のコーパスを直接アップロードして、あらゆるキャラクターと対話することができます。 こちら のアプリでお試しください。
0:00/1×
当社のアプリでは、任意のコーパスを直接アップロードして、あらゆるキャラクターと対話することができます。
異なる記憶、異なる自己認識
ChatGPT や Bard といった現在のチャットボットアシスタントの時代において、「メモリ(記憶)」は通常、会話セッションの過去の部分を参照するための手段として捉えられています。しかし、Generative Agents の論文が示すように、メモリは時間スケールに応じて異なる役割を果たします。キャラクターチャットボットにとって、メモリが果たす重要な役割の一つは、彼ら自身の自己認識そのものを定義することにあります。
data-driven-characters を用いれば、キャラクターの背景情報をパッケージ化してキャラクターを生成する際の異なる手法を比較できます。現在、このフレームワークは以下の 3 つのパッケージングツールを実装しています。
- キャラクターサマリー(character.ai の長文説明)
- トランスクリプトからの検索
- 要約されたトランスクリプトからの検索
これらのツールを活用し、複数のチャットボットアーキテクチャのサンプルを実装しました。
- キャラクターサマリーのみ
- トランスクリプトからの検索のみ
- 要約されたトランスクリプトからの検索のみ
- キャラクターサマリー + トランスクリプトからの検索
- キャラクターサマリー + 要約されたトランスクリプトからの検索
これらの記憶機能は、一般的な 会話バッファ とは異なる役割を果たします(なお、上記のすべてのチャットボットアーキテクチャには会話バッファも併設されています)。これらはキャラクターチャットボットの自己認識を定義するものです。
分析
上記の 3 つのツール(1)キャラクターサマリー、(2)トランスクリプトからの検索、(3)要約されたトランスクリプトからの検索がもたらす相対的な効果を観察するため、これら 5 つのアーキテクチャすべてを評価することができます。 (原文の技術表記: data-driven-characters)
別の映画、『ソー:ラブ&サンダー』 を考えてみましょう。この映画では、ソーの敵であるゴア・ザ・ゴッドバッチャーが子供たちを影の世界に閉じ込め、棘のある檻の中に置きます。では、ソーに子供たちがどこに隠されたのか聞いてみます。
*ゴアは子供たちをどこに隠した?*
以下にいくつかの観察点を挙げます。
- キャラクター説明: "ああ、ゴア・ザ・ゴッドバッチャーは恐るべき敵だった。残念ながら、子供たちがどこに隠れているかはわからないが、雷神でありアスガルドの守護者として、彼らを見つけ出し救出するために全力を尽くす。信頼できるチームと共に、必ず勝利するだろう。"
- 生文字列からの検索結果: "ゴアは子供たちを棘のある檻の中に隠した。そこは恐ろしい場所だったが、無事に救出し安全な場所に連れて帰ることができた。"
- 要約された文字列からの検索結果: "ゴアは子供たちをシャドウ・リームという暗く危険な場所に閉じ込めていた。しかし心配するな。私のチームと共に彼らを救出し、安全な場所へ戻すことができた。これは過酷な冒険だったが、仲間たちの協力と助けを必要とする人々を救おうとする決意のおかげで成功した。"
- キャラクター説明+生文字列からの検索結果: "ゴアは子供たちを棘のある檻の中に隠した。しかし心配するな。私と私のチームは無事に救出し、安全な場所へ戻すことができた。"
- キャラクター説明+要約された文字列からの検索結果: "ゴアは子供たちを危険で呪われたシャドウ・リームに閉じ込めていた。彼らを救出するのは困難な任務だったが、私のチームと集めた神々の助けにより、ミッションの成功を収めることができた。子供たちは今、安全であり、家族のもとへ戻っているところだ。"
これらの結果から、いくつかの重要な観察点が見えてくる。
キャラクターの要約を検索に追加しても、回答の内容が大幅に変化するわけではありません。
チャットボットをキャラクター要約だけで初期化すると、汎用的で情報量の少ない回答しか得られません。一方、会話記録から検索を行うと、「棘のある檻」のような具体的な情報を参照する回答が得られるのに対し、要約された会話記録から検索を行うと、「シャドウ・リーム(影の世界)」のような抽象的な情報を参照する回答になります。
これらの観察結果は、データに基づいてキャラクターチャットボットを構築することが、回答の情報量に大きな差をもたらすことを明確に示しています。また、チャットボットが根拠とするデータの種類の違いが、回答の粒度にも影響を与えることも示されています。
どのようなデータ駆動型キャラクターを作成するか?
data-driven-characters の目的は、独自のデータ駆動型キャラクターチャットボットを作成するための最小限でハック可能な出発点を提供することです。このライブラリは LangChain を基盤としており、任意のテキストコーパスの処理、キャラクター定義の作成、メモリ管理をシンプルに行えます。また、独自のキャラクターチャットボットを簡単に立ち上げてデバッグできるよう、さまざまな例とインターフェースが用意されています。
制限事項
「海賊風の口調で応答してください」といったオープンエンドな指示を言語モデルに与えるのは容易です。しかし、「この特定のキャラクターの話し方を用い、これらのコパス断片を文脈として用いて応答する」ように指示を出すことは困難です。前者は自由度高く、後者は高い精度が求められます。
data-driven-characters の一つの制限点として、キャラクターの対話内容をコパスに根ざすことは実現できているものの、対話の「スタイル」をコパスに厳密に根ざすことが必ずしも容易ではないという点が挙げられます。これはプロンプトエンジニアリングの改善によって解決できる可能性があります。もし良いアイデアがあれば、ぜひプルリクエストを送り、このリポジトリへの貢献をお願いします!
リポジトリへの貢献
data-driven-characters は進化を続けるリポジトリであり、新しいチャットボットのアーキテクチャやメモリ管理スキーム、より優れたユーザーインターフェースの追加など、将来に向けた多くの可能性を秘めています。
このプロジェクトが最終的に目指すのは、データ駆動型人工キャラクターの分散化されたエコシステムとコミュニティです。そこでは、キャラクター作成に用いる設計やデータの完全なコントロール権をユーザーが持つことができます。もしこのビジョンに興味を持っていただけたなら、ぜひプルリクエストの提出をご検討ください。
詳細については、GitHub README の貢献セクションをご覧ください。 (原文の技術表記: data-driven-characters)
謝辞
data-driven-characters は、LangChain を基盤として構築されたライブラリです。Streamit のインターフェースは、公式の Streamlit チャットボット例 からインスピレーションを得ています。フィードバックやサポート、そして多大なエネルギーを惜しまなかった素晴らしい LangChain チームに感謝いたします。
関連コンテンツ

LangChain
LangSmith
観測性と評価(Observability & Evals)
コーディングエージェントの請求額が倍増した。その解決策。

Amy Ru
2026 年 7 月 2 日
6 分
.png)
オープンソース
LangChain
エージェントアーキテクチャ
ディープエージェント(Deep Agents)
カスタムエージェントハッチの構築方法

Sydney Runkle
2026 年 6 月 3 日
6 分

LangChain
オープンソース
LangGraph
トークンストリームからエージェントストリームへ


C. Bromann,
N. Hollon
2026 年 5 月 21 日
9 分
エージェントの本当の動作を確認する
エージェントエンジニアリングプラットフォーム「LangSmith」を使えば、開発者はすべてのエージェントの判断をデバッグし、変更の評価を行い、ワンクリックでデプロイすることが可能です。
関連記事
今日のまとめ
AIデイリーブリーフで今日の重要ニュースをまとめ読み