自分が作った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日

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

一旦行き詰ったのでここまでを記録として残しておきます。 行き詰った内容としてはローカルで実行できないこと、無料枠のcolabを利用してもダメだったことです。 今回実施した内容としては以下 ベクトルデータベースの完成 生成モデルを利用して質問+ファイルの内容を分割してプロンプトを投げる ‘paraphrase-multilingual-mpnet-base-v2’を利用したベクトルデータベースの作成が完了したのでGithubにあげようとしたのですが、jsonファイルは2GB以上、zip化しても500MB以上あったので断念しました。100MB未満なら簡単にあげられるのですが、それ以上はもう少し手順が必要みたいです。 このファイル作るのに1週間近くはかかるんだなと思いました。ファイル数が多かったのもあるかもしれませんが、こんなに大変なんだなと実感しました。この記事でベクトルデータベースの容量削減について書かれていますが、精度とかはまだ分かってないのでなるほどぐらいで終わりました。 生成モデルを利用したプロンプトの作成と推論コードはザックリと以下になります。 def load_or_download_genmodel(model_name: str, local_dir: str) -> tuple[PreTrainedTokenizer | PreTrainedTokenizerFast, PreTrainedModel|SentenceTransformer]: # ローカルディレクトリが存在しない場合は作成 if not os.path.exists(local_dir): os.makedirs(local_dir) # モデルがローカルに存在するかをチェック if not (os.path.exists(os.path.join(local_dir, 'config.json')) and os.path.exists(os.path.join(local_dir, 'tokenizer_config.json'))): # モデルが存在しない場合はダウンロードして保存 print(f"Model not found locally. Downloading {model_name}...") tokenizer = AutoTokenizer.from_pretrained(model_name, force_download=True) model = AutoModelForCausalLM.from_pretrained(model_name, force_download=True) print(f"Saving model and tokenizer to {local_dir}...") tokenizer.save_pretrained(local_dir) model.save_pretrained(local_dir) else: # モデルが存在する場合はローカルからロード print(f"Loading generative model and tokenizer from {local_dir}...") tokenizer = AutoTokenizer.from_pretrained(local_dir) model = AutoModelForCausalLM.from_pretrained(local_dir) return tokenizer, model def process_text_in_chunks(self, question, text, model, tokenizer): for chunk in chunks: prompt = f"{question}\n\n{chunk}" inputs = tokenizer(prompt, return_tensors="pt", max_length=50, truncation=True) input_ids = inputs["input_ids"] attention_mask = inputs["attention_mask"] output = self.generative_model.generate(input_ids=input_ids, attention_mask=attention_mask, max_new_tokens=100, num_beams=3) result_text = tokenizer.decode(output[0], skip_special_tokens=True) combined_result += result_text + "\n" return combined_result def main(self, question): # コサイン類推度から近いファイルを取得し、テキストを抽出→ここでは省く result = self.process_text_in_chunks(question, text, self.generative_model, self.tokenizer) return result if __name__ == '__main__': # 生成モデルをロードまたはダウンロード tokenizer, gen_model = load_or_download_genmodel(gen_model_name, gen_local_dir) cos_sim_calc = CosSimCalc(gen_model, tokenizer, emb_model) cos_sim_calc.main(question = '著作権について教えて下さい。') いろいろ試して見たんですがローカルだと動かないですし、高性能GCPを買うまではいかないので、クラウドで実行するかOpenAIなどのAPIに頼ることになりそうです。 ...

2024年5月24日

ラチェット&クランク パラレル・トラブルをクリアしました!

実績もすべて達成! やってみた感想を書いていこうと思います。 ストーリーとしては面白かったです。基本シリアスに話が進んでいくのですが、ちょくちょく笑いをやツッコミが入ってて相変わらずだなと思いました。 私は1,2,3,4をプレイ済みなので一部のキャラや流れはわかっていますが5以降を全くプレイしてないので、そこで出てきたキャラは全くわかりませんでした。 今回のストーリーは次元を超えたキャラたちと会ったり戦ったりしているので、この次元ではこんな感じのキャラかだったり、このキャラは元次元のキャラの関係者なの!?という驚きがありました。 別次元の主人公二人の関係性がギクシャクしたけど最後は助け合ったりと王道で楽しかったです。また惑星によってはダークな部分もあったりしてドキドキしました。 ただストーリーは短くは感じました。惑星数が少なかったのもありますが、割とトントン拍子で進んで行ったり、別ルートから他の惑星に行くということもなかったのでサクサク進めました。 ゲームの感想としては良い部分と悪い部分があります。どのゲームにもあると思いますが… このシリーズゲームの特徴として"ガラメカ"と呼ばれる武器をぶっ放して爽快感を得るというのがポイントです。そこは変わらず良かったと思います。それから移動の部分ですね。ブーツで荒野を駆け巡ったり、スイングショットで空を移動したり楽しいですね。 グラフィックもよくなってきれいでした。グラフィックドライバーの更新が少し面倒でしたがやってよかったです。他のことをやるときもサクサクになりましたし。 悪い点だとバグが少し多かったかなと感じました。私の環境も多少あるかもしれませんが、ショップが利用できない、武器のデモ映像が見れない、たまにスタック(引っかかって動けない)するという現象が起きていました。 ロードするなりチェックポイントからやり直しをすれば問題ないのですが、他のゲームよりはよく起きていたなという気がします。 後は実績ですが実績コンプよりは他のゲームよりもやりやすいと思います。クレイガーベア集めや特定の武器で攻撃を跳ね返すのが面倒ですがそれ以外は達成しやすいと思います。 ちなみにベア集めは他のサイトでも書いているので省きます。攻撃を跳ね返すのに楽な方法と言えばアリーナのブロンズの1戦目2waveが銃持ちしか出てきません。そこで武器を構えてある程度貯まったら放つ→玉切れ or waveが終わったら場外に出てダウン→再挑戦を繰り返せばいつか達成しています。 感想としては以上になります。他のシリーズをやりたいなと思うのですがPS3やPS5が必要なので出来ていないのですが、いつか買ってやってみたいですね。 ゲームはそろそろ終わりにして開発のほうを進めていこうと思います。裏で少しずつ進んでいますのでもう少しでめどが立つと思います。ではでは。

2024年5月20日

サンドランドの実績コンプ!

少し時間がかかりましたが**サンドランド(SAND LAND)**の実績をコンプしました! ここから先は遊んだ感想や誰かのヒントにでもなればなと思うことを書いていきます。 ストーリーの感想 まずストーリーの感想としてはとても面白かったです。原作を全く知らないのですがおっさんがかっこよく描かれています。訳あり保安官の"ラオ"や後編に出てくる"ランゴ"等いい活躍をしています。“シーフ"は不憫な部分も多いですが活躍する部分も出てきます。 あとはいいやつばかりでした。多少の正義でやりすぎたのであれば私も不快には思わないのですが、行き過ぎた思想は不快だったので"見捨てればいいのに"と思うやつも助けてました。だからこそ王道で主人公なのでしょう。 ストーリーの内容ではもう少し疑ったほうが良いのでは?と思う部分がありました。まあ私の性格がひねくれているのもありますが、メインもサブもすんなりと進むのでそう感じてました。ドラゴンボールもそんな感じでしたっけ? ストーリーのシステムとして不満だったとことと言えば、話がスラスラ流れるのではなく少し間をおいて他の人が話したり、自身でボタンを押さないと話が進まないということがあったのでこの辺はもう少しスムーズだと嬉しかったなと思います。個人的にですが。 ゲームの感想 次はゲームの部分です。 所持できるマシンは5つですが制作できるマシンの種類は13、フレームさえあればいくらでも作れると思います。上限がわからないので作るのに限度があるかもしれませんが。 ストーリーを進めるのに最低5つ必要です。 バトルタンク ジャンプメカ バイク ホバーカー バトルアーマー になります。ストーリーを進めるならこれだけで十分ですが、ランクマッチ制覇には ライドホッパー バトルメカ ホバータンク も追加で必要です。レースを含めると ダートバギー もですね。 残りの クルマ ユニライド ホバースクーター ジェットホバー は強化しなくても大丈夫です。実績コンプには作る必要があります。 5つも持てるのですが道中の関係で最後まで固定でした。“タンク”、“ホバー”、“ジャンプ”、“バトルアーマー”、“バイク”がいつめんになっており、強化しないとストーリーも大変になるので、進行上入手したものを大体最後まで使用します。強化素材も取るのは大変ですし… 私的に戦闘で一番使いやすかったのは"バトルタンク"と"ホバーカー"ですね。タンクは移動に難がありますが、移動し続ければ大体の攻撃は避けれますし、火力も高いですので。ホバーカーは火力が少し劣りますがその分移動が楽なので。また全方位に対して攻撃できるのもいいです。バイクやライドホッパーは基本前方にしか攻撃できないので… それからオプションは個人的に自律戦闘ドローンがおすすめです。勝手にダメージを与えてくれますし、雑魚敵が沸いても対処してくれますので。タンクだと大容量ミサイルポッドを使ってました。固定砲台だと動けないのでランクマッチではハチの巣ですし。こっちは雑魚もまとめてダメージを与えられますし、撃つまでは時間がほぼ止まりますので、被ダメが少ないです。 実績コンプについて 最後に実績についてですが"サブクエ”、“落とし物”、“アリーナの制覇"あたりが大変だと思います。ヌシは探して倒す、レースは取り合えず全て上位の商品を取る、設計図は商人に会うたび確認して購入する、賞金首は王冠が付くまでやるをやれば大体の実績が取れます。 サブクエで少し大変だったのが"ペットボトル”。これは"魔物の里"に5,6個、それ以外の街で1,2個ほど落ちているので巡っていけば大丈夫です。洞窟にも落ちているみたいです。 後は"お宝探し!“は3つ全て見つけないと実績コンプに影響しそうというのと、隠しサブクエはマップ上に出ないのでわかりにくいくらいですかね?それと"因縁の対決"は合計3回やる必要があります。 次は落とし物です。ここで言及されていますが合計65個あります。内訳は メインで手に入る3つ サブクエで手に入れられる4つ(サブクエのお宝探しで3つ全て集める、他のサブクエで1つ) 残り58個は探し出す(持ち主に届けなくてもよいが、届けると小話が聞ける) 他のサイトで場所の記載はしていますのでそちらをご参照ください。私はめんどくさいのでやりません(笑) 最後にアリーナです。これがかなりしんどいと思います。私の場合はハードということもありますが、他の人の書き込みを見るとイージーでも難しいみたいです。ビッグマッチは時間制限付き5分のボス戦、ランクマッチはレベルが徐々に上がり最大32まで上がるかつマシンが限定されます。さらに時間制限付き、こちらも5分 まあボス1体ぐらいなら回復がなくても何とでもなりますが、一番きついのが”アレ将軍の戦車” このビッグマッチやランクマッチの後半はほぼダメージを受けてはいけません。1,2回くらいならともかく3回くらいボスから攻撃受けると終わります。 アレ将軍の戦車のきついところは”地形”と”雑魚敵”ですね。 まず地形は基本狭く正面からだと敵の攻撃を避けにくい上にオプションの攻撃が当たりにくいです。固定砲台にしろ誘導ミサイルにしろほぼ当たらないですし、大容量ミサイルポッドも天井がなくさらに敵にある程度接近しないといけません。 それから雑魚敵ですね。ランクマッチで戦う際は雑魚敵が固定砲台をやってきます。物陰に隠れればどうということはないですが、アレの戦車が近くにいると攻撃されますし、倒しても無限沸きなので割としんどいです。大砲1発で落とせるならまだしも2,3発だとそちらに気を取られ、アレの戦車にやられたりします。 アリーナのボス戦で戦う相手全てに言えることですが、最小限の動きでよけながら的確に攻撃を当てる必要があります。それは大砲にしろバトルアーマーの投げ爆弾にしろなんでもです。 避けるならまだしも的確に攻撃を当てていかないと制限時間に間に合わなかったりします。 他に苦戦したのはライドホッパーを使ったジャンプメカ戦ですね。使い慣れていないうえに前方しか攻撃できないので苦労しました。誘導ミサイルの対処として地上から打ってくる場合は敵から2,3メートルの距離にいれば勝手に地面に着弾します。コンテナからなら撃ち落とすしかないです。 後はバトルアーマーやバトルメカを使った戦いですね。防御をうまく使わないといけないのでいつものマシンと立ち回りが少し変わります。それに基本接近戦なので回避→攻撃→防御→回避の繰り返しになりがちでした。オプションの攻撃とアームの特殊技をうまく使う必要があります。 それくらいだと思います。ビッグマッチ→ランクマッチの順にやればある程度ボスの攻撃パターンもわかっていると思うので何とかなると思います。 それからアリーナの商品にメカパーツがありますが全ておすすめというわけではありません。戦車は電磁砲なのですが、個人的には普通の戦車砲が使いやすかったです。リロードも早いですし。 後はバトルメカの第二武器ですね。拡散系よりは遠距離から打てるもののほうがおすすめです。 最後に改造についてですが、火力をあげるのであれば断然クリティカル発生率です。最大強化で4回に1回くらいはダメージが上がるので必須、あとはリロード時間を短縮できれば早く撃破できると思います。多少当たらなくても問題なし! 個人的には状態異常系はうまく使いこなせませんでした。デフォルトで炎上がついているもの(焼夷弾系)はまだいいのですが、故障系は機械にしか使えないというのもあってほとんど使っていません。おそらくクロウやエピなど移動が多めのマシンであれば割と有効だったかもしれませんが… アリーナにはメカと生身の戦闘がありますが生身はあまり言うことがありません。ぶちぎれ使って殴るだけですし… 少し補足をするとぶちぎれ中は攻撃3回→回避→攻撃3回だと効率よく殴れます。ただランクマッチの”スイマーズパパ&ダイヤ団ボス&クラブ団ボス”はこういきませんでした。 とはいえぶちぎれで攻撃を避けつつひたすらパパを殴った後、倒せなかったら攻撃を避けつつ少しずつ殴り、スキルが使えたら使っていくで十分倒せます。 これでアリーナは制覇できると思います。とはいえある程度のプレイヤースキルを必要とするので大変だとは思います。 最終的なマシン構成 最大まで強化したマシンの構成をお見せします。参考になるかはわかりませんし、使いやすさは人それぞれだと思いますので バトルタンク ジャンプメカ バイク ...

2024年5月17日

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

前回問題としていたベクトル化についてですが解決して、ようやく2つ目の目標が終わりました! まずはこちらをご覧ください。 こんな感じになりました。 今はまだファイル数は20~30なのでまだまだ足りませんが、前回に比べるとかなりましになりました。 今回やったこととしては OpenAIのベクトル化からSentence Transformerを使用したベクトル化に変更 全ファイルをベクトルデータベースとしてjsonファイルに格納 になります。そのため一旦別プログラムでファイルを全てベクトル化し、画面に表示をさせるときはそのファイルを読み込んで類似度の計算を行っています。 前のコードとそこまでは変わってないので変わった部分で言うと class PDFToVector: def __init__(self, model_name: str): # モデルを読み込み self.model = SentenceTransformer(model_name) def split_text2vector(self, text: str, max_tokens=200) -> List[float]: vectors = [] for i in range(0, len(text), max_tokens): segment = text[i:i+max_tokens] vector = self.model.encode(segment, convert_to_tensor=True) vectors.append(vector) average_vector = np.mean(vectors, axis=0).tolist() def embed_sentence(self, text: str, vector_fol: str, filename: str, vector_database: List) -> List: embedding = self.split_text2vector(text) vector = { 'title': filename, 'body': text, 'embedding': embedding } vector_database.append(vector) def main(self): # ベクトルデータベースを格納 with open(vector_db_json, 'w', encoding='utf-8') as file: json.dump(vector_database, file, ensure_ascii=False, indent=4) こんなとこだと思います。一部処理を省略していますが大体の変わったとこはここになります。 ...

2024年5月14日

今度は私が失踪する番!

ということで失踪しました。失踪したといっても物理的に失踪したわけではなくソシャゲと動画作りから失踪しました。うp主失踪! 近年は引退という言葉が使われていますが、“辞める!“や"引退する!“という発信はしてないので失踪でも間違いはないかなと勝手に思っています。 前置きはここまでにして改めて今月長年付き合ってきたソシャゲとお別れをしてきました。 私自身は大体8,9年やってきたのですが、そのソシャゲ自体は今年で11周年を迎えます。名前自体は伏せます、個人的に微妙になってきた点も話しますので。ばれないことを信じていますから! 長く続いたソシャゲは多くないのですごい功績だと思いますし、今もやってるプレイヤーはすごいなと思ってます。 私も続いたほうですが、つい最近辞めました。理由はシンプルで”冷めた”。 そもそも4年前くらいに”隠居しよう!”と思っていたのですが、動画撮ったりするうちにモチベは上がってログボ勢にはなりませんでした。まあ無課金勢になったのでそんなにガチャは引けなかったのですが… ソシャゲは続けば続くほどインフレしていくものです。そのゲームが始まって最初のうちは数百から数千、スキルをうまく使えば万いくかな?くらいだったのが今では整数型の範囲を超えるダメージ(20億以上)を与えることができます。 ちなみに整数型を超えた場合ダメージが1になるというオバーフロー問題がありました。 最近はインフレのせいで味方にデバフをかけて戦闘が始まったりします。わけわかんない… 話がそれましたが、インフレが続いていろんなバフやデバフ、アビが増えてわけが分からなくなり、さらに先頭の幅も狭くなり昔のような楽しさを感じることがなくなりました。 そこでログインしない期間を設け、”やっぱりやりたい!”という気持ちが戻ってくればまだ続けようと思ってましたが、そんな気持ちが起きなかったので止めました。 一応各種アカウント(ゲーム、X、Youtube)は残していますが、もう使うことはないと思います。Youtubeは投稿用と閲覧用で分けてましたし。 ちなみにこのゲームのインフレがどのくらい進んだかというと リリースして2年くらい 戦闘するキャラのコスト管理が必要 必殺技で一発逆転、連携すれば威力も上がる! クリティカルが出れば運が良い! レベルを上げないと攻撃力も体力も4桁超えない! キャラごとに必殺技に使うアイテム数が異なるし、職業によっても変わる。戦闘が始まるたびにアイテムがもらえるが枠は決まってるので管理が大変! ストーリーの戦闘は少し大変、イベストーリーの戦闘は優しめ、高難易度も低リアリティキャラでクリアするものもあるし、状態異常も工夫の1つ! 最近 コスト?その概念いる? 必殺技はもはやバフ、使わなければ即死! バフをかけてクリティカルじゃないとダメージは通らない、デバフないときついよ、連携威力アップのアビないとより強くなれないよ レベル1でも1万超えてるし、2万いくキャラもいるよ どの職業でも使えるアイテムもらえるし、なんだったら職業関係なく誰でも必殺技が使えるアイテムもあるよ ストーリー戦闘はおまけ、キャラの更新は早いと週1ペース、高難易度は最新キャラじゃないと厳しい上にボスは状態異常が効かないことが多い あげればあまりキリがない気はしますが、インフレが進んでるな~というのがよくわかります。 まあインフレは仕方ないのでしょうがないですが、戦闘の幅が小さくなって面白味がなくなったとは思います。 もちろん悪いことだけではありません。良いところもあります。キャラのボイスやセリフが増えたり、愛でるスペースができたり、家具などを配置してポーズを撮って楽しんだり”かわいい”という要素が増えたと思います。 ただ、このソシャゲは面白くて始めたので面白味がないのであれば、私の場合は遊ぶ理由がなくなります。かわいいゲームなら動物を愛でてたほうがいいです。VRの”Moss”をおススメします! ということで不満を少しぶつけてしまいましたが話としては以上になります。 ただ私が不満を垂れ流して思考の整理をするために書いたので、読んでくださった方はとても奇特な方だと思ってます。愚痴はこれくらいにして”SAND LAND”の続きをやろう!ではでは。

2024年5月11日

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

目標としていた部分が完成したのでデモ版という形でお見せしようと思います。 想定していた形が取れたので割と嬉しいですね!ただ、上記はファイルが2つの場合でこのくらい時間がかかっています。 次はファイルが5つの場合です。 かなり時間がかかってますね。というのも実行するたびファイルをベクトル化しているので時間がかかる仕組みになっています。 実行するたびopenaiのAPIもたたいているので料金も増えていきます。ということで次の課題は openaiのベクトル化ではない代替手段を見つける ベクトルデータベースを作成する(すべてのファイルをベクトル化して、どこかに保存) ひとまずはこの2つですかね? 代替手段は見つければ何とかなりそうなので時間はかからないと思いますが、ベクトルデータベースの作成は異なるプログラムを作る必要がありそうですし、質問をベクトル化するプログラムの改修も入りそうなので少し時間がかかるかもですね。 第二目標ほど時間はかからないと思いますが… 今回修正した箇所はflaskを使用した場所と応答画面の作成になります。flaskは微修正だったので割愛しますが、画面のほうは以下のようになりました。 'use client'; import { useState } from 'react'; export default function QuestionForm() { // サーバーからの結果を保持する状態変数 const [result, setResult] = useState(''); const handleSubmit = async (e) => { e.preventDefault(); const question = e.target.elements.question.value; // サーバーにPOSTリクエストを送る const response = await fetch('http://localhost:5000/process', { method: 'POST', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify({ query: question }) }); // サーバーからのレスポンスをJSON形式で取得 const data = await response.json(); // 結果を状態変数に保存 setResult({ title: data.title, body: data.body, similarity: data.similarity } || 'No result returned'); // デフォルトで"結果がない"と表示 e.target.reset(); } return ( <div> <form onSubmit={handleSubmit}> <textarea name="question" placeholder="質問を入力してください" rows={5} /> <button type="submit">送信</button> </form> {/* サーバーからの結果を表示 */} <div> <h3>回答:</h3> <p><strong>タイトル:</strong> {result.title}</p> <p><strong>類似度:</strong> {result.similarity}</p> <p><strong>内容:</strong> {result.body}</p> </div> </div> ) } 画面にタイトルと類似度と内容が表示されるようになってます。必要ないかもしれませんが、デフォルトでは結果が表示されない文言を出しています。多分出ることはないですが… ...

2024年5月9日

知人が見つかったらしい

以前知人が失踪したという話があったのですが見つかったみたいです。 特に詳細は知らないので、とりあえずよかったとだけ。Xのアカウントでも何も言わず消したっぽいですし… たくさんの人に祝福されるような人なのでなぜ失踪したのかやっぱり謎なんですよね。 私とは正反対でコミュ力が高く友人も多い人が、誰にも何も言わず失踪するって結構な大事になりますよね。 彼なりに抱えているものが爆発した可能性もありますが、それを打ち明けられる友人がいなかったのでしょうか?私もいるか怪しいラインですが… まあ何はともあれ見つかったので良かったです。いずれ会う機会があれば聞いてみたいですがないでしょう。そこまで仲の良い関係性ではないですし。私は話してみたいですけどね。 あなたにも祝福があらんことを。ではでは。

2024年5月8日