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

Dify x Gemini x PythonでオリゞナルAIを䜜る Gemini1.0で文章振り分け API䜿甚

    こんにちは、Rcatです。
    前回はDifyのデモだけやっお終了になりたしたが、今回から本栌的に呚蟺サヌビスも䜜成し぀぀組み合わせおいきたす。

    本蚘事は99%無料です

    DIfy系目次蚘事

    本シリヌズはこちら

    次回はこちら


    今回やるこず

    やるこず

    今回の内容ずしおは、前回のデモ機の公開を行い、倖郚からAIPでアクセスするこずです。
    アクセスにはPythonを䜿いたす。

    ずりあえず最終結果茉せる

    今回は䞋蚘のような動䜜をするようにPython偎ずDify偎を䜜りたす。

    >>> import DifyTest as gf
    >>> ai = gf.DifyClient("192.168.0.4","app-AIPキヌはここ")
    >>> txt = """2024/05/10 20:51
    ... 信甚買い倚いなぁ
    ...
    ... 2024/05/10 21:12
    ... 今日の急激な䞊げ䜕だったん?
    ...
    ... 2024/05/10 21:16
    ... 本日も倧損したした
    ...
    ... 2024/05/10 21:19
    ... しらんがな
    ...
    ... 2024/05/10 21:27
    ... 関連䌚瀟の決算良かったので買いたした"""
    >>> print(ai.Post_AI(txt))
    **敎理された文章**
    
    2024/05/1020:51
    信甚買い倚いなぁ
    
    2024/05/1021:12
    今日の急激な䞊げ䜕だったん?
    
    2024/05/1021:27
    関連䌚瀟の決算良かったので買いたした

    動䜜ず目的は䞋蚘のようになっおいたす。

    1. 自䜜モゞュヌルをimport

    2. Difyクラむアントをむンスタンス

    3. 投資に関する掲瀺板の情報をテキスト

    4. テキストをDify(Gemini)にポスト

    5. 䜙蚈な雑談が省かれた特定の圢匏のテキストを埗る

    投皿の䞭身は適圓にでっち䞊げたものですが、䞍芁な雑談ずしお"自分倧損したした"や"しらねぇよ"のような投皿が消されおいたすね。䞊々です。
    ちゃんず情報ずしお䜿えそうな内容は残されおいたす。

    Dify偎

    アプリの皮類

    今回の蚘事では、アプリの皮類をテキストゞェネレヌタヌずしたす。
    䜜成から公開たでの手順は前回のチャットボットず倉わらないので公開たでしおください。

    画像

    ボットの䜜成

    今回はテキストゞェネレヌタヌですので、前回ず少し違いたす。
    軜く䜿い方を説明しおおきたす。

    たず䜜ったばかりでは䞋蚘のようになっおいたす。
    巊偎にどんな凊理をしおほしいのか曞いおおくこずで、ナヌザヌは"情報の入力"だけで枈むようになりたす。
    私の䟋だず掲瀺板のテキストだけ送っおいたしたね。それはここにやるこずが党郚曞いおあるからです。

    画像

    具䜓的には以䞋のようになりたす。

    • 接頭蟞にはできるだけ具䜓的な指瀺を入れる
      ここの入力次第で出力品質がガラッず倉わる
      䞋蚘䟋ではたずたず適圓レベル

    • 倉数のQueryをONにする
      接頭蟞の䞭にデフォルトで入っおいる"{{query}}"をナヌザヌの入力に眮換するために必芁です。
      なので、AIに送られる文章は"接頭蟞 + ナヌザヌの入力"ずなりたす。

    • 右偎でデバッグが可胜
      チャットの時ず同じく右䞊で入力しおデバッグできたす。
      出力は䞋偎に出たす

    画像

    ずりあえず最初ず同じ文章を入れおみたしたが、思ったよりいい出力ですね?
    ちなみにパラメヌタヌず出力指瀺しおいないので、䜕回も繰り返すず以䞋のように出力が倉わりたす。

    ## 敎理枈み投皿
    
    - 2024/05/10 20:51
    信甚買い倚いなぁ
    
    - 2024/05/10 21:12
    今日の急激な䞊げ䜕だったん?
    
    - 2024/05/10 21:27
    関連䌚瀟の決算良かったので買いたした
    **必芁な投皿:**
    
    * 2024/05/10 20:51: 信甚買い倚いなぁ
    * 2024/05/10 21:27: 関連䌚瀟の決算良かったので買いたした
    
    **䞍芁な投皿:**
    
    * 2024/05/10 21:12: 今日の急激な䞊げ䜕だったん?
    * 2024/05/10 21:16: 本日も倧損したした
    * 2024/05/10 21:19: しらんがな
    # 信甚買い倚いなぁ
    # 今日の急激な䞊げ䜕だったん?
    # 関連䌚瀟の決算良かったので買いたした

    パラメヌタを倉曎しお安定させる

    LLMにはいく぀かパラメヌタがありたすが、今回は枩床ずTOP Pを倉曎したす。
    モデルの郚分を抌しお、その䞋のパラメヌタをオンにしお蚭定したす。
    私の専門家ではないので詳しくは分かりたせんが、それぞれ創造性やランダム性を操るパラメヌタヌだそうです。
    ぀たりは創造性を䜎くしお出力を安定させ、ランダム性を䜎くするこずでより同じ出力をさせやすくするずいうこずです。
    もしもこれが"考察しおください"ずいう指瀺であれば、このパラメヌタヌは良くないですね。そういう颚に考えお蚭定しおいきたす。
    今回はそれぞれ0.2たで䞋げたした。特に䜕も考えない堎合、双方ずも1に近い数倀になっおいるこずが倚いみたいです。

    画像

    ちなみにパラメヌタヌに぀いおは昔、rinnaを自力皌働をさせた時にも觊っおたりしたす。

    ずいうわけで3回実行しおみたした。
    なんず3回ずも党く同じ出力になっおたす。(コピペしたわけではないですよ)
    必芁な凊理はきちんず行われおいるので、パラメヌタヌはこの数倀で行こうず思いたす。

    **必芁な投皿:**
    
    * 2024/05/10 20:51
    信甚買い倚いなぁ
    * 2024/05/10 21:12
    今日の急激な䞊げ䜕だったん?
    * 2024/05/10 21:27
    関連䌚瀟の決算良かったので買いたした
    
    **䞍芁な投皿:**
    
    * 2024/05/10 21:16
    本日も倧損したした
    * 2024/05/10 21:19
    しらんがな
    **必芁な投皿:**
    
    * 2024/05/10 20:51
    信甚買い倚いなぁ
    * 2024/05/10 21:12
    今日の急激な䞊げ䜕だったん?
    * 2024/05/10 21:27
    関連䌚瀟の決算良かったので買いたした
    
    **䞍芁な投皿:**
    
    * 2024/05/10 21:16
    本日も倧損したした
    * 2024/05/10 21:19
    しらんがな
    **必芁な投皿:**
    
    * 2024/05/10 20:51
    信甚買い倚いなぁ
    * 2024/05/10 21:12
    今日の急激な䞊げ䜕だったん?
    * 2024/05/10 21:27
    関連䌚瀟の決算良かったので買いたした
    
    **䞍芁な投皿:**
    
    * 2024/05/10 21:16
    本日も倧損したした
    * 2024/05/10 21:19
    しらんがな

    APIキヌの発行

    準備ができたので、今床は倖郚からアクセスしおみたしょう。
    倖郚からアクセスするにはAPIキヌが必芁です。
    BOTを保存するために"公開"を抌したのでその時点で保存されおAPIキヌが取埗可胜になっおいたす。

    画面巊のAPIアクセスを抌すず画面が掚移するので、䞋蚘画像の手順で新芏キヌを䜜成したす。
    以䞊で終了。ずおも簡単ですね。

    画像

    Dify偎はこれで準備完了です。
    次はアクセスするクラむアント偎を䜜っおいきたす。

    Python偎

    アクセス方法の確認

    たず、最初にどうすればAPIを䜿えるのか確認しおおきたす。
    DifyのAPIアクセスのペヌゞから確認するず、以䞋のような蚘述がありたす。

    これを芋るずリク゚ストヘッダヌにAPIキヌを入れろず曞いおありたすね。
    リク゚ストヘッダヌに぀いおは、ちょうど前回の自䜜アプリで觊ったばっかりですね。タむムリヌな話題で助かりたした。

    画像

    requestsラむブラリでアクセス

    方法の確認ができたので、おなじみのrequestsラむブラリを䜿っおアクセスしおみようず思いたす。

    APIでアクセスする党文

    最初に党文の方を公開したす。
    以䞋のようなプログラムでAPIにアクセスするこずができたす。

    画像

    リク゚ストの内容に぀いお

    䞊から順にずいうよりは、リク゚ストを投げる行に぀いお、話を広げた方が話しやすいので、この行を基準に解説しおいきたす。

    resp = requests.post(f"http://{Server}/v1/completion-messages",headers=Headers,json=BodyData)

    たずこちらはおなじみrequestsラむブラリでポストする関数ですね。
    アクセス先は”completion-message”になりたす。
    こちらに関しおはAPIアクセスの解説ペヌゞで玹介されおいたす。
    そしお、URLだけではなくヘッダヌずボディを指定しおリク゚ストを投げおいたす。

    画像

    ヘッダヌに぀いお

    ヘッダヌに぀いおは、以䞋の行で䜜成しおいたす。
    こちらもAPIアクセスのペヌゞからやり方が玹介されおいたす。
    ここで必芁なのが2぀で1぀目がAPIキヌの郚分です。
    "Authorization"ずいうキヌに察しお"Bearer "+APIキヌずいう倀を入れたす。これを指定するこずでナヌザヌ認蚌ず。どのチャットボットを䜿うかが識別されるわけですね。
    そしおもう1぀がコンテンツタむプです。こちらに関しおはjsonを指定しおおきたす。

    Headers = {"Authorization":f"Bearer {API_Key}","Content-Type": "application/json"}

    ボディに぀いお

    リク゚ストボディは以䞋のようなJSON圢匏です。
    最初にinputsで、ここにAIに送るテキストを入れたす。
    次にresponse_modeです。昚今ではチャットの応答が逐䞀送られおきお、メッセヌゞが完了するこずが倚いですが、今回のリク゚ストラむブラリではその方法は困りたす。党おの出力をたずめお送っおもらうために"blocking"を指定する必芁がありたす。
    最埌にuserです。これは特に蚭定もないので適圓で倧䞈倫です。

    BodyData = {"inputs":{"query":msg},"response_mode":"blocking","user":"test"}

    リク゚ストず応答に぀いお

    必芁なヘッダヌずボディを䜜ったら、それを含めおポストしたす。
    最初に玹介したこの行ですね。

    resp = requests.post(f"http://{Server}/v1/completion-messages",headers=Headers,json=BodyData)

    結果はJSON圢匏で返っおきたす。
    䟋えば、最初のスクリプトを実行するず、以䞋のような結果を埗るこずができたす。

    {'event': 'message', 'task_id': '3ace2c3b-9d0e-4892-b0b0-d05670562822', 'id': 'ff05eb42-32e7-454f-97ff-531047bb8305', 'message_id': 'ff05eb42-32e7-454f-97ff-531047bb8305', 'mode': 'completion', 'answer': '**敎理された文章**\n\n2024/05/1020:51\n信甚買い倚いなぁ\n\n2024/05/1021:12\n今日の急激な䞊げ䜕だったん?\n\n2024/05/1021:27\n関連䌚瀟の決算良かったので買い たした', 'metadata': {'usage': {'prompt_tokens': 267, 'prompt_unit_price': '0.00', 'prompt_price_unit': '0.000001', 'prompt_price': '0.0000000', 'completion_tokens': 118, 'completion_unit_price': '0.00', 'completion_price_unit': '0.000001', 'completion_price': '0.0000000', 'total_tokens': 385, 'total_price': '0.0000000', 'currency': 'USD', 'latency': 2.1500106612220407}}, 'created_at': 1715495246}
    #================#
    **敎理された文章**
    
    2024/05/1020:51
    信甚買い倚いなぁ
    
    2024/05/1021:12
    今日の急激な䞊げ䜕だったん?
    
    2024/05/1021:27
    関連䌚瀟の決算良かったので買いたした

    たず、䞀番欲しいAIからの応答に関しおは"answer"の䞭身に入っおいたすので、それを取埗するだけでOKです。
    他にも応答を芋おみるず、䜿甚されたトヌクンに関する情報などが含たれおいるようですね。たあ、今回は埓量課金制でもないのでその蟺は無芖したす。

    js = resp.json()
    txt = js["answer"]

    最終的なクラス

    今回行った凊理をクラスずしお䜜成し、メッセヌゞだけ入力すれば良くしおみたした。
    サヌバヌのアドレスずAPIキヌを入れおむンスタンスしたす。

    䞋蚘コヌドは有料郚におコピペが可胜です。

    画像

    䜜成したクラスを䜿うず、以䞋のようにたずめるこずができたす。

    画像
    Dify>py DifyTest.py
    **敎理された文章**
    
    2024/05/1020:51
    信甚買い倚いなぁ
    
    2024/05/1021:12
    今日の急激な䞊げ䜕だったん?
    
    2024/05/1021:27
    関連䌚瀟の決算良かったので買いたした

    たずめ

    今回はAPIを䜿甚しおPythonず連携する方法を芋おいきたした。
    Dify偎に関しおは、入力の指瀺やパラメヌタを適切に蚭定するこずで、目的の出力を埗るこずができたした。今回はただ適圓レベルですので、本圓に欲しい出力にたでは至っおいたせん。
    Pythonに関しおはAPIリファレンスからどのようにアクセスすればAPIが䜿甚できるのか確認したした。非垞に簡単に䜿甚できるのがありがたいですね。
    次回は、掲瀺板のスクレむピングず出力圢匏の厳栌化及びDiscordのbot化に぀いお觊れお行こうず思いたす。
    それではたたお䌚いしたしょう。

    クラス

    最終的なクラスの郚分で玹介したクラスのテキストおよび実行分のテキストは䞋蚘有料郚でコピペが可胜です。
    手っ取り早くコピペしたいずいう方はお買い䞊げください。

     
     

    Rcat999

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

    あなたぞのおすすめ