이 SDK를 사용하여 Unity에서 Watson 기반 애플리케이션을 구축하세요.
이번 주요 릴리스인 6.0.0부터 Tone Analyser API는 지원 중단에 대비하여 제거되었습니다. 최종 지원이 중단될 때까지 이 SDK를 계속 사용하여 Tone Analyser를 호출하려면 이전 버전을 사용해야 합니다. 2022년 2월 24일에 IBM은 Tone Analysis 서비스의 지원 중단을 발표했습니다. 2023년 2월 24일부터 이 서비스를 더 이상 사용할 수 없습니다. 2022년 2월 24일부터 새 인스턴스를 생성할 수 없습니다. 기존 인스턴스는 2023년 2월 24일까지 지원됩니다.
대안으로 IBM Cloud의 자연어 이해 서비스로 마이그레이션하는 것을 고려해 보시기 바랍니다. 자연어 이해(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의 자연어 이해 서비스로 마이그레이션하는 것을 고려해 보시기 바랍니다. 분류 기능을 통해 비즈니스 또는 산업에 대한 더욱 풍부한 통찰력을 제공합니다. 자세한 내용은 자연어 이해로 마이그레이션을 참조하세요.
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 서비스는 토큰 기반 IAM(Identity and Access Management) 인증으로 마이그레이션되고 있습니다.
사용할 인증을 찾으려면 서비스 자격 증명을 확인하세요. 모든 Watson 서비스에 대해 동일한 방식으로 인증을 위한 서비스 인증 정보를 찾습니다.
url
과 apikey
또는 username
및 password
복사합니다.코드에서는 서비스 생성자에서 또는 서비스를 인스턴스화한 후 메서드 호출에서 이러한 값을 사용할 수 있습니다.
일부 서비스는 토큰 기반 IAM(Identity and Access Management) 인증을 사용합니다. 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에 제공하는 방법에는 두 가지가 있습니다.
자격 증명 파일을 사용하여 파일을 올바른 위치에 배치하기만 하면 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 ( ) ;
}
그리고 그게 다야!
코드에서 한 번에 두 개 이상의 서비스를 사용하고 두 개의 서로 다른 ibm-credentials.env
파일을 얻는 경우 콘텐츠를 하나의 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 ) ;
}
상세한 응답의 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인 경우 보조 서비스를 초기화하는 두 가지 방법은 다음과 같습니다.
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 참조 )를 선택하여 문서에 액세스할 수도 있습니다.
YouTube에서 Unity용 IBM Watson SDK에 대한 시작하기 비디오를 볼 수 있습니다.
API에 문제가 있거나 Watson 서비스에 대한 질문이 있는 경우 Stack Overflow를 참조하세요.
IBM Github 페이지에서 더 많은 오픈 소스 프로젝트를 찾아보세요.
이 라이브러리는 Apache 2.0에 따라 라이센스가 부여됩니다. 전체 라이센스 텍스트는 LICENSE에서 볼 수 있습니다.
CONTRIBUTING.md를 참조하세요.
우리는 이 SDK를 사용하는 멋진 오픈 소스 프로젝트를 강조하고 싶습니다! 귀하의 프로젝트를 목록에 추가하려면 언제든지 해당 프로젝트에 연결하는 문제를 만들어 주세요.