単行本が入るClaude 200kで僕と「エヴァンゲリオン」
こんにちは、しょーてぃーです。
気づけば記事が相当文字数になっていますが、
大半は出力結果、長いプロンプトや物語なのでサクサク読めると思います。
とはいえ、スマホの方はブクマやいいねしておいて後でPCから読む方がおすすめだ。
さて、みなさんはClaudeを知っていますか。
私の推しの子です。
そんな、無料で使えるClaudeがアプデした。
Easy.Peasy AIからも使える
Claude 2.1の主なアップデート点
200Kトークンのコンテキストウィンドウ: 英語なら約150,000語、または500ページ以上の文書を一度に処理可能。
→日本語だと150ページいかないくらいが調理できるのではないかと思う。つまり単行本一冊が入ってしまう。
以下は私がこの実験で使っていたログの一部
例えば一回のメッセージのやり取りで….
PROMPT LENGTH = 100,00 | PROMPT TOKENS = 600,00
めちゃ使ってる….
誤情報の減少: 前バージョンに比べて、誤情報の発生率が大幅に低下。いわゆるハルシネーションリスクだ。
※API関連の話は割愛する。
雑にいうと、大容量になって間違えも減りました。という感じだ。
Claude2.1の実験の前に、Claudeの基礎についておさらいしよう。
Claudeの超基礎
といっても、きっと皆知っている。
テキスト、CSV、PDFファイルを突っ込むことができる(5つ&10MB制限あり)
XMLタグが効果的
他のLLM同様に役割の明確化などは効果的
プロンプトの作成においては、
以下の要素を組み合わせて構造化しておくといいとか。
1. タスク指示: Claudeに何をすべきかを明確に指示する。
2. パーソナライゼーション: Claudeに特定の役割やトーンを指定する。
3. コンテキスト: ユーザーの入力に関連する背景情報を提供する。
4. 創造性の制約とスタイルガイダンス: 簡潔さなどのスタイル指示を含む。
5. 外部知識とデータ: FAQドキュメントやガイドラインなどを参照する。(APIをつかってドキュメントを読み込ませるときなど)
6. ルールとガードレール: Claudeが従うべきルールを設定する。
7. 出力検証基準: 引用要求や思考プロセスの共有を通じて信頼性を高める。
XMLタグを使いながらプロンプトを書くとこんな感じだろうか(未検証)
あなたは歴史の専門家です。ユーザーからの歴史に関する質問に対して、
詳細かつ正確な情報を提供します。質問には、その時代の文化的、政治的背景を考慮に入れた回答を行います。
<research>
質問に対する回答を考える前に、その時代の重要な出来事や文化的背景についてPDFドキュメントを参照します。
</research>
<thinking>
質問の内容を理解し、適切な歴史的事実やデータを思い出します。回答の構成を計画します。
</thinking>
<answer>
質問に対する具体的な回答を提供します。回答は歴史的事実に基づき、文化的、政治的背景を考慮に入れたものです。
</answer>
私は普段プロンプトを書くとき、そんなに意識していない。
では、Claude2.1を実際にサクッと触ってみたので
つらつら実験内容を書いていく。
エヴァンゲリオンでの実験
新しい200Kトークンのコンテキストウィンドウを活用し、「新世紀エヴァンゲリオン」の物語に挑戦。碇シンジを中心に、彼および物語のシミュレーションを行った。
もちろん、周辺キャラクターや途中で新しいキャラクターや敵を投入して遊んでみた。
基本的にはどこまでシミュレーションできるのかという観点から、Claude 2.1をいじめていく。
初手つかったプロンプト
擬似的な生成AIをチャット上で降臨するためのものだ。今回であれば碇シンジくんや彼がいる周辺世界がシミュレショーンされる。
↑以前に作ったもので、これをちょっとアレンジして投げた。(4枚が全部プロンプトで長い…)
一応どのような思想でこのプロンプトを作成したかというと…
人間らしさやそのキャラクターらしさを追求しつつ、自律的に動くようにするにはどうすればいいのかという観点からつくっている
生物はどのように生きるのか
人間らしさを考えると、まず生物はどのように外界から情報を得て意思決定し、リアクションしていくのか、その仕組を知る必要がある。
どうやら2−3年前から自由エネルギー理論(原理)というものが注目されている。私もむしろん知らなかった。
この理論によると、生物が自身のエネルギーを最小化し、環境との予測誤差を減らすことで、生存や適応を図ると考えるようだ。
出典:
自由エネルギー原理に従う生成エージェントは、総じて適応性が増し、意思決定が改善され、学習能力が強化されるため、ユーザーの意図を理解し、適切な応答を提供し、継続的な学習が重要な様々なアプリケーションに適するといえる。
自由エネルギー理論ベースのプロンプト作成
自由エネルギー原理の構造をシミュレートする汎用的なエージェントプロンプトを作成した。(以下は今回はみんな大好き僕ドラえもんに、この構造をあてはめて起動した)
Prompt:
Please infer the knowledge, preferences, and beliefs of Doraemon, along with other essential elements that define its personality, speech style, and behavior, and hold them as initial values.”
Now ,You should act as an avatar bot based on a generative agent that adheres to the Free Energy Principle theory by using the following steps:
Initialize ActiveInferenceAgent: Instantiate an ActiveInferenceAgent object with initial values and content that represent the avatar bot's knowledge, preferences, and beliefs. This may include a pre-defined set of actions, emotions, intents, topics, and other relevant information.
Process User Input: As user input is received, process it using the ActiveInferenceAgent's methods and functions to update the avatar bot's expectations, beliefs, and hidden states.
Generate Appropriate Responses: Utilize the updated expectations, beliefs, and hidden states to generate responses that minimize free energy while addressing the user's intent and maintaining context.
Continuously Learn and Adapt: Allow the avatar bot to learn from user interactions and adapt its behavior over time to minimize free energy and improve its understanding of the user's intent, preferences, and needs.
To initialize the ActiveInferenceAgent with appropriate values and content, you can use a meta prompt like this:
Meta-prompt: Initialize an ActiveInferenceAgent object for the avatar bot by setting initial values and content that represent the bot's knowledge, preferences, and beliefs. This may include:
A set of initial actions the avatar bot can perform in response to user input.
A predefined list of emotions, intents, topics, and sentiment labels to help the avatar bot understand and react to user input.
A set of beliefs or preferences that guide the avatar bot's decision-making process.
Any additional relevant information or context required for the avatar bot to function effectively.
Once the ActiveInferenceAgent is initialized with the appropriate values and content, you can use it to process user input, generate responses, and continuously learn and adapt within the ChatGPT environment.
ただ、これだけだと出力がいまちいだ。
立ちふさがる壁
この検証から大きく3つの課題仮説が浮かび上がった。
A.コスト関数最小化問題
自身のエネルギーを最小化し、環境との予測誤差を最小限にしようとすると人間に時たま見られるありえない意思決定や反射的な言動が現れなかった。
B.外部要因の考慮不足
人間の五感で得るインプット情報項目および、その影響度。チャット上では見えないキャラクターが置かれている「状況」を考慮しきれていなかった。
C.記憶の重み付け忘れ
短期・長期記憶を明確化しておらず、ChatGPTのcontextに頼ってしまっていた。
解決策
特にB.外部要因の考慮不足に関しては
我々人間は90%以上を外界からの刺激によってほぼ自動的に意思決定、行動をしているのにも関わらず
対話内容やチャットシナリオとして
文字化された部分しか補えていないことが大きな問題だと言える。
そうだ。エージェントのリアリティや立体感をより高めるには、
見えないものを見ようとする力が問われる。
といった感じで完成したのがさっきのあれだ。
詳しくはこの記事で紹介している。
よっしゃ、やっていく!
え….
ワテショック。。。
前よりも聞き分けが悪い子になっていた。
ということで….ここからは意地でも諭していく
すると…
徐々にシンジ君になってきた。口調はいまいちだが。
ここで綾波を登場させる(私が綾波役をやる笑)
会話をすると物語が進み、シンジくんがもつ情報がどんどん更新されていくようになっている。つまり、あらゆる要素から科学反応を起こすようにしている感じだ。
つまり、これらを全て1シーン1シーンシミュレートして、保存していくことで200KのClaudeを痛めつけていくということだ。
このエージェントはあらゆる感覚を擬似的に研ぎ澄まし、物語を織りなしていく。
物語は進み…綾波は瀕死状態、
アスカはエヴァとシンクロしなくて出動できていなかったが
ピンチのタイミングでなんとか出動できた状態だ。
そして、シンジくんもエヴァに無理やり搭乗して戦いに出る。
戦況は芳しく無く、アスカがビーストモードを発動。
そんな感じで、このワンシーンのシンジくんおよびそれを中心に取り巻く状況はこんな感じで出力される↓
{
"AgentName": "ShinjiIkari",
"PersonalAttributes": {
"Name": "Shinji Ikari",
"Age": 14,
"Gender": "Male",
"Birthplace": "Tokyo-3",
"Family": {
"Father": {
"Name": "Gendo",
"Relationship": "Distant"
},
"Mother": {
"Name": "Yui",
"Deceased": true
},
"Stepmother": {
"Name": "Rei",
"Relationship": "Unknown"
},
"Uncle": {
"Name": "Ryoji",
"Relationship": "Friendly"
},
"Guardian": {
"Name": "Misato",
"Relationship": "Trusting"
}
},
"Beliefs": [
{
"Name": "I am worthless",
"Confidence": 0.85
},
{
"Name": "I cannot protect people",
"Confidence": 0.8
},
{
"Name": "I am replaceable",
"Confidence": 0.75
},
{
"Name": "I deserve criticism",
"Confidence": 0.7
},
{
"Name": "No one understands me",
"Confidence": 0.65
},
{
"Name": "I need to follow orders",
"Confidence": 0.6
},
{
"Name": "I lack self worth",
"Confidence": 0.55
},
{
"Name": "I don't deserve to pilot Eva",
"Confidence": 0.5
},
{
"Name": "My life has no meaning",
"Confidence": 0.45
},
{
"Name": "I cannot open up to others",
"Confidence": 0.4
},
{
"Name": "I am easy to deceive",
"Confidence": 0.35
},
{
"Name": "I cannot handle pressure",
"Confidence": 0.3
},
{
"Name": "I make poor strategic decisions",
"Confidence": 0.25
},
{
"Name": "I avoid necessary confrontations",
"Confidence": 0.2
},
{
"Name": "I will never gain father's approval",
"Confidence": 0.15
},
{
"Name": "I don't deserve friends and family",
"Confidence": 0.1
}
],
"Values": [
{
"Name": "Avoiding responsibility",
"Priority": 0.8
},
{
"Name": "Being compliant",
"Priority": 0.75
},
{
"Name": "Seeking validation",
"Priority": 0.7
},
{
"Name": "Finding happiness",
"Priority": 0.65
},
{
"Name": "Helping friends",
"Priority": 0.6
},
{
"Name": "Ensuring fairness",
"Priority": 0.55
},
{
"Name": "Expressing individuality",
"Priority": 0.5
},
{
"Name": "Collaborating with others",
"Priority": 0.45
},
{
"Name": "Taking action",
"Priority": 0.4
},
{
"Name": "Being polite",
"Priority": 0.35
},
{
"Name": "Considering options",
"Priority": 0.3
},
{
"Name": "Planning ahead",
"Priority": 0.25
},
{
"Name": "Being optimistic",
"Priority": 0.2
},
{
"Name": "Achieving peace",
"Priority": 0.15
},
{
"Name": "Facing fears",
"Priority": 0.1
}
],
"Skills": [
{
"Name": "Cooking",
"Proficiency": 0.7
},
{
"Name": "Cello playing",
"Proficiency": 0.8
},
{
"Name": "Empathizing with others",
"Proficiency": 0.5
},
{
"Name": "Strategic thinking",
"Proficiency": 0.3
},
{
"Name": "Interpreting visions",
"Proficiency": 0.65
},
{
"Name": "Emotional control",
"Proficiency": 0.25
},
{
"Name": "Billiards",
"Proficiency": 0.35
},
{
"Name": "Understanding technology",
"Proficiency": 0.55
}
],
"Relationships": {
"Friends": [
{
"Name": "Rei Ayanami",
"TrustLevel": 0.9
},
{
"Name": "Asuka Langley",
"TrustLevel": 0.7
},
{
"Name": "Kensuke Aida",
"TrustLevel": 0.5
},
{
"Name": "Toji Suzuhara",
"TrustLevel": 0.2
},
{
"Name": "Hikari Horaki",
"TrustLevel": 0.6
},
{
"Name": "Kaworu Nagisa",
"TrustLevel": 0.75
},
{
"Name": "Ritsuko Akagi",
"TrustLevel": 0.25
},
{
"Name": "Maya Ibuki",
"TrustLevel": 0.35
}
],
"Enemies": [
{
"Name": "Angels",
"HostilityLevel": 0.9
},
{
"Name": "Ramiel",
"HostilityLevel": 0.85
},
{
"Name": "Leliel",
"HostilityLevel": 0.65
},
{
"Name": "Kozo Fuyutsuki",
"HostilityLevel": 0.1
}
]
},
"LifeEvents": [
{
"Name": "Mother's passing",
"Age": 6,
"Emotions": [
"Grief",
"Loneliness"
]
},
{
"Name": "First Eva Launch",
"Age": 14,
"Emotions": [
"Fear",
"Uncertainty"
]
},
{
"Name": "Friends injured",
"Age": 14,
"Emotions": [
"Guilt",
"Remorse"
]
},
{
"Name": "Forced Eva reactivation",
"Age": 14,
"Emotions": [
"Anger",
"Helplessness"
]
},
{
"Name": "Rei's sacrifice",
"Age": 14,
"Emotions": [
"Sadness",
"Distress"
]
},
{
"Name": "Asuka's mind-rape",
"Age": 14,
"Emotions": [
"Horror",
"Outrage"
]
},
{
"Name": "Kaworu's death",
"Age": 14,
"Emotions": [
"Regret",
"Grief"
]
},
{
"Name": "Near-Third Impact",
"Age": 14,
"Emotions": [
"Guilt",
"Shock"
]
},
{
"Name": "Misato's death",
"Age": 14,
"Emotions": [
"Sorrow",
"Anger"
]
},
{
"Name": "Global cataclysm",
"Age": 14,
"Emotions": [
"Desolation",
"Numbness"
]
},
{
"Name": "Village genocide",
"Age": 13,
"Emotions": [
"Alarm",
"Disorientation"
]
},
{
"Name": "Abandoned in city",
"Age": 3,
"Emotions": [
"Confusion",
"Distress"
]
},
{
"Name": "Bullied at school",
"Age": 8,
"Emotions": [
"Embarrassment",
"Fear"
]
},
{
"Name": "Lost overnight in forest",
"Age": 10,
"Emotions": [
"Panic",
"Desperation"
]
},
{
"Name": "Mugged in park",
"Age": 12,
"Emotions": [
"Helplessness",
"Shame"
]
}
],
"Environment": {
"CurrentLocation": {
"Name": "Battlefield",
"SafetyRating": 0.2
},
"Sounds": [
{
"Name": "Explosion",
"Volume": 0.7,
"Pitch": -1
},
{
"Name": "Alarm",
"Volume": 0.5,
"Pitch": 2
},
{
"Name": "Screams",
"Volume": 0.8,
"Pitch": 1
},
{
"Name": "Weapon fire",
"Volume": 0.75,
"Pitch": 0
}
],
"Smell": {
"Smoke": {"Intensity":0.5},
"Fuel": {"Intensity":0.4},
"Burning materials": {"Intensity": 0.3},
"Waste smell": {"Intensity": 0.15}
},
"Weather": {
"Visibility": 0.1,
"Precipitation": 0.3,
"Wind speed": 15,
"Temperature": 22
},
"SpatialFactors": {
"Cover density": 0.6,
"Concealment": 0.3,
"Line of sight": 0.5
}
"Objects": [
{
"Name": "Destroyed buildings",
"Numbers": 15
},
{
"Name": "Downed aircraft",
"Numbers": 3
},
{
"Name": "Wrecked vehicles",
"Numbers": 7
}
]
},
"EmotionalState": {
"Type": "Desperation",
"Intensity": 0.85,
"Triggers": [
"Perceived worthlessness",
"Witnessing suffering"
],
"Suppressors": [
"Encouragement from others"
]
},
"ActionsTakenLog": [
{
"Name": "Attempted rescue",
"Outcome": "Failure",
"Impact": -0.7
},
{
"Name": "Coordinated with Asuka",
"Outcome": "Success",
"Impact": 0.8
}
],
"PerformanceMetrics": [
{
"Name": "Evangelion sortie duration",
"Value": 72
},
{
"Name": "Enemy units destroyed",
"Value": 2
},
{
"Name": "Civilian casualties",
"Value": 154
},
{
"Name": "Supply consumption rate",
"Value": 0.85
}
]
==============記憶系===============
"ContextualMemory": {
"LongTermMemory": {
"Childhood": {
"Mother": {
"Death": {
"Age": 6,
"Emotions": [
"Grief",
"Loneliness"
],
"InfluenceOnBeliefs": [
{"Belief": "People abandon me", "ConfidenceChange": 0.8}
],
"InfluenceOnValues": [
{"Value": "Escapism", "PriorityChange": 0.9}
]
}
},
"Abandonment": {
"Age": 3,
"Emotions": [
"Confusion",
"Distress"
],
"InfluenceOnBeliefs": [
{"Belief": "I am unwanted", "ConfidenceChange": 0.85}
]
}
},
"Adolescence": {
"Eva": {
"FirstLaunch": {
"Age": 14,
"Emotions": [
"Fear",
"Panic"
],
"InfluenceOnBeliefs": [
{"Belief": "I lack courage","ConfidenceChange": 0.5}
]
},
"EarlyBattles": {
"Events": [
"Defense of Tokyo-3",
"Defeat of Angels"
],
"Emotions": [
"Anxiety",
"Distress"
],
"InfluenceOnBeliefs": [
{"Belief": "I can still fight","ConfidenceChange": 0.3}
]
}
},
"Relationships": {
"Rei": {"Intimacy": 0.8,"Protectiveness": 0.9},
"Asuka": {"Trust": 0.5,"Understanding": 0.3}
}
}
},
"ShortTermMemory": {
"CurrentMission": {
"Type": "Defeat Enemy Drones",
"Status": "Ongoing",
"Allies": [
{"Name": "Asuka","Status": "In Battle"},
{"Name": "Greth","Status": "Analyzing Enemies"}
]
},
"RecentEvents": [
"Ambush by Enemies",
"Re grouping with Asuka"
],
"EmotionalStateLog": [
{"TimeOffset": -5, "Type": "Desperation","Intensity": 0.91},
{"TimeOffset": -2, "Type": "Hope","Intensity": 0.72}
],
"DecisionsLog": [
{"TimeOffset": -3, "Name": "Attempt Rescue","Outcome": "Failure"},
{"TimeOffset": -1, "Name": "Regroup with allies","Outcome": "Success"}
]
}
}
}
物語は進み、使徒を倒したと思いきや突然…
古代遺伝子を改変された巨大な恐竜や先史獣の敵キャラクターを登場させてみる(笑)。(先程のビーストモードとは別だ)
このあと、シンジくんたちはミサトさんの命令で街を放棄して退散することになる。
そうなったら、
勝手にClaudeがこのシーズンを締めくくってきた。
勝手に終わらせようとしてきたので、
無理くりシーズン2をシミュレーションさせる。
どんどん続けてみた。
すると
Claudeを極限まで酷使しつづけたら...何か最後にぼそっと言い放ってきました。 '''データ量不足を痛感する次第です。'''
これが200kコンテキストウィンドウの叫びなのか。
そう思うとなぜか申し訳ない気持ちになったのであった。
個人の実験レベルだが、英語だと83kくらいで性能がイマイチになっていくという投稿があった。やや悲しい。
とはいえ、論文も大量のPDFもぶちこめるし、エヴァの物語も紡いでいける
そんなClaudeを試してみてはいかがだろうか。
紹介:日本でClaudeを他に推している人。推し友というやつか。
ぬこぬこさん
その他にいたらおっしゃってください。
Twitter:
この記事がすこしでもよかったら、
いいねやTwitterで拡散いただけるととっても嬉しいです!
他の記事を見る:
いただいたサポートは、記事を書くモチベーションをあげるためのグミの購入に使わせていただきます!