この SDK を使用して、Unity で Watson を利用したアプリケーションを構築します。
このメジャー リリース 6.0.0 では、非推奨に備えて Tone Analyzer API が削除されました。最終的に非推奨になるまで、この SDK を使用して Tone Analyzer を呼び出し続ける場合は、以前のバージョンを使用する必要があります。 2022 年 2 月 24 日、IBM は Tone Analyzer サービスの廃止を発表しました。このサービスは、2023 年 2 月 24 日をもって利用できなくなります。2022 年 2 月 24 日の時点で、新しいインスタンスを作成することはできなくなります。既存のインスタンスは 2023 年 2 月 24 日までサポートされます。
代替案として、IBM Cloud 上の Natural Language Understanding サービスへの移行を検討することをお勧めします。 Natural Language Understanding では、事前に構築された分類モデルを使用してトーン分析が行われ、書かれたテキスト内の言語トーンを簡単に検出する方法が提供されます。詳しくは、Watson Tone Analyzer Customer Engagement エンドポイントから Natural Language Understanding への移行を参照してください。
このメジャー リリース 6.0.0 では、非推奨に備えて NLC API が削除されました。最終的に非推奨になるまで、この SDK を使用して NLC を呼び出し続ける場合は、以前のバージョンを使用する必要があります。 2021 年 8 月 9 日、IBM は Natural Language Classifier サービスの廃止を発表しました。このサービスは 2022 年 8 月 8 日から利用できなくなります。2021 年 9 月 9 日の時点で、新しいインスタンスを作成することはできません。既存のインスタンスは 2022 年 8 月 8 日までサポートされます。その日付にまだ存在するインスタンスは削除されます。
代替案として、深層学習を使用してキーワード、カテゴリー、センチメント、感情、構文などのテキストや高度なマルチラベル テキストからデータと洞察を抽出する IBM Cloud 上の Natural Language Understanding サービスへの移行を検討することをお勧めします。分類機能を使用して、ビジネスや業界に対してさらに豊富な洞察を提供します。詳細については、「自然言語理解への移行」を参照してください。
watsonplatform.net の Watson API エンドポイント URL は変更されており、2021 年 5 月 26 日以降は機能しなくなります。新しいエンドポイント URL を使用するように呼び出しを更新してください。詳細については、https://cloud.ibm.com/docs/watson?topic=watson-endpoint-change を参照してください。
次の前提条件を満たしていることを確認してください。
MacOS を Mojave にアップデートすると、Unity のマイクが無効になる場合があります。この問題が発生した場合は、これらのガイドラインを参照して Mojave 用にマイクを設定してください。
ここをクリックすると、最新の SDK リリースを入手できます。ここをクリックして、IBM Unity SDK Core の最新リリースをダウンロードする必要もあります。
unity-sdk
ディレクトリとunity-sdk-core
ディレクトリを Unity プロジェクトのAssets
ディレクトリに移動します。オプション: SDK ディレクトリの名前をunity-sdk
からWatson
に変更し、Coreディレクトリの名前をunity-sdk-core
からIBMSdkCore
に変更します。
Watson サービスのインスタンスとその資格情報を作成するには、以下の手順に従います。
注:サービス資格情報は、IBM Cloud アカウントのユーザー名およびパスワードとは異なります。
各サービスの認証情報には、 username
、 password
、エンドポイントurl
、またはapikey
とエンドポイントurl
のいずれかが含まれます。
警告:自分の資格情報を保護するのはあなた自身の責任です。サービス資格情報を持つユーザーは誰でもサービス インスタンスにアクセスできます。
Unity で Watson サービスを開始するには、リンクをクリックしてコードを確認してください。
Watson サービスは、トークンベースの Identity and Access Management (IAM) 認証に移行しています。
使用する認証を確認するには、サービス資格情報を表示します。認証用のサービス資格情報は、すべての Watson サービスについて同じ方法で検索できます。
url
とapikey
またはusername
とpassword
をコピーします。コードでは、サービス コンストラクター内で、またはサービスをインスタンス化した後のメソッド呼び出しでこれらの値を使用できます。
一部のサービスは、トークンベースの Identity and Access Management (IAM) 認証を使用します。 IAM 認証では、サービス API キーを使用して、呼び出しとともに渡されるアクセス トークンを取得します。アクセス トークンは約 1 時間有効であり、再生成する必要があります。
IAM サービスAPI キーまたはアクセス トークンのいずれかを指定します。
HasIamTokenData()
true
を返すまで処理を続けます。 Authenticator authenticator ;
AssistantService assistant ;
string versionDate = "<service-version-date>" ;
IEnumerator TokenExample ( )
{
// Create authenticator using the IAM token options
authenticator = new IamAuthenticator ( apikey : "<iam-api-key>" ) ;
while ( ! authenticator . CanAuthenticate ( ) )
yield return null ;
assistant = new AssistantService ( versionDate , authenticator ) ;
assistant . SetServiceUrl ( "<service-url>" ) ;
assistant . ListWorkspaces ( callback : OnListWorkspaces ) ;
}
private void OnListWorkspaces ( DetailedResponse < WorkspaceCollection > response , IBMError error )
{
Log . Debug ( "OnListWorkspaces()" , "Response: {0}" , response . Response ) ;
}
Authenticator authenticator ;
AssistantService assistant ;
string versionDate = "<service-version-date>" ;
void TokenExample ( )
{
// Create authenticator using the Bearer Token
authenticator = new BearerTokenAuthenticator ( "<bearer-token>" ) ;
assistant = new AssistantService ( versionDate , authenticator ) ;
assistant . SetServiceUrl ( "<service-url>" ) ;
assistant . ListWorkspaces ( callback : OnListWorkspaces ) ;
}
private void OnListWorkspaces ( DetailedResponse < WorkspaceCollection > response , IBMError error )
{
Log . Debug ( "OnListWorkspaces()" , "Response: {0}" , response . Response ) ;
}
Authenticator authenticator ;
AssistantService assistant ;
string versionDate = "<service-version-date>" ;
void UsernamePasswordExample ( )
{
Authenticator authenticator = new BasicAuthenticator ( "<username>" , "<password>" , "<url>" ) ;
assistant = new AssistantService ( versionDate , authenticator ) ;
assistant . SetServiceUrl ( "<service-url>" ) ;
}
上で見つけたオーセンティケータを認証のために SDK に提供するには 2 つの方法があります。
認証情報ファイルを使用する場合、ファイルを適切な場所に置くだけで、SDK がそのファイルを解析して認証する作業を実行します。このファイルは、サービス インスタンスの[管理]タブにある認証情報の [ダウンロード]ボタンをクリックすると取得できます。
ダウンロードされるファイルの名前はibm-credentials.env
です。これは SDK が検索する名前であり、ファイル パスを設定する場合を除き、保存する必要があります(詳細は後ほど)。 SDK は、次の場所でibm-credentials.env
ファイルを (順番に) 検索します。
これを正しく設定している限り、コード内での認証オプションの設定について心配する必要はありません。したがって、たとえば、Discovery インスタンスの認証情報ファイルを作成してダウンロードした場合は、次の操作を行うだけで済みます。
public IEnumerator ExampleAutoService ( )
{
Assistant assistantService = new Assistant ( "2019-04-03" ) ;
// Wait for authorization token
while ( ! assistantService . Authenticator . CanAuthenticate ( ) )
yield return null ;
var listWorkspacesResult = assistantService . ListWorkspaces ( ) ;
}
それで終わりです!
コード内で一度に複数のサービスを使用しており、2 つの異なるibm-credentials.env
ファイルを取得する場合は、内容を 1 つのibm-credentials.env
ファイルにまとめるだけで、SDK が認証子の適切なサービスへの割り当てを処理します。 。
資格情報ファイルの場所/名前を構成したい場合は、 IBM_CREDENTIALS_FILE
という環境変数を設定できます。これは、上で指定した場所よりも優先されます。その方法は次のとおりです。
export IBM_CREDENTIALS_FILE= " <path> "
ここで、 <path>
は/home/user/Downloads/<file_name>.env
のようなものです。
コード内で認証値を手動で設定したい場合、SDK はそれもサポートしています。これを行う方法は、サービス インスタンスが提供する認証子の種類によって異なります。
成功コールバックが必要です。コールバックで戻り値の型を指定できます。
AssistantService assistant ;
string assistantVersionDate = "<assistant-version-date>" ;
Authenticator assistantAuthenticator ;
string workspaceId = "<workspaceId>" ;
DiscoveryService discovery ;
string discoveryVersionDate = "<discovery-version-date>" ;
Authenticator discoveryAuthenticator ;
private void Example ( )
{
assistant = new AssistantService ( assistantVersionDate , assistantAuthenticator ) ;
assistant . SetServiceUrl ( "<service-url>" ) ;
discovery = new DiscoveryService ( discoveryVersionDate , discoveryAuthenticator ) ;
discovery . SetServiceUrl ( "<service-url>" ) ;
// Call with sepcific callbacks
assistant . Message (
callback : OnMessage ,
workspaceId : workspaceId
) ;
discovery . ListEnvironments (
callback : OnGetEnvironments
) ;
}
private void OnMessage ( DetailedResponse < MessageResponse > response , IBMError error )
{
Log . Debug ( "ExampleCallback.OnMessage()" , "Response received: {0}" , response . Response ) ;
}
private void OnGetEnvironments ( DetailedResponse < ListEnvironmentsResponse > response , IBMError error )
{
Log . Debug ( "ExampleCallback.OnGetEnvironments()" , "Response received: {0}" , response . Response ) ;
}
成功のコールバック署名は汎用であり、失敗のコールバックは常に同じ署名を持つため、単一セットのコールバックを使用して複数の呼び出しを処理できます。
AssistantService assistant ;
string assistantVersionDate = "<assistant-version-date>" ;
Authenticator assistantAuthenticator ;
string workspaceId = "<workspaceId>" ;
DiscoveryService discovery ;
string discoveryVersionDate = "<discovery-version-date>" ;
Authenticator discoveryAuthenticator ;
private void Example ( )
{
assistant = new AssistantService ( assistantVersionDate , assistantAuthenticator ) ;
assistant . SetServiceUrl ( "<service-url>" ) ;
// Call with generic callbacks
JObject input = new JObject ( ) ;
input . Add ( "text" , "" ) ;
assistant . Message (
callback : OnSuccess ,
workspaceId : workspaceId ,
input : input
) ;
discovery = new DiscoveryService ( discoveryVersionDate , discoveryAuthenticator ) ;
discovery . SetServiceUrl ( "<service-url>" ) ;
discovery . ListEnvironments (
callback : OnSuccess
) ;
}
// Generic success callback
private void OnSuccess < T > ( DetailedResponse < T > resp , IBMError error )
{
Log . Debug ( "ExampleCallback.OnSuccess()" , "Response received: {0}" , resp . Response ) ;
}
匿名コールバックを使用することもできます
AssistantService assistant ;
string assistantVersionDate = "<assistant-version-date>" ;
Authenticator assistantAuthenticator ;
string workspaceId = "<workspaceId>" ;
private void Example ( )
{
assistant = new AssistantService ( assistantVersionDate , assistantAuthenticator ) ;
assistant . ListWorkspaces (
callback : ( DetailedResponse < WorkspaceCollection > response , IBMError error ) =>
{
Log . Debug ( "ExampleCallback.OnSuccess()" , "ListWorkspaces result: {0}" , response . Response ) ;
} ,
pageLimit : 1 ,
includeCount : true ,
sort : "-name" ,
includeAudit : true
) ;
assistant . SetServiceUrl ( "<service-url>" ) ;
}
error
応答をチェックして、呼び出しにエラーがあったかどうかを確認できます。
AssistantService assistant ;
string assistantVersionDate = "<assistant-version-date>" ;
Authenticator assistantAuthenticator ;
string workspaceId = "<workspaceId>" ;
private void Example ( )
{
assistant = new AssistantService ( versionDate , authenticator ) ;
assistant . Message ( OnMessage , workspaceId ) ;
}
private void OnMessage ( DetailedResponse < MessageResponse > response , IBMError error )
{
if ( error == null )
{
Log . Debug ( "ExampleCallback.OnMessage()" , "Response received: {0}" , response . Response ) ;
}
else
{
Log . Debug ( "ExampleCallback.OnMessage()" , "Error received: {0}, {1}, {3}" , error . StatusCode , error . ErrorMessage , error . Response ) ;
}
}
カスタム リクエスト ヘッダーをサービスに追加することで、送信できます。
AssistantService assistant ;
string assistantVersionDate = "<assistant-version-date>" ;
Authenticator assistantAuthenticator ;
string workspaceId = "<workspaceId>" ;
void Example ( )
{
assistant = new AssistantService ( assistantVersionDate , assistantAuthenticator ) ;
// Add custom header to the REST call
assistant . WithHeader ( "X-Watson-Metadata" , "customer_id=some-assistant-customer-id" ) ;
assistant . Message ( OnSuccess , "<workspace-id>" ) ;
}
private void OnSuccess ( DetailedResponse < MessageResponse > response , IBMError error )
{
Log . Debug ( "ExampleCallback.OnMessage()" , "Response received: {0}" , response . Response ) ;
}
応答ヘッダーは、DetailedResponse のheaders
オブジェクトで取得できます。
AssistantService assistant ;
string assistantVersionDate = "<assistant-version-date>" ;
Authenticator assistantAuthenticator ;
string workspaceId = "<workspaceId>" ;
void Example ( )
{
assistant = new AssistantService ( assistantVersionDate , assistantAuthenticator ) ;
assistant . Message ( OnMessage , "<workspace-id>" ) ;
}
private void OnMessage ( DetailedResponse < MessageResponse > response , IBMError error )
{
// List all headers in the response headers object
foreach ( KeyValuePair < string , object > kvp in response . Headers )
{
Log . Debug ( "ExampleCustomHeader.OnMessage()" , "{0}: {1}" , kvp . Key , kvp . Value ) ;
}
}
すべての SDK 呼び出しは、 X-Global-Transaction-Id
ヘッダーにトランザクション ID を含む応答を返します。サービス インスタンス リージョンと合わせて、この ID は、サポート チームが関連ログから問題をトラブルシューティングするのに役立ちます。
public void ExampleGetTransactionId ( )
{
AssistantService service = new AssistantService ( "{version-date}" ) ;
service . ListWorkspaces (
callback : ( DetailedResponse < Workspace > response , IBMError error ) =>
{
if ( error != null )
{
Log . Debug ( "AssistantServiceV1" , "Transaction Id: {0}" , error . ResponseHeaders [ "X-Global-Transaction-Id" ] ) ;
}
else
{
Log . Debug ( "AssistantServiceV1" , "Transaction Id: {0}" , response . Headers [ "X-Global-Transaction-Id" ] ) ;
}
}
) ;
}
ただし、何らかの理由で API が応答を返さない場合、トランザクション ID は使用できません。その場合、リクエストに独自のトランザクション ID を設定できます。たとえば、次の例の<my-unique-transaction-id>
一意のトランザクション ID に置き換えます。
public void ExampleSetTransactionId ( )
{
AssistantService service = new AssistantService ( "{version-date}" ) ;
service . WithHeader ( "X-Global-Transaction-Id" , "<my-unique-transaction-id>" ) ;
service . ListWorkspaces (
callback : ( DetailedResponse < Workspace > response , IBMError error ) =>
{
if ( error != null )
{
Log . Debug ( "AssistantServiceV1" , "Transaction Id: {0}" , error . ResponseHeaders [ "X-Global-Transaction-Id" ] ) ;
}
else
{
Log . Debug ( "AssistantServiceV1" , "Transaction Id: {0}" , response . Headers [ "X-Global-Transaction-Id" ] ) ;
}
}
) ;
}
Watson サービスはホストを TLS 1.2 にアップグレードしました。ダラスのロケーションには、ストリーミングに機能する TLS 1.0 エンドポイントがあります。他のリージョンでストリーミングするには、Unity 2018.2 を使用し、ビルド設定のスクリプト ランタイム バージョンを.NET 4.x equivalent
に設定します。 Unity の以前のバージョンで Speech to Text をサポートするには、ダラスの場所にインスタンスを作成します。
サービス呼び出しを行うときに SSL 検証を無効にすることができます。
AssistantService assistant ;
string assistantVersionDate = "<assistant-version-date>" ;
Authenticator assistantAuthenticator ;
string workspaceId = "<workspaceId>" ;
void Example ( )
{
authenticator . DisableSslVerification = true ;
assistant = new AssistantService ( assistantVersionDate , assistantAuthenticator ) ;
// disable ssl verification
assistant . DisableSslVerification = true ;
}
サービス インスタンスが ICP4D の場合、アシスタント サービスを初期化する 2 つの方法を以下に示します。
username
、 password
、 icp4d_url
、 authentication_type
を指定します。SDK はユーザーのトークンを管理します
CloudPakForDataAuthenticator authenticator = new CloudPakForDataAuthenticator ( "<url>" , "<username>" , "<password>" ) ;
while ( ! authenticator . CanAuthenticate ( ) )
{
yield return null ;
}
service = new AssistantService ( versionDate , authenticator ) ;
BearerTokenAuthenticator = new BearerTokenAuthenticator ( "<accessToken>" ) ;
while ( ! authenticator . CanAuthenticate ( ) )
{
yield return null ;
}
service = new AssistantService ( versionDate , authenticator ) ;
UnityWebRequest ではプロキシ経由の接続がサポートされていないため、Watson Unity SDK は IBM Cloud Private をサポートしていません。
ドキュメントはここで見つけることができます。 Watson メニューの API リファレンス ( Watson -> API リファレンス) を選択してドキュメントにアクセスすることもできます。
IBM Watson SDK for Unity の入門ビデオを YouTube でご覧いただけます。
API に問題がある場合、または Watson サービスについて質問がある場合は、「スタック オーバーフロー」を参照してください。
IBM Github ページでさらにオープンソース プロジェクトを見つけてください。
このライブラリは、Apache 2.0 に基づいてライセンスされています。ライセンスの完全なテキストは LICENSE で入手できます。
CONTRIBUTING.md を参照してください。
この SDK を使用するクールなオープンソース プロジェクトをぜひご紹介したいと思います。あなたのプロジェクトをリストに追加したい場合は、お気軽にプロジェクトへのリンクを作成してください。