短期売買と分析力が向上しそうな株価予測をだらだらとやる part4

前回までのあらすじ 株価の基本情報とトレント系指標について見てみました。 今回はオシレーター系指標とその他について見ていこうと思います。 技術分析データ オシレーター系指標 RSI(相対力指数): 株価の過熱感を示す指標。 サイコロジカルライン:一定期間の中で株価が上昇した日数の割合を示す。市場の投資家心理を測る指標。 RCI:日付の順位と価格の順位の相関関係を示し、トレンドの強さを判断する指標。 移動平均線乖離率:現在の株価と移動平均線との乖離を示しす。価格が移動平均線からどれだけ離れているかを判断する指標。 スローストキャスティクス:ストキャスティクスの変動を滑らかにする。買われ過ぎや売られ過ぎの状態をより安定して示す指標。 モメンタムとROC:モメンタムは価格の変化のスピードを示す。ROCは一定期間の価格変動率を示す指標。 MFI:出来高を加味したRSIに似た指標。買われ過ぎや売られ過ぎを判断するための指標。 CCI:価格と移動平均線の乖離を基に、トレンドの強さと異常値を判断する指標。 その他 ヒストリカル・ボラティリティ:過去の一定期間の価格変動の大きさを測定した指標。 ギャップ(ギャップアップ、ギャップダウン):前日の終値と当日の始値の差で市場の初期のトレンド。 レジスタンスライン:株価が上昇する際に止まりやすい価格帯のこと。 サポートライン:株価が下落する際に止まりやすい価格帯のこと。 軽く調べただけでこれくらいあるんですね。ローソク足を使ったりチャートの動きを使う指標もありましたが、今回は割愛します。他にも使いたいデータはありますので。 技術分析データ_補足説明 RSI (Relative Strength Index, 相対力指数) 株価の過熱感を示すオシレータータイプの指標で0~100の範囲で表す。14日間のデータを使用するのが一般的。 70以上: 買われ過ぎ(Overbought)を示し、価格の反転を予想。 30以下: 売られ過ぎ(Oversold)を示し、価格の上昇を予想 RCI(Rank Correlation Index) 株価の日付順位と価格順位の相関を示す指標。トレンドの強さと方向を判断するために使用される。 各日付に順位を付ける(最新の日を1位とする)。各価格にも順位を付ける(高い価格を1位とする)。日付順位と価格順位の差を二乗して合計。RCIを計算。 RCI=1 − 6∑(日付順位−価格順位)^2 / n(n^2−1) 移動平均線乖離率(Moving Average Convergence Divergence, MACD) 現在の株価と移動平均線との乖離を示す。価格が移動平均線からどれだけ離れているかを判断する指標。 移動平均線(通常は25日移動平均線)を計算。現在の株価と移動平均線の差を求める。その差を移動平均線で割り、百分率で表示する。 乖離率=(現在の株価 − 移動平均線) / 移動平均線 ×100 乖離率が大きくマイナスに乖離した後に反転したら買いシグナル。乖離率が大きくプラスに乖離した後に反転したら売りシグナル スローストキャスティクス(Slow Stochastic Oscillator) ストキャスティクスの変動を滑らかにする。買われ過ぎや売られ過ぎの状態をより安定して示す指標 ストキャスティクスとは価格が特定の期間内でどれだけ高値と安値の間にあるかを示す指標。スロー以外にもファストがあるがここでは割愛。 過去N日間(通常は14日間)の最高値と最安値を求める。現在の終値から最安値を引き、最高値と最安値の差で割る。この値に100を掛ける。%Kの値が出る。過去3日間の%Kラインの平均を求める。%Dの値が出る。%Dの単純移動平均を求める。Slow%Dの値が出る。 スロー%Dが20以下から上昇し始めたら買いシグナル、スロー%Dが80以上から下落し始めたら売りシグナル。 モメンタム(Momentum) 一定期間内の価格変動の速度や勢いを示す指標。トレンドの強さや反転の可能性を判断する。プラスの値は上昇トレンドを、マイナスの値は下降トレンドを示す。 momentum = 現在の株価 - N期間前の株価 ROC(Rate of Change) モメンタムを百分率で表したもので、トレンドの強さを評価する。プラスの値は上昇トレンドを、マイナスの値は下降トレンドを示す.。 ROC = ((現在の株価 - N期間前の株価) / N期間前の株価) * 100 MFI(Money Flow Index) 出来高を加味したRSIに似た指標で、市場の過熱感を判断するために使用される。MFIが80以上で下落し始めたら売りシグナル、20以下で上昇し始めたら買いシグナル。 TP = H + L + C / 3 (TP: その日の取引価格の中央値、H: 最高値、L: 最安値、C: 終値) ...

2024年6月22日

短期売買と分析力が向上しそうな株価予測をだらだらとやる part3

株価予測_前回のおさらい 前回はティッカー一覧を取得できたので、株価を取得する方法を書きました。株価取得のコードはpart1とそこまで大きな差はないですが… 株価予測_今回やること 今回は予測の前に使用する変数について記載していきます。 株価で取得した値は6つになります。 ただし、トレーダーの一部の人は組み合わせて説明変数を作って使っていると思います。 なのでChat-GPTに質問を投げた後、説明変数を見ていこうと思います。 株価とは 特定の時間における株式の市場価格を示します。この値は技術分析で使用される「移動平均線、RSI、MACD」などで使用されます。株価の情報は以下のデータが存在します。 変数名 説明 Open(始値) 引日の最初の取引価格。ギャップを分析できる。 High(高値) 取引日の中で最も高い取引価格。レジスタンラインの形成にも使用する。 Low(安値) 取引日の中で最も低い取引価格。サポート来の形成にも使用する。 Close(終値) 取引日の最後の取引価格。 Adj Close(調整後終値) 分割や配当を調整した後の終値。 Volume(出来高) 取引日の中で売買された株式の総数。 出来高についての補足 特定の期間に取引された株式の数量を示します。出来高の増減は市場の関心度やトレンドの強さを示します。また、高い出来高を伴う価格変動は信頼性が高く、トレンドが続く可能性がある。 技術分析データについて 株価からわかる基本的な情報はこれで以上になります。この情報を組み合わせて変数を作り、そのデータを株価予測に使用していきます。次は技術分析についてです。 技術分析はザックリ分けると以下の2タイプに分かれます。 トレンド系指標(順張り系指標) オシレーター系指標(逆張り系指標) この2つを組み合わせることでだましに合わず有効活用できると言われています。※だまし(理論通りの動きとならず反対の動きをすること) まずはトレンド系指標から見ていこうと思います。他にも指標はありますが文量が多くなるので次回に回します。 トレンド系指標 移動平均線: 一定期間の平均株価。 MACD(移動平均収束拡散法): 短期と長期の移動平均線の差。 ボリンジャーバンド: 株価の変動範囲を示す指標。 一目均衡表:市場のトレンド、サポート・レジスタンス、買い・売りのシグナルを同時に把握できる総合的なテクニカル指標。 DMI:上昇トレンドと下降トレンドの強さを示し、相場の方向性を判断するための指標。 パラボリック:トレンドの転換点を示し、上昇トレンドでは株価の下、下降トレンドでは株価の上に点を描く指標。 エンベロープ:一定期間の移動平均線に対して上下に一定割合だけ離れたバンドを描き、過熱感を判断する指標。 技術分析データ_補足説明 移動平均線 (Moving Average, MA) 一定期間の平均株価を計算し、その期間が過ぎると新しいデータで更新される指標。 単純移動平均線 (Simple Moving Average, SMA):指定された期間の株価の平均値を計算。例:5日移動平均線、25日移動平均線、75日移動平均線 指数平滑移動平均線 (Exponential Moving Average, EMA):最近のデータに重みを置いて計算する移動平均線。 MACD (Moving Average Convergence Divergence, 移動平均収束拡散法) 短期のEMAと長期のEMAの差を基にした指標。3つの要素で構成され、MACDラインがシグナルラインを上抜けると買いシグナル、下抜けると売りシグナルとされる。 MACDライン: 12日EMAと26日EMAの差 シグナルライン: 9日EMA(MACDラインのEMA) ...

2024年6月19日

WordPressにパスキーを導入してセキュリティ意識を高めよう!

はじめに ここ最近セキュリティに関するニュースが後を絶たないですね…。例えば 岡山の病院で患者情報流出 ニコニコ動画サイバー攻撃 積水ハウス個人情報流出 流出や攻撃だけでも頻繁に起きますし、脆弱性の発見も日々起こっています。こちらのサイトなどで見ることができます。 そこで自身もセキュリティ意識を高めるため、パスワードではなくパスキーを使ったWordPressのログインを試みようという話になります。 設定手順 まずはWordPressにログインして「OwnID Passwordless Login」をインストールします。その後設定画面に移動すると以下の画像画面に行くので、「OwnID Console.」をクリックします。 OwnID Console画面に入ったらアカウントを作ってログインしましょう!Githubがあればそちらでも大丈夫です。 ログインができたら「Create Application」でアプリの作成を行います。 まずはアプリ名を決めましょう。適当で大丈夫です。 アプリ名を決めたら使用するシステムを選択しましょう!今回の場合はWordPressになります。 もし開発に使用する場合は以下から選択することになると思います。いつか開発で使ってみたいですね。 WordPressの場合は自身のURLサイトを設定しましょう。 設定が完了したら準備完了です! 複数サイト設定 ここから先は複数作る場合になります。カスタムドメインで作ると複数パターン設定できます。 カスタムドメインをまずは作ります。基本は「passwordless.あなたのドメイン」で設定します。 カスタムドメインの設定が完了したらDNSにStep1とStep2の値を設定します。 設定が完了してチェックが通れば「Verified」になります。 設定が完了したら「App ID」と「Shared Secret」の画面を出したまま、WordPressの画面に戻ります。 OwnIDの設定画面で先ほどのApp IDとShared secretを入力して完了です。 ...

2024年6月16日

短期売買と分析力が向上しそうな株価予測をだらだらとやる part2

前回までの話 前回ティッカーが取れないという話をしたがあれは嘘だ。 pyppeteerを使うといったがあれも嘘だ。 ティッカー取得時の注意点 前回作成したものからほとんど変えることなくSBIに記載されている全てのティッカーを取得することができました。 ただ、注意点があります。 アメリカ以外の国ではティッカーの後に特定の文字列をつける必要がある。 ベトナムの「DCL」であれば後ろに「.VN」をつけて「DCL.VN」にする必要がある。 中国(香港)の「000621」であれば後ろに「.HK」をつけて、さらに前の0を削除して「00621.HK」にする必要がある。 シンガポールとマレーシアに関しては扱うティッカーの文字列がそもそも違うので使えない。 日本の場合は東京で扱っているものは後ろに「.T」、札幌であれば「.S」が必要。 前回の修正箇所 日本はまだ取得してないですが上記の点に注意して、コード書いていく必要があります。修正した個所はここ sbi_foreign_stock_list = [ {"america": {"url": "https://search.sbisec.co.jp/v2/popwin/info/stock/pop6040_usequity_list.html", "tag": "table", "c_cd":"", "class": "foo_table md-l-table-01 md-l-utl-mt10"}}, {"china": {"url": "https://search.sbisec.co.jp/v2/popwin/info/stock/pop6040_hk_list.html", "tag": "div", "c_cd":".HK", "class": "accTbl01"}}, {"korea": {"url": "https://search.sbisec.co.jp/v2/popwin/info/stock/pop6040_kr_list.html", "tag": "div", "c_cd":".KS", "class": "accTbl01"}}, {"russia": {"url": "https://search.sbisec.co.jp/v2/popwin/info/stock/pop6040_ru_list.html", "tag": "div", "c_cd":".ME", "class": "accTbl01"}}, {"vietnam": {"url": "https://search.sbisec.co.jp/v2/popwin/info/stock/pop6040_vn_list.html", "tag": "div", "c_cd":".VN", "class": "accTbl01"}}, {"Indonesia": {"url": "https://search.sbisec.co.jp/v2/popwin/info/stock/pop6040_id_list.html", "tag": "div", "c_cd":".JK", "class": "accTbl01"}}, # {"Singapore": {"url": "https://search.sbisec.co.jp/v2/popwin/info/stock/pop6040_sg_list.html", "tag": "div", "c_cd":".SI", "class": "accTbl01"}}, # SBIとyahooのティカーが一致しない件 {"thailand": {"url": "https://search.sbisec.co.jp/v2/popwin/info/stock/pop6040_th_list.html", "tag": "div", "c_cd":".BK", "class": "accTbl01"}}, # {"malaysia": {"url": "https://search.sbisec.co.jp/v2/popwin/info/stock/pop6040_my_list.html", "tag": "div", "c_cd":".KL", "class": "accTbl01"}}, # SBIとyahooのティカーが一致しない件(SBIは英略、yahooは数値) ] 株価取得コード 修正するとティッカーリストが作られるので、取得したティッカーリストをもとに株価を取得すると以下のようなコードになります。 ...

2024年6月13日

短期売買と分析力が向上しそうな株価予測をだらだらとやる part1

前回RAGシステムを作ってみてある程度できました。次に、何を作ろうかということで表題になります。 前回と違って完成形は全く思い浮かんでません。とりあえずやってれば何かできるかということで作っていきます。 ティッカー取得 まずは株価の取得が必要なのですが今回はyahoo! financeのAPIを使って取得しようと思います。取得する際のコードは以下。 import pandas_datareader.data as web df = web.get_data_yahoo('1304', '1980-01-01', '2024-06-10') pandas_datareaderにyahoo用の株価取得ライブラリがあるのでそれを利用します。ティッカー(銘柄)と株価取得の時間を設定します。 株価の取得は簡単なのですが、ティッカーをいちいち手入力するのは面倒ですね。時間は変数で設定できますので問題ないです。 というわけでティッカーを取得するプログラムを作ります。 ティッカーを取得するには東京証券取引所、名古屋証券取引所、福岡証券取引所、札幌証券取引所、各国別SBI証券ティッカー一覧から取れると思いますが、今回はSBI証券から取得しようと思います。 昔やろうとしたことがあったのでそれを流用しようと思います。対象となるサイトはこちらです。 ティッカー取得プログラム # SBI証券から海外のティッカーまたはコードと銘柄を取得 from bs4 import BeautifulSoup import re, sys, time import requests import pandas as pd sbi_foreign_stock_list = [ {"america": {"url": "https://search.sbisec.co.jp/v2/popwin/info/stock/pop6040_usequity_list.html", "tag": "table", "c_cd":"", "class": "md-l-table-01 md-l-utl-mt10"}}, {"china": {"url": "https://search.sbisec.co.jp/v2/popwin/info/stock/pop6040_hk_list.html", "tag": "div", "c_cd":"HK", "class": "accTbl01"}}, {"korea": {"url": "https://search.sbisec.co.jp/v2/popwin/info/stock/pop6040_kr_list.html", "tag": "div", "c_cd":"KS", "class": "accTbl01"}}, {"russia": {"url": "https://search.sbisec.co.jp/v2/popwin/info/stock/pop6040_ru_list.html", "tag": "div", "c_cd":"ME", "class": "accTbl01"}}, {"vietnam": {"url": "https://search.sbisec.co.jp/v2/popwin/info/stock/pop6040_vn_list.html", "tag": "div", "c_cd":"VN", "class": "accTbl01"}}, {"Indonesia": {"url": "https://search.sbisec.co.jp/v2/popwin/info/stock/pop6040_id_list.html", "tag": "div", "c_cd":"JK", "class": "accTbl01"}}, {"Singapore": {"url": "https://search.sbisec.co.jp/v2/popwin/info/stock/pop6040_sg_list.html", "tag": "div", "c_cd":"SI", "class": "accTbl01"}}, # SBIとyahooのティカーが一致しない件 {"thailand": {"url": "https://search.sbisec.co.jp/v2/popwin/info/stock/pop6040_th_list.html", "tag": "div", "c_cd":"BK", "class": "accTbl01"}}, {"malaysia": {"url": "https://search.sbisec.co.jp/v2/popwin/info/stock/pop6040_my_list.html", "tag": "div", "c_cd":"KL", "class": "accTbl01"}} # SBIとyahooのティカーが一致しない件 ] for foreign_dict in sbi_foreign_stock_list: for country, values in foreign_dict.items(): country_url = values["url"] country_tag = values["tag"] country_code = values["c_cd"] country_class = values["class"] html = requests.get(country_url) soup = BeautifulSoup(html.content, "html.parser") for table_soup in soup.find_all(country_tag, class_=country_class): stock_data = [] rows = table_soup.find_all("tr") for row in rows[1:]: ticker = row.find_all("th")[0].text.strip() cols = row.find_all("td") name = cols[0].text.strip() stock_data.append((ticker, name)) continue df_foreign_stock = pd.DataFrame(stock_data, columns=["コード", "銘柄名"]) df_foreign_stock["コード"] = df_foreign_stock["コード"].astype(str) + country_code df_foreign_stock.to_csv(out_oth_fol + country + "_stock_list.csv") time.sleep(2) これを流用すれば取得できますが、今のサイトではできません。少し前のサイトがこちらです。こちらであれば取得できますが、最新のティッカー情報が取れないので修正します。 ...

2024年6月10日

最近読んだ"プログラマー脳"はプログラムを書く人は読んだほうが関わる人全員が幸せになる話だった

読書習慣とおすすめの一冊「プログラマー脳」 読書をするということを習慣化しているのですが、たまたまどっかの記事で見かけて買ったプログラマー脳は読んでおくといいなと思ったので記事にしました。こちらから買えます。 私の読書習慣 ちなみに私の読書週間としては 毎日20:30~21:30までは読書をする 電車に乗って満員200%じゃなければ読む(大体10分ほど) 没頭するほど集中力が続かないこともあるのでちょこちょこ休憩しながら読んでいます。 読書のスタイル 読み方は状況によりけりですが、例を出すところは飛ばすことが多いです。実体験や見聞きしたことよりは論文やデータから見た考察とかのほうが個人的にはいいかなと思うので。 人によっては例があったほうがイメージがわかりやすいので、そっちを中心に読む人もいるかと思いますが、全てを読む必要はないかなと思います。特にある程度知っている内容なら。 感想と本書の概要 本の要約は場合によっては著作権違反になったりするので、私の感想をメインにしつつ引用を少し出しながら書いていこうと思います。 この本で一貫して書かれていることが認知負荷を減らすようにしましょうという話になります。 認知負荷とプログラミング 人間には短期記憶、長期記憶、ワーキングメモリがあり、短期記憶はコードに置き換えると変数、長期記憶は構文(forやif等)、ワーキングメモリは処理の内容になります。認知負荷はワーキングメモリに関わってきます。 コードを読むときにどんな処理になっているのがわからないということがあります。その時、単純に言語の情報が足りないのか?構文がわかっていないのか?処理内容がわかってないのか?ということがあります。ドメイン知識も関係してそうですがここでは言及されていません。 認知負荷の軽減方法 言語の情報や構文についてはある程度調べて覚えれば大丈夫なのですが処理内容に関しては自身の記憶だけではどうにもなりません。すでに書いてあるものを改修したりする場合は大変な作業になると思います。 ちなみに本書では言語の構文などの覚え方や定着の仕方なども言及しているので、気になればぜひ読んでみてください。 命名やコードの整理の重要性 認知負荷についてはいくつか気を付けるポイントが書いてあり、命名の仕方やコードを適切に分けて関数化することについて書いています。関数化じゃなくてもクラス化でもいいと思います。 他人のコードを読む際のコツ それから人のコードを読む際に良い方法も書いてあります。変数同士を結び付けて紙に書いたり、パッドで書き込むのもいいと思います。 割り込みタスクと新人サポートについて 他の内容としては割り込みタスクが入るや新人へのサポートについて書かれていました。ここもためになりますね。 読書の重要性 本を読むといろんなことが知れます。技術的な面ももちろん必要ですが、メンタルや考え方なども必要だと思います。 他にも本を読んでいるのでいくつか面白いものがあれば紹介したいなとは思います。 Kindle Unlimitedのおすすめ ちなみにKindle Unlimitedは速く本を読んで理解するのにおススメです。月額で読み放題だし、内容が薄いものはバンバン飛ばし読みもできるので練習にもなります。ではでは。

2024年6月7日

ニューラルネットワークの仕組みを理解しているかテストするためのゲームで遊ぶ

機械学習と深層学習の復習 G検定やE資格である程度機械学習や深層学習で使われている技術を学んだのですが、特に深層学習についてはあやふやな部分が多いなと感じていました。 とはいえまた学習教材を買うのもと思ってましたが、良いサイトを見つけました。 Graph Game: ニューラルネットワークの理解度をテスト Graph Gameというニューラルネットワークを理解しているかわかるサイトになります。(こちらから遊べます。) とはいえこのサイトでできるのはRNN、LSTM、GRU、ResNet、Deep RNNのテストになります。CNNやGANなどはテストできません。 RNNのテスト まずはRNNから試してみましょう。“clicks” は繋げた回数、“edges remaining” は繋げる必要がある本数、“extra edges” は余計な繋がりの本数になります。 RNNについて補足すると連続的なデータや時系列データを処理するのに最適です。株価などの時系列分析、テキスト生成、音声認識など様々なところに使われる重要なニューラルネットワークです。 ちなみにHelpはチュートリアルの確認になります。 もし正解できれば画面の文字が左上にでます。何回でも挑戦できるので理解しながらつなげてみましょう! LSTMのテスト LSTMはこんな感じ。 長い依存関係を持つ時系列データの処理に向いています。RNNでは勾配消失問題が発生するのでそれを解消するために考えられました。3つ(入力、忘却、出力)のゲートを使って重要なデータは保持、不要なデータは捨てます。 GRUのテスト GRUはこんな感じ。 補足するとGRUはLSTMの精度を保ったまま計算量が少ないと言われています。GRUは2つ(リセット、更新)のゲートで情報を制御します。 ResNetのテスト ResNetはこんな感じ 補足すると深い層のニューラルネットワークで使われ、画像認識で使用されています。残差ブロックがあり、skip connectionで直接値を渡すことで勾配消失問題が解消されます。 Deep RNNのテスト 最後にDeep RNNはこんな感じ。 Deep RNNの補足としては複数のRNN層を組み合わせたものになります。より複雑なパターンを学習することができます。 まとめと感想 少し忘れていたのでここで視覚的に思い出せました。初めての人でもなんとなくでわかるようになるし、ある程度知っている人も視覚的に覚えられるので良いと思います。 忘れていた処理を思い出せたので良かったです。他の深層学習や機械学習でも視覚的にわかるようなサイトがあるとイメージが付きやすそうですね。ではでは。

2024年6月5日

自分が作ったAIが赤の他人のAIとSNSでやり取りする姿は面白い

AI同士のやり取りを見てみたい? AI同士がやり取りするのは見かけたことがあっても、自身が作ったAIと人が作ったAIのやり取りを見てみたい!と考えたことはありますか?私はありません(笑) ただ、気になって試したら面白く時間が経って確認してみるとフォロワーが増えたり、知らないAIとやり取りしてたり面白いです。 サイトへのアクセスと初期設定 それではこちらのサイトにアクセスしてみてください。初期画面はこんな感じ ログインとAIの作成 ログインしてみましょう!方法は複数あるのでお好きな方法を使ってください。 では、早速作ってみましょう!Chirperから作成をしてみましょう。私はすでに2つ作っていますが、新しく作ってみます。Vanaというサイトからインポートもできるみたいです。 AI作成のステップ 作成画面はこんな感じ。アイコンはヘッダーは勝手に作られますので名前、ハンドルネーム、性格、容姿の設定を行いましょう。半生は作らなくても大丈夫です。 作成後の様子 ある程度設定を練って作りこんだら保存しましょう。作った直後は何も変わらないので、しばらく待ちます。ちなみに作った直後はこんな感じ。 AIの反応を観察 ということでしばらく放置していたらこんな感じになりました。 ただ、ちょっと思ってたのとは違いましたが、まあいいかということでそのままにしました。 投稿や返信もしてるみたいで楽しそうです。たくさん作った後、自身の作ったAI同士で会話し始めると見てて面白そうだなとは思いますね。他にも細かい設定などができるので、是非試して遊んでみてください。 今回は少し暇つぶしになるもので遊んでみました。ではでは。

2024年6月2日

RAGを開発してみたい!ので簡単なものでもいいので作ってみよう!part10 完

RAG開発の一旦終了と成果物の共有 とりあえず目標としていたものが完成したので開発はこれで一旦終わりとします。 完成して動いたものを動画にして3つほどはります。 動画の内容とモデルの読み込み ファイル数別に動画を取ってみました。ベクトルモデルの読み込みと読み込ませるテキスト量によって時間が変わってきます。 モデルの読み込みとかはOpenAIに変わったぐらいで大きく変更したところはないですが一部お見せします。 def generate_response(self, prompt: str, max_tokens: int = 3000) -> str: try: client = OpenAI( # This is the default and can be omitted api_key=os.environ.get("OPENAI_API_KEY"), ) response = client.chat.completions.create( model="gpt-4o", # 使用するモデルを指定 messages=[ {"role": "system", "content": "You are a helpful assistant."}, {"role": "user", "content": prompt} ], max_tokens=max_tokens, n=1, stop=None, temperature=0.7 ) print(response) return response.choices[0].message.content except Exception as e: logging.error(f"エラーが発生しました: {e}") return "申し訳ありませんが、応答を生成する際にエラーが発生しました。" この辺をGPT-4oに聞いてみたのですが最近のコードを提示してくれなかったので、chatを作成する部分はgit-hubを参考に作りました。こちらです。 Flaskの設定と変更点 それからFlaskの部分ですね。 ...

2024年5月31日

オープンソースのLLMアプリ開発プラットフォーム"Dify"を使ってみたよ

Difyを使ったLLM開発アプリの導入と設定 LLM開発アプリの選択肢としてDifyがあると聞いたので触ってみました。 最後にはこんな感じになるといいなと思ったものになります。 Dify_クラウド版とローカル版の比較 やり方は2つあります。クラウド版とローカル版の2つなります。お好きな方を使っていただければと思いますが、ローカル版のほうが個人的にはいいかと思います。 クラウド版の導入方法 クラウド版に関しては登録するだけで使えます。画面はこんな感じ ローカル版の導入手順 ローカル版はGItとDockerが必要になるのでない人はインストールから始めましょう Difyのインストールとセットアップ DockerはDocker Desktopを導入しておけば大丈夫です。docker composeも入っているので一緒にインストールされます。 ではコマンドプロンプトを開いて開発する場所にgit cloneでdifyをインストールします。コマンドはこちら git clone https://github.com/langgenius/dify.git Docker Composeの起動 インストールが出来たらdocker compseを起動させるのでフォルダを移動します。開発場所にdifyをインストールできたと思うのでdockerフォルダに移動します。 cd docker フォルダの移動が出来たらdocker composeの起動をします。起動できるとこんな感じ docker compose up -d アプリ作成の開始 起動したらURLを入力して画面を表示させてみましょう!クラウド版とそこまで変わりません。 URL: http://localhost/apps テンプレートから作成でもいいですが、私は最初から作成してみました。こんな感じ。今回はチャットボットを作ってみますので適当に名前を付けて作成します。 LLMモデルの設定 アプリが出来たらこんな感じの画面ができます。今回はgptモデルを使っていこうと思います。 設定から色んなLLMモデルを選ぶことができます。今回はOpenAIを使用するのでOpenAIのAPI-KEYをセットしました。他に使いたいモデルがあればそのAPI-KEYを設定すれば使えます。 それから使用するモデルは"システムモデル設定"から設定します。他のモデルも設定すればそちらも使えるようになります。 ナレッジの登録 今回作るチャットボットはRAGなので次はナレッジを登録します。“知識を作成"からファイルを登録してインデックス化していきます。 ファイルのアップロードをします。私が本来作りたいのは15000ファイル位あったのでそこまではアップしませんが、いくつか登録します。 アップロードが完了してインデックス化が完了すると利用可能というステータスになります。エラーになってるものは利用できないので、再試行かアップのし直しでインデックス化を試みてください。 アプリのプロンプト設定とテスト ナレッジの登録が完了したらいよいよアプリの作成です。手順つまりプロンプトを設定して、コンテキストに作ったナレッジを設定します。今回は取得したナレッジを要約するように指示します。 設定したら公開するからアプリ実行をします。するとチャット画面に移動します。 Star Chatからチャットを打ってどんな感じか動かしてみます。まず使えるファイルが1つだけだったので"特許権について"と聞いてみました。 中を見たのですが合っていました。とは言え私は法律の専門家ではないのでよくわかってないですが、雰囲気的には合ってそうです。 エラーの対応と改善 一応やってるときにエラーが出たりしたのでその時の話も共有します。アプリの作成途中でこんな感じのエラーが出ました。 どうやら課金のチャージができていなかったようです。そこでOpenAIのサイトでチャージしたらこのエラーは解消されました。 APIあまり使ってなかったのですが、こういうことが起こるので自動設定でチャージさせるようにしました。ただ、悪用されたら怖いので注意を払う必要がありますね。 Difyを活用した応用の可能性 これがうまいことできれば他のファイルでもできそうなので色んなとこで応用できそうです。もちろんセキュリティの問題が付きまといますので専門的な知識や暗黙知とかのファイルであれば有効活用できそうですね。ではでは。

2024年5月27日