[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"similar-watson-developer-cloud--unity-sdk":3,"tool-watson-developer-cloud--unity-sdk":61},[4,18,26,36,44,53],{"id":5,"name":6,"github_repo":7,"description_zh":8,"stars":9,"difficulty_score":10,"last_commit_at":11,"category_tags":12,"status":17},4358,"openclaw","openclaw\u002Fopenclaw","OpenClaw 是一款专为个人打造的本地化 AI 助手，旨在让你在自己的设备上拥有完全可控的智能伙伴。它打破了传统 AI 助手局限于特定网页或应用的束缚，能够直接接入你日常使用的各类通讯渠道，包括微信、WhatsApp、Telegram、Discord、iMessage 等数十种平台。无论你在哪个聊天软件中发送消息，OpenClaw 都能即时响应，甚至支持在 macOS、iOS 和 Android 设备上进行语音交互，并提供实时的画布渲染功能供你操控。\n\n这款工具主要解决了用户对数据隐私、响应速度以及“始终在线”体验的需求。通过将 AI 部署在本地，用户无需依赖云端服务即可享受快速、私密的智能辅助，真正实现了“你的数据，你做主”。其独特的技术亮点在于强大的网关架构，将控制平面与核心助手分离，确保跨平台通信的流畅性与扩展性。\n\nOpenClaw 非常适合希望构建个性化工作流的技术爱好者、开发者，以及注重隐私保护且不愿被单一生态绑定的普通用户。只要具备基础的终端操作能力（支持 macOS、Linux 及 Windows WSL2），即可通过简单的命令行引导完成部署。如果你渴望拥有一个懂你",349277,3,"2026-04-06T06:32:30",[13,14,15,16],"Agent","开发框架","图像","数据工具","ready",{"id":19,"name":20,"github_repo":21,"description_zh":22,"stars":23,"difficulty_score":10,"last_commit_at":24,"category_tags":25,"status":17},3808,"stable-diffusion-webui","AUTOMATIC1111\u002Fstable-diffusion-webui","stable-diffusion-webui 是一个基于 Gradio 构建的网页版操作界面，旨在让用户能够轻松地在本地运行和使用强大的 Stable Diffusion 图像生成模型。它解决了原始模型依赖命令行、操作门槛高且功能分散的痛点，将复杂的 AI 绘图流程整合进一个直观易用的图形化平台。\n\n无论是希望快速上手的普通创作者、需要精细控制画面细节的设计师，还是想要深入探索模型潜力的开发者与研究人员，都能从中获益。其核心亮点在于极高的功能丰富度：不仅支持文生图、图生图、局部重绘（Inpainting）和外绘（Outpainting）等基础模式，还独创了注意力机制调整、提示词矩阵、负向提示词以及“高清修复”等高级功能。此外，它内置了 GFPGAN 和 CodeFormer 等人脸修复工具，支持多种神经网络放大算法，并允许用户通过插件系统无限扩展能力。即使是显存有限的设备，stable-diffusion-webui 也提供了相应的优化选项，让高质量的 AI 艺术创作变得触手可及。",162132,"2026-04-05T11:01:52",[14,15,13],{"id":27,"name":28,"github_repo":29,"description_zh":30,"stars":31,"difficulty_score":32,"last_commit_at":33,"category_tags":34,"status":17},1381,"everything-claude-code","affaan-m\u002Feverything-claude-code","everything-claude-code 是一套专为 AI 编程助手（如 Claude Code、Codex、Cursor 等）打造的高性能优化系统。它不仅仅是一组配置文件，而是一个经过长期实战打磨的完整框架，旨在解决 AI 代理在实际开发中面临的效率低下、记忆丢失、安全隐患及缺乏持续学习能力等核心痛点。\n\n通过引入技能模块化、直觉增强、记忆持久化机制以及内置的安全扫描功能，everything-claude-code 能显著提升 AI 在复杂任务中的表现，帮助开发者构建更稳定、更智能的生产级 AI 代理。其独特的“研究优先”开发理念和针对 Token 消耗的优化策略，使得模型响应更快、成本更低，同时有效防御潜在的攻击向量。\n\n这套工具特别适合软件开发者、AI 研究人员以及希望深度定制 AI 工作流的技术团队使用。无论您是在构建大型代码库，还是需要 AI 协助进行安全审计与自动化测试，everything-claude-code 都能提供强大的底层支持。作为一个曾荣获 Anthropic 黑客大奖的开源项目，它融合了多语言支持与丰富的实战钩子（hooks），让 AI 真正成长为懂上",147882,2,"2026-04-09T11:32:47",[14,13,35],"语言模型",{"id":37,"name":38,"github_repo":39,"description_zh":40,"stars":41,"difficulty_score":32,"last_commit_at":42,"category_tags":43,"status":17},2271,"ComfyUI","Comfy-Org\u002FComfyUI","ComfyUI 是一款功能强大且高度模块化的视觉 AI 引擎，专为设计和执行复杂的 Stable Diffusion 图像生成流程而打造。它摒弃了传统的代码编写模式，采用直观的节点式流程图界面，让用户通过连接不同的功能模块即可构建个性化的生成管线。\n\n这一设计巧妙解决了高级 AI 绘图工作流配置复杂、灵活性不足的痛点。用户无需具备编程背景，也能自由组合模型、调整参数并实时预览效果，轻松实现从基础文生图到多步骤高清修复等各类复杂任务。ComfyUI 拥有极佳的兼容性，不仅支持 Windows、macOS 和 Linux 全平台，还广泛适配 NVIDIA、AMD、Intel 及苹果 Silicon 等多种硬件架构，并率先支持 SDXL、Flux、SD3 等前沿模型。\n\n无论是希望深入探索算法潜力的研究人员和开发者，还是追求极致创作自由度的设计师与资深 AI 绘画爱好者，ComfyUI 都能提供强大的支持。其独特的模块化架构允许社区不断扩展新功能，使其成为当前最灵活、生态最丰富的开源扩散模型工具之一，帮助用户将创意高效转化为现实。",108111,"2026-04-08T11:23:26",[14,15,13],{"id":45,"name":46,"github_repo":47,"description_zh":48,"stars":49,"difficulty_score":32,"last_commit_at":50,"category_tags":51,"status":17},4721,"markitdown","microsoft\u002Fmarkitdown","MarkItDown 是一款由微软 AutoGen 团队打造的轻量级 Python 工具，专为将各类文件高效转换为 Markdown 格式而设计。它支持 PDF、Word、Excel、PPT、图片（含 OCR）、音频（含语音转录）、HTML 乃至 YouTube 链接等多种格式的解析，能够精准提取文档中的标题、列表、表格和链接等关键结构信息。\n\n在人工智能应用日益普及的今天，大语言模型（LLM）虽擅长处理文本，却难以直接读取复杂的二进制办公文档。MarkItDown 恰好解决了这一痛点，它将非结构化或半结构化的文件转化为模型“原生理解”且 Token 效率极高的 Markdown 格式，成为连接本地文件与 AI 分析 pipeline 的理想桥梁。此外，它还提供了 MCP（模型上下文协议）服务器，可无缝集成到 Claude Desktop 等 LLM 应用中。\n\n这款工具特别适合开发者、数据科学家及 AI 研究人员使用，尤其是那些需要构建文档检索增强生成（RAG）系统、进行批量文本分析或希望让 AI 助手直接“阅读”本地文件的用户。虽然生成的内容也具备一定可读性，但其核心优势在于为机器",93400,"2026-04-06T19:52:38",[52,14],"插件",{"id":54,"name":55,"github_repo":56,"description_zh":57,"stars":58,"difficulty_score":10,"last_commit_at":59,"category_tags":60,"status":17},4487,"LLMs-from-scratch","rasbt\u002FLLMs-from-scratch","LLMs-from-scratch 是一个基于 PyTorch 的开源教育项目，旨在引导用户从零开始一步步构建一个类似 ChatGPT 的大型语言模型（LLM）。它不仅是同名技术著作的官方代码库，更提供了一套完整的实践方案，涵盖模型开发、预训练及微调的全过程。\n\n该项目主要解决了大模型领域“黑盒化”的学习痛点。许多开发者虽能调用现成模型，却难以深入理解其内部架构与训练机制。通过亲手编写每一行核心代码，用户能够透彻掌握 Transformer 架构、注意力机制等关键原理，从而真正理解大模型是如何“思考”的。此外，项目还包含了加载大型预训练权重进行微调的代码，帮助用户将理论知识延伸至实际应用。\n\nLLMs-from-scratch 特别适合希望深入底层原理的 AI 开发者、研究人员以及计算机专业的学生。对于不满足于仅使用 API，而是渴望探究模型构建细节的技术人员而言，这是极佳的学习资源。其独特的技术亮点在于“循序渐进”的教学设计：将复杂的系统工程拆解为清晰的步骤，配合详细的图表与示例，让构建一个虽小但功能完备的大模型变得触手可及。无论你是想夯实理论基础，还是为未来研发更大规模的模型做准备",90106,"2026-04-06T11:19:32",[35,15,13,14],{"id":62,"github_repo":63,"name":64,"description_en":65,"description_zh":66,"ai_summary_zh":66,"readme_en":67,"readme_zh":68,"quickstart_zh":69,"use_case_zh":70,"hero_image_url":71,"owner_login":72,"owner_name":73,"owner_avatar_url":74,"owner_bio":75,"owner_company":76,"owner_location":76,"owner_email":76,"owner_twitter":77,"owner_website":78,"owner_url":79,"languages":80,"stars":93,"forks":94,"last_commit_at":95,"license":96,"difficulty_score":32,"env_os":97,"env_gpu":98,"env_ram":98,"env_deps":99,"category_tags":106,"github_topics":108,"view_count":32,"oss_zip_url":76,"oss_zip_packed_at":76,"status":17,"created_at":119,"updated_at":120,"faqs":121,"releases":152},6007,"watson-developer-cloud\u002Funity-sdk","unity-sdk",":video_game: Unity SDK to use the IBM Watson services.","unity-sdk 是 IBM 专为 Unity 游戏引擎打造的开发工具包，旨在帮助开发者轻松将 IBM Watson 的人工智能服务集成到游戏或交互式应用中。通过它，用户可以快速赋予应用语音识别、自然语言理解、情感分析等高级认知能力，从而解决传统游戏交互方式单一、缺乏智能反馈的痛点，让虚拟角色能“听懂”玩家指令或“感知”文本情绪。\n\n这款工具主要面向熟悉 Unity 环境的软件开发者和技术研究人员。其核心亮点在于提供了针对 Unity 架构优化的 API 接口，简化了云端 AI 服务与本地游戏逻辑的对接流程。不过需要注意的是，随着 IBM 产品线的调整，该仓库目前已进入维护模式，部分旧版服务（如语气分析器）已被移除或计划停用，官方建议新用户迁移至更强大的“自然语言理解”服务。尽管如此，社区仍欢迎提交代码贡献，适合需要基于现有架构进行二次开发或维护旧项目的技术团队使用。","# IBM Watson SDK for Unity\n[![Deploy and Publish](https:\u002F\u002Fgithub.com\u002Fwatson-developer-cloud\u002Funity-sdk\u002Fworkflows\u002FDeploy%20and%20Publish\u002Fbadge.svg?branch=master)](https:\u002F\u002Fgithub.com\u002Fwatson-developer-cloud\u002Funity-sdk\u002Factions?query=workflow%3A%22Deploy+and+Publish%22)\n[![wdc-community.slack.com](https:\u002F\u002Fwdc-slack-inviter.mybluemix.net\u002Fbadge.svg)](http:\u002F\u002Fwdc-slack-inviter.mybluemix.net\u002F)\n[![semantic-release](https:\u002F\u002Fimg.shields.io\u002Fbadge\u002F%20%20%F0%9F%93%A6%F0%9F%9A%80-semantic--release-e10079.svg)](https:\u002F\u002Fgithub.com\u002Fsemantic-release\u002Fsemantic-release)\n[![CLA assistant](https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002Fwatson-developer-cloud_unity-sdk_readme_e2159b52e63d.png)](https:\u002F\u002Fcla-assistant.io\u002Fwatson-developer-cloud\u002Funity-sdk)\n\n## Deprecation Notice\nThis repo and its associated release binaries are being deprecated. While this repo will no longer see active support from the IBM team, contributions by the community via PRs are still welcomed and will be reviewed. Keep in mind, updates will no longer be published into release binaries and changes made after this update will need to be compiled independently.\n\nUse this SDK to build Watson-powered applications in Unity.\n\n## Announcements\n### Tone Analyzer Deprecation\nAs of this major release, 6.0.0, the Tone Analyzer API has been removed in preparation for deprecation. If you wish to continue using this sdk to make calls to Tone Analyzer until its final deprecation, you will have to use a previous version.\nOn 24 February 2022, IBM announced the deprecation of the Tone Analyzer service. The service will no longer be available as of 24 February 2023. As of 24 February 2022, you will not be able to create new instances. Existing instances will be supported until 24 February 2023.\n\nAs an alternative, we encourage you to consider migrating to the Natural Language Understanding service on IBM Cloud. With Natural Language Understanding, tone analysis is done by using a pre-built classifications model, which provides an easy way to detect language tones in written text. For more information, see [Migrating from Watson Tone Analyzer Customer Engagement endpoint to Natural Language Understanding](https:\u002F\u002Fcloud.ibm.com\u002Fdocs\u002Fnatural-language-understanding?topic=natural-language-understanding-tone_analytics).\n\n### Natural Language Classifier Deprecation\nAs of this major release, 6.0.0, the NLC API has been removed in preparation for deprecation. If you wish to continue using this sdk to make calls to NLC until its final deprecation, you will have to use a previous version.\nOn 9 August 2021, IBM announced the deprecation of the Natural Language Classifier service. The service will no longer be available from 8 August 2022. As of 9 September 2021, you will not be able to create new instances. Existing instances will be supported until 8 August 2022. Any instance that still exists on that date will be deleted.\n\nAs an alternative, we encourage you to consider migrating to the Natural Language Understanding service on IBM Cloud that uses deep learning to extract data and insights from text such as keywords, categories, sentiment, emotion, and syntax, along with advanced multi-label text classification capabilities, to provide even richer insights for your business or industry. For more information, see [Migrating to Natural Language Understanding](https:\u002F\u002Fcloud.ibm.com\u002Fdocs\u002Fnatural-language-classifier?topic=natural-language-classifier-migrating).\n\n### Updating endpoint URLs from watsonplatform.net\nWatson API endpoint URLs at watsonplatform.net are changing and will not work after 26 May 2021. Update your calls to use the newer endpoint URLs. For more information, see https:\u002F\u002Fcloud.ibm.com\u002Fdocs\u002Fwatson?topic=watson-endpoint-change.\n\n## Before you begin\nEnsure that you have the following prerequisites:\n\n* You need an [IBM Cloud][ibm-cloud-onboarding] account.\n* [Unity][get_unity]. You can use the **free** Personal edition.\n\n## Configuring Unity\n* Change the build settings in Unity (**File > Build Settings**) to any platform except for web player\u002FWeb GL. The IBM Watson SDK for Unity does not support Unity Web Player.\n* If using Unity 2018.2 or later you'll need to set **Scripting Runtime Version** and **Api Compatibility Level** in Build Settings to **.NET 4.x equivalent**. We need to access security options to enable TLS 1.2. \n\n> Updating MacOS to Mojave may disable microphone for Unity. If you are running into this issue please see these [guidelines](https:\u002F\u002Fsupport.apple.com\u002Fen-us\u002FHT209175) to configure microphone for Mojave. \n\n\n## Getting the Watson SDK and adding it to Unity\nYou can get the latest SDK release by clicking [here][latest_release_sdk]. **You will also need to download the latest release of the IBM Unity SDK Core by clicking [here][latest_release_core].**\n\n### Installing the SDK source into your Unity project\nMove the **`unity-sdk`** and **`unity-sdk-core`** directories into the **`Assets`** directory of your Unity project. _Optional: rename the SDK directory from `unity-sdk` to `Watson` and the Core directory from `unity-sdk-core` to `IBMSdkCore`_.\n\n## Configuring your service credentials\nTo create instances of Watson services and their credentials, follow the steps below.\n\n**Note:** Service credentials are different from your IBM Cloud account username and password.\n\n1. Determine which services to configure.\n1. If you have configured the services already, complete the following steps. Otherwise, go to step 3.\n    1. Log in to IBM Cloud at https:\u002F\u002Fcloud.ibm.com.\n    1. Click the service you would like to use.\n    1. Click **Service credentials**.\n    1. Click **View credentials** to access your credentials.\n1. If you need to configure the services that you want to use, complete the following steps.\n    1. Log in to IBM Cloud at https:\u002F\u002Fcloud.ibm.com.\n    1. Click the **Create service** button.\n    1. Under **Watson**, select which service you would like to create an instance of and click that service.\n    1. Give the service and credential a name. Select a plan and click the **Create** button on the bottom.\n    4. Click **Service Credentials**.\n    5. Click **View credentials** to access your credentials.\n1. Your service credentials can be used to instantiate Watson Services within your application. Most services also support tokens which you can instantiate the service with as well.\n\nThe credentials for each service contain either a `username`, `password` and endpoint `url` **or** an `apikey` and endpoint `url`.\n\n**WARNING:** You are responsible for securing your own credentials. Any user with your service credentials can access your service instances!\n\n## Watson Services\nTo get started with a Watson Service in Unity, follow the link to see the code.\n* [Assistant V1](\u002FScripts\u002FServices\u002FAssistant\u002FV1)\n* [Assistant V2](\u002FScripts\u002FServices\u002FAssistant\u002FV2)\n* [Compare Comply V1](\u002FScripts\u002FServices\u002FCompareComply\u002FV1)\n* [Conversation](\u002FScripts\u002FServices\u002FConversation\u002FV1) (deprecated - Use Assistant V1 or Assistant V2)\n* [Discovery](\u002FScripts\u002FServices\u002FDiscovery\u002FV1)\n* [Language Translator V3](\u002FScripts\u002FServices\u002FLanguageTranslator\u002FV3)\n* [Natural Language Classifier](\u002FScripts\u002FServices\u002FNaturalLanguageClassifier\u002FV2)\n* [Natural Language Understanding](\u002FScripts\u002FServices\u002FNaturalLanguageUnderstanding\u002FV1)\n* [Personality Insights](\u002FScripts\u002FServices\u002FPersonalityInsights\u002FV3)\n* [Speech to Text](\u002FScripts\u002FServices\u002FSpeechToText\u002FV1)\n* [Text to Speech](\u002FScripts\u002FServices\u002FTextToSpeech\u002FV1)\n* [Tone Analyzer](\u002FScripts\u002FServices\u002FToneAnalyzer\u002FV3)\n* [Visual Recognition](\u002FScripts\u002FServices\u002FVisualRecognition\u002FV3)\n\n## Authentication\nWatson services are migrating to token-based Identity and Access Management (IAM) authentication.\n\n- With some service instances, you authenticate to the API by using **[IAM](#iam)**.\n- In other instances, you authenticate by providing the **[username and password](#username-and-password)** for the service instance.\n\n### Getting credentials\nTo find out which authentication to use, view the service credentials. You find the service credentials for authentication the same way for all Watson services:\n\n1.  Go to the IBM Cloud **[Dashboard][watson-dashboard]** page.\n1.  Either click an existing Watson service instance or click **Create**.\n1.  Click **Show** to view your service credentials.\n1.  Copy the `url` and either `apikey` or `username` and `password`.\n\nIn your code, you can use these values in the service constructor or with a method call after instantiating your service.\n\n### IAM\n\nSome services use token-based Identity and Access Management (IAM) authentication. IAM authentication uses a service API key to get an access token that is passed with the call. Access tokens are valid for approximately one hour and must be regenerated.\n\nYou supply either an IAM service **API key** or an **access token**:\n\n- Use the API key to have the SDK manage the lifecycle of the access token. The SDK requests an access token, ensures that the access token is valid, and refreshes it if necessary.\n- Use the access token if you want to manage the lifecycle yourself. For details, see [Authenticating with IAM tokens](https:\u002F\u002Fcloud.ibm.com\u002Fdocs\u002Fwatson?topic=watson-iam). If you want to switch to API key, in a coroutine, override your stored IAM credentials with an IAM API key and yield until the credentials object `HasIamTokenData()` returns `true`.\n\n#### Supplying the IAM API key\n```cs\nAuthenticator authenticator;\nAssistantService assistant;\nstring versionDate = \"\u003Cservice-version-date>\";\n\nIEnumerator TokenExample()\n{\n    \u002F\u002F  Create authenticator using the IAM token options\n    authenticator = new IamAuthenticator(apikey: \"\u003Ciam-api-key>\");\n    while (!authenticator.CanAuthenticate())\n        yield return null;\n\n    assistant = new AssistantService(versionDate, authenticator);\n    assistant.SetServiceUrl(\"\u003Cservice-url>\");\n    assistant.ListWorkspaces(callback: OnListWorkspaces);\n}\n\nprivate void OnListWorkspaces(DetailedResponse\u003CWorkspaceCollection> response, IBMError error)\n{\n    Log.Debug(\"OnListWorkspaces()\", \"Response: {0}\", response.Response);\n}\n```\n\n#### Supplying the access token\n```cs\nAuthenticator authenticator;\nAssistantService assistant;\nstring versionDate = \"\u003Cservice-version-date>\";\n\nvoid TokenExample()\n{\n    \u002F\u002F  Create authenticator using the Bearer Token\n    authenticator = new BearerTokenAuthenticator(\"\u003Cbearer-token>\");\n\n    assistant = new AssistantService(versionDate, authenticator);\n    assistant.SetServiceUrl(\"\u003Cservice-url>\");\n    assistant.ListWorkspaces(callback: OnListWorkspaces);\n}\n\nprivate void OnListWorkspaces(DetailedResponse\u003CWorkspaceCollection> response, IBMError error)\n{\n    Log.Debug(\"OnListWorkspaces()\", \"Response: {0}\", response.Response);\n}\n```\n\n### Username and password\n```cs\nAuthenticator authenticator;\nAssistantService assistant;\nstring versionDate = \"\u003Cservice-version-date>\";\n\nvoid UsernamePasswordExample()\n{\n    Authenticator authenticator = new BasicAuthenticator(\"\u003Cusername>\", \"\u003Cpassword>\", \"\u003Curl>\");\n    assistant = new AssistantService(versionDate, authenticator);\n    assistant.SetServiceUrl(\"\u003Cservice-url>\");\n}\n```\n\n### Supplying authenticator\n\nThere are two ways to supply the authenticator you found above to the SDK for authentication.\n\n#### Credential file (easier!)\n\nWith a credential file, you just need to put the file in the right place and the SDK will do the work of parsing it and authenticating. You can get this file by clicking the **Download** button for the credentials in the **Manage** tab of your service instance.\n\nThe file downloaded will be called `ibm-credentials.env`. This is the name the SDK will search for and **must** be preserved unless you want to configure the file path (more on that later). The SDK will look for your `ibm-credentials.env` file in the following places (in order):\n\n- Your system's home directory\n- The top-level directory of the project you're using the SDK in\n\nAs long as you set that up correctly, you don't have to worry about setting any authentication options in your code. So, for example, if you created and downloaded the credential file for your Discovery instance, you just need to do the following:\n\n```cs\npublic IEnumerator ExampleAutoService()\n{\n    Assistant assistantService = new Assistant(\"2019-04-03\");\n\n    \u002F\u002F  Wait for authorization token\n    while (!assistantService.Authenticator.CanAuthenticate())\n        yield return null;\n\n    var listWorkspacesResult = assistantService.ListWorkspaces();\n}\n```\n\nAnd that's it!\n\nIf you're using more than one service at a time in your code and get two different `ibm-credentials.env` files, just put the contents together in one `ibm-credentials.env` file and the SDK will handle assigning authenticator to their appropriate services.\n\nIf you would like to configure the location\u002Fname of your credential file, you can set an environment variable called `IBM_CREDENTIALS_FILE`. **This will take precedence over the locations specified above.** Here's how you can do that:\n\n```bash\nexport IBM_CREDENTIALS_FILE=\"\u003Cpath>\"\n```\n\nwhere `\u003Cpath>` is something like `\u002Fhome\u002Fuser\u002FDownloads\u002F\u003Cfile_name>.env`.\n\n#### Manually\n\nIf you'd prefer to set authentication values manually in your code, the SDK supports that as well. The way you'll do this depends on what type of authenticator your service instance gives you.\n\n## Callbacks\nA success callback is required. You can specify the return type in the callback.\n```cs\nAssistantService assistant;\nstring assistantVersionDate = \"\u003Cassistant-version-date>\";\nAuthenticator assistantAuthenticator;\nstring workspaceId = \"\u003CworkspaceId>\";\n\nDiscoveryService discovery;\nstring discoveryVersionDate = \"\u003Cdiscovery-version-date>\";\nAuthenticator discoveryAuthenticator;\n\nprivate void Example()\n{\n    assistant = new AssistantService(assistantVersionDate, assistantAuthenticator);\n    assistant.SetServiceUrl(\"\u003Cservice-url>\");\n\n    discovery = new DiscoveryService(discoveryVersionDate, discoveryAuthenticator);\n    discovery.SetServiceUrl(\"\u003Cservice-url>\");\n\n    \u002F\u002F  Call with sepcific callbacks\n    assistant.Message(\n        callback: OnMessage,\n        workspaceId: workspaceId\n    );\n\n    discovery.ListEnvironments(\n        callback: OnGetEnvironments\n    );\n}\n\nprivate void OnMessage(DetailedResponse\u003CMessageResponse> response, IBMError error)\n{\n    Log.Debug(\"ExampleCallback.OnMessage()\", \"Response received: {0}\", response.Response);\n}\n\nprivate void OnGetEnvironments(DetailedResponse\u003CListEnvironmentsResponse> response, IBMError error)\n{\n    Log.Debug(\"ExampleCallback.OnGetEnvironments()\", \"Response received: {0}\", response.Response);\n}\n```\n\nSince the success callback signature is generic and the failure callback always has the same signature, you can use a single set of callbacks to handle multiple calls.\n```cs\nAssistantService assistant;\nstring assistantVersionDate = \"\u003Cassistant-version-date>\";\nAuthenticator assistantAuthenticator;\nstring workspaceId = \"\u003CworkspaceId>\";\n\nDiscoveryService discovery;\nstring discoveryVersionDate = \"\u003Cdiscovery-version-date>\";\nAuthenticator discoveryAuthenticator;\n\nprivate void Example()\n{\n    assistant = new AssistantService(assistantVersionDate, assistantAuthenticator);\n    assistant.SetServiceUrl(\"\u003Cservice-url>\");\n\n    \u002F\u002F  Call with generic callbacks\n    JObject input = new JObject();\n    input.Add(\"text\", \"\");\n    assistant.Message(\n        callback: OnSuccess,\n        workspaceId: workspaceId,\n        input: input\n    );\n\n    discovery = new DiscoveryService(discoveryVersionDate, discoveryAuthenticator);\n    discovery.SetServiceUrl(\"\u003Cservice-url>\");\n\n    discovery.ListEnvironments(\n        callback: OnSuccess\n    );\n}\n\n\u002F\u002F  Generic success callback\nprivate void OnSuccess\u003CT>(DetailedResponse\u003CT> resp, IBMError error)\n{\n    Log.Debug(\"ExampleCallback.OnSuccess()\", \"Response received: {0}\", resp.Response);\n}\n```\n\nYou can also use an anonymous callback\n```cs\nAssistantService assistant;\nstring assistantVersionDate = \"\u003Cassistant-version-date>\";\nAuthenticator assistantAuthenticator;\nstring workspaceId = \"\u003CworkspaceId>\";\n\nprivate void Example()\n{\n    assistant = new AssistantService(assistantVersionDate, assistantAuthenticator);\n\n    assistant.ListWorkspaces(\n        callback: (DetailedResponse\u003CWorkspaceCollection> response, IBMError error) =>\n        {\n            Log.Debug(\"ExampleCallback.OnSuccess()\", \"ListWorkspaces result: {0}\", response.Response);\n        },\n        pageLimit: 1,\n        includeCount: true,\n        sort: \"-name\",\n        includeAudit: true\n    );\n    assistant.SetServiceUrl(\"\u003Cservice-url>\");\n}\n```\n\nYou can check the `error` response to see if there was an error in the call.\n```cs\nAssistantService assistant;\nstring assistantVersionDate = \"\u003Cassistant-version-date>\";\nAuthenticator assistantAuthenticator;\nstring workspaceId = \"\u003CworkspaceId>\";\n\nprivate void Example()\n{\n    assistant = new AssistantService(versionDate, authenticator);\n\n    assistant.Message(OnMessage, workspaceId);\n}\n\nprivate void OnMessage(DetailedResponse\u003CMessageResponse> response, IBMError error)\n{\n    if (error == null)\n    {\n        Log.Debug(\"ExampleCallback.OnMessage()\", \"Response received: {0}\", response.Response);\n    }\n    else\n    {\n        Log.Debug(\"ExampleCallback.OnMessage()\", \"Error received: {0}, {1}, {3}\", error.StatusCode, error.ErrorMessage, error.Response);\n    }\n}\n```\n\n## Custom Request Headers\nYou can send custom request headers by adding them to the service.\n\n```cs\nAssistantService assistant;\nstring assistantVersionDate = \"\u003Cassistant-version-date>\";\nAuthenticator assistantAuthenticator;\nstring workspaceId = \"\u003CworkspaceId>\";\n\nvoid Example()\n{\n    assistant = new AssistantService(assistantVersionDate, assistantAuthenticator);\n\n    \u002F\u002F  Add custom header to the REST call\n    assistant.WithHeader(\"X-Watson-Metadata\", \"customer_id=some-assistant-customer-id\");\n    assistant.Message(OnSuccess, \"\u003Cworkspace-id>\");\n}\n\nprivate void OnSuccess(DetailedResponse\u003CMessageResponse> response, IBMError error)\n{\n    Log.Debug(\"ExampleCallback.OnMessage()\", \"Response received: {0}\", response.Response);\n}\n```\n\n## Response Headers\nYou can get response headers in the `headers` object in the DetailedResponse.\n\n```cs\nAssistantService assistant;\nstring assistantVersionDate = \"\u003Cassistant-version-date>\";\nAuthenticator assistantAuthenticator;\nstring workspaceId = \"\u003CworkspaceId>\";\n\nvoid Example()\n{\n    assistant = new AssistantService(assistantVersionDate, assistantAuthenticator);\n\n    assistant.Message(OnMessage, \"\u003Cworkspace-id>\");\n}\n\nprivate void OnMessage(DetailedResponse\u003CMessageResponse> response, IBMError error)\n{\n    \u002F\u002F  List all headers in the response headers object\n    foreach (KeyValuePair\u003Cstring, object> kvp in response.Headers)\n    {\n        Log.Debug(\"ExampleCustomHeader.OnMessage()\", \"{0}: {1}\", kvp.Key, kvp.Value);\n    }\n}\n```\n\n## Transaction IDs\nEvery SDK call returns a response with a transaction ID in the `X-Global-Transaction-Id` header. Together the service instance region, this ID helps support teams troubleshoot issues from relevant logs.\n\n```cs\npublic void ExampleGetTransactionId()\n{\n    AssistantService service = new AssistantService(\"{version-date}\");\n    service.ListWorkspaces(\n        callback: (DetailedResponse\u003CWorkspace> response, IBMError error) =>\n        {\n            if(error != null)\n            {\n                Log.Debug(\"AssistantServiceV1\", \"Transaction Id: {0}\", error.ResponseHeaders[\"X-Global-Transaction-Id\"]);\n            }\n            else\n            {\n                Log.Debug(\"AssistantServiceV1\", \"Transaction Id: {0}\", response.Headers[\"X-Global-Transaction-Id\"]);\n            }\n        }\n    );\n}\n```\n\nHowever, the transaction ID isn't available when the API doesn't return a response for some reason. In that case, you can set your own transaction ID in the request. For example, replace `\u003Cmy-unique-transaction-id>` in the following example with a unique transaction ID.\n\n```cs\npublic void ExampleSetTransactionId()\n{\n    AssistantService service = new AssistantService(\"{version-date}\");\n    service.WithHeader(\"X-Global-Transaction-Id\", \"\u003Cmy-unique-transaction-id>\");\n    service.ListWorkspaces(\n        callback: (DetailedResponse\u003CWorkspace> response, IBMError error) =>\n        {\n            if(error != null)\n            {\n                Log.Debug(\"AssistantServiceV1\", \"Transaction Id: {0}\", error.ResponseHeaders[\"X-Global-Transaction-Id\"]);\n            }\n            else\n            {\n                Log.Debug(\"AssistantServiceV1\", \"Transaction Id: {0}\", response.Headers[\"X-Global-Transaction-Id\"]);\n            }\n        }\n    );\n}\n```\n\n## TLS 1.0 support\nWatson services have upgraded their hosts to TLS 1.2. The Dallas location has a TLS 1.0 endpoint that works for streaming. To stream in other regions, use Unity 2018.2 and set **Scripting Runtime Version** in Build Settings to `.NET 4.x equivalent`. To support Speech to Text in earlier versions of Unity, create the instance in the Dallas location.\n\n## Disabling SSL verification\nYou can disable SSL verifciation when making a service call.\n```cs\nAssistantService assistant;\nstring assistantVersionDate = \"\u003Cassistant-version-date>\";\nAuthenticator assistantAuthenticator;\nstring workspaceId = \"\u003CworkspaceId>\";\n\nvoid Example()\n{\n    authenticator.DisableSslVerification = true;\n    assistant = new AssistantService(assistantVersionDate, assistantAuthenticator);\n\n    \u002F\u002F  disable ssl verification\n    assistant.DisableSslVerification = true;\n}\n```\n\n## IBM Cloud Pak for Data(ICP4D)\nIf your service instance is of ICP4D, below are two ways of initializing the assistant service.\n\n#### 1) Supplying the `username`, `password`, `icp4d_url` and `authentication_type`\n\nThe SDK will manage the token for the user\n\n```cs\n    CloudPakForDataAuthenticator authenticator = new CloudPakForDataAuthenticator(\"\u003Curl>\", \"\u003Cusername>\", \"\u003Cpassword>\");\n    while(!authenticator.CanAuthenticate())\n    {\n        yield return null;\n    }\n    service = new AssistantService(versionDate, authenticator);\n```\n\n#### 2) Supplying the access token\n\n```cs\n    BearerTokenAuthenticator = new BearerTokenAuthenticator(\"\u003CaccessToken>\");\n    while(!authenticator.CanAuthenticate())\n    {\n        yield return null;\n    }\n    service = new AssistantService(versionDate, authenticator);\n```\n\n## IBM Cloud Private\nThe Watson Unity SDK does not support IBM Cloud Private because connection via proxy is not supported in UnityWebRequest. \n\n## Documentation\nDocumentation can be found [here][documentation]. You can also access the documentation by selecting API Reference the Watson menu (**Watson -> API Reference**).\n\n## Getting started videos\nYou can view Getting Started videos for the IBM Watson SDK for Unity on [YouTube](https:\u002F\u002Fwww.youtube.com\u002Fwatch?v=sNPsdUWSi34&list=PLZDyxLlNKRY9b2vurEhkSoNWZN5c5l4Nr).\n\n## Questions\n\nIf you have issues with the APIs or have a question about the Watson services, see [Stack Overflow](https:\u002F\u002Fstackoverflow.com\u002Fquestions\u002Ftagged\u002Fibm-watson+unity).\n\n## Open Source @ IBM\nFind more open source projects on the [IBM Github Page](http:\u002F\u002Fibm.github.io\u002F).\n\n## License\nThis library is licensed under Apache 2.0. Full license text is available in [LICENSE](LICENSE).\n\n## Contributing\nSee [CONTRIBUTING.md](.github\u002FCONTRIBUTING.md).\n\n## Featured projects\nWe'd love to highlight cool open-source projects that use this SDK! If you'd like to get your project added to the list, feel free to make an issue linking us to it.\n\n[wdc]: https:\u002F\u002Fwww.ibm.com\u002Fwatson\u002Fdeveloper\u002F\n[wdc_unity_sdk]: https:\u002F\u002Fgithub.com\u002Fwatson-developer-cloud\u002Funity-sdk\n[latest_release_sdk]: https:\u002F\u002Fgithub.com\u002Fwatson-developer-cloud\u002Funity-sdk\u002Freleases\u002Flatest\n[latest_release_core]: https:\u002F\u002Fgithub.com\u002FIBM\u002Funity-sdk-core\u002Freleases\u002Flatest\n[get_unity]: https:\u002F\u002Funity3d.com\u002Fget-unity\n[documentation]: https:\u002F\u002Fwatson-developer-cloud.github.io\u002Funity-sdk\u002F\n[ibm-cloud-onboarding]: https:\u002F\u002Fcloud.ibm.com\u002Fregistration?target=\u002Fdeveloper\u002Fwatson&cm_sp=WatsonPlatform-WatsonServices-_-OnPageNavLink-IBMWatson_SDKs-_-Unity\n[watson-dashboard]: https:\u002F\u002Fcloud.ibm.com\u002F\n","# IBM Watson SDK for Unity\n[![部署与发布](https:\u002F\u002Fgithub.com\u002Fwatson-developer-cloud\u002Funity-sdk\u002Fworkflows\u002FDeploy%20and%20Publish\u002Fbadge.svg?branch=master)](https:\u002F\u002Fgithub.com\u002Fwatson-developer-cloud\u002Funity-sdk\u002Factions?query=workflow%3A%22Deploy+and+Publish%22)\n[![wdc-community.slack.com](https:\u002F\u002Fwdc-slack-inviter.mybluemix.net\u002Fbadge.svg)](http:\u002F\u002Fwdc-slack-inviter.mybluemix.net\u002F)\n[![semantic-release](https:\u002F\u002Fimg.shields.io\u002Fbadge\u002F%20%20%F0%9F%93%A6%F0%9F%9A%80-semantic--release-e10079.svg)](https:\u002F\u002Fgithub.com\u002Fsemantic-release\u002Fsemantic-release)\n[![CLA assistant](https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002Fwatson-developer-cloud_unity-sdk_readme_e2159b52e63d.png)](https:\u002F\u002Fcla-assistant.io\u002Fwatson-developer-cloud\u002Funity-sdk)\n\n## 停用通知\n本仓库及其相关发布的二进制文件已被弃用。虽然IBM团队将不再对此仓库提供主动支持，但我们仍然欢迎社区通过PR提交贡献，并会对这些贡献进行评审。请注意，后续更新将不再发布到正式的二进制版本中，因此在此更新之后所做的更改需要由用户自行编译。\n\n使用此SDK在Unity中构建基于Watson的应用程序。\n\n## 公告\n### 音调分析器弃用\n自本次主要版本6.0.0起，音调分析器API已被移除，以准备正式弃用。如果您希望继续使用此SDK调用音调分析器服务直至其最终停用，您需要使用之前的版本。\n\n2022年2月24日，IBM宣布音调分析器服务将被弃用。该服务将于2023年2月24日起停止提供。自2022年2月24日起，您将无法再创建新的实例。现有实例将继续得到支持，直到2023年2月24日为止。\n\n作为替代方案，我们建议您考虑迁移到IBM Cloud上的自然语言理解服务。通过自然语言理解服务，您可以使用预构建的分类模型来进行语调分析，从而轻松检测书面文本中的语言语调。更多信息请参阅[从Watson音调分析器客户互动端点迁移到自然语言理解](https:\u002F\u002Fcloud.ibm.com\u002Fdocs\u002Fnatural-language-understanding?topic=natural-language-understanding-tone_analytics)。\n\n### 自然语言分类器弃用\n自本次主要版本6.0.0起，NLC API已被移除，以准备正式弃用。如果您希望继续使用此SDK调用NLC服务直至其最终停用，您需要使用之前的版本。\n\n2021年8月9日，IBM宣布自然语言分类器服务将被弃用。该服务将于2022年8月8日起停止提供。自2021年9月9日起，您将无法再创建新的实例。现有实例将继续得到支持，直到2022年8月8日为止。任何在该日期仍存在的实例都将被删除。\n\n作为替代方案，我们鼓励您考虑迁移到IBM Cloud上的自然语言理解服务。该服务利用深度学习技术，可以从文本中提取关键词、类别、情感、情绪和语法等数据及洞察，并具备先进的多标签文本分类功能，从而为您的业务或行业提供更丰富的见解。更多信息请参阅[迁移到自然语言理解](https:\u002F\u002Fcloud.ibm.com\u002Fdocs\u002Fnatural-language-classifier?topic=natural-language-classifier-migrating)。\n\n### 更新watsonplatform.net的API端点URL\nwatsonplatform.net上的Watson API端点URL正在发生变化，自2021年5月26日起将不再有效。请更新您的调用以使用新的端点URL。更多信息请参阅https:\u002F\u002Fcloud.ibm.com\u002Fdocs\u002Fwatson?topic=watson-endpoint-change。\n\n## 开始之前\n请确保您已满足以下先决条件：\n\n* 您需要一个[IBM Cloud][ibm-cloud-onboarding]账户。\n* [Unity][get_unity]。您可以使用**免费**的Personal版本。\n\n## 配置Unity\n* 在Unity中更改构建设置（“文件 > 构建设置”），选择除Web Player\u002FWebGL之外的任何平台。IBM Watson SDK for Unity不支持Unity Web Player。\n* 如果您使用的是Unity 2018.2或更高版本，则需要在构建设置中将“脚本运行时版本”和“API兼容性级别”设置为“.NET 4.x等效”。我们需要访问安全选项来启用TLS 1.2。\n\n> 将MacOS升级到Mojave可能会导致Unity无法使用麦克风。如果您遇到此问题，请参阅这些[指南](https:\u002F\u002Fsupport.apple.com\u002Fen-us\u002FHT209175)，以配置Mojave下的麦克风。\n\n\n## 获取Watson SDK并将其添加到Unity\n您可以通过点击[这里][latest_release_sdk]获取最新版本的SDK。**同时，您还需要点击[这里][latest_release_core]下载最新的IBM Unity SDK Core版本。**\n\n### 将SDK源代码安装到您的Unity项目中\n将**`unity-sdk`**和**`unity-sdk-core`**目录移动到您的Unity项目的**`Assets`**目录下。_可选：将SDK目录重命名为`Watson`，将Core目录重命名为`IBMSdkCore`_。\n\n## 配置您的服务凭据\n要创建Watson服务实例及其凭据，请按照以下步骤操作。\n\n**注意：** 服务凭据不同于您的IBM Cloud账户用户名和密码。\n\n1. 确定需要配置哪些服务。\n1. 如果您已经配置过这些服务，请完成以下步骤。否则，请跳至第3步。\n    1. 登录到IBM Cloud网站：https:\u002F\u002Fcloud.ibm.com。\n    1. 单击您想要使用的服务。\n    1. 单击“服务凭据”。\n    1. 单击“查看凭据”以访问您的凭据。\n1. 如果您需要配置想要使用的服务，请完成以下步骤。\n    1. 登录到IBM Cloud网站：https:\u002F\u002Fcloud.ibm.com。\n    1. 单击“创建服务”按钮。\n    1. 在“Watson”类别下，选择您想要创建实例的服务并单击该服务。\n    1. 为服务和凭据命名，选择计划，然后单击底部的“创建”按钮。\n    1. 单击“服务凭据”。\n    1. 单击“查看凭据”以访问您的凭据。\n1. 您的服务凭据可用于在应用程序中实例化Watson服务。大多数服务还支持令牌，您也可以使用令牌来实例化服务。\n\n每个服务的凭据包含“用户名”、“密码”和端点“URL”，**或者**“API密钥”和端点“URL”。\n\n**警告：** 您有责任妥善保管自己的凭据。任何拥有您服务凭据的人都可以访问您的服务实例！\n\n## Watson 服务\n要在 Unity 中开始使用 Watson 服务，请按照链接查看代码。\n* [Assistant V1](\u002FScripts\u002FServices\u002FAssistant\u002FV1)\n* [Assistant V2](\u002FScripts\u002FServices\u002FAssistant\u002FV2)\n* [Compare Comply V1](\u002FScripts\u002FServices\u002FCompareComply\u002FV1)\n* [Conversation](\u002FScripts\u002FServices\u002FConversation\u002FV1)（已弃用 - 请使用 Assistant V1 或 Assistant V2）\n* [Discovery](\u002FScripts\u002FServices\u002FDiscovery\u002FV1)\n* [Language Translator V3](\u002FScripts\u002FServices\u002FLanguageTranslator\u002FV3)\n* [Natural Language Classifier](\u002FScripts\u002FServices\u002FNaturalLanguageClassifier\u002FV2)\n* [Natural Language Understanding](\u002FScripts\u002FServices\u002FNaturalLanguageUnderstanding\u002FV1)\n* [Personality Insights](\u002FScripts\u002FServices\u002FPersonalityInsights\u002FV3)\n* [Speech to Text](\u002FScripts\u002FServices\u002FSpeechToText\u002FV1)\n* [Text to Speech](\u002FScripts\u002FServices\u002FTextToSpeech\u002FV1)\n* [Tone Analyzer](\u002FScripts\u002FServices\u002FToneAnalyzer\u002FV3)\n* [Visual Recognition](\u002FScripts\u002FServices\u002FVisualRecognition\u002FV3)\n\n## 身份验证\nWatson 服务正在迁移到基于令牌的身份和访问管理 (IAM) 身份验证。\n\n- 对于某些服务实例，您可以通过 **[IAM](#iam)** 对 API 进行身份验证。\n- 在其他实例中，您需要提供该服务实例的 **[用户名和密码](#username-and-password)** 来进行身份验证。\n\n### 获取凭据\n要确定使用哪种身份验证方式，请查看服务凭据。对于所有 Watson 服务，获取用于身份验证的服务凭据的方式相同：\n\n1. 前往 IBM Cloud 的 **[仪表板][watson-dashboard]** 页面。\n2. 单击现有的 Watson 服务实例，或单击 **创建**。\n3. 单击 **显示** 查看您的服务凭据。\n4. 复制 `url` 以及 `apikey` 或 `username` 和 `password`。\n\n在您的代码中，您可以将这些值用于服务构造函数，或者在实例化服务后通过方法调用来使用它们。\n\n### IAM\n\n部分服务使用基于令牌的身份和访问管理 (IAM) 身份验证。IAM 身份验证使用服务 API 密钥获取访问令牌，并在每次调用时传递该令牌。访问令牌的有效期约为一小时，必须重新生成。\n\n您可以提供 IAM 服务的 **API 密钥** 或 **访问令牌**：\n\n- 使用 API 密钥时，SDK 将管理访问令牌的生命周期。SDK 会请求访问令牌、确保其有效，并在必要时刷新它。\n- 如果您希望自行管理访问令牌的生命周期，则可以使用访问令牌。有关详细信息，请参阅 [使用 IAM 令牌进行身份验证](https:\u002F\u002Fcloud.ibm.com\u002Fdocs\u002Fwatson?topic=watson-iam)。如果您想切换到 API 密钥，可以在协程中用 IAM API 密钥覆盖存储的 IAM 凭据，并等待直到凭据对象 `HasIamTokenData()` 返回 `true`。\n\n#### 提供 IAM API 密钥\n```cs\nAuthenticator authenticator;\nAssistantService assistant;\nstring versionDate = \"\u003Cservice-version-date>\";\n\nIEnumerator TokenExample()\n{\n    \u002F\u002F 使用 IAM 令牌选项创建身份验证器\n    authenticator = new IamAuthenticator(apikey: \"\u003Ciam-api-key>\");\n    while (!authenticator.CanAuthenticate())\n        yield return null;\n\n    assistant = new AssistantService(versionDate, authenticator);\n    assistant.SetServiceUrl(\"\u003Cservice-url>\");\n    assistant.ListWorkspaces(callback: OnListWorkspaces);\n}\n\nprivate void OnListWorkspaces(DetailedResponse\u003CWorkspaceCollection> response, IBMError error)\n{\n    Log.Debug(\"OnListWorkspaces()\", \"响应：{0}\", response.Response);\n}\n```\n\n#### 提供访问令牌\n```cs\nAuthenticator authenticator;\nAssistantService assistant;\nstring versionDate = \"\u003Cservice-version-date>\";\n\nvoid TokenExample()\n{\n    \u002F\u002F 使用 Bearer 令牌创建身份验证器\n    authenticator = new BearerTokenAuthenticator(\"\u003Cbearer-token>\");\n\n    assistant = new AssistantService(versionDate, authenticator);\n    assistant.SetServiceUrl(\"\u003Cservice-url>\");\n    assistant.ListWorkspaces(callback: OnListWorkspaces);\n}\n\nprivate void OnListWorkspaces(DetailedResponse\u003CWorkspaceCollection> response, IBMError error)\n{\n    Log.Debug(\"OnListWorkspaces()\", \"响应：{0}\", response.Response);\n}\n```\n\n### 用户名和密码\n```cs\nAuthenticator authenticator;\nAssistantService assistant;\nstring versionDate = \"\u003Cservice-version-date>\";\n\nvoid UsernamePasswordExample()\n{\n    Authenticator authenticator = new BasicAuthenticator(\"\u003Cusername>\", \"\u003Cpassword>\", \"\u003Curl>\");\n    assistant = new AssistantService(versionDate, authenticator);\n    assistant.SetServiceUrl(\"\u003Cservice-url>\");\n}\n```\n\n### 提供身份验证器\n\n有两种方法可以将上述找到的身份验证器提供给 SDK 以进行身份验证。\n\n#### 凭据文件（更简单！）\n\n使用凭据文件时，您只需将文件放置在正确的位置，SDK 就会自动解析并完成身份验证。您可以通过在服务实例的 **管理** 选项卡中点击凭据的 **下载** 按钮来获取此文件。\n\n下载的文件名为 `ibm-credentials.env`。这是 SDK 会查找的文件名，**必须** 保留此名称，除非您想配置文件路径（稍后会详细介绍）。SDK 会在以下位置按顺序查找您的 `ibm-credentials.env` 文件：\n\n- 您系统的主目录\n- 您正在使用 SDK 的项目的顶级目录\n\n只要正确设置了这些位置，您就不需要在代码中设置任何身份验证选项。例如，如果您为 Discovery 实例创建并下载了凭据文件，只需执行以下操作：\n\n```cs\npublic IEnumerator ExampleAutoService()\n{\n    Assistant assistantService = new Assistant(\"2019-04-03\");\n\n    \u002F\u002F 等待授权令牌\n    while (!assistantService.Authenticator.CanAuthenticate())\n        yield return null;\n\n    var listWorkspacesResult = assistantService.ListWorkspaces();\n}\n```\n\n就这么简单！\n\n如果您在代码中同时使用多个服务，并获得了两个不同的 `ibm-credentials.env` 文件，只需将内容合并到一个 `ibm-credentials.env` 文件中，SDK 就会自动为相应的服务分配身份验证器。\n\n如果您想配置凭据文件的位置或名称，可以设置名为 `IBM_CREDENTIALS_FILE` 的环境变量。**这将优先于上述指定的位置。** 设置方法如下：\n\n```bash\nexport IBM_CREDENTIALS_FILE=\"\u003Cpath>\"\n```\n\n其中 `\u003Cpath>` 类似于 `\u002Fhome\u002Fuser\u002FDownloads\u002F\u003Cfile_name>.env`。\n\n#### 手动方式\n\n如果您更倾向于在代码中手动设置身份验证值，SDK 同样支持这种方式。具体操作方式取决于您的服务实例提供的身份验证器类型。\n\n## 回调函数\n必须提供成功回调。您可以在回调中指定返回类型。\n```cs\nAssistantService assistant;\nstring assistantVersionDate = \"\u003Cassistant-version-date>\";\nAuthenticator assistantAuthenticator;\nstring workspaceId = \"\u003CworkspaceId>\";\n\nDiscoveryService discovery;\nstring discoveryVersionDate = \"\u003Cdiscovery-version-date>\";\nAuthenticator discoveryAuthenticator;\n\nprivate void Example()\n{\n    assistant = new AssistantService(assistantVersionDate, assistantAuthenticator);\n    assistant.SetServiceUrl(\"\u003Cservice-url>\");\n\n    discovery = new DiscoveryService(discoveryVersionDate, discoveryAuthenticator);\n    discovery.SetServiceUrl(\"\u003Cservice-url>\");\n\n    \u002F\u002F 使用特定的回调进行调用\n    assistant.Message(\n        callback: OnMessage,\n        workspaceId: workspaceId\n    );\n\n    discovery.ListEnvironments(\n        callback: OnGetEnvironments\n    );\n}\n\nprivate void OnMessage(DetailedResponse\u003CMessageResponse> response, IBMError error)\n{\n    Log.Debug(\"ExampleCallback.OnMessage()\", \"收到响应：{0}\", response.Response);\n}\n\nprivate void OnGetEnvironments(DetailedResponse\u003CListEnvironmentsResponse> response, IBMError error)\n{\n    Log.Debug(\"ExampleCallback.OnGetEnvironments()\", \"收到响应：{0}\", response.Response);\n}\n```\n\n由于成功回调的签名是泛型的，而失败回调的签名始终相同，因此可以使用一组回调来处理多个调用。\n```cs\nAssistantService assistant;\nstring assistantVersionDate = \"\u003Cassistant-version-date>\";\nAuthenticator assistantAuthenticator;\nstring workspaceId = \"\u003CworkspaceId>\";\n\nDiscoveryService discovery;\nstring discoveryVersionDate = \"\u003Cdiscovery-version-date>\";\nAuthenticator discoveryAuthenticator;\n\nprivate void Example()\n{\n    assistant = new AssistantService(assistantVersionDate, assistantAuthenticator);\n    assistant.SetServiceUrl(\"\u003Cservice-url>\");\n\n    \u002F\u002F 使用通用回调进行调用\n    JObject input = new JObject();\n    input.Add(\"text\", \"\");\n    assistant.Message(\n        callback: OnSuccess,\n        workspaceId: workspaceId,\n        input: input\n    );\n\n    discovery = new DiscoveryService(discoveryVersionDate, discoveryAuthenticator);\n    discovery.SetServiceUrl(\"\u003Cservice-url>\");\n\n    discovery.ListEnvironments(\n        callback: OnSuccess\n    );\n}\n\n\u002F\u002F 通用的成功回调\nprivate void OnSuccess\u003CT>(DetailedResponse\u003CT> resp, IBMError error)\n{\n    Log.Debug(\"ExampleCallback.OnSuccess()\", \"收到响应：{0}\", resp.Response);\n}\n```\n\n您还可以使用匿名回调：\n```cs\nAssistantService assistant;\nstring assistantVersionDate = \"\u003Cassistant-version-date>\";\nAuthenticator assistantAuthenticator;\nstring workspaceId = \"\u003CworkspaceId>\";\n\nprivate void Example()\n{\n    assistant = new AssistantService(assistantVersionDate, assistantAuthenticator);\n\n    assistant.ListWorkspaces(\n        callback: (DetailedResponse\u003CWorkspaceCollection> response, IBMError error) =>\n        {\n            Log.Debug(\"ExampleCallback.OnSuccess()\", \"ListWorkspaces 的结果：{0}\", response.Response);\n        },\n        pageLimit: 1,\n        includeCount: true,\n        sort: \"-name\",\n        includeAudit: true\n    );\n    assistant.SetServiceUrl(\"\u003Cservice-url>\");\n}\n```\n\n您可以通过检查 `error` 响应来确定调用是否出现错误。\n```cs\nAssistantService assistant;\nstring assistantVersionDate = \"\u003Cassistant-version-date>\";\nAuthenticator assistantAuthenticator;\nstring workspaceId = \"\u003CworkspaceId>\";\n\nprivate void Example()\n{\n    assistant = new AssistantService(versionDate, authenticator);\n\n    assistant.Message(OnMessage, workspaceId);\n}\n\nprivate void OnMessage(DetailedResponse\u003CMessageResponse> response, IBMError error)\n{\n    if (error == null)\n    {\n        Log.Debug(\"ExampleCallback.OnMessage()\", \"收到响应：{0}\", response.Response);\n    }\n    else\n    {\n        Log.Debug(\"ExampleCallback.OnMessage()\", \"收到错误：{0}, {1}, {3}\", error.StatusCode, error.ErrorMessage, error.Response);\n    }\n}\n```\n\n## 自定义请求头\n您可以通过将自定义请求头添加到服务中来发送它们。\n\n```cs\nAssistantService assistant;\nstring assistantVersionDate = \"\u003Cassistant-version-date>\";\nAuthenticator assistantAuthenticator;\nstring workspaceId = \"\u003CworkspaceId>\";\n\nvoid Example()\n{\n    assistant = new AssistantService(assistantVersionDate, assistantAuthenticator);\n\n    \u002F\u002F 向 REST 调用添加自定义头\n    assistant.WithHeader(\"X-Watson-Metadata\", \"customer_id=some-assistant-customer-id\");\n    assistant.Message(OnSuccess, \"\u003Cworkspace-id>\");\n}\n\nprivate void OnSuccess(DetailedResponse\u003CMessageResponse> response, IBMError error)\n{\n    Log.Debug(\"ExampleCallback.OnMessage()\", \"收到响应：{0}\", response.Response);\n}\n```\n\n## 响应头\n您可以在 DetailedResponse 中的 `headers` 对象中获取响应头。\n\n```cs\nAssistantService assistant;\nstring assistantVersionDate = \"\u003Cassistant-version-date>\";\nAuthenticator assistantAuthenticator;\nstring workspaceId = \"\u003CworkspaceId>\";\n\nvoid Example()\n{\n    assistant = new AssistantService(assistantVersionDate, assistantAuthenticator);\n\n    assistant.Message(OnMessage, \"\u003Cworkspace-id>\");\n}\n\nprivate void OnMessage(DetailedResponse\u003CMessageResponse> response, IBMError error)\n{\n    \u002F\u002F 列出响应头对象中的所有头\n    foreach (KeyValuePair\u003Cstring, object> kvp in response.Headers)\n    {\n        Log.Debug(\"ExampleCustomHeader.OnMessage()\", \"{0}: {1}\", kvp.Key, kvp.Value);\n    }\n}\n```\n\n## 事务ID\n每个 SDK 调用都会返回一个响应，其中 `X-Global-Transaction-Id` 头部包含事务 ID。结合服务实例所在的区域，此 ID 可帮助支持团队从相关日志中排查问题。\n\n```cs\npublic void ExampleGetTransactionId()\n{\n    AssistantService service = new AssistantService(\"{version-date}\");\n    service.ListWorkspaces(\n        callback: (DetailedResponse\u003CWorkspace> response, IBMError error) =>\n        {\n            if(error != null)\n            {\n                Log.Debug(\"AssistantServiceV1\", \"事务 ID: {0}\", error.ResponseHeaders[\"X-Global-Transaction-Id\"]);\n            }\n            else\n            {\n                Log.Debug(\"AssistantServiceV1\", \"事务 ID: {0}\", response.Headers[\"X-Global-Transaction-Id\"]);\n            }\n        }\n    );\n}\n```\n\n然而，如果 API 因某种原因未返回响应，则事务 ID 将不可用。在这种情况下，您可以在请求中设置自己的事务 ID。例如，在下面的示例中，将 `\u003Cmy-unique-transaction-id>` 替换为唯一的事务 ID。\n\n```cs\npublic void ExampleSetTransactionId()\n{\n    AssistantService service = new AssistantService(\"{version-date}\");\n    service.WithHeader(\"X-Global-Transaction-Id\", \"\u003Cmy-unique-transaction-id>\");\n    service.ListWorkspaces(\n        callback: (DetailedResponse\u003CWorkspace> response, IBMError error) =>\n        {\n            if(error != null)\n            {\n                Log.Debug(\"AssistantServiceV1\", \"事务 ID: {0}\", error.ResponseHeaders[\"X-Global-Transaction-Id\"]);\n            }\n            else\n            {\n                Log.Debug(\"AssistantServiceV1\", \"事务 ID: {0}\", response.Headers[\"X-Global-Transaction-Id\"]);\n            }\n        }\n    );\n}\n```\n\n## TLS 1.0 支持\nWatson 服务已将其主机升级到 TLS 1.2。达拉斯地区有一个适用于流媒体的 TLS 1.0 端点。要在其他地区进行流媒体传输，请使用 Unity 2018.2，并在构建设置中将 **脚本运行时版本** 设置为 `.NET 4.x 等效`。若要在较早版本的 Unity 中支持语音转文本功能，请在达拉斯地区创建实例。\n\n## 禁用 SSL 验证\n您可以在进行服务调用时禁用 SSL 验证。\n```cs\nAssistantService assistant;\nstring assistantVersionDate = \"\u003Cassistant-version-date>\";\nAuthenticator assistantAuthenticator;\nstring workspaceId = \"\u003CworkspaceId>\";\n\nvoid Example()\n{\n    authenticator.DisableSslVerification = true;\n    assistant = new AssistantService(assistantVersionDate, assistantAuthenticator);\n\n    \u002F\u002F 禁用 SSL 验证\n    assistant.DisableSslVerification = true;\n}\n```\n\n## IBM Cloud Pak for Data(ICP4D)\n如果您的服务实例属于 ICP4D，则以下是初始化助理服务的两种方法。\n\n#### 1) 提供 `username`、`password`、`icp4d_url` 和 `authentication_type`\n\nSDK 将为用户管理令牌\n\n```cs\n    CloudPakForDataAuthenticator authenticator = new CloudPakForDataAuthenticator(\"\u003Curl>\", \"\u003Cusername>\", \"\u003Cpassword>\");\n    while(!authenticator.CanAuthenticate())\n    {\n        yield return null;\n    }\n    service = new AssistantService(versionDate, authenticator);\n```\n\n#### 2) 提供访问令牌\n\n```cs\n    BearerTokenAuthenticator = new BearerTokenAuthenticator(\"\u003CaccessToken>\");\n    while(!authenticator.CanAuthenticate())\n    {\n        yield return null;\n    }\n    service = new AssistantService(versionDate, authenticator);\n```\n\n## IBM Cloud Private\nWatson Unity SDK 不支持 IBM Cloud Private，因为 UnityWebRequest 不支持通过代理连接。\n\n## 文档\n文档可以在此处找到[文档]。您也可以通过选择 Watson 菜单中的 API 参考（**Watson -> API 参考**）来访问文档。\n\n## 入门视频\n您可以在 [YouTube](https:\u002F\u002Fwww.youtube.com\u002Fwatch?v=sNPsdUWSi34&list=PLZDyxLlNKRY9b2vurEhkSoNWZN5c5l4Nr) 上观看 IBM Watson SDK for Unity 的入门视频。\n\n## 问题\n如果您在使用 API 时遇到问题，或对 Watson 服务有任何疑问，请参阅 [Stack Overflow](https:\u002F\u002Fstackoverflow.com\u002Fquestions\u002Ftagged\u002Fibm-watson+unity)。\n\n## IBM 开源项目\n您可以在 [IBM Github 页面](http:\u002F\u002Fibm.github.io\u002F)上找到更多开源项目。\n\n## 许可证\n本库采用 Apache 2.0 许可证。完整的许可证文本可在 [LICENSE](LICENSE) 中找到。\n\n## 贡献\n请参阅 [CONTRIBUTING.md](.github\u002FCONTRIBUTING.md)。\n\n## 特色项目\n我们非常乐意展示使用本 SDK 的优秀开源项目！如果您希望将自己的项目加入列表，请随时提交一个链接到该项目的问题。\n\n[wdc]: https:\u002F\u002Fwww.ibm.com\u002Fwatson\u002Fdeveloper\u002F\n[wdc_unity_sdk]: https:\u002F\u002Fgithub.com\u002Fwatson-developer-cloud\u002Funity-sdk\n[latest_release_sdk]: https:\u002F\u002Fgithub.com\u002Fwatson-developer-cloud\u002Funity-sdk\u002Freleases\u002Flatest\n[latest_release_core]: https:\u002F\u002Fgithub.com\u002FIBM\u002Funity-sdk-core\u002Freleases\u002Flatest\n[get_unity]: https:\u002F\u002Funity3d.com\u002Fget-unity\n[documentation]: https:\u002F\u002Fwatson-developer-cloud.github.io\u002Funity-sdk\u002F\n[ibm-cloud-onboarding]: https:\u002F\u002Fcloud.ibm.com\u002Fregistration?target=\u002Fdeveloper\u002Fwatson&cm_sp=WatsonPlatform-WatsonServices-_-OnPageNavLink-IBMWatson_SDKs-_-Unity\n[watson-dashboard]: https:\u002F\u002Fcloud.ibm.com\u002F","# IBM Watson Unity SDK 快速上手指南\n\n> **⚠️ 重要提示：弃用通知**\n> 本仓库及发布的二进制文件已被 IBM 官方标记为**弃用（Deprecated）**。IBM 团队将不再提供主动支持，也不再发布新的二进制更新。社区提交的 PR 仍会被审查，但后续变更需开发者自行编译。建议新项目评估迁移方案或仅用于维护现有应用。\n\n## 1. 环境准备\n\n在开始之前，请确保满足以下前置条件：\n\n*   **IBM Cloud 账号**：您需要拥有一个 [IBM Cloud](https:\u002F\u002Fcloud.ibm.com) 账号以获取服务实例和凭证。\n*   **Unity 编辑器**：\n    *   推荐使用 **Unity 2018.2** 或更高版本。\n    *   可以使用免费的 **Personal** 版本。\n*   **构建设置配置**（关键步骤）：\n    1.  打开 Unity，进入 `File > Build Settings`。\n    2.  选择任意平台，但**不支持** Web Player 或 WebGL。\n    3.  点击 `Player Settings`，在 `Other Settings` 中找到：\n        *   **Scripting Runtime Version**: 设置为 `.NET 4.x Equivalent`。\n        *   **Api Compatibility Level**: 设置为 `.NET 4.x`。\n        *   *原因：SDK 需要访问安全选项以启用 TLS 1.2。*\n*   **macOS 用户注意**：如果您升级到 macOS Mojave 或更高版本，可能需要在系统隐私设置中手动允许 Unity 访问麦克风（用于语音服务）。\n\n## 2. 安装步骤\n\n由于官方已停止二进制发布，推荐通过源码方式集成到项目中。\n\n### 第一步：下载 SDK 源码\n您需要下载两个核心组件：\n1.  **Watson SDK**: 从 [unity-sdk 最新 Release](https:\u002F\u002Fgithub.com\u002Fwatson-developer-cloud\u002Funity-sdk\u002Freleases) 下载源码包。\n2.  **Core SDK**: 从 [unity-sdk-core 最新 Release](https:\u002F\u002Fgithub.com\u002Fwatson-developer-cloud\u002Funity-sdk-core\u002Freleases) 下载源码包（**必须**）。\n\n### 第二步：导入 Unity 项目\n1.  解压下载的两个压缩包。\n2.  将解压后的 `unity-sdk` 文件夹重命名为 `Watson`（可选，但推荐）。\n3.  将解压后的 `unity-sdk-core` 文件夹重命名为 `IBMSdkCore`（可选，但推荐）。\n4.  将这两个文件夹直接移动到您的 Unity 项目的 **`Assets`** 目录下。\n5.  返回 Unity 编辑器，等待资源重新导入和编译完成。\n\n## 3. 基本使用\n\n### 3.1 获取服务凭证\n在使用代码前，需在 IBM Cloud 控制台获取凭证：\n1.  登录 [IBM Cloud Dashboard](https:\u002F\u002Fcloud.ibm.com)。\n2.  创建或选择一个 Watson 服务实例（如 Assistant, Speech to Text 等）。\n3.  点击左侧菜单的 **Service credentials** -> **View credentials**。\n4.  记录 `apikey` (或 `username`\u002F`password`) 以及 `url`。\n\n> **安全警告**：请勿将凭证硬编码并提交到公共代码仓库。\n\n### 3.2 认证方式\n目前主要推荐使用 **IAM API Key** 方式进行认证。\n\n#### 方式 A：使用 IAM API Key（推荐）\nSDK 会自动管理 Access Token 的生命周期（获取、验证和刷新）。\n\n```csharp\nusing IBM.Watson.Assistant.V1;\nusing IBM.Watson.Core;\nusing IBM.Watson.Core.Authentication;\nusing IBM.Watson.Core.DetailedResponse;\nusing System.Collections;\n\npublic class WatsonExample : MonoBehaviour\n{\n    private AssistantService assistantService;\n    private string versionDate = \"2021-06-14\"; \u002F\u002F 替换为对应服务的版本日期\n    private string iamApiKey = \"\u003CYOUR_IAM_API_KEY>\";\n    private string serviceUrl = \"\u003CYOUR_SERVICE_URL>\";\n\n    IEnumerator Start()\n    {\n        \u002F\u002F 1. 创建认证器\n        IamAuthenticator authenticator = new IamAuthenticator(apikey: iamApiKey);\n        \n        \u002F\u002F 2. 等待认证器准备就绪\n        while (!authenticator.CanAuthenticate())\n            yield return null;\n\n        \u002F\u002F 3. 初始化服务\n        assistantService = new AssistantService(versionDate, authenticator);\n        assistantService.SetServiceUrl(serviceUrl);\n\n        \u002F\u002F 4. 调用 API (示例：列出工作空间)\n        assistantService.ListWorkspaces(OnListWorkspaces);\n    }\n\n    private void OnListWorkspaces(DetailedResponse\u003CWorkspaceCollection> response, IBMError error)\n    {\n        if (error != null)\n        {\n            Log.Error(\"Watson Example\", \"Error: {0}\", error.ToString());\n            return;\n        }\n        Log.Debug(\"Watson Example\", \"Response: {0}\", response.Response);\n    }\n}\n```\n\n#### 方式 B：使用凭证文件（最简便）\n如果您不想在代码中编写认证逻辑，可以使用配置文件：\n1.  在 IBM Cloud 服务凭证页面点击 **Download** 下载 `ibm-credentials.env` 文件。\n2.  将该文件放置在以下任一位置：\n    *   您的系统用户主目录 (`Home Directory`)。\n    *   Unity 项目的根目录（与 `Assets` 文件夹同级）。\n3.  代码中无需显式传递 `authenticator`，SDK 会自动读取该文件：\n\n```csharp\n\u002F\u002F 无需手动创建 Authenticator，SDK 会自动从 ibm-credentials.env 加载\nassistantService = new AssistantService(versionDate); \nassistantService.SetServiceUrl(\"\u003CYOUR_SERVICE_URL>\"); \u002F\u002F 如果文件中未包含 URL，仍需设置\nassistantService.ListWorkspaces(OnListWorkspaces);\n```\n\n### 3.3 可用服务列表\n集成成功后，您可以使用以下服务（部分旧服务已弃用，请参考官方文档迁移）：\n*   Assistant V1 \u002F V2\n*   Discovery V1\n*   Language Translator V3\n*   Natural Language Understanding V1\n*   Speech to Text V1\n*   Text to Speech V1\n*   Visual Recognition V3\n\n*注：Tone Analyzer 和 Natural Language Classifier 已在 v6.0.0 中移除，如需使用请下载旧版本 SDK 并尽快迁移至 Natural Language Understanding。*","一家独立游戏工作室正在开发一款面向全球市场的叙事驱动型冒险游戏，需要让玩家通过语音或文字与 NPC 进行自然的情感互动。\n\n### 没有 unity-sdk 时\n- 开发者必须手动编写复杂的 HTTP 请求代码来调用 IBM Watson 服务，处理鉴权、序列化及错误重试逻辑耗时且易错。\n- 难以实时分析玩家对话中的情绪色调（如愤怒、悲伤），导致 NPC 只能机械回复，无法根据玩家情绪动态调整语气和剧情走向。\n- 缺乏原生的文本分类能力，团队需自行训练模型或硬编码关键词匹配规则，无法准确识别玩家意图（如“攻击”、“求助”或“交易”）。\n- 跨平台部署困难，每次更新 AI 逻辑都需要重新底层适配不同操作系统的网络库，严重拖慢迭代速度。\n\n### 使用 unity-sdk 后\n- 直接通过封装好的 API 接口一键接入 Watson 服务，自动处理认证与数据流转，将后端集成时间从数天缩短至几小时。\n- 利用内置的自然语言理解模块，实时捕捉玩家输入的情感倾向，让 NPC 能即时做出符合情境的共情反应，大幅提升沉浸感。\n- 借助预制的分类模型精准识别玩家指令意图，无需维护庞大的关键词库，即可实现流畅的多轮对话交互。\n- 依托 Unity 原生兼容性，一套代码即可无缝发布到 PC、主机及移动端，确保 AI 功能在所有平台上稳定运行。\n\nunity-sdk 将复杂的认知智能服务转化为游戏开发者的直观工具，让创建拥有“情感”的智能 NPC 变得像编写普通脚本一样简单高效。","https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002Fwatson-developer-cloud_unity-sdk_5e175c61.png","watson-developer-cloud","IBM Watson APIs","https:\u002F\u002Foss.gittoolsai.com\u002Favatars\u002Fwatson-developer-cloud_94f55767.png","A collection of SDKs that work with the Watson REST APIs. For more information about the APIs, see https:\u002F\u002Fcloud.ibm.com\u002Fdocs?tab=api-docs&category=ai",null,"ibmwatsonx","https:\u002F\u002Fwww.ibm.com\u002Fwatson\u002Fdeveloper\u002F","https:\u002F\u002Fgithub.com\u002Fwatson-developer-cloud",[81,85,89],{"name":82,"color":83,"percentage":84},"C#","#178600",95,{"name":86,"color":87,"percentage":88},"HTML","#e34c26",4.8,{"name":90,"color":91,"percentage":92},"Shell","#89e051",0.2,565,205,"2026-03-12T15:30:39","Apache-2.0","Windows, macOS","未说明",{"notes":100,"python":101,"dependencies":102},"该工具是用于 Unity 游戏引擎的 C# SDK，非 Python 项目。不支持 Unity Web Player\u002FWebGL 平台。在 Unity 2018.2 及以上版本中，必须将脚本运行时版本和 API 兼容性级别设置为'.NET 4.x Equivalent'以启用 TLS 1.2。macOS Mojave 用户可能需要额外配置麦克风权限。部分 Watson 服务（如 Tone Analyzer 和 Natural Language Classifier）已弃用。","不适用 (基于 Unity\u002FC#)",[103,104,105],"Unity (个人版或更高)","IBM Unity SDK Core",".NET 4.x Equivalent (Unity 2018.2+)",[107,14],"其他",[109,110,111,64,112,113,114,115,116,117,118],"bluemix","watson-sdk","watson","unity3d","cognitive","vr","artificial-intelligence","hacktoberfest","watson-services","ibm-cloud","2026-03-27T02:49:30.150509","2026-04-10T06:28:30.623201",[122,127,132,137,142,147],{"id":123,"question_zh":124,"answer_zh":125,"source_url":126},27236,"为什么 SpeechRecognitionResult 中的 word_alternatives 字段从未被填充？","该问题已被解决。维护者建议相关讨论转移到 Slack 频道或参考关联的 Issue #279 以获取更多信息。如果您遇到类似问题，请检查是否使用了最新版本的 SDK。","https:\u002F\u002Fgithub.com\u002Fwatson-developer-cloud\u002Funity-sdk\u002Fissues\u002F275",{"id":128,"question_zh":129,"answer_zh":130,"source_url":131},27237,"如何在 Microsoft Hololens (UWP) 平台上使用 Watson Unity SDK？","SDK 已更新以支持 UWP。维护者提供了一个专门针对 Hololens 的示例场景包，用于流式语音转文本，其中包含了详细的设置说明。您可以查看 PR #256 的评论获取该 Unity 包和进一步的操作指南：https:\u002F\u002Fgithub.com\u002Fwatson-developer-cloud\u002Funity-sdk\u002Fpull\u002F256#issuecomment-339780759","https:\u002F\u002Fgithub.com\u002Fwatson-developer-cloud\u002Funity-sdk\u002Fissues\u002F173",{"id":133,"question_zh":134,"answer_zh":135,"source_url":136},27238,"编译时出现错误：'MessageResponse' 类型不包含 'intents' 的定义，该如何访问 Assistant 的意图？","这是因为 MessageResponse 模型在 API 规范中被定义为具有额外属性。您需要先将响应对象序列化为 fsData，然后再反序列化为 MessageResponse 对象才能访问这些字段。代码示例如下：\n1. 将 response 转换为 fsData。\n2. 创建 MessageResponse 实例。\n3. 使用 _serializer.TryDeserialize 将 fsData 反序列化到该实例中。\n注意：直接转换可能会丢失未在模型中定义的字段。","https:\u002F\u002Fgithub.com\u002Fwatson-developer-cloud\u002Funity-sdk\u002Fissues\u002F450",{"id":138,"question_zh":139,"answer_zh":140,"source_url":141},27239,"连接到 Speech to Text 服务的 WebSocket 连接立即关闭或无法工作，如何解决？","此问题通常由 .NET 版本兼容性引起。您可以尝试以下两种解决方案之一：\n1. 在 Unity 的 Build Settings 中将 Scripting Backend 设置为 '.NET 4.x'。\n2. 升级 Watson Unity SDK 到最新版本（至少 2.8.0 及以上），该版本已修复了 Mac 和其他平台上的相关问题。","https:\u002F\u002Fgithub.com\u002Fwatson-developer-cloud\u002Funity-sdk\u002Fissues\u002F447",{"id":143,"question_zh":144,"answer_zh":145,"source_url":146},27240,"Speech to Text 服务的 Keep Alive 机制失效，导致会话在一分钟后超时断开，怎么办？","这是一个已知问题，特别是在构建的可执行文件（.exe）中可能出现 Token 为空导致的 InvalidOperationException 错误。目前的临时解决方法是使用 Coroutine（协程），每隔半秒重新启动服务以保持连接，但这会导致服务间歇性中断。建议检查 IAM Token 的获取逻辑，确保在构建版本中正确初始化了认证信息。","https:\u002F\u002Fgithub.com\u002Fwatson-developer-cloud\u002Funity-sdk\u002Fissues\u002F325",{"id":148,"question_zh":149,"answer_zh":150,"source_url":151},27241,"编译报错：命名空间 'IBM' 中不存在类型或命名空间名称 'Cloud'，缺少程序集引用？","此错误通常意味着 IBM Cloud SDK 的核心库未正确导入或版本不匹配。请确保您不仅安装了 Watson Unity SDK，还安装了其依赖的 IBM Cloud SDK 包。检查 Unity 项目的 Packages 文件夹或 Asset 目录，确认所有必要的 DLL 文件（特别是包含 IBM.Cloud 命名空间的程序集）都已存在且未被裁剪。如果是通过 Package Manager 安装，请尝试重新安装或更新到兼容版本。","https:\u002F\u002Fgithub.com\u002Fwatson-developer-cloud\u002Funity-sdk\u002Fissues\u002F597",[153,158,163,168,173,178,183,188,193,198,203,208,213,218,223,228,233,238,243,248],{"id":154,"version":155,"summary_zh":156,"released_at":157},180314,"v6.0.0","# [6.0.0](https:\u002F\u002Fgithub.com\u002Fwatson-developer-cloud\u002Funity-sdk\u002Fcompare\u002Fv5.2.0...v6.0.0) (2022-03-21)\n\n\n### 功能特性\n\n* **assistant-v1:** 使用 api-def: master 和 generator: 3.46.0 生成 ([3cb486e](https:\u002F\u002Fgithub.com\u002Fwatson-developer-cloud\u002Funity-sdk\u002Fcommit\u002F3cb486ec41f59e6a53b6d0f6824db00b19d2d51f))\n* **assistant-v2:** 使用 api-def: master 和 generator: 3.46.0 生成 ([03c3646](https:\u002F\u002Fgithub.com\u002Fwatson-developer-cloud\u002Funity-sdk\u002Fcommit\u002F03c3646b85b9eac8da2ec44c0bead345fd71a2cf))\n* **discovery-v1:** 更新了文档状态和查询聚合功能 ([97a432e](https:\u002F\u002Fgithub.com\u002Fwatson-developer-cloud\u002Funity-sdk\u002Fcommit\u002F97a432ea49f9e87a288df92a1e3d0bb662c63510))\n* **natural-language-understanding-v1:** 将元数据改为字典格式，并更新了注释 ([34fd074](https:\u002F\u002Fgithub.com\u002Fwatson-developer-cloud\u002Funity-sdk\u002Fcommit\u002F34fd074fea605cb264a3e777237d283b6b3e318e))\n* **speech-to-text-v1:** 添加了 supportedFeatures 中的 customAcousticModel 属性，并更新了注释 ([c11e928](https:\u002F\u002Fgithub.com\u002Fwatson-developer-cloud\u002Funity-sdk\u002Fcommit\u002Fc11e92849861dd35b3fec2c2fb012019913aec2d))\n\n\n### 破坏性变更\n\n* **discovery-v1:** QueryAggregation：BREAKING 查询聚合子类已更改。\n* **assistant-v2:** MessageOutputDebug：BREAKING nodesVisited 类型从 DialogNodesVisited 更改为 DialogNodeVisited；RuntimeEntity：BREAKING 移除了可选的 metadata 属性。\n* **assistant-v1:** OutputData：BREAKING 移除了必需的 text 属性；RuntimeEntity：BREAKING 移除了可选的 metadata 属性。\n\n\n","2022-03-21T16:58:20",{"id":159,"version":160,"summary_zh":161,"released_at":162},180315,"v5.2.0","# [5.2.0](https:\u002F\u002Fgithub.com\u002Fwatson-developer-cloud\u002Funity-sdk\u002Fcompare\u002Fv5.1.2...v5.2.0) (2021-09-14)\n\n\n### 错误修复\n\n* **assistant-v2:** 添加新属性，用于 assistant v2 的回答 ([c1ac34a](https:\u002F\u002Fgithub.com\u002Fwatson-developer-cloud\u002Funity-sdk\u002Fcommit\u002Fc1ac34a3ae94ee726663c573a254a16515a2daa4))\n* **assistant-v2:** 修复 assistant v2 的集成测试 ([2ed2368](https:\u002F\u002Fgithub.com\u002Fwatson-developer-cloud\u002Funity-sdk\u002Fcommit\u002F2ed236864640b4a8c547ff4d3e896cc4be875100))\n* **discovery-v1:** 修复 status details 属性。将 authentication 更改为 authenticated ([7975bd1](https:\u002F\u002Fgithub.com\u002Fwatson-developer-cloud\u002Funity-sdk\u002Fcommit\u002F7975bd12c6480362669a3c48811ca676551c8895))\n* **discovery-v1:** 将 json 类型从 Type 改为 type ([0a3ed73](https:\u002F\u002Fgithub.com\u002Fwatson-developer-cloud\u002Funity-sdk\u002Fcommit\u002F0a3ed73edeba57c97c46fc5a5008d6c98f0b605e))\n* **discovery-v1:** 将 status 从 string 更新为 StatusDetails ([2ee9531](https:\u002F\u002Fgithub.com\u002Fwatson-developer-cloud\u002Funity-sdk\u002Fcommit\u002F2ee9531814e423d34096d6ffdd351377b11bfb5b))\n* **integration-test:** 更新针对 NLU 的集成测试更改 ([1163183](https:\u002F\u002Fgithub.com\u002Fwatson-developer-cloud\u002Funity-sdk\u002Fcommit\u002F1163183dca11a6e40f47cd50e014b6ff5cfeb019))\n* **integration-testing:** 修复集成测试中的 add deleteSessionRespondse ([076790a](https:\u002F\u002Fgithub.com\u002Fwatson-developer-cloud\u002Funity-sdk\u002Fcommit\u002F076790a5e6d08fceecc6122fa3cb61a99352099b))\n* **nlu:** 通过更改返回类型并移除不必要的内容，修复了 listClassificationsModels 方法 ([bda5e68](https:\u002F\u002Fgithub.com\u002Fwatson-developer-cloud\u002Funity-sdk\u002Fcommit\u002Fbda5e68288b93528fcc5a11409689c5705e4a937))\n* **services:** 更新注释和格式更改 ([d8c041d](https:\u002F\u002Fgithub.com\u002Fwatson-developer-cloud\u002Funity-sdk\u002Fcommit\u002Fd8c041d53cc7ed2542cd16aeb86b89587fe7ad44))\n\n\n### 功能新增\n\n* **assistant-v1:** 为消歧义添加枚举值 ([521f9cb](https:\u002F\u002Fgithub.com\u002Fwatson-developer-cloud\u002Funity-sdk\u002Fcommit\u002F521f9cb111cc8ed3b4a10625e4fc3b12085a049e))\n* **assistant-v1:** 向 Image 响应类型添加 alt_text 属性 ([1743425](https:\u002F\u002Fgithub.com\u002Fwatson-developer-cloud\u002Funity-sdk\u002Fcommit\u002F17434256dd15348df422b3d09215c8de196bed2b))\n* **assistant-v2:** 向 Image 响应类型添加 alt_text 属性 ([cfb1ab8](https:\u002F\u002Fgithub.com\u002Fwatson-developer-cloud\u002Funity-sdk\u002Fcommit\u002Fcfb1ab81626f2cfd9ea2c81674005f3147b740a9))\n* **assistant-v2:** 向 MessageContextGlobalSystem 添加 session_start_time 和 state 属性 ([4bb90ac](https:\u002F\u002Fgithub.com\u002Fwatson-developer-cloud\u002Funity-sdk\u002Fcommit\u002F4bb90acb6383b30897fd502e61850ace31a0b358))\n* **discovery-v2:** 更新 CreateProjectConstants 的枚举值 ([0b47643](https:\u002F\u002Fgithub.com\u002Fwatson-developer-cloud\u002Funity-sdk\u002Fcommit\u002F0b4764350dcfae60075c36dfb000ef6ba1f60a11))","2021-09-14T21:16:42",{"id":164,"version":165,"summary_zh":166,"released_at":167},180316,"v5.1.2","## [5.1.2](https:\u002F\u002Fgithub.com\u002Fwatson-developer-cloud\u002Funity-sdk\u002Fcompare\u002Fv5.1.1...v5.1.2) (2021-08-24)\n\n\n### 错误修复\n\n* **nlc:** 添加弃用警告 ([b8f3355](https:\u002F\u002Fgithub.com\u002Fwatson-developer-cloud\u002Funity-sdk\u002Fcommit\u002Fb8f3355ebd20dd2ae822a207dfb63188e77e9b42)), 关闭 [#9627](https:\u002F\u002Fgithub.com\u002Fwatson-developer-cloud\u002Funity-sdk\u002Fissues\u002F9627)\n\n\n\n","2021-08-24T18:20:48",{"id":169,"version":170,"summary_zh":171,"released_at":172},180317,"v5.1.1","## [5.1.1](https:\u002F\u002Fgithub.com\u002Fwatson-developer-cloud\u002Funity-sdk\u002Fcompare\u002Fv5.1.0...v5.1.1) (2021-06-16)\n\n\n### 错误修复\n\n* **discovery-v1:** 添加日期时间格式 ([f83b6ad](https:\u002F\u002Fgithub.com\u002Fwatson-developer-cloud\u002Funity-sdk\u002Fcommit\u002Ff83b6ad710510c6b07d3ef83522dfd094c390d9d))\n* **discovery-v2:** 将增强功能添加到表单数据中 ([acfd7b5](https:\u002F\u002Fgithub.com\u002Fwatson-developer-cloud\u002Funity-sdk\u002Fcommit\u002Facfd7b5e4307af3d600f3e928e0f1a18905bab97))\n* **visual-recognition-v4:** 添加日期时间格式 ([3ea83df](https:\u002F\u002Fgithub.com\u002Fwatson-developer-cloud\u002Funity-sdk\u002Fcommit\u002F3ea83dfde0419a2a088f5f0048bf31b6bd6a6374))\n\n\n\n","2021-06-16T14:32:03",{"id":174,"version":175,"summary_zh":176,"released_at":177},180318,"v5.1.0","# [5.1.0](https:\u002F\u002Fgithub.com\u002Fwatson-developer-cloud\u002Funity-sdk\u002Fcompare\u002Fv5.0.2...v5.1.0) (2021-06-10)\n\n\n### 功能\n\n* **生成：** 使用 api 定义 sdk-2021-05-11-rerelease 和 gen 3.31.0 生成 ([44079dd](https:\u002F\u002Fgithub.com\u002Fwatson-developer-cloud\u002Funity-sdk\u002Fcommit\u002F44079dd184f4bd0c5f24dc5dccba98eb655078c1))\n\n\n\n","2021-06-10T20:05:43",{"id":179,"version":180,"summary_zh":181,"released_at":182},180319,"v5.0.2","## [5.0.2](https:\u002F\u002Fgithub.com\u002Fwatson-developer-cloud\u002Funity-sdk\u002Fcompare\u002Fv5.0.1...v5.0.2)（2021-03-05）\n\n\n### 错误修复\n\n* 弃用 compare 和 comply 消息 ([f05490d](https:\u002F\u002Fgithub.com\u002Fwatson-developer-cloud\u002Funity-sdk\u002Fcommit\u002Ff05490db5d4e5d171e71eee66cb2ea927279654d))\n* 测试语义化发布 ([489fa33](https:\u002F\u002Fgithub.com\u002Fwatson-developer-cloud\u002Funity-sdk\u002Fcommit\u002F489fa337f7f8a3b4377b78252582b2bd63a1c13f))\n\n\n\n","2021-03-05T15:08:13",{"id":184,"version":185,"summary_zh":186,"released_at":187},180320,"v5.0.1","## [5.0.1](https:\u002F\u002Fgithub.com\u002Fwatson-developer-cloud\u002Funity-sdk\u002Fcompare\u002Fv5.0.0...v5.0.1) (2020-12-21)\n\n\n### 错误修复\n\n* **助理:** 节点对话响应应包含客服属性 ([e0ead99](https:\u002F\u002Fgithub.com\u002Fwatson-developer-cloud\u002Funity-sdk\u002Fcommit\u002Fe0ead9909b7144d074e1dddc57176ad7309a676a))\n\n\n\n","2020-12-21T21:08:29",{"id":189,"version":190,"summary_zh":191,"released_at":192},180321,"v5.0.0","# [5.0.0](https:\u002F\u002Fgithub.com\u002Fwatson-developer-cloud\u002Funity-sdk\u002Fcompare\u002Fv4.8.0...v5.0.0) (2020-12-10)\n\n\n### 功能\n\n* **AssistantV1:** 添加对批量分类的支持 ([20e42e3](https:\u002F\u002Fgithub.com\u002Fwatson-developer-cloud\u002Funity-sdk\u002Fcommit\u002F20e42e3c26d16ed3257874e3244c5ccf4d83a0b0))\n* **AssistantV2:** 添加对批量分类的支持，并重构上下文技能系统 ([52f0cf9](https:\u002F\u002Fgithub.com\u002Fwatson-developer-cloud\u002Funity-sdk\u002Fcommit\u002F52f0cf940865fc28cbe14833c69bed8293149a1a))\n* **CompareComply:** 添加对 TypeLabel 中修改内容的支持 ([bd6d619](https:\u002F\u002Fgithub.com\u002Fwatson-developer-cloud\u002Funity-sdk\u002Fcommit\u002Fbd6d619e73f9e50873767457406b782d694b7098))\n* **DiscoveryV2:** 添加对 AnalyzeDocuments 的支持 ([fa97def](https:\u002F\u002Fgithub.com\u002Fwatson-developer-cloud\u002Funity-sdk\u002Fcommit\u002Ffa97def7cf4bac9468050a7c9b6db064647fedd0))\n* 使用当前 API 定义重新生成服务 ([30eb7de](https:\u002F\u002Fgithub.com\u002Fwatson-developer-cloud\u002Funity-sdk\u002Fcommit\u002F30eb7debb1d46fec979a603810459c324087b53b))\n* **重新生成:** 使用生成器 3.21.0 和 api def sdk-major-release-2020 重新生成 ([5de83ec](https:\u002F\u002Fgithub.com\u002Fwatson-developer-cloud\u002Funity-sdk\u002Fcommit\u002F5de83ec432d1878d3f9edb98f47689a79f49a3bb))\n* **TextToSpeechV1:** 添加对 CustomModel 和 CustomModels 的支持 ([235aef2](https:\u002F\u002Fgithub.com\u002Fwatson-developer-cloud\u002Funity-sdk\u002Fcommit\u002F235aef25527060e89c40d4e4fa93c1aaa0660796))\n* **VisualRecognition:** 添加弃用警告，并将 startTime 和 endTime 改为 DateTime 类型 ([d99b69a](https:\u002F\u002Fgithub.com\u002Fwatson-developer-cloud\u002Funity-sdk\u002Fcommit\u002Fd99b69add5d6d42ed733ccde176615f79e788491))\n\n\n### 破坏性变更\n\n* **VisualRecognition:** 将 VisualRecognitionV4 的 GetTrainingUsage 中的 startTime 和 encTime 改为 DateTime 类型\n* **TextToSpeechV1:** 将 VoiceModel 和 VoiceModels 移至 CustomModel 和 CustomModels\n* **AssistantV2:** MessageContextSkill\n\n\n\n","2020-12-10T04:44:35",{"id":194,"version":195,"summary_zh":196,"released_at":197},180322,"v4.8.0","# [4.8.0](https:\u002F\u002Fgithub.com\u002Fwatson-developer-cloud\u002Funity-sdk\u002Fcompare\u002Fv4.7.1...v4.8.0) (2020-08-25)\n\n\n### 功能特性\n\n* **AssistantV1:** 更改默认 URL ([21283bc](https:\u002F\u002Fgithub.com\u002Fwatson-developer-cloud\u002Funity-sdk\u002Fcommit\u002F21283bc78c3ff14432f4cf7a409f3b7bc8f6c125))\n* **AssistantV2:** 增加对 ListLogs 和 DeleteUserData 的支持 ([369e7fd](https:\u002F\u002Fgithub.com\u002Fwatson-developer-cloud\u002Funity-sdk\u002Fcommit\u002F369e7fd7414f1d4d825bc2e60b5c7d72af8d7dab))\n* 重新生成服务并添加新的默认 URL ([e484113](https:\u002F\u002Fgithub.com\u002Fwatson-developer-cloud\u002Funity-sdk\u002Fcommit\u002Fe484113de45dccd7623f1616dc3b04eaa4b6d292))\n* **DiscoveryV2:** 为项目、增强和集合新增 API ([abc28ba](https:\u002F\u002Fgithub.com\u002Fwatson-developer-cloud\u002Funity-sdk\u002Fcommit\u002Fabc28bad54e43397d4ae08d04c45c5ccc2bebb64))\n* **LanguageTranslatorV3:** 增加对 ListLanguages 的支持 ([0570cdb](https:\u002F\u002Fgithub.com\u002Fwatson-developer-cloud\u002Funity-sdk\u002Fcommit\u002F0570cdba89631679d8a3412120c1881138b9b3fd))\n\n\n\n","2020-08-25T19:48:13",{"id":199,"version":200,"summary_zh":201,"released_at":202},180323,"v4.7.1","## [4.7.1](https:\u002F\u002Fgithub.com\u002Fwatson-developer-cloud\u002Funity-sdk\u002Fcompare\u002Fv4.7.0...v4.7.1)（2020-06-17）\n\n\n### 错误修复\n\n* **TTS：** 更新 TTS 示例，以播放音乐并使用正常合成方式（[9006680](https:\u002F\u002Fgithub.com\u002Fwatson-developer-cloud\u002Funity-sdk\u002Fcommit\u002F90066801dca6200e7dcc802c421ce2e94e50f26e)）\n\n\n\n","2020-06-17T14:04:30",{"id":204,"version":205,"summary_zh":206,"released_at":207},180324,"v4.7.0","# [4.7.0](https:\u002F\u002Fgithub.com\u002Fwatson-developer-cloud\u002Funity-sdk\u002Fcompare\u002Fv4.6.1...v4.7.0) (2020-06-03)\n\n\n### Features\n\n* **AssistantV1:** add support for spelling suggestions ([7e5ea7c](https:\u002F\u002Fgithub.com\u002Fwatson-developer-cloud\u002Funity-sdk\u002Fcommit\u002F7e5ea7c0a91284adc47b17f8df6a9e697e0b3985))\n* **AssistantV2:** add support for stateless messages ([9998de9](https:\u002F\u002Fgithub.com\u002Fwatson-developer-cloud\u002Funity-sdk\u002Fcommit\u002F9998de97ef415ed2ffaf49ce1643fa9deb5df430))\n* **VisualRecognitionV4:** add support for download model file ([f9dede3](https:\u002F\u002Fgithub.com\u002Fwatson-developer-cloud\u002Funity-sdk\u002Fcommit\u002Ff9dede3172cc0f6e2b8b1948576382aaeccb30d0))\n* Regenerate the services based on current API def ([deb0f5e](https:\u002F\u002Fgithub.com\u002Fwatson-developer-cloud\u002Funity-sdk\u002Fcommit\u002Fdeb0f5ec536bac0ac2dbf951c2c2cd61be4cfefb))\n\n\n\n","2020-06-03T21:45:04",{"id":209,"version":210,"summary_zh":211,"released_at":212},180325,"v4.6.1","## [4.6.1](https:\u002F\u002Fgithub.com\u002Fwatson-developer-cloud\u002Funity-sdk\u002Fcompare\u002Fv4.6.0...v4.6.1) (2020-05-22)\n\n\n### Bug Fixes\n\n* **Speech to Text:** Revise SpeechRecognitionAlternative model ([01f0627](https:\u002F\u002Fgithub.com\u002Fwatson-developer-cloud\u002Funity-sdk\u002Fcommit\u002F01f06279a242d740b4abe5256449a6dac900740e))\n\n\n\n","2020-05-22T20:24:05",{"id":214,"version":215,"summary_zh":216,"released_at":217},180326,"v4.6.0","# [4.6.0](https:\u002F\u002Fgithub.com\u002Fwatson-developer-cloud\u002Funity-sdk\u002Fcompare\u002Fv4.5.0...v4.6.0) (2020-04-24)\n\n\n### Features\n\n* **AssistantV1:** add support for runtime entity alternatives ([cd3a592](https:\u002F\u002Fgithub.com\u002Fwatson-developer-cloud\u002Funity-sdk\u002Fcommit\u002Fcd3a592dbe9cd016a7ddf579c719cf8430993366))\n* **LanguageTranslator:** add support for language detection ([ccca1da](https:\u002F\u002Fgithub.com\u002Fwatson-developer-cloud\u002Funity-sdk\u002Fcommit\u002Fccca1da16685d26d1f1a52f445941b0409555db4))\n* **SpeechToText:** add support for speech detector sensitivity and background supression ([4e0e358](https:\u002F\u002Fgithub.com\u002Fwatson-developer-cloud\u002Funity-sdk\u002Fcommit\u002F4e0e35816a7bbb187cd751759da4f1eb4a30be74))\n* regenerate services based on current api def ([53460d2](https:\u002F\u002Fgithub.com\u002Fwatson-developer-cloud\u002Funity-sdk\u002Fcommit\u002F53460d215f512b15e742bf26bd5586bd68af4e25))\n\n\n\n","2020-04-24T13:09:04",{"id":219,"version":220,"summary_zh":221,"released_at":222},180327,"v4.5.0","# [4.5.0](https:\u002F\u002Fgithub.com\u002Fwatson-developer-cloud\u002Funity-sdk\u002Fcompare\u002Fv4.4.0...v4.5.0) (2020-02-25)\n\n\n### Features\n\n* **TextToSpeech:** add websocket support for text to speech ([42a28d6](https:\u002F\u002Fgithub.com\u002Fwatson-developer-cloud\u002Funity-sdk\u002Fcommit\u002F42a28d6fa72a609208e1bd6b157e5b0c428b455b))\n\n\n\n","2020-02-25T15:26:24",{"id":224,"version":225,"summary_zh":226,"released_at":227},180328,"v4.4.0","# [4.4.0](https:\u002F\u002Fgithub.com\u002Fwatson-developer-cloud\u002Funity-sdk\u002Fcompare\u002Fv4.3.0...v4.4.0) (2020-02-13)\n\n\n### Features\n\n* **Assistant:** add support for include audit and append ([cb1f3cc](https:\u002F\u002Fgithub.com\u002Fwatson-developer-cloud\u002Funity-sdk\u002Fcommit\u002Fcb1f3cc2bffba864333326b976c3168d8c19845d))\n* **VisualRecognitionV4:** add support for object metadata ([7a4c8bb](https:\u002F\u002Fgithub.com\u002Fwatson-developer-cloud\u002Funity-sdk\u002Fcommit\u002F7a4c8bb503ef342c3305e17283769c6e9a173605))\n* Regenerate service using current api defs ([0b0c0a4](https:\u002F\u002Fgithub.com\u002Fwatson-developer-cloud\u002Funity-sdk\u002Fcommit\u002F0b0c0a40ca892bef0b70b2833ff87dd7b8cab9af))\n\n\n\n","2020-02-13T20:00:13",{"id":229,"version":230,"summary_zh":231,"released_at":232},180329,"v4.3.0","# [4.3.0](https:\u002F\u002Fgithub.com\u002Fwatson-developer-cloud\u002Funity-sdk\u002Fcompare\u002Fv4.2.1...v4.3.0) (2020-01-23)\n\n\n### Features\n\n* **TextToSpeech:** add example for text to speech synthesize ([38666a5](https:\u002F\u002Fgithub.com\u002Fwatson-developer-cloud\u002Funity-sdk\u002Fcommit\u002F38666a52f30088afa33dfd5dfe9cbb67961362dd))\n\n\n\n","2020-01-23T16:21:48",{"id":234,"version":235,"summary_zh":236,"released_at":237},180330,"v4.2.1","## [4.2.1](https:\u002F\u002Fgithub.com\u002Fwatson-developer-cloud\u002Funity-sdk\u002Fcompare\u002Fv4.2.0...v4.2.1) (2020-01-17)\n\n\n### Bug Fixes\n\n* **NaturalLanguageUnderstanding:** add Model param back to CategoriesOptions ([657acae](https:\u002F\u002Fgithub.com\u002Fwatson-developer-cloud\u002Funity-sdk\u002Fcommit\u002F657acaefc7d1041b0fee2783759dbe7035fa29fa))\n\n\n\n","2020-01-17T23:24:44",{"id":239,"version":240,"summary_zh":241,"released_at":242},180331,"v4.2.0","# [4.2.0](https:\u002F\u002Fgithub.com\u002Fwatson-developer-cloud\u002Funity-sdk\u002Fcompare\u002Fv4.1.1...v4.2.0) (2020-01-16)\n\n\n### Bug Fixes\n\n* fix copyright dates ([f48d19f](https:\u002F\u002Fgithub.com\u002Fwatson-developer-cloud\u002Funity-sdk\u002Fcommit\u002Ff48d19f3836b0d8446870a1a96be56c33ecfdd9d))\n\n\n### Features\n\n* **SpeechToText:** add support for endOfPhraseSilenceTime and splitTranscriptAtPhraseEnd ([0433887](https:\u002F\u002Fgithub.com\u002Fwatson-developer-cloud\u002Funity-sdk\u002Fcommit\u002F0433887566283fa794491276a4a385db22a6a51e))\n* regenrate all of the services with current api defs ([c090ef5](https:\u002F\u002Fgithub.com\u002Fwatson-developer-cloud\u002Funity-sdk\u002Fcommit\u002Fc090ef5f0e09767bf9cc1f15d3c3e97db258539f))\n* **SpeechToText:** Add support for EndOfPhraseSilenceTime and SplitTranscriptAtPhraseEnd to STT web ([a009df5](https:\u002F\u002Fgithub.com\u002Fwatson-developer-cloud\u002Funity-sdk\u002Fcommit\u002Fa009df5b712f24ab285891e1e3af7a284acbfb44))\n\n\n\n","2020-01-16T22:22:01",{"id":244,"version":245,"summary_zh":246,"released_at":247},180332,"v4.1.1","## [4.1.1](https:\u002F\u002Fgithub.com\u002Fwatson-developer-cloud\u002Funity-sdk\u002Fcompare\u002Fv4.1.0...v4.1.1) (2019-12-04)\n\n\n### Bug Fixes\n\n* fix examples to always set service url ([13b37ee](https:\u002F\u002Fgithub.com\u002Fwatson-developer-cloud\u002Funity-sdk\u002Fcommit\u002F13b37eee23e374598796d7be31f55bdbce08395d))\n\n\n\n","2019-12-04T22:04:18",{"id":249,"version":250,"summary_zh":251,"released_at":252},180333,"v4.1.0","# [4.1.0](https:\u002F\u002Fgithub.com\u002Fwatson-developer-cloud\u002Funity-sdk\u002Fcompare\u002Fv4.0.1...v4.1.0) (2019-11-27)\n\n\n### Features\n\n* **Discovery:** use json sub types in query aggregation ([0936857](https:\u002F\u002Fgithub.com\u002Fwatson-developer-cloud\u002Funity-sdk\u002Fcommit\u002F0936857832d82dc44ebc945d5c3512a215e7a303))\n* **DiscoveryV2:** add support for discovery v2 ([f8e626d](https:\u002F\u002Fgithub.com\u002Fwatson-developer-cloud\u002Funity-sdk\u002Fcommit\u002Ff8e626d7e467bb952b8e4d2f91e92ab5ca2130a5))\n* **regerate:** regenerate sdk using current api defs ([4e8d68b](https:\u002F\u002Fgithub.com\u002Fwatson-developer-cloud\u002Funity-sdk\u002Fcommit\u002F4e8d68b1d7cdacc7282a1cde80f64cb110ca4716))\n* **Services:** move Connector to base service to support unit testing ([196c86a](https:\u002F\u002Fgithub.com\u002Fwatson-developer-cloud\u002Funity-sdk\u002Fcommit\u002F196c86ac3330b9f22b23065672b8643867c4fbea))\n* **VisualRecognitionV4:** add support to get training usage data ([41d8d8b](https:\u002F\u002Fgithub.com\u002Fwatson-developer-cloud\u002Funity-sdk\u002Fcommit\u002F41d8d8be06dcba6c9b8878fcc1a9fa362e0b032a))\n\n\n\n","2019-11-27T19:49:35"]