ja-JP/about_Powershai_CHATS.help.txt

TOPIC
    about_powershai_chats
 
SHORT DESCRIPTION
    PowershAi は、会話の履歴とコンテキストを生成するのに役立つチャットの概念を定義しています!
 
 
LONG DESCRIPTION
    PowershAi は、チャットの概念を導入しています。これは、ほとんどの LLM サービスにおけるチャットの概念と非常に似ています。
 
    チャットを使用すると、現在のプロバイダーに関係なく、標準的な方法で LLM サービスと対話できます。
 
    チャットは、次の機能のための標準的な方法を提供します。
    - チャットの履歴 - コンテキスト
    - パイプライン(他のコマンドの結果を使用する)
    - ツール呼び出し(LLM の要求に応じてコマンドを実行する)
    すべてのプロバイダーがチャットのサポートを実装しているわけではありません。
 
    プロバイダーがチャットをサポートしているかどうかを確認するには、`Get-AiProviders` コマンドレットを使用し、`Chat` プロパティを確認します。`$true` の場合、チャットはサポートされています。
 
    また、チャットがサポートされていても、プロバイダーの制限により、すべての機能がサポートされているとは限りません。
 
 
新しいチャットを開始する
    新しいチャットを開始する最も簡単な方法は、`Send-PowershaiChat` コマンドを使用することです。
 
    もちろん、これは、プロバイダーを構成(`Set-AiProvider` を使用)した後、必要に応じて認証などの初期設定を行った後に使用する必要があります。
 
 
    Send-PowershaiChat "こんにちは、Powershai からあなたと会話しています"
 
    簡潔にするため、`Send-PowershaiChat` コマンドには、`ia` というエイリアスがあります(日本語の「人工知能」の略です)。
 
    これを使用すると、コマンドを大幅に短縮し、プロンプトに集中できます。
 
    ia "こんにちは、Powershai からあなたと会話しています"
 
    すべてのメッセージは、チャットに送信されます。 明示的にチャットを作成しない場合は、`default` という特別なチャットが使用されます。
 
    `New-PowershaiChat` を使用して新しいチャットを作成できます。
 
    各チャットには、独自の会話履歴と設定があります。独自の関数などを含めることができます。 複数のトピックを混在させずに管理する必要がある場合は、追加のチャットを作成すると便利です。
 
チャットコマンド
    チャットを何らかの形で操作するコマンドは、`
    -Powershai
    Chat*` の形式です。
 
    通常、これらのコマンドは `-ChatId` パラメーターを受け取ります。これは、`New-PowershaiChat` で作成されたチャットの名前またはオブジェクトを指定するために使用します。
 
    指定しない場合は、アクティブなチャットが使用されます。
 
 
アクティブなチャット
    アクティブなチャットとは、PowershaiChat コマンドで使用されるデフォルトのチャットです。
 
    作成されたチャットが 1 つしかない場合は、これがアクティブなチャットとみなされます。
 
    複数のアクティブなチャットがある場合は、`Set-PowershaiActiveChat` コマンドを使用して、アクティブなチャットを設定できます。`New-PowershaiChat` から返される名前またはオブジェクトを渡すことができます。
 
チャットのパラメーター
    すべてのチャットには、さまざまな側面を制御するいくつかのパラメーターがあります。
 
    たとえば、LLM によって返されるトークンの最大数などです。
 
    新しいパラメーターは、PowershAI の各バージョンに追加される場合があります。
 
    パラメーターとその機能を把握する最も簡単な方法は、`Get-PowershaiChatParameter` コマンドを使用することです。
 
    このコマンドは、設定可能なパラメーターのリストとその現在の値、使用方法の説明を返します。
 
    `Set-PowershaiChatParameter` コマンドを使用して、パラメーターを変更できます。
 
    一覧表示されるパラメーターの中には、プロバイダーの API の直接パラメーターがあります。これらのパラメーターには、その旨の説明が付属しています。
 
 
コンテキストと履歴
    すべてのチャットには、コンテキストと履歴があります。
 
    履歴とは、会話で送受信されたすべてのメッセージの履歴です。 コンテキストサイズとは、LLM に送信する履歴の量であり、これにより LLM は前回の回答を記憶します。
 
    このコンテキストサイズは、PowershAI の概念であり、LLM で定義されている「コンテキスト長」とは異なります。
 
    コンテキストサイズは PowershAI にのみ影響し、値によってはプロバイダーのコンテキスト長を超える可能性があり、エラーが発生する可能性があります。
 
    コンテキストサイズは、LLM に対してすでに述べられたことを最新の状態に保ちつつ、LLM のトークンの最大数をオーバーフローさせないように、バランスを保つ必要があります。
 
    コンテキストサイズは、チャットのパラメーター、つまり `Set-PowershaiChatParameter` を使用して制御します。
履歴とコンテキストは、セッションのメモリに保存されることに注意してください。つまり、Powershell セッションを閉じると、これらは失われます。
 
    今後、ユーザーが自動的に保存してセッション間で復元できるメカニズムが導入される予定です。
 
    また、履歴が Powershell のメモリに保存されるため、非常に長い会話は Powershell のメモリオーバーフローまたはメモリ使用量の増加につながる可能性があることにも注意してください。
 
    `Reset-PowershaiCurrentChat` コマンドを使用すると、いつでもチャットをリセットできます。これにより、アクティブなチャットの履歴がすべて消去されます。
 
    これは、履歴がすべて失われ、LLM が会話中に伝えられた詳細を記憶しなくなるため、慎重に使用してください。
 
 
パイプライン
    Powershai のチャットの最も強力な機能の 1 つは、Powershell パイプラインとの統合です。
 
    基本的に、Powershell コマンドの結果をパイプラインで渡すことができ、それがコンテキストとして使用されます。
 
    PowershAI は、オブジェクトをテキストに変換してプロンプトに送信することによって、これを実現します。
 
    その後、チャットのメッセージが追加されます。
 
    たとえば、次のようにします。
 
    Get-Service | ia "Windows で一般的に使用されないサービスについて要約してください"
 
    Powershai のデフォルト設定では、`ia` コマンド(`Send-PowershaiChat` のエイリアス)は、`Get-Service` から返されるすべてのオブジェクトを取得し、1 つの巨大な文字列として書式設定します。
 
    次に、この文字列が LLM のプロンプトに挿入され、LLM に対して、この結果をユーザーのプロンプトの「コンテキスト」として使用するように指示されます。
 
    ユーザーのプロンプトは、その後、その文字列に連結されます。
 
    これにより、強力な効果が生まれます。つまり、Powershell で一般的な操作である単純なパイプラインを使用して、コマンドの出力をプロンプトに簡単に統合できます。
 
    LLM は、通常、この方法を適切に処理します。
 
    デフォルト値があるものの、オブジェクトが送信される方法を完全に制御できます。
 
    最初の制御方法は、オブジェクトがテキストに変換される方法です。プロンプトは文字列であるため、オブジェクトをテキストに変換する必要があります。
 
    デフォルトでは、タイプに応じて、Powershell の標準的な表現に変換されます(`Out-String` コマンドを使用)。
 
    `Set-PowershaiChatContextFormatter` コマンドを使用すると、これを変更できます。たとえば、JSON、テーブル、さらにはカスタムスクリプトを設定して、完全な制御を行うことができます。
 
    コンテキストが送信される方法を制御する別の方法は、チャットの `ContextFormat` パラメーターを使用することです。
 
    このパラメーターは、プロンプトに挿入されるすべてのメッセージを制御します。これは、スクリプトブロックです。
 
    このスクリプトは、送信される書式設定されたオブジェクト、`Send-PowershaiChat` コマンドのパラメーターの値など、さまざまなパラメーターにアクセスできます。
 
    スクリプトのデフォルト値はハードコードされており、送信方法(および独自のスクリプトを実装する方法の例)を確認する必要があります。
 
 
    ツール
    実装された重要な機能の 1 つに、Function Calling(または Tool Calling)のサポートがあります。
 
    これは、多くの LLM で利用できる機能であり、AI は追加のデータを取得するために関数呼び出しを行うかどうかを決定できます。
 
    基本的に、1 つ以上の関数とそのパラメーターを記述し、モデルがその呼び出しを行うかどうかを決定できます。
 
    重要:この機能は、OpenAI と同じ仕様で関数呼び出しを公開するプロバイダーでのみ使用できます
    詳細については、OpenAI の Function Calling に関する公式ドキュメントを参照してください。
    関数呼び出し
    。
モデルは、どの関数をいつ呼び出すか、呼び出しの際にどのパラメーターを使用するかだけを決定します。呼び出しの実行は、クライアント、つまりこの場合は PowershAI によって行われます。
 
    モデルは、関数を実行するための記述、パラメーター、戻り値などを記述した関数の定義を期待しています。
 
    これは通常、OpenAPI Spec のようなもので記述されますが、Powershell には、コメントを使用した強力なヘルプシステムがあり、関数とパラメーターを、さらにデータ型を記述できます。
 
    PowershAI は、このヘルプシステムと統合し、OpenAPI 仕様に変換します。ユーザーは、コメントを使用してドキュメントを作成するなど、通常の方法で関数を作成でき、それがモデルに送信されます。
 
    この機能の簡単なチュートリアルを次に示します。`MinhasFuncoes.ps1` という名前のファイルを作成し、次の内容を記述します。
 
    # ファイル MinhasFuncoes.ps1 を任意のディレクトリに保存します!
     
    <#
        .DESCRIPTION
        現在の時刻をリストします
    #>
    function HoraAtual {
        return Get-Date
    }
     
    <#
        .DESCRIPTION
        ランダムな数値を取得します!
    #>
    function NumeroAleatorio {
        param(
            # 最小値
            $Min = $null,
             
            # 最大値
            $Max = $null
        )
        return Get-Random -Min $Min -Max $Max
    }
 
    関数とパラメーターの説明にコメントを使用していることに注意してください
    。
 
    これは、
    コメントベースのヘルプ
    として知られる、Powershell でサポートされている構文です。
次に、このファイルを PowershAI に追加します。
 
    import-module powershai
     
    Set-AiProvider openai
    Set-OpenaiToken # トークンがまだ設定されていない場合は設定します。
     
     
    # スクリプトをツールとして追加します!
    # スクリプトが C:\tempo\MinhasFuncoes.ps1 に保存されているとします。
    Add-AiTool C:\tempo\MinhasFuncoes.ps1
     
    # ツールが追加されたことを確認します
    Get-AiTool
 
    モデルに現在の時刻を尋ねたり、ランダムな数値を生成するように依頼してみましょう。すると、モデルが関数を呼び出すことが確認できます。これにより、無限の可能性が拓かれ、あなたの想像力が限界となります!
 
    ia "何時ですか?"
 
    上記のコマンドで、モデルは関数を呼び出します。画面に、関数が呼び出されている様子が表示されます!
 
    Powershell コマンドまたはスクリプトをツールとして追加できます。
 
    `Get-Help -Full Add-AiTol` コマンドを使用すると、この強力な機能の詳細を確認できます。
PowershAI は、コマンドの実行と、その応答をモデルに返す処理を自動的に行います。
 
    モデルが複数の関数を同時に実行したり、新しい関数の呼び出しを要求したりした場合でも、PowershAI はこれを自動的に管理します。
 
    ただし、無限ループの実行を防ぐため、PowershAI は実行回数に制限を設けています。
 
    この制限は、`MaxInteractions` パラメーターで制御します。
 
 
    INVOKE-AICHATTOOLS と GET-AICHAT
    これらの 2 つの cmdlet は、Powershai のチャット機能の基盤です。
 
    `Get-AiChat` は、LLM と最も原始的な方法、つまりほぼ HTTP 呼び出しに近い方法で通信できるコマンドです。
 
    これは、基本的に、テキストの生成を可能にする API の標準化されたラッパーです。
 
    パラメーターを指定すると、標準化された応答が返されます。
 
    プロバイダーに関係なく、応答は同じルールに従う必要があります!
`Invoke-AiChatTools` cmdlet は、さらに洗練され、より高レベルです。
 
    この cmdlet では、Powershell 関数をツールとして指定できます。これらの関数は、LLM が理解できる形式に変換されます。
 
    この cmdlet は、Powershell のヘルプシステムを使用して、モデルに送信できるすべてのメタデータを取得します。
 
    `Get-Aichat` コマンドを使用して、データをモデルに送信します。応答を取得すると、ツール呼び出しが行われたかどうかを確認し、ツール呼び出しが行われた場合は、対応する関数を呼び出して応答を返します。
 
    モデルが応答を終了するか、相互作用の最大回数に達するまで、このサイクルが繰り返されます。
 
    1 つの相互作用とは、モデルへの API 呼び出しです。`Invoke-AiChatTools` を関数と共に呼び出すと、モデルに応答を返すまでに複数の呼び出しが必要になる場合があります。
 
    次の図は、このフローを示しています。
 
    sequenceDiagram
            Invoke-AiChatTools->>modelo:prompt (INTERAÇ O 1)
            modelo->>Invoke-AiChatTools:(response, 3 function call)
            Invoke-AiChatTools-->Invoke-AiChatTools:Call Tool 1
            Invoke-AiChatTools-->Invoke-AiChatTools:Call Tool 2
            Invoke-AiChatTools-->Invoke-AiChatTools:Call Tool 3
            Invoke-AiChatTools->>modelo:Resultado tool call + prompts anteriores prompt (INTERAÇ O 2)
            modelo->>Invoke-AiChatTools:resposta final
 
    コマンドの変換と呼び出し方法
    `Invoke-AiChatTools` コマンドは、`-Functions` パラメーターに、OpenAPI スキーマにマッピングされた Powershell コマンドのリストを期待しています。
 
    このコマンドは、`OpenaiTool` というオブジェクトを期待しており、次のプロパティが含まれています。(`OpenaiTool` という名前は、OpenAI と同じツール呼び出し形式を使用しているためです)
- tools
 
    このプロパティには、LLM に送信される関数呼び出しのスキーマが含まれています(この情報を期待するパラメーターで)。
 
    - map
 
    これは、実行する Powershell コマンド(関数、エイリアス、コマンドレット、exe など)を返すメソッドです。
 
    このメソッドは、`func` というプロパティを持つオブジェクトを返す必要があります。このプロパティは、関数、実行可能なコマンド、またはスクリプトブロックの名前でなければなりません。
 
    このメソッドは、最初の引数にツールの名前、2 番目の引数に `OpenaiTool` オブジェクト自体(`this` のように)を受け取ります。
    これらのプロパティに加えて、`OpenaiTool` オブジェクトには、その他のプロパティを追加できます。これにより、スクリプトマップは、必要に応じて外部データにアクセスできます。
 
    LLM から関数呼び出しの要求が返されると、呼び出される関数の名前が `map` メソッドに渡され、実行するコマンドを返す必要があります。 これにより、実行時に名前から実行するコマンドを決定できるなど、さまざまな可能性が拓かれます。
 
    このメカニズムにより、ユーザーは LLM のツール呼び出しに対してどのように応答するかを完全に制御でき、柔軟性も向上します。
 
    次に、コマンドが呼び出され、モデルから送信されたパラメーターと値がバインドされた引数として渡されます。
 
    つまり、コマンドまたはスクリプトは、パラメーターを受け取るか(または名前から動的に識別する)ことができる必要があります。
 
これらはすべて、LLM から返された各ツール呼び出しを順番に処理するループで行われます。
 
    ツールが実行される順序は保証されないため、LLM がツールを順番に送信しない限り、順序を前提としてはいけません。
 
    つまり、将来の機能では、複数のツール呼び出しを同時に、並行して(たとえば、ジョブで)実行できるようになります。
 
    内部的には、PowershAI は、`Add-AiTool` を使用して追加されたコマンドのデフォルトのスクリプトマップを作成します。
    この形式を返す関数の使用方法の例については、`openai.ps1` プロバイダーの `Get-OpenaiTool*` で始まるコマンドを確認してください。
    このツール呼び出し機能は、OpenAI と同じ仕様(入力と出力の両方)に従ってツール呼び出しをサポートするモデルでのみ機能します。
 
    ツール使用に関する重要な注意点
    関数呼び出し機能は、コードを実行できるため強力ですが、非常に危険です。
 
    そのため、実装して実行する内容には、最大限の注意を払ってください。 PowershAI は、モデルが要求したとおりに実行することに注意してください。
    セキュリティに関するいくつかのヒントを次に示します。
    - 管理者権限を持つユーザーでスクリプトを実行しないでください。
    - 重要なデータを削除したり変更したりするコードを実装しないでください。
    - 関数を事前にテストしてください。
    - 知らない、または信頼できないサードパーティ製のモジュールやスクリプトを含めないでください。
 
    現在の機能では、関数は同じセッションで、ログインしたユーザーと同じ資格情報を使用して実行されます。
 
    つまり、たとえば、モデルが(意図的または誤って)危険なコマンドを実行するように指示した場合、データやコンピューターが破損したり、侵害される可能性があります。
 
    そのため、この警告を心に留めておいてください。最大限の注意を払い、完全に信頼できるスクリプトのみをツールとして追加してください。
 
    今後、別のランスペースで隔離したり、権限が低い別のプロセスを開いたり、ユーザーが設定できるオプションを追加するなど、セキュリティを強化するためのメカニズムを導入する予定です。