Claudeを使った投資分析システムの設計方針
こんにちは。
生成AI(Claude)を使って投資分析システムを作るぞ!と意気込んでみてもまずcode作成を行うpromptsを作成する必要があります。
1. 開発環境と前提条件
有料版のClaude projectsを使用して開発を進めます。
システムのバージョンはClaude 3.5 Sonnetを前提とします。
こんなマニアックな記事を読みにくる読者の皆さまは、すでに生成AIに一定の知識をお持ちと思われるので、Claudeのprojectsに関する詳しい説明は割愛させていただきます。
2. Promptの設定
Promptは、Claudeのprojectsの"Set project instructions"に設定します。
この"Set project instructions"にどんな内容でどんな型式で入れるか?、によって出力される内容がかなり変わるので悩みどころです。
3. Promptの型式比較
まずはClaudeでサポートされるPromptの型式について、Claudeに聞いてみましょう。
(質問)
ClaudeのSet project instructionsに設定できるテキストの型式について、リスト化して説明してください
(回答)
【基本テキスト形式】
$$
\begin{array}{|l|l|l|l|l|} \hline \textbf{テキスト型式} & \textbf{説明} & \textbf{処理の容易さ} & \textbf{主な用途} & \textbf{特徴} \\ \hline \text{プレーンテキスト} & \text{装飾や書式設定の} & \text{非常に容易} & \bullet \text{ 基本的な指示} & \bullet \text{ 最もシンプルな形式} \\ \text{(.txt)} & \text{ない純粋なテキスト} & & \bullet \text{ シンプルなルール設定} & \bullet \text{ どのシステムでも読み書き可能} \\ & & & \bullet \text{ 一般的なメモ} & \bullet \text{ 検索が容易} \\ & & & & \bullet \text{ サイズが小さい} \\ \hline \text{マークダウン} & \text{軽量マークアップ} & \text{容易} & \bullet \text{ 技術文書} & \bullet \text{ 読みやすい構文} \\ \text{(.md)} & \text{言語} & & \bullet \text{ README} & \bullet \text{ HTMLへの変換が容易} \\ & & & \bullet \text{ ドキュメント} & \bullet \text{ 画像や表の挿入が可能} \\ & & & \bullet \text{ ブログ記事} & \bullet \text{ コードブロックのサポート} \\ \hline \text{HTML} & \text{タグベースの} & \text{やや複雑} & \bullet \text{ Webページ} & \bullet \text{ 詳細な書式設定が可能} \\ & \text{マークアップ言語} & & \bullet \text{ メールテンプレート} & \bullet \text{ マルチメディア対応} \\ & & & \bullet \text{ 構造化文書} & \bullet \text{ インタラクティブ要素} \\ & & & & \bullet \text{ スタイル適用が可能} \\ \hline \end{array}
$$
【データ構造形式】
$$
\begin{array}{|l|l|l|l|l|} \hline \textbf{テキスト型式} & \textbf{説明} & \textbf{処理の容易さ} & \textbf{主な用途} & \textbf{特徴} \\ \hline \text{XML} & \text{拡張可能な} & \text{やや複雑} & \bullet \text{ 構造化データ} & \bullet \text{ 厳密なデータ構造} \\ & \text{マークアップ言語} & & \bullet \text{ システム間連携} & \bullet \text{ スキーマ検証可能} \\ & & & \bullet \text{ 設定ファイル} & \bullet \text{ 豊富なツールサポート} \\ & & & & \bullet \text{ 国際標準規格} \\ \hline \text{JSON} & \text{JavaScript Object} & \text{容易} & \bullet \text{ APIレスポンス} & \bullet \text{ 軽量で可読性が高い} \\ & \text{Notation} & & \bullet \text{ 設定ファイル} & \bullet \text{ 多くの言語でサポート} \\ & & & \bullet \text{ データ交換} & \bullet \text{ Webでの標準形式} \\ & & & & \bullet \text{ パース処理が容易} \\ \hline \text{YAML} & \text{YAMLエイントワース} & \text{容易} & \bullet \text{ 設定ファイル} & \bullet \text{ 人間が読み書きしやすい} \\ & \text{マークアップ言語} & & \bullet \text{ データシリアル化} & \bullet \text{ 階層構造が表現しやすい} \\ & & & \bullet \text{ ドキュメント} & \bullet \text{ コメント記述が可能} \\ & & & & \bullet \text{ JSONのスーパーセット} \\ \hline \end{array}
$$
【特殊形式】
$$
\begin{array}{|l|l|l|l|l|} \hline \textbf{テキスト型式} & \textbf{説明} & \textbf{処理の容易さ} & \textbf{主な用途} & \textbf{特徴} \\ \hline \text{CSV} & \text{カンマ区切り値} & \text{容易} & \bullet \text{ データセット} & \bullet \text{ シンプルな表構造} \\ & & & \bullet \text{ 表形式データ} & \bullet \text{ スプレッドシートとの互換性} \\ & & & \bullet \text{ エクスポートデータ} & \bullet \text{ テキストエディタで編集可能} \\ & & & & \bullet \text{ 大量データの処理に適する} \\ \hline \text{PDF} & \text{Portable Document} & \text{複雑} & \bullet \text{ 文書配布} & \bullet \text{ プラットフォーム非依存} \\ & \text{Format} & & \bullet \text{ 印刷用文書} & \bullet \text{ レイアウト保持} \\ & & & \bullet \text{ 電子書籍} & \bullet \text{ セキュリティ機能} \\ & & & & \bullet \text{ 電子署名対応} \\ \hline \end{array}
$$
プレーンテキスト(.txt)やマークダウン(.md)で記述するのが一般的な使い方かなと思いますが、AIに確認するといろいろな型式に対応していることがわかります。
個人的な感想としては、文章作成をClaudeに依頼する際はプレーンテキスト(.txt)かマークダウン(.md)でPromptを設定する方が、自然な日本語の文章が出力される印象です。他の型式だと、Promptによる指示が固く、出力される文章も機械的な雰囲気になりますね。
4.バージョンによる比較
また、Claudeは使用するシステムのバージョンによって出力内容が大きく変化するので、ChatGPTと比べるとマニアックな印象があります。
例えば、以下の指示をChatでClaudeに与えた場合の出力の違いを見てみましょう。
*同じ文章作成promptを設定し、同じ指示を与えています。
また、回答styleはnormalです。
<chatでのClaudeへの指示>
以下の内容を参考に、500文字程度の記事を作成してください。
ChatGPTとの主な機能的な違いを5つご説明します
・Claude 3.5 Sonnetは最大100,000トークン(約75,000語)の長文を処理できます。これはChatGPTの32,000トークンと比べてかなり長い文章を一度に扱えることを意味します。たとえば、長い論文や報告書、小説全体などの分析が可能です。
・Claudeはより高度な画像理解能力を持っており、画像内の細かいテキストの読み取りや、複雑な図表・グラフの分析が可能です。また、画像内の物体や状況をより正確に説明することができ、医療画像や技術図面なども理解できます。
・Claudeは数学的・科学的な問題において、より体系的な思考プロセスを示します。複雑な計算や推論を行う際に、段階的な説明を提供し、なぜその結論に至ったのかを明確に示すことができます。
・Claudeは倫理的な判断においてより慎重なアプローチを取ります。特に機密情報や個人情報の扱い、セキュリティに関連する質問に対して、より明確な境界線を設定し、適切なガイドラインを提供します。
・Claudeはより自然な会話スタイルを持ち、人間との対話においてより柔軟に対応できます。質問の文脈をより深く理解し、必要に応じて確認や明確化を求めることで、より正確で有用な回答を提供することができます。
同じClaudeでもバージョンの違いで、出力内容がかなり変化することがわかります。バージョンによる処理能力の違いがあり、長文の記事作成といった作業はOpusが適しており、Code作成といった出力は3.5 Sonnetが適している印象です。
同じ内容のCodeを実行した場合でも、OpusとSonnetではArtifactの内容が異なります。数値分析と結果の表示というタスクではSonnetの出力内容の方がグラフ表示の内容も分析の説明も充実しています。
個人的にはClaudeは特化型AIサービスといった雰囲気で、万能型のchatgptのように一般化はしなさそうな気配がします。
ただ、長文処理能力に長けていてバックエンドでのcode実行のような作業はClaudeでしか稼働できないでしょう。
5. Code作成に適したPromptの型式
まだ、promptを作成するところまで進んでもいませんが、続けてCode作成する際に、"Set project instructions"に適した型式は何か?、とClaudeに質問してみましょう。
【形式比較表】
$$
\begin{array}{|l|l|l|l|} \hline \textbf{テキスト型式} & \textbf{メリット} & \textbf{デメリット} & \textbf{ポートフォリオ分析での有用性} \\ \hline \text{マークダウン} & \bullet \text{ コードブロックとドキュメントの統合が可能} & \bullet \text{ 実行環境との直接的な連携ができない} & \text{◎ 最適} \\ \text{(.md)} & \bullet \text{ 構造化された説明が書きやすい} & \bullet \text{ インタラクティブな要素が限定的} & \text{(コードとドキュメントの統合)} \\ & \bullet \text{ バージョン管理が容易} & \bullet \text{ 複雑なフォーマットには不向き} & \\ & \bullet \text{ コードのシンタックスハイライトが可能} & \bullet \text{ 表現力に制限がある} & \\ & \bullet \text{ GitHubなどでの表示が優れている} & & \\ \hline \text{XML} & \bullet \text{ 厳密なコード構造の定義が可能} & \bullet \text{ 記述が冗長になりがち} & \text{○ 適している} \\ & \bullet \text{ 要素間の関係を明確に表現} & \bullet \text{ 可読性が低くなる場合がある} & \text{(構造化されたコード管理)} \\ & \bullet \text{ 自動検証が可能} & \bullet \text{ 学習曲線が急} & \\ & \bullet \text{ 多言語対応が容易} & \bullet \text{ エディタのサポートが必要} & \\ & \bullet \text{ スキーマによる型チェックが可能} & & \\ \hline \text{JSON} & \bullet \text{ コードの設定や変数定義が簡潔} & \bullet \text{ ドキュメント機能が限定的} & \text{○ 適している} \\ & \bullet \text{ プログラムでの処理が容易} & \bullet \text{ 複雑な階層構造は見づらい} & \text{(設定ファイル管理)} \\ & \bullet \text{ データ構造が明確} & \bullet \text{ コメントが書けない} & \\ & \bullet \text{ 軽量で扱いやすい} & \bullet \text{ スキーマ定義が別途必要} & \\ & \bullet \text{ 多くの言語でサポート} & & \\ \hline \end{array}
$$
Claudeはマークダウン(md)、XML、JSONを推奨すると回答しました。さらに、プログラミング初心者に扱いやすい言語はどれか、とClaudeに質問し得られた回答は以下の通りです。
まとめ
以上の検討結果から、ワタクシのようなド素人はJSONでPromptを作成することにしました。
ですが、ただpromptを作成するだけでも検討作業が長い・・
とりあえず、今後、このアプローチでPromptを作成し、投資分析システムの設計を進めていきたいと思います。
皆さまの知見もぜひコメントでお聞かせください。