Utilisez ce SDK pour créer des applications basées sur Watson dans Unity.
À partir de cette version majeure, 6.0.0, l'API Tone Analyzer a été supprimée en vue de sa dépréciation. Si vous souhaitez continuer à utiliser ce SDK pour effectuer des appels à Tone Analyzer jusqu'à sa dépréciation définitive, vous devrez utiliser une version précédente. Le 24 février 2022, IBM a annoncé l'abandon du service Tone Analyzer. Le service ne sera plus disponible à partir du 24 février 2023. À partir du 24 février 2022, vous ne pourrez plus créer de nouvelles instances. Les instances existantes seront prises en charge jusqu'au 24 février 2023.
Comme alternative, nous vous encourageons à envisager de migrer vers le service Natural Language Understanding sur IBM Cloud. Avec Natural Language Understanding, l’analyse des tons est effectuée à l’aide d’un modèle de classification prédéfini, qui fournit un moyen simple de détecter les tons du langage dans un texte écrit. Pour plus d'informations, consultez Migration du point de terminaison Watson Tone Analyser Customer Engagement vers Natural Language Understanding.
Depuis cette version majeure, 6.0.0, l'API NLC a été supprimée en vue de sa dépréciation. Si vous souhaitez continuer à utiliser ce sdk pour effectuer des appels vers NLC jusqu'à sa dépréciation définitive, vous devrez utiliser une version précédente. Le 9 août 2021, IBM a annoncé l'abandon du service Natural Language Classifier. Le service ne sera plus disponible à partir du 8 août 2022. À partir du 9 septembre 2021, vous ne pourrez plus créer de nouvelles instances. Les instances existantes seront prises en charge jusqu'au 8 août 2022. Toute instance qui existe encore à cette date sera supprimée.
Comme alternative, nous vous encourageons à envisager de migrer vers le service Natural Language Understanding sur IBM Cloud qui utilise l'apprentissage profond pour extraire des données et des informations à partir de texte, telles que des mots clés, des catégories, des sentiments, des émotions et de la syntaxe, ainsi que du texte multi-étiquettes avancé. capacités de classification, pour fournir des informations encore plus riches sur votre entreprise ou votre secteur. Pour plus d’informations, consultez Migration vers Natural Language Understanding.
Les URL des points de terminaison de l'API Watson sur watsonplatform.net changent et ne fonctionneront plus après le 26 mai 2021. Mettez à jour vos appels pour utiliser les URL de point de terminaison les plus récentes. Pour plus d'informations, voir https://cloud.ibm.com/docs/watson?topic=watson-endpoint-change.
Assurez-vous que vous disposez des conditions préalables suivantes :
La mise à jour de MacOS vers Mojave peut désactiver le microphone pour Unity. Si vous rencontrez ce problème, veuillez consulter ces instructions pour configurer le microphone pour Mojave.
Vous pouvez obtenir la dernière version du SDK en cliquant ici. Vous devrez également télécharger la dernière version d'IBM Unity SDK Core en cliquant ici.
Déplacez les répertoires unity-sdk
et unity-sdk-core
dans le répertoire Assets
de votre projet Unity. Facultatif : renommez le répertoire SDK de unity-sdk
en Watson
et le répertoire Core de unity-sdk-core
en IBMSdkCore
.
Pour créer des instances de services Watson et leurs informations d'identification, suivez les étapes ci-dessous.
Remarque : Les informations d'identification du service sont différentes du nom d'utilisateur et du mot de passe de votre compte IBM Cloud.
Les informations d'identification de chaque service contiennent soit un username
, password
et url
de point de terminaison , soit une apikey
et une url
de point de terminaison.
AVERTISSEMENT : Vous êtes responsable de la sécurisation de vos propres informations d'identification. Tout utilisateur disposant de vos informations d'identification de service peut accéder à vos instances de service !
Pour démarrer avec un service Watson dans Unity, suivez le lien pour voir le code.
Les services Watson migrent vers l'authentification IAM (Identity and Access Management) basée sur des jetons.
Pour savoir quelle authentification utiliser, consultez les informations d'identification du service. Vous trouvez les informations d'identification du service pour l'authentification de la même manière pour tous les services Watson :
url
et soit apikey
, soit username
et password
.Dans votre code, vous pouvez utiliser ces valeurs dans le constructeur de service ou avec un appel de méthode après avoir instancié votre service.
Certains services utilisent l'authentification IAM (Identity and Access Management) basée sur des jetons. L'authentification IAM utilise une clé API de service pour obtenir un jeton d'accès transmis avec l'appel. Les jetons d'accès sont valables environ une heure et doivent être régénérés.
Vous fournissez soit une clé API du service IAM, soit un jeton d'accès :
HasIamTokenData()
renvoie 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>" ) ;
}
Il existe deux manières de fournir l'authentifiant que vous avez trouvé ci-dessus au SDK pour l'authentification.
Avec un fichier d'informations d'identification, il vous suffit de placer le fichier au bon endroit et le SDK se chargera de l'analyser et de l'authentifier. Vous pouvez obtenir ce fichier en cliquant sur le bouton Télécharger pour les informations d'identification dans l'onglet Gérer de votre instance de service.
Le fichier téléchargé s'appellera ibm-credentials.env
. Il s'agit du nom que le SDK recherchera et doit être conservé, sauf si vous souhaitez configurer le chemin du fichier (nous y reviendrons plus tard). Le SDK recherchera votre fichier ibm-credentials.env
aux emplacements suivants (dans l'ordre) :
Tant que vous le configurez correctement, vous n'avez pas à vous soucier de définir des options d'authentification dans votre code. Ainsi, par exemple, si vous avez créé et téléchargé le fichier d'informations d'identification pour votre instance Discovery, il vous suffit de procéder comme suit :
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 ( ) ;
}
Et c'est tout !
Si vous utilisez plusieurs services à la fois dans votre code et obtenez deux fichiers ibm-credentials.env
différents, rassemblez simplement le contenu dans un fichier ibm-credentials.env
et le SDK se chargera d'attribuer l'authentificateur à leurs services appropriés. .
Si vous souhaitez configurer l'emplacement/le nom de votre fichier d'informations d'identification, vous pouvez définir une variable d'environnement appelée IBM_CREDENTIALS_FILE
. Celui-ci prévaudra sur les emplacements précisés ci-dessus. Voici comment procéder :
export IBM_CREDENTIALS_FILE= " <path> "
où <path>
est quelque chose comme /home/user/Downloads/<file_name>.env
.
Si vous préférez définir manuellement les valeurs d'authentification dans votre code, le SDK le prend également en charge. La façon dont vous procéderez dépend du type d’authentificateur que votre instance de service vous fournit.
Un rappel de réussite est requis. Vous pouvez spécifier le type de retour dans le rappel.
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 ) ;
}
Étant donné que la signature de rappel de réussite est générique et que le rappel d’échec a toujours la même signature, vous pouvez utiliser un seul ensemble de rappels pour gérer plusieurs appels.
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 ) ;
}
Vous pouvez également utiliser un rappel anonyme
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>" ) ;
}
Vous pouvez vérifier la réponse error
pour voir s'il y a eu une erreur dans l'appel.
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 ) ;
}
}
Vous pouvez envoyer des en-têtes de requête personnalisés en les ajoutant au service.
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 ) ;
}
Vous pouvez obtenir des en-têtes de réponse dans l’objet headers
de la réponse détaillée.
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 ) ;
}
}
Chaque appel du SDK renvoie une réponse avec un ID de transaction dans l'en-tête X-Global-Transaction-Id
. Ensemble avec la région de l'instance de service, cet ID aide les équipes d'assistance à résoudre les problèmes à partir des journaux pertinents.
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" ] ) ;
}
}
) ;
}
Toutefois, l'ID de transaction n'est pas disponible lorsque l'API ne renvoie pas de réponse pour une raison quelconque. Dans ce cas, vous pouvez définir votre propre identifiant de transaction dans la demande. Par exemple, remplacez <my-unique-transaction-id>
dans l'exemple suivant par un ID de transaction unique.
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" ] ) ;
}
}
) ;
}
Les services Watson ont mis à niveau leurs hôtes vers TLS 1.2. L'emplacement de Dallas dispose d'un point de terminaison TLS 1.0 qui fonctionne pour le streaming. Pour diffuser dans d'autres régions, utilisez Unity 2018.2 et définissez la version de Scripting Runtime dans les paramètres de build sur .NET 4.x equivalent
Pour prendre en charge Speech to Text dans les versions antérieures d'Unity, créez l'instance à l'emplacement de Dallas.
Vous pouvez désactiver la vérification SSL lors d'un appel de service.
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 ;
}
Si votre instance de service est ICP4D, vous trouverez ci-dessous deux manières d'initialiser le service assistant.
username
, password
, icp4d_url
et authentication_type
Le SDK gérera le token pour l'utilisateur
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 ) ;
Le SDK Watson Unity ne prend pas en charge IBM Cloud Private car la connexion via proxy n'est pas prise en charge dans UnityWebRequest.
La documentation peut être trouvée ici. Vous pouvez également accéder à la documentation en sélectionnant API Reference dans le menu Watson ( Watson -> API Reference ).
Vous pouvez visionner des vidéos de mise en route pour IBM Watson SDK for Unity sur YouTube.
Si vous rencontrez des problèmes avec les API ou si vous avez une question sur les services Watson, consultez Stack Overflow.
Trouvez d'autres projets open source sur la page IBM Github.
Cette bibliothèque est sous licence Apache 2.0. Le texte complet de la licence est disponible dans LICENCE.
Voir CONTRIBUTION.md.
Nous serions ravis de mettre en avant des projets open source sympas qui utilisent ce SDK ! Si vous souhaitez que votre projet soit ajouté à la liste, n'hésitez pas à créer un problème en nous y liant.