Gunakan SDK ini untuk membangun aplikasi yang didukung Watson di Unity.
Pada rilis besar ini, 6.0.0, Tone Analyzer API telah dihapus sebagai persiapan untuk penghentian. Jika Anda ingin terus menggunakan SDK ini untuk melakukan panggilan ke Tone Analyzer hingga penghentian terakhirnya, Anda harus menggunakan versi sebelumnya. Pada 24 Februari 2022, IBM mengumumkan penghentian layanan Tone Analyzer. Layanan ini tidak lagi tersedia mulai 24 Februari 2023. Mulai 24 Februari 2022, Anda tidak dapat membuat instance baru. Instance yang ada akan didukung hingga 24 Februari 2023.
Sebagai alternatif, kami menganjurkan Anda untuk mempertimbangkan migrasi ke layanan Pemahaman Bahasa Alami di IBM Cloud. Dengan Pemahaman Bahasa Alami, analisis nada dilakukan dengan menggunakan model klasifikasi bawaan, yang menyediakan cara mudah untuk mendeteksi nada bahasa dalam teks tertulis. Untuk informasi selengkapnya, lihat Migrasi dari titik akhir Keterlibatan Pelanggan Watson Tone Analyzer ke Pemahaman Bahasa Alami.
Pada rilis besar ini, 6.0.0, NLC API telah dihapus sebagai persiapan untuk penghentian. Jika Anda ingin terus menggunakan SDK ini untuk melakukan panggilan ke NLC hingga penghentian terakhirnya, Anda harus menggunakan versi sebelumnya. Pada tanggal 9 Agustus 2021, IBM mengumumkan penghentian layanan Pengklasifikasi Bahasa Alami. Layanan ini tidak akan tersedia lagi mulai 8 Agustus 2022. Mulai 9 September 2021, Anda tidak dapat membuat instance baru. Instance yang ada akan didukung hingga 8 Agustus 2022. Instance apa pun yang masih ada pada tanggal tersebut akan dihapus.
Sebagai alternatif, kami mendorong Anda untuk mempertimbangkan migrasi ke layanan Pemahaman Bahasa Alami di IBM Cloud yang menggunakan pembelajaran mendalam untuk mengekstrak data dan wawasan dari teks seperti kata kunci, kategori, sentimen, emosi, dan sintaksis, serta teks multi-label tingkat lanjut kemampuan klasifikasi, untuk memberikan wawasan yang lebih kaya untuk bisnis atau industri Anda. Untuk informasi selengkapnya, lihat Bermigrasi ke Pemahaman Bahasa Alami.
URL titik akhir Watson API di watsonplatform.net berubah dan tidak akan berfungsi setelah 26 Mei 2021. Perbarui panggilan Anda untuk menggunakan URL titik akhir yang lebih baru. Untuk informasi selengkapnya, lihat https://cloud.ibm.com/docs/watson?topic=watson-endpoint-change.
Pastikan Anda memiliki prasyarat berikut:
Memperbarui MacOS ke Mojave dapat menonaktifkan mikrofon untuk Unity. Jika Anda mengalami masalah ini, silakan lihat panduan ini untuk mengonfigurasi mikrofon untuk Mojave.
Anda bisa mendapatkan rilis SDK terbaru dengan mengklik di sini. Anda juga perlu mengunduh rilis terbaru IBM Unity SDK Core dengan mengklik di sini.
Pindahkan direktori unity-sdk
dan unity-sdk-core
ke dalam direktori Assets
proyek Unity Anda. Opsional: ganti nama direktori SDK dari unity-sdk
menjadi Watson
dan direktori Core dari unity-sdk-core
menjadi IBMSdkCore
.
Untuk membuat instance layanan Watson dan kredensialnya, ikuti langkah-langkah di bawah ini.
Catatan: Kredensial layanan berbeda dengan nama pengguna dan kata sandi akun IBM Cloud Anda.
Kredensial untuk setiap layanan berisi username
, password
, dan url
titik akhir atau apikey
dan url
titik akhir.
PERINGATAN: Anda bertanggung jawab untuk mengamankan kredensial Anda sendiri. Setiap pengguna dengan kredensial layanan Anda dapat mengakses instans layanan Anda!
Untuk memulai Layanan Watson di Unity, ikuti tautan untuk melihat kodenya.
Layanan Watson bermigrasi ke autentikasi Identity and Access Management (IAM) berbasis token.
Untuk mengetahui autentikasi mana yang akan digunakan, lihat kredensial layanan. Anda menemukan kredensial layanan untuk otentikasi dengan cara yang sama untuk semua layanan Watson:
url
dan apikey
atau username
dan password
.Dalam kode Anda, Anda dapat menggunakan nilai-nilai ini dalam konstruktor layanan atau dengan panggilan metode setelah membuat instance layanan Anda.
Beberapa layanan menggunakan autentikasi Identity and Access Management (IAM) berbasis token. Autentikasi IAM menggunakan kunci API layanan untuk mendapatkan token akses yang diteruskan bersama panggilan tersebut. Token akses berlaku selama kurang lebih satu jam dan harus dibuat ulang.
Anda menyediakan kunci API layanan IAM atau token akses :
HasIamTokenData()
mengembalikan 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>" ) ;
}
Ada dua cara untuk menyediakan pengautentikasi yang Anda temukan di atas ke SDK untuk autentikasi.
Dengan file kredensial, Anda hanya perlu meletakkan file di tempat yang tepat dan SDK akan melakukan pekerjaan menguraikan dan mengautentikasinya. Anda bisa mendapatkan file ini dengan mengklik tombol Unduh untuk kredensial di tab Kelola instans layanan Anda.
File yang diunduh akan diberi nama ibm-credentials.env
. Ini adalah nama yang akan dicari oleh SDK dan harus dipertahankan kecuali Anda ingin mengonfigurasi jalur file (lebih lanjut tentang itu nanti). SDK akan mencari file ibm-credentials.env
Anda di tempat berikut (secara berurutan):
Selama Anda mengaturnya dengan benar, Anda tidak perlu khawatir tentang pengaturan opsi autentikasi apa pun dalam kode Anda. Jadi, misalnya, jika Anda membuat dan mengunduh file kredensial untuk instans Discovery, Anda hanya perlu melakukan hal berikut:
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 ( ) ;
}
Dan itu saja!
Jika Anda menggunakan lebih dari satu layanan sekaligus dalam kode Anda dan mendapatkan dua file ibm-credentials.env
yang berbeda, cukup satukan konten dalam satu file ibm-credentials.env
dan SDK akan menangani penugasan pengautentikasi ke layanan yang sesuai .
Jika Anda ingin mengonfigurasi lokasi/nama file kredensial Anda, Anda dapat mengatur variabel lingkungan yang disebut IBM_CREDENTIALS_FILE
. Ini akan diutamakan dibandingkan lokasi yang disebutkan di atas. Inilah cara Anda melakukannya:
export IBM_CREDENTIALS_FILE= " <path> "
di mana <path>
adalah sesuatu seperti /home/user/Downloads/<file_name>.env
.
Jika Anda lebih memilih untuk menetapkan nilai autentikasi secara manual dalam kode Anda, SDK juga mendukungnya. Cara Anda melakukan ini bergantung pada jenis autentikator yang diberikan oleh instans layanan Anda.
Diperlukan panggilan balik yang berhasil. Anda dapat menentukan tipe pengembalian dalam panggilan balik.
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 ) ;
}
Karena tanda tangan panggilan balik yang berhasil bersifat umum dan panggilan balik yang gagal selalu memiliki tanda tangan yang sama, Anda dapat menggunakan satu set panggilan balik untuk menangani beberapa panggilan.
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 ) ;
}
Anda juga dapat menggunakan panggilan balik anonim
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>" ) ;
}
Anda dapat memeriksa respons error
untuk melihat apakah ada kesalahan dalam panggilan.
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 ) ;
}
}
Anda dapat mengirim header permintaan khusus dengan menambahkannya ke layanan.
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 ) ;
}
Anda bisa mendapatkan header respons di objek headers
di DetailedResponse.
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 ) ;
}
}
Setiap panggilan SDK mengembalikan respons dengan ID transaksi di header X-Global-Transaction-Id
. Bersama wilayah instans layanan, ID ini membantu tim dukungan memecahkan masalah dari log yang relevan.
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" ] ) ;
}
}
) ;
}
Namun, ID transaksi tidak tersedia ketika API tidak memberikan respons karena alasan tertentu. Dalam hal ini, Anda dapat mengatur ID transaksi Anda sendiri dalam permintaan. Misalnya, ganti <my-unique-transaction-id>
pada contoh berikut dengan ID transaksi unik.
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" ] ) ;
}
}
) ;
}
Layanan Watson telah meningkatkan hostnya ke TLS 1.2. Lokasi Dallas memiliki titik akhir TLS 1.0 yang berfungsi untuk streaming. Untuk melakukan streaming di wilayah lain, gunakan Unity 2018.2 dan atur Scripting Runtime Version di Build Settings ke .NET 4.x equivalent
Untuk mendukung Speech to Text di Unity versi sebelumnya, buat instance di lokasi Dallas.
Anda dapat menonaktifkan verifikasi SSL saat melakukan panggilan layanan.
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 ;
}
Jika instans layanan Anda adalah ICP4D, berikut adalah dua cara menginisialisasi layanan asisten.
username
, password
, icp4d_url
dan authentication_type
SDK akan mengelola token untuk pengguna
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 ) ;
Watson Unity SDK tidak mendukung IBM Cloud Private karena koneksi melalui proksi tidak didukung di UnityWebRequest.
Dokumentasi dapat ditemukan di sini. Anda juga dapat mengakses dokumentasi dengan memilih Referensi API pada menu Watson ( Watson -> Referensi API ).
Anda dapat melihat video Memulai untuk IBM Watson SDK for Unity di YouTube.
Jika Anda memiliki masalah dengan API atau memiliki pertanyaan tentang layanan Watson, lihat Stack Overflow.
Temukan lebih banyak proyek sumber terbuka di Halaman IBM Github.
Perpustakaan ini dilisensikan di bawah Apache 2.0. Teks lisensi lengkap tersedia di LISENSI.
Lihat KONTRIBUSI.md.
Kami ingin menyoroti proyek sumber terbuka keren yang menggunakan SDK ini! Jika Anda ingin proyek Anda ditambahkan ke daftar, jangan ragu untuk membuat masalah yang menghubungkan kami ke proyek tersebut.