7
7

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

エンジニアのお悩み相談 AI。プロンプトを入力すると、アドバイスを生成し音声合成してくれるAIモデル。

Last updated at Posted at 2024-07-20

adcc095b-2d26-4739-bcb7-e3b683f6143f.png

スクリーンショット 2024-07-21 050829.png

お悩み相談アプリの計算内容をテーマにしたショートストーリーです。

タイトル:「お悩み相談のアドバイザー」
近未来の都市、ネオ・トーキョーでは、技術が人々の生活を変えていた。街を歩くと、様々なアプリケーションが人々の悩みを解決し、日々の生活をより良くしていた。その中でも特に注目されていたのが、「お悩み相談のアドバイザー」という新しいアプリだった。

このアプリの最大の特徴は、ユーザーが自分の悩みを入力すると、10人の専門家に扮したAIモデルがそれぞれの視点からアドバイスを提供してくれることだった。アプリには、コンピュータープログラマー、学校の先生、牧師、お寺のお坊さん、芸術家、歴史家など、幅広いキャラクターが用意されていた。

一日の仕事を終えたマリコは、悩みがあった。彼女の長年の友人であるユウジは、最近仕事のストレスで体調を崩していた。マリコは、ユウジの悩みをどうにかして解決できないかと考え、「お悩み相談のアドバイザー」アプリを開いた。

アプリの画面に現れたのは、10人のキャラクターの顔。マリコはまず、心理カウンセラーを選び、ユウジの悩みを入力した。次に、弁護士を選び、法律に関する相談もしてみた。さらに、医者を選んで健康面でのアドバイスも求めた。最後に、ファイナンシャルプランナーからは、ストレスの原因となる経済的な問題についての助言をもらった。

数分後、アプリはそれぞれの専門家からのアドバイスを生成し、音声として再生する機能も提供してくれた。マリコは、その音声をユウジに聞かせることで、彼が少しでも前向きになれるよう手助けしようと決めた。

アプリのアドバイスに従い、ユウジは生活習慣を見直し、専門家の助言に基づいた行動を取り始めた。心理カウンセラーのアドバイスで心のケアをし、弁護士の助言で法的な問題を整理し、医者の指示で健康を改善し、ファイナンシャルプランナーの助言で経済的な安定を図った。

数週間後、ユウジの健康は改善し、ストレスも軽減された。彼は再び元気を取り戻し、マリコに感謝の言葉を述べた。アプリはただのツールではなく、人々の生活に実際の変化をもたらす力を持っていた。

ネオ・トーキョーでは、技術が進化することで人々の悩みを解決し、より良い未来を作り上げていた。そして、「お悩み相談のアドバイザー」は、その一翼を担い、人々に希望をもたらしていたのだった。

このショートストーリーは、お悩み相談アプリの機能を活用して人々の悩みを解決する様子を描いています。

以下にサンプルのお悩みを3つ準備しました。

サンプルお悩み1
お悩みの概要: 仕事のストレスが溜まっていて、どうすればリラックスできるか分からない。
お悩みの詳細: 最近、仕事のプレッシャーが増していて、毎日がとてもストレスフルです。仕事が終わってもリラックスする方法が分からず、寝る前も仕事のことを考えてしまいます。ストレスを軽減し、リラックスするための方法を教えてください。

サンプルお悩み2
お悩みの概要: 学校での人間関係がうまくいかず、友達とどう接していいか分からない。
お悩みの詳細: 学校で新しいクラスに入りましたが、友達を作るのが難しいです。話しかけるのが怖くて、どう接していいか分かりません。クラスメートと友好的な関係を築くためのアドバイスをお願いします。

サンプルお悩み3
お悩みの概要: 最近、健康診断で血圧が高いと言われました。どうすれば健康を改善できるか知りたいです。
お悩みの詳細: 先日、健康診断を受けたところ、血圧が高いと言われました。食生活や運動習慣を見直して、健康を改善する方法を教えてください。また、どのような医療機関に相談すべきかも知りたいです。

これらのサンプルお悩みを使用して、お悩み相談アプリを試すことができます。それぞれのお悩みについて、適切なキャラクターを選んでアドバイスを生成してください。

実行結果。
お悩みの概要: 仕事のストレスが溜まっていて、どうすればリラックスできるか分からない。
お悩みの詳細: 最近、仕事のプレッシャーが増していて、毎日がとてもストレスフルです。仕事が終わってもリラックスする方法が分からず、寝る前も仕事のことを考えてしまいます。ストレスを軽減し、リラックスするための方法を教えてください。
お寺のお坊さんがお悩みに答える場合、以下のようなアドバイスを提案できます。
  1. リラクゼーションテクニック:深呼吸や瞑想、ヨガなど、身体と心のリラックスを促す方法があります。これらの技術は、日々の生活の中で自然に取り入れることができます。

  2. エネルギーマスターシップ:エネルギーマスターの法則に基づき、体調を整え、エネルギーを保つことで、ストレスを軽減することができます。これには、運動、睡眠、食事、リラクゼーションなどが含まれます。

  3. 心理療法の利用:自己カウンセリングや心理療法などの専門的な治療手段もあります。これらの治療では、ストレスを理解し、解決策を見つけ出すためのプロフェッショナルな支援を得ることが可能です。

  4. ストレス管理のための時間設定:仕事以外にも時間を設け、休息時間を確保することが重要です。一日の終わりに一時間程度のストレステストを行ったり、休憩を取ることで、ストレスを軽減することができます。

  5. 適応力の向上:自分の能力と限界を認識し、適切な範囲内で作業することで、ストレスを感じにくくなるでしょう。

以上のように、各人が自分自身のライフスタイルやストレス耐性に合わせて適切な方法を選択することをおすすめします。また、これら全てがうまくいかない場合は、専門家の助けが必要かもしれませんので、その時こそ訪れるべきです。

必要なライブラリのインストールからアプリのコードまでを含めた統合版コードを示します。

# 必要なライブラリのインストール
!pip install accelerate gTTS gradio transformers

from transformers import AutoModelForCausalLM, AutoTokenizer
from gtts import gTTS
import torch
import gradio as gr

# GPUが利用可能かどうかをチェック
device = "cuda" if torch.cuda.is_available() else "cpu"

# 言語モデルとトークナイザーの読み込み
language_model = AutoModelForCausalLM.from_pretrained(
    "Qwen/Qwen2-1.5B-Instruct",
    torch_dtype="auto",
    device_map="auto"
)
tokenizer = AutoTokenizer.from_pretrained("Qwen/Qwen2-1.5B-Instruct")

# キャラクターとその専門性
characters = {
    "コンピュータープログラマー": "コンピュータープログラミングやソフトウェア開発についての専門的なアドバイスを提供します。",
    "学校の先生": "教育や学習に関する悩みについてアドバイスを提供します。",
    "牧師": "宗教的な問題や精神的な支えが必要な場合にアドバイスを提供します。",
    "お寺のお坊さん": "仏教的な視点から悩みを解決するアドバイスを提供します。",
    "心理カウンセラー": "心の問題や人間関係についてのアドバイスを提供します。",
    "弁護士": "法律に関する悩みや問題についてアドバイスを提供します。",
    "医者": "健康や医学的な問題についてアドバイスを提供します。",
    "ファイナンシャルプランナー": "お金や投資についてのアドバイスを提供します。",
    "芸術家": "創作やアートに関するアドバイスを提供します。",
    "歴史家": "歴史や過去の出来事に基づいたアドバイスを提供します。"
}

def generate_advice(character, query):
    prompt = f"{character}として、以下のお悩みについてアドバイスを提供してください:{query}"
    messages = [
        {"role": "system", "content": "あなたは専門家です。"},
        {"role": "user", "content": prompt}
    ]

    text = tokenizer.apply_chat_template(
        messages,
        tokenize=False,
        add_generation_prompt=True
    )
    model_inputs = tokenizer([text], return_tensors="pt").to(device)

    generated_ids = language_model.generate(
        model_inputs.input_ids,
        max_new_tokens=512
    )
    generated_ids = [
        output_ids[len(input_ids):] for input_ids, output_ids in zip(model_inputs.input_ids, generated_ids)
    ]

    response = tokenizer.batch_decode(generated_ids, skip_special_tokens=True)[0]
    return response

def text_to_speech(text, filename):
    tts = gTTS(text=text, lang='ja')
    tts.save(filename)
    return filename

def generate_and_speak(character, query):
    generated_text = generate_advice(character, query)
    filename = "generated_advice.mp3"
    mp3_filename = text_to_speech(generated_text, filename)
    return generated_text, mp3_filename

character_choices = list(characters.keys())

iface = gr.Interface(
    fn=generate_and_speak,
    inputs=[
        gr.Dropdown(choices=character_choices, label="キャラクターを選択"),
        gr.Textbox(label="お悩みを入力")
    ],
    outputs=[gr.Textbox(label="生成されたアドバイス"), gr.Audio(label="生成された音声")],
    title="お悩み相談アプリ",
    description="選択したキャラクターに基づいてお悩みをアドバイスし、そのテキストを音声合成してMP3ファイルとして再生します。"
)

if __name__ == "__main__":
    iface.launch()
このコードでは、以下の処理が行われます:

必要なライブラリのインストール
言語モデルとトークナイザーの読み込み
キャラクターとその専門性の設定
キャラクターに基づいたアドバイスの生成
アドバイスの音声合成
Gradio インターフェースの設定と起動

このコードを実行することで、ユーザーが選んだキャラクターに基づいてお悩みのアドバイスを生成し、音声として再生するアプリが実現できます。

7
7
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
7
7

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?