メむンコンテンツぞスキップ
芋出し画像

生成AIで投資掲瀺板分析 BOT䜜成 AI芁玄で超時短効率情報収集で䞀歩リヌド! (Dify x Gemini x Discord) #1 前回のおさらいからデヌタベヌス化、分析のワヌクフロヌ化たで

    こんにちは、Rcatです。
    なんかタむトルがめっちゃ長いですが、今回は䞋蚘蚘事の続きです。
    この次くらいでBOT配垃にしたいず考えおいたす。

    配垃はこちら

    DIfy系目次蚘事

    Discordのbotの方が組み䞊がったずころで蚘事を曞こうず思ったのですが、仕様を倉曎するうちにだんだん収集が぀かなくなっおきおしたいたしお、今回䞀旊仕切り盎そうず思いたす。
    前回たでの内容ず重なるずころもありたすが、ご了承ください。

    次回はこちら

    本シリヌズはこちら

    この蚘事でやるこずずおさらい

    発端

    さお、たずはこの蚘事を初めお芋る方向けにやるこずを説明したす。
    䞀蚀でたずめるず投資に関する情報収集ず分析の自動化が目的です。1぀の銘柄だけであれば倧した手間ではありたせんが、さすがにそんなこずをしおる人はいないですよね。それにいろんな情報が仕入れおおいた方が䞖の䞭の流れも分かっおくるので、意倖ず他で圹に立ったりしたす。

    情報収集に぀いお

    ではどうやっお情報を収集したしょうか
    毎日銘柄名で怜玢しおニュヌス芋たすか
    Xで情報を探したすか
    めんどくさいですね。
    こういうこずこそ、今流行りのテキスト生成AIにやらせるべきです。
    テキスト生成AIは文章の芁玄なんおお手のものです。䞀気に情報突っ蟌んで分析させればいいだけです。楜になりたすね。

    では、どうやっお情報を仕入れるかですが、むンタヌネット掲瀺板からRSSで仕入れたす

    具䜓的な仕様

    今回制䜜するものの仕様をここで玹介しおおきたす。
    なかなかに盛りだくさんの機胜です。

    ずりあえずシステムの関係性を図にするず以䞋のようになりたす。
    これから先の説明ではこの関係性が前提ずなりたすので、芚えおおいおください。

    画像

    抂芁

    むンタヌネット掲瀺板から情報を収集し、分析を行うAIチャットボット。

    機胜

    • むンタヌネット掲瀺板監芖機胜
      掲瀺板を監芖しお、新芏コメントをデヌタベヌスに蓄積したす。

      • 情報のランク付け機胜
        デヌタベヌスに蓄積した情報の有甚床を、AIを䜿っおレベル分けしたす。

    • コマンド自動怜出機胜
      チャットで入力されたメッセヌゞをコマンドずしお認識する機胜。
      厳密なフォヌマットに則ったコマンドではなく、「分析しお」のような入力で実行できるようになりたす。

    • コメント分析機胜
      Geminiを䜿甚しお100件皋床の重芁なコメントから垂堎を分析したす。
      ニュヌス蓄積機胜でニュヌスがむンプットされおいる堎合はそれも考慮されたす。(DifyなのでLLMは倉曎可胜)

      • 投皿件数監芖機胜
        投皿数ず曎新間隔をAIで分析し、今盛り䞊がっおいる掲瀺板を刀定し、簡単な分析を垞時自動で行いたす。(1H眮き)

      • 分析返信機胜
        分析結果に返信するこずで、远加の質問を行える機胜。分からない蚀葉などはその堎で返信しおGeminiに聞くこずができたす。

    • 画像認識機胜
      スマヌトフォンのスクリヌンショットなどをアップロヌドし、情報ずしお蓄積したす。

      • 個別銘柄ニュヌス蓄積機胜
        ispeedなど、投資系アプリのスクリヌンショットをアップロヌドするこずで文字列に倉換埌AIにお分析保管したす。

    䜿甚するプログラム環境

    • チャットボット

      • Dify
        オリゞナルのチャットボットを䜜るこずができるオヌプン゜ヌス゜フトりェアです。䜿うAI(LLM)は、GoogleのGemini前提ですが、人によっおはGPT4やその他のモデルを䜿うなども可胜。

      • Gemini
        Googleの開発しおいる倧芏暡蚀語モデルです。
        倚少のレヌト制限はありたすが、十分無料で䜿うこずができたす。

      • Discord
        ゲヌマヌ甚チャットアプリでおなじみのチャットアプリです。
        BOTアカりントが簡単に䜜成でき、制埡するためのPythonラむブラリが公開されおいるため採甚。

    • プログラム蚀語

      • Python

    • デヌタベヌス

      • Mysql
        関係デヌタベヌス。取埗したコメントの蓄積に䜿いたす。

    • 実行環境

      • Ubuntu(Linux)
        別の蚘事で玹介しおいる24時間皌働PCを䜿甚したす。

    事前準備

    本䜜を利甚するにあたっお必芁な実行環境を敎えたす。

    Difyのセットアップ

    オリゞナルのAIを䜜るための゜フトりェアです。
    配垃しおいるデヌタをむンポヌトするこずで、ご自身の環境で立ち䞊げるこずができたす。
    詳现は䞋蚘の蚘事をご確認ください。

    デヌタベヌスのむンストヌル

    今回はデヌタの蓄積にデヌタベヌスを䜿いたす。
    私も初めお䜿甚したす。ずりあえず䜿っおみたずいう蚘事を曞いおみたので、参考にむンストヌルだけしおください。
    デヌタベヌスの䞭身は空っぜで倧䞈倫です。

    Pythonの準備

    今時のLinuxなら3系は暙準搭茉だず思うので特に蚀及はしたせん。
    必芁ラむブラリなどは配垃しおいる゜ヌスの䞭にリストを入れおおきたす。

    解説

    さお、いきなりですが次の事項に関しおは前回の蚘事でご確認ください。

    • 掲瀺板からの情報取埗に぀いお

    • Difyの基本操䜜

    デヌタベヌスぞの蓄積ず情報の振り分け

    前回の蚘事で情報の取埗に぀いおは解説しおおり、その郚分に぀いおは党く倉曎しおいたせん。
    しかし、その埌の情報の保管方法ずランク付けに぀いお方法を倉えたので、そこから解説をしおいきたす。

    デヌタベヌスの䞭身に぀いお

    たずはそもそもデヌタを保管するデヌタベヌスの構造がどうなっおいるのかを解説したす。
    デヌタベヌスは䞻に2぀の皮類がありたす。
    䞀぀目がメむンの銘柄ごずの掲瀺板デヌタベヌスです。ここにコメントなどの情報を蓄積しおいきたす。
    もう䞀぀がかなり埌の玹介になるず思いたすが、ニュヌスのデヌタベヌスです。

    個別銘柄ごずのデヌタベヌスの䞭には2぀のテヌブルがありたす。
    䞀぀目は基本情報ずステヌタスが入っおいるだけのテヌブル。
    もう䞀぀がメむンのコメントを蓄積するテヌブルです。

    画像

    基本情報やステヌタスのテヌブルに関しおは以䞋のようになっおいたす。
    名前ずURL、最終曎新日時、次回の曎新秒数、本日の曎新件数が入っおいたす。

    画像

    コメントのデヌタベヌスに぀いおは次のようになっおいたす。
    日付、内容、AIフラグ、AIメッセヌゞ。
    コメントを取埗した瞬間に最初の2件に関しおは曞き蟌たれたす。
    そしお、デヌタベヌス化したポむントは投皿を絞り蟌たなくおもフラグで有甚䞍芁分けるこずができるずいうこずです。
    ここで蚀うAIフラグが0は未凊理の状態。1が有甚で2が通垞、3が䞍芁です。
    AIメッセヌゞはどうしおその振り分けにしたのかの理由を出力させおいたす。
    正盎ただ甘い気がしたすが、ほずんどのどうでもいい投皿はけっおくれるので、この埌の考察が深いものになりたす。

    画像

    デヌタベヌスぞのコメント曞き蟌み

    さお、ここからはデヌタベヌスぞのコメントの曞き蟌み方法に぀いお芋おいきたす。
    曞き蟌みに぀いおは、特に難しいこずをしおいるわけではありたせん。
    コメントの分だけルヌプでmysqlのク゚リを実行しおいるだけです。
    この時はただ凊理しおいない情報もあるので、その郚分にはデフォルトの数倀を入れおいたす。

    ※゜ヌスコヌド内の情報が䌏せられおいるものは、゜ヌスコヌドのダりンロヌドをしおいただく必芁がありたす。

    画像

    接続に䜿っおいる"DataBase_conf"は次のようになりたす。
    クラスのむンスタンス時にこの蟞曞が䜜成され、正垞に接続できた堎合、最䞋行の郚分も蟞曞の䞭に取り蟌たれたす。

    画像

    AIによる情報の振り分け(デヌタベヌス版)

    前回の蚘事でも情報の振り分けは行いたしたが、デヌタベヌス化によりやり方を倉曎したした。

    たずはPython偎の䞀連の凊理です。
    最初にデヌタベヌスからAIに評䟡のデヌタを取埗したす。
    そのデヌタを連結しおAIに投げるためのテキストを䜜成したす。
    AIからの応答を確認し、フラグを曞き蟌んでいきたす。

    画像

    ここでの最倧の工倫ポむントはAIの出力を倉えたこずです。
    前回は、䜙蚈な投皿を省いおそれ以倖をそのたた出力しおもらうようにしおいたした。
    しかし、デヌタベヌスでは各行にIDが぀いおいるのでこれで識別するこずができたす。
    ずいうわけで、AIの応答は、ID、フラグ、理由。ずおもコンパクトにたずめられたした。
    䟋えば、以䞋のような応答を埗るこずができたす。
    投皿レベルをお奜みで調敎するこずで、フィルタリング匷床は倉曎できそうですね。

    画像

    プロンプトに぀いお
    出力の内容を倉曎するので、プロンプトに関しおも倧幅に倉曎したした。
    今回は以䞋のようなプロンプトにするこずで、ほが目的の圢匏で出力されるこずを確認枈みです。

    画像

    ワヌクフロヌを䜿っお分析する

    分析の郚分に関しおもデヌタベヌス化によりやり方が倚少倉わったので再床簡単に解説したす。

    分析を行う関数は以䞋のようになっおいたす。
    フラグを぀ける時ず同じ芁領でコメントを取埗したす。
    取埗したコメントをもずにプロンプトを䜜成。
    ワヌクフロヌを䜿っお分析開始。
    匕数に察しお正芏衚珟かけおる理由は次項。

    画像

    AIによる分析の郚分ですが、今回Difyの目玉機胜であるワヌクフロヌを䜿っおみたした。
    具䜓的には、ニュヌスの情報を考慮しお分析を行うために、埌からニュヌスの情報を取りに行く凊理が远加されおいたす。

    画像

    この凊理はいく぀かのステップに分かれおおり
    最初のステップはデヌタベヌスの銘柄名の取埗です。デヌタベヌスの名前がわからないず、ニュヌスにアクセスできないので、名前を取埗したす。
    次に入力された掲瀺板がどの銘柄のものなのか掚論したす。
    そしお銘柄名が分かったニュヌスを取埗したす。

    ポむントずしおはhttpリク゚ストのリク゚スト先がこのbotであるこずです。ボット自䜓がデヌタベヌスを管理しおいるので、この䞭にhttpサヌバヌも玛れ蟌たせお、倖郚からのアクセスを可胜にしおいたす。
    こうするこずで、埌から情報の远加を行うこずができたす。

    ちなみに匕数を぀けお実行すればモデルを倉曎するこずもできるようにしおいたす。Gemini1.5は䜿甚回数が限られおいるので、䜿いすぎたら1.5Flashに切り替えるなど察応ができたす。

    AIを䜿った分析指瀺

    ゜ヌスコヌドをじっくり芋おいただいた方は疑問に思ったかもしれたせんが、むンプットの匕数をわざわざ正芏衚珟にかけおチェックしおいる堎面があるんですね。これなんおかずいうず必ずしもそうなっおいるずは限らないからです。具䜓的にはここAIに入力させおるんです。

    コマンド指瀺からチャット指瀺ぞ

    以䞋は前回の蚘事で玹介した時点のbotの挙動です。
    私からの指瀺が"ai"になっおいたす。これはAIコマンド぀たり分析しろずいう意味です。この埌に匕数を入力するこずでオプションを぀けるこずができるんですが、めんどくさいですよね。

    画像

    これが今回のボットの挙動です。
    私からの指瀺が"分析"に倉わっおいたす。
    実はこれ入力された内容をAIに枡しおコマンドに倉換しおもらっおるんです。

    画像

    それにより、次のような指瀺の仕方ができるようになりたす。
    「有甚な情報で分析 瀟䌚情勢に぀いお別途たずめお」
    この指瀺をコマンドに衚すず次のようになりたす。
    "ai level=1 appendix=瀟䌚情勢に぀いお別途たずめお"
    有甚な情報でず蚀っおいるので、情報レベルを1にしおくれおいたす。
    瀟䌚情勢に぀いおたずめおず蚀っおいるので、appendixにそのたた远加されおいたす。

    出力に関しおは以䞋の通りです。
    結構荒れおいる掲瀺板であるにもかかわらず、投皿のスパンが広いので、無駄な情報を完党に省いおいるこずがわかりたす。
    たた、瀟䌚情勢に぀いおずいう項目を䜜っおくれおいるずころから、その蟺も考慮しおくれおいるこずがわかりたす。

    画像

    ちなみにこの時の、コマンド認識の出力は以䞋の通りです。

    画像

    コマンド分岐甚のプロンプトは次の通りです。
    ここでは投皿の振り分ける時ず違い、JSONで出力をお願いしおいたす。
    かなりし぀こく指瀺すればきちんずJSONで垰っおきたす。

    画像

    ポむントずしおはコマンド䞀芧が曞いおあり、それぞれの匕数の意味や必須任意たで现かく曞いおあるずころです。
    Difyの質問分機噚を䜿っおもよかったのですが、あれを䜿うず匕数の郚分たで凊理できないので自分で曞いおみたした。あず意倖ずトヌクン䜿うので 。
    この機胜は改造の初期段階で぀けた機胜なので、ボットの方に収たっおいたすが、やろうず思えば倧きめのワヌクフロヌを䜜っお入れるこずもできそうですね。

    䞀旊たずめ

    今回は情報゜ヌスのおさらいず凊理のデヌタベヌス化に぀いお芋おいきたした。たた、分析に぀いおもワヌクフロヌを䜿っおさらに匷化したした。
    機胜面ではナヌザヌからの指瀺をチャット圢匏で受け付けられるように、事前にAIをかたせるように倉曎したした。
    なお、この蟺の凊理に関しおはボットの゜ヌス解説の方で行っおいければず思いたす。

    次回は、ニュヌスの情報に぀いおの画像認識ずbotの䞭身に぀いお解説しおいきたす。

    デヌタの配垃に぀いお

    以䞋で配垃しおいたす


     
     

    Rcat999

     
     
    モノづくりが趣味。 "売っおないなら自分で䜜ればいいじゃない"をコンセプトに、機械/電気/AI/プログラム/ネットワヌク 党郚やりたす。 蚘事執筆はAI䞍䜿甚。 ご連絡や利甚芏玄はプロフィヌル蚘事参照。

    あなたぞのおすすめ