AI は未来です。ソフトウェア エンジニアとして、AI は最も参入すべき分野です。コード内で LLM を活用すると、リアルタイムの感情分析やユーザー生成コンテンツの解釈などの複雑なタスクを処理するよりスマートなアプリケーションを構築できます。 LLM を統合すると、ソフトウェアの応答性と機能が向上し、ユーザー エクスペリエンスと自動化が向上します。
この投稿は、Python を使用して LLM 呼び出しを行う方法を紹介するもので、これらの強力な機能を独自のコードに追加できるようになります。
まず、選択したキャラクターの チャットボットを作成します。次に、短い文章を要約する方法を学び、本全体を要約するまで進みます。最後に、再プロンプトを実行し、LLM によって提供される結果を分析する方法を学びます。
LLM リクエストには、Groq を使用します。そこでアカウントを作成すると、API を使用して LLM リクエストを無料で行うことができます。
これらのリクエストに Python を使用するには、pip install groq を実行して Groq Python パッケージをインストールします。次に、次のようにコードにインポートします。
import os from groq import Groq client = Groq( api_key=os.environ.get("GROQ_API_KEY"), )
必ず API キーを環境変数として設定してください。
以下を追加することで、単純な LLM リクエストを作成できます。
chat_completion = client.chat.completions.create( messages=[ { "role": "user", "content": "Explain formula 1.", } ], model="llama3-8b-8192", ) print(chat_completion.choices[0].message.content)
この場合、LLM に式 1 が何であるかを説明してもらいます。コンソールでプログラムを実行すると、llama3-8b からの出力が表示されるはずです。これを試してみたり、モデルやプロンプトを切り替えたりすることができます。
それでは、マリオなど、好きなキャラクターのチャットボットを作成してみましょう。現時点では、LLM は中立的な/有益なトーンで応答します。ただし、LLM にシステムの役割を与えることで、LLM がマリオと同じように応答し、会話に個性と楽しさを加えることができます。これによりインタラクションの雰囲気が決まり、「それは私だよ、マリオ!」のような遊び心のある象徴的な応答が得られます。物事を魅力的に保つため。
リクエストにシステムロールを追加しましょう:
chat_completion = client.chat.completions.create( messages=[ { "role": "system", "content": "You are a super mario chatbot. Always answer in his style, and create witty responses." }, { "role": "user", "content": "Explain formula 1.", } ], model="llama3-8b-8192", ) print(chat_completion.choices[0].message.content)
それでは、LLM がマリオカートの観点からフォーミュラ 1 とは何かを説明します!
システム ロールは、バーチャル カスタマー サポート エージェント、教育講師、クリエイティブ ライティング ヘルパーなどの他のユースケースにも最適で、LLM が各ロールの特定の雰囲気やニーズに合わせた方法で応答するようにします。
特定のプロンプトとシステム ロールを使用して LLM リクエストを作成する方法について少し理解できたので、要約ツールを作成してみましょう。
同じディレクトリにarticle.txtというテキスト ファイルを作成し、選択した記事に貼り付けます。このステップでは、記事が長すぎないように注意してください。
コードでは、まずそのテキストを読み込みましょう。
import os from groq import Groq client = Groq( api_key=os.environ.get("GROQ_API_KEY"), )
ここで、LLM に送信できるプロンプトを作成して、テキストを箇条書きで要約するように指示しましょう。
chat_completion = client.chat.completions.create( messages=[ { "role": "user", "content": "Explain formula 1.", } ], model="llama3-8b-8192", ) print(chat_completion.choices[0].message.content)
まずプロンプトを書き出して、LLM に明確かつ簡潔な指示を与えます。次に、要約するテキストを提供します。
あとは、作成したばかりのプロンプトで LLM を呼び出すだけです。
chat_completion = client.chat.completions.create( messages=[ { "role": "system", "content": "You are a super mario chatbot. Always answer in his style, and create witty responses." }, { "role": "user", "content": "Explain formula 1.", } ], model="llama3-8b-8192", ) print(chat_completion.choices[0].message.content)
これを実行すると、LLM に提供した記事の箇条書きの概要が表示されるはずです。
さて、フランツ・カフカの『変身』のように、非常に長い記事、あるいは場合によっては本全体を貼り付けてみてください。
LLM がエラーで戻ってくることに注意してください。一度にまとめるには多すぎます。
LLM のコンテキスト ウィンドウは、1 回の呼び出しで処理および記憶できるテキストの量を指します。つまり、記事を一度に要約するのには最適ですが、テキストが一貫した応答を取得して生成する能力を超えているため、本全体を一度に処理することはできません。
それでは、どうすればこれを解決できるでしょうか?これは、本を「チャンク化」することで実現できます。私たちは本を LLM が管理できる「チャンク」に分割し、それらを要約するように指示します。次に、各チャンクの概要を取得したら、それらの概要を 1 つの一貫した概要にまとめることができます。
次のように文字列をチャンクに分割できます (必ず textwrap をインポートしてください):
with open('article.txt', 'r') as file: content = file.read()
後から幅を変更して、好みに合わせて最良の結果を得ることができます。
これらのチャンクがすべて揃ったので、それぞれを要約して、回答と呼ばれる変数内に応答を保存しましょう。
prompt = f""" Summarize the following text in bullet points for easy reading. Text: {content} """
このコードを実行して回答を出力すると、作成された各「チャンク」/セクションの箇条書きの概要を含む長い文字列が表示されるはずです。
あとは、LLM をもう一度使用して、すべてのセクションの概要を使用して 1 つの一貫した概要を作成するだけです。
chat_completion = client.chat.completions.create( messages=[ { "role": "user", "content": prompt, } ], model="llama3-8b-8192", ) print(chat_completion.choices[0].message.content)
コードを実行すると、書籍全体の概要が 1 つ表示されるはずです。すごいですね?
注: 本の大きさによっては、複数回「チャンク」したり、より短い応答を提供するように LLM に指示したりする必要がある場合があります。 「チャンク」要約が多すぎる場合、最終的な要約プロンプトが依然として大きすぎる可能性があります。
お気づきかもしれませんが、たとえば、LLM に箇条書きで応答するように指示したとしても、常に同じ応答が得られるわけではありません。場合によっては、ヘッダーやちょっとした説明を追加することもあります。場合によっては、箇条書きのみを提供することもあります。
プログラマとしては、これにより結果の処理が困難になる場合があります。 LLM が特定の形式でより一貫した回答を提供できるようにするにはどうすればよいですか?
感情分析ツールを作ってみましょう。 LLM に悲しい話を与え、-1 から 1 までの感情スコアを計算するように指示します。
その通りです:
import os from groq import Groq client = Groq( api_key=os.environ.get("GROQ_API_KEY"), )
これを複数回実行すると、応答が常に指定した形式ではないことがわかります。ただし、その形式に依存して数値を抽出し、さらに計算を実行したい場合、それはイライラさせられます。不適切な取り扱いをすると、プログラムがクラッシュする可能性があります。
再プロンプトは、LLM に与えられた入力を調整および改良して、目的の応答または形式に導くプロセスです。 「センチメント: 0.5」としての出力を必要とするセンチメント ツールの形式を検証する場合、プロンプトを調整して、その正確な形式でセンチメント スコアのみを返すようにモデルに明確に指示することで、LLM に再プロンプトを表示し、一貫性を確保できます。応答。
正規表現を使用して、予期した形式が提供されているかどうかをチェックする関数を作成できます (したがって、必ず正規表現をインポートしてください)。
chat_completion = client.chat.completions.create( messages=[ { "role": "user", "content": "Explain formula 1.", } ], model="llama3-8b-8192", ) print(chat_completion.choices[0].message.content)
LLM から応答を取得したら、その関数を呼び出すことができます。関数が true を返した場合、正しい形式であることがわかります。 false が返された場合は、LLM に再プロンプトを出して再試行する必要があることがわかります。
chat_completion = client.chat.completions.create( messages=[ { "role": "system", "content": "You are a super mario chatbot. Always answer in his style, and create witty responses." }, { "role": "user", "content": "Explain formula 1.", } ], model="llama3-8b-8192", ) print(chat_completion.choices[0].message.content)
もちろん、これは非常に基本的な再プロンプトです。 LLM は、この 2 回目の LLM 呼び出しでも依然として間違った形式を提供する可能性があります。ただし、一貫した形式の応答の成功率ははるかに高くなるはずです。
これらのツールとテクニックを使用すると、LLM を Python コードに統合し、出力を効果的に検証する準備が整いました。ご質問がございましたらお気軽にコメントください。
完全なコードを確認したい場合は、Github リポジトリにアクセスしてください。
追伸: これは、SCU の ACM 支部で私が行ったワークショップのブログ投稿版です。
以上がPython による生成 AI の活用の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。