Verwenden Sie dieses SDK, um Watson-basierte Anwendungen in Unity zu erstellen.
Ab dieser Hauptversion, 6.0.0, wurde die Tone Analyzer-API als Vorbereitung für die Einstellung entfernt. Wenn Sie dieses SDK weiterhin für Aufrufe von Tone Analyzer verwenden möchten, bis es endgültig eingestellt wird, müssen Sie eine frühere Version verwenden. Am 24. Februar 2022 gab IBM die Einstellung des Tone Analyzer-Dienstes bekannt. Der Dienst wird ab dem 24. Februar 2023 nicht mehr verfügbar sein. Ab dem 24. Februar 2022 können Sie keine neuen Instanzen mehr erstellen. Bestehende Instanzen werden bis zum 24. Februar 2023 unterstützt.
Als Alternative empfehlen wir Ihnen, eine Migration zum Natural Language Understanding-Service in der IBM Cloud in Betracht zu ziehen. Beim Natural Language Understanding erfolgt die Tonanalyse mithilfe eines vorgefertigten Klassifizierungsmodells, das eine einfache Möglichkeit bietet, Sprachtöne in geschriebenem Text zu erkennen. Weitere Informationen finden Sie unter Migration vom Watson Tone Analyzer Customer Engagement-Endpunkt zu Natural Language Understanding.
Ab dieser Hauptversion, 6.0.0, wurde die NLC-API als Vorbereitung für die Einstellung entfernt. Wenn Sie dieses SDK bis zu seiner endgültigen Einstellung weiterhin für Aufrufe an NLC verwenden möchten, müssen Sie eine frühere Version verwenden. Am 9. August 2021 gab IBM die Einstellung des Natural Language Classifier-Dienstes bekannt. Der Dienst wird ab dem 8. August 2022 nicht mehr verfügbar sein. Ab dem 9. September 2021 können Sie keine neuen Instanzen mehr erstellen. Bestehende Instanzen werden bis zum 8. August 2022 unterstützt. Alle zu diesem Datum noch vorhandenen Instanzen werden gelöscht.
Als Alternative empfehlen wir Ihnen, die Migration zum Natural Language Understanding-Service in der IBM Cloud in Betracht zu ziehen, der Deep Learning nutzt, um Daten und Erkenntnisse aus Texten wie Schlüsselwörtern, Kategorien, Stimmungen, Emotionen und Syntax sowie erweitertem Text mit mehreren Bezeichnungen zu extrahieren Klassifizierungsfunktionen, um noch umfassendere Erkenntnisse für Ihr Unternehmen oder Ihre Branche bereitzustellen. Weitere Informationen finden Sie unter Migration zum Natural Language Understanding.
Die Endpunkt-URLs der Watson-API auf watsonplatform.net ändern sich und funktionieren nach dem 26. Mai 2021 nicht mehr. Aktualisieren Sie Ihre Aufrufe, um die neueren Endpunkt-URLs zu verwenden. Weitere Informationen finden Sie unter https://cloud.ibm.com/docs/watson?topic=watson-endpoint-change.
Stellen Sie sicher, dass Sie die folgenden Voraussetzungen erfüllen:
Beim Aktualisieren von MacOS auf Mojave wird möglicherweise das Mikrofon für Unity deaktiviert. Wenn dieses Problem bei Ihnen auftritt, lesen Sie bitte diese Richtlinien zur Konfiguration des Mikrofons für Mojave.
Sie können die neueste SDK-Version erhalten, indem Sie hier klicken. Sie müssen außerdem die neueste Version des IBM Unity SDK Core herunterladen, indem Sie hier klicken.
Verschieben Sie die Verzeichnisse unity-sdk
und unity-sdk-core
in das Assets
-Verzeichnis Ihres Unity-Projekts. Optional: Benennen Sie das SDK-Verzeichnis von unity-sdk
in Watson
und das Core-Verzeichnis von unity-sdk-core
in IBMSdkCore
um .
Führen Sie die folgenden Schritte aus, um Instanzen von Watson-Diensten und deren Anmeldeinformationen zu erstellen.
Hinweis: Die Serviceanmeldeinformationen unterscheiden sich vom Benutzernamen und Kennwort Ihres IBM Cloud-Kontos.
Die Anmeldeinformationen für jeden Dienst enthalten entweder einen username
, password
und eine Endpunkt url
oder einen apikey
und eine Endpunkt url
.
WARNUNG: Sie sind für die Sicherung Ihrer Anmeldeinformationen selbst verantwortlich. Jeder Benutzer mit Ihren Service-Anmeldeinformationen kann auf Ihre Service-Instanzen zugreifen!
Um mit einem Watson-Service in Unity zu beginnen, folgen Sie dem Link, um den Code anzuzeigen.
Watson-Dienste migrieren zur tokenbasierten Identity and Access Management (IAM)-Authentifizierung.
Um herauszufinden, welche Authentifizierung verwendet werden soll, sehen Sie sich die Dienstanmeldeinformationen an. Die Service-Anmeldeinformationen zur Authentifizierung finden Sie für alle Watson-Services auf die gleiche Weise:
url
und entweder apikey
oder username
und password
.In Ihrem Code können Sie diese Werte im Dienstkonstruktor oder mit einem Methodenaufruf nach der Instanziierung Ihres Dienstes verwenden.
Einige Dienste verwenden eine tokenbasierte IAM-Authentifizierung (Identity and Access Management). Die IAM-Authentifizierung verwendet einen Service-API-Schlüssel, um ein Zugriffstoken zu erhalten, das mit dem Aufruf übergeben wird. Zugriffstoken sind etwa eine Stunde lang gültig und müssen neu generiert werden.
Sie geben entweder einen IAM-Service- API-Schlüssel oder ein Zugriffstoken an:
HasIamTokenData()
true
zurückgibt. 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>" ) ;
}
Es gibt zwei Möglichkeiten, den oben gefundenen Authentifikator dem SDK zur Authentifizierung bereitzustellen.
Bei einer Anmeldeinformationsdatei müssen Sie die Datei nur an der richtigen Stelle ablegen und das SDK übernimmt die Arbeit des Parsens und der Authentifizierung. Sie können diese Datei erhalten, indem Sie auf der Registerkarte „Verwalten“ Ihrer Dienstinstanz auf die Schaltfläche „Herunterladen “ für die Anmeldeinformationen klicken.
Die heruntergeladene Datei heißt ibm-credentials.env
. Dies ist der Name, nach dem das SDK sucht und der beibehalten werden muss , es sei denn, Sie möchten den Dateipfad konfigurieren (mehr dazu später). Das SDK sucht an den folgenden Stellen (in der Reihenfolge) nach Ihrer Datei ibm-credentials.env
:
Solange Sie dies richtig einrichten, müssen Sie sich keine Gedanken über die Festlegung von Authentifizierungsoptionen in Ihrem Code machen. Wenn Sie beispielsweise die Anmeldeinformationsdatei für Ihre Discovery-Instanz erstellt und heruntergeladen haben, müssen Sie nur Folgendes tun:
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 ( ) ;
}
Und das ist es!
Wenn Sie in Ihrem Code mehr als einen Dienst gleichzeitig verwenden und zwei verschiedene ibm-credentials.env
-Dateien erhalten, fassen Sie einfach den Inhalt in einer ibm-credentials.env
Datei zusammen und das SDK übernimmt die Zuweisung des Authentifikators zu den entsprechenden Diensten .
Wenn Sie den Speicherort/Namen Ihrer Anmeldeinformationsdatei konfigurieren möchten, können Sie eine Umgebungsvariable namens IBM_CREDENTIALS_FILE
festlegen. Dies hat Vorrang vor den oben genannten Standorten. So können Sie das tun:
export IBM_CREDENTIALS_FILE= " <path> "
Dabei ist <path>
etwa /home/user/Downloads/<file_name>.env
.
Wenn Sie Authentifizierungswerte lieber manuell in Ihrem Code festlegen möchten, unterstützt das SDK dies ebenfalls. Die Art und Weise, wie Sie dies tun, hängt davon ab, welche Art von Authentifikator Ihnen Ihre Dienstinstanz zur Verfügung stellt.
Ein Erfolgsrückruf ist erforderlich. Sie können den Rückgabetyp im Rückruf angeben.
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 ) ;
}
Da die Erfolgsrückrufsignatur generisch ist und der Fehlerrückruf immer dieselbe Signatur hat, können Sie einen einzigen Rückrufsatz verwenden, um mehrere Anrufe abzuwickeln.
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 ) ;
}
Sie können auch einen anonymen Rückruf nutzen
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>" ) ;
}
Sie können die error
überprüfen, um festzustellen, ob beim Aufruf ein Fehler aufgetreten ist.
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 ) ;
}
}
Sie können benutzerdefinierte Anforderungsheader senden, indem Sie sie dem Dienst hinzufügen.
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 ) ;
}
Sie können Antwortheader im headers
Objekt in der detaillierten Antwort abrufen.
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 ) ;
}
}
Jeder SDK-Aufruf gibt eine Antwort mit einer Transaktions-ID im X-Global-Transaction-Id
Header zurück. Zusammen mit der Serviceinstanzregion hilft diese ID Supportteams bei der Behebung von Problemen anhand relevanter Protokolle.
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" ] ) ;
}
}
) ;
}
Die Transaktions-ID ist jedoch nicht verfügbar, wenn die API aus irgendeinem Grund keine Antwort zurückgibt. In diesem Fall können Sie in der Anfrage Ihre eigene Transaktions-ID festlegen. Ersetzen Sie beispielsweise <my-unique-transaction-id>
im folgenden Beispiel durch eine eindeutige Transaktions-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-Dienste haben ihre Hosts auf TLS 1.2 aktualisiert. Der Standort Dallas verfügt über einen TLS 1.0-Endpunkt, der für Streaming geeignet ist. Um in anderen Regionen zu streamen, verwenden Sie Unity 2018.2 und legen Sie die Scripting Runtime Version in den Build-Einstellungen auf .NET 4.x equivalent
fest. Um Speech to Text in früheren Versionen von Unity zu unterstützen, erstellen Sie die Instanz am Standort Dallas.
Sie können die SSL-Überprüfung deaktivieren, wenn Sie einen Serviceaufruf tätigen.
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 ;
}
Wenn es sich bei Ihrer Dienstinstanz um eine ICP4D-Instanz handelt, finden Sie unten zwei Möglichkeiten, den Assistentendienst zu initialisieren.
username
, password
, icp4d_url
und authentication_type
anDas SDK verwaltet das Token für den Benutzer
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 ) ;
Das Watson Unity SDK unterstützt IBM Cloud Private nicht, da die Verbindung über Proxy in UnityWebRequest nicht unterstützt wird.
Die Dokumentation finden Sie hier. Sie können auf die Dokumentation auch zugreifen, indem Sie im Watson-Menü die Option „API-Referenz“ auswählen ( Watson -> API-Referenz ).
Sie können sich Videos zu den ersten Schritten für das IBM Watson SDK für Unity auf YouTube ansehen.
Wenn Sie Probleme mit den APIs haben oder eine Frage zu den Watson-Diensten haben, lesen Sie Stack Overflow.
Weitere Open-Source-Projekte finden Sie auf der IBM Github-Seite.
Diese Bibliothek ist unter Apache 2.0 lizenziert. Der vollständige Lizenztext ist unter LIZENZ verfügbar.
Siehe CONTRIBUTING.md.
Wir würden gerne coole Open-Source-Projekte hervorheben, die dieses SDK verwenden! Wenn Sie möchten, dass Ihr Projekt zur Liste hinzugefügt wird, können Sie uns gerne in einem Issue verlinken.