๊ฐ์ ๋น์ ๋ฐ ๊ธฐ์
ํ์ดํ์คํฌ๋ฆฝํธ
QnAMakerDialog ๊ฐ ํน์ ์ธ์ด(์: DE)๋ก ์์ฑ๋๋ฉด ์ธ์ด๋ฅผ ๋ณ๊ฒฝํ๊ฑฐ๋ ๋ค๋ฅธ ์ฌ์ฉ์๊ฐ ๋ค๋ฅธ ์ธ์ด(์: EN)๋ฅผ ์ฌ์ฉํ๋๋ผ๋ ํญ์ ํด๋น ์ธ์ด๋ฅผ ํด์ํฉ๋๋ค.
์ฌ์ฉ์ 1 : ๋ฐํ๋ฅผ ๋ด( DE )์ ๋ณด๋
๋๋ค.
Bot : Bot์ ๋ฐํ๋ฅผ QnA ์๋๋ก ํด์ํ๊ณ knowledgebaseId๋ฅผ Dialog์ Id๋ก ์ฌ์ฉํ์ฌ ์ QnADialog๋ฅผ ๋ง๋ญ๋๋ค.
``
private registerQnADialog(knowledgebaseId: string, cognitiveModels: ICognitiveModelSet, locale: string): void {
const qnaEndpoint: QnAMakerEndpoint | undefined = cognitiveModels.qnaConfiguration.get(knowledgebaseId);
if (qnaEndpoint == undefined){
throw new Error(
ID๊ฐ ${ knowledgebaseId }์ธ QnA Maker ์ง์ ๊ธฐ๋ฐ ๊ตฌ์ฑ์ ์ฐพ์ ์ ์์ต๋๋ค.`);
}
if (this.dialogs.find(knowledgebaseId) == undefined) {
const qnaDialog: QnAMakerDialog = new QnAMakerDialog(
qnaEndpoint.knowledgeBaseId,
qnaEndpoint.endpointKey,
// The following line is a workaround until the method getQnAClient of QnAMakerDialog is fixed
// as per issue https://github.com/microsoft/botbuilder-js/issues/1885
new URL(qnaEndpoint.host).hostname.split('.')[0],
this.templateEngine.generateActivityForLocale('UnsupportedMessage', locale) as Activity,
// Before, instead of 'undefined' a '0.3' value was used in the following line
undefined,
this.templateEngine.generateActivityForLocale('QnaMakerAdaptiveLearningCardTitle', locale).text,
this.templateEngine.generateActivityForLocale('QnaMakerNoMatchText', locale).text
);
qnaDialog.id = knowledgebaseId;
this.addDialog(qnaDialog);
}
}
```
๋ด : ์ฌ์ฉ์ 1์ ๋ก์ผ์ผ(DE)๋ก ์ฌ์ฉ์ 1์๊ฒ QnA ๋ต๋ณ์ ๋ณด๋
๋๋ค.
์ฌ์ฉ์ 2 : ๋ฐํ๋ฅผ ๋ด( EN )์ ๋ณด๋
๋๋ค.
Bot : Bot์ QnA ์๋๋ก ๋ฐํ๋ฅผ ํด์ํฉ๋๋ค(์ฌ์ฉ์ 1์ด ๋ณด๋ธ ๊ฒ๊ณผ ๋์ผ). ๋์ผํ ์ง์ ๊ธฐ๋ฐ ID๋ฅผ ๊ฐ์ง ํ๋์ Dialog๊ฐ ์ด๋ฏธ ์กด์ฌํ๊ธฐ ๋๋ฌธ์ ์๋ก์ด QnaMakerDialog๊ฐ ์์ฑ๋์ง ์์ต๋๋ค.
๋ด : ๋ด์ด QnA ๋ํ ์์(์ฌ์ฉ์ 1 ๋ฐ๋ณต์์ ์ถ๊ฐ๋จ)๋ฅผ ๋ค์ ์์ํ๊ณ ์ฒซ ๋ฒ์งธ ์ฌ์ฉ์์ ์ง์ ๊ธฐ๋ฐ(DE)์์ ๋ต๋ณ์ ์ป์ต๋๋ค.
๋ด : ์ฌ์ฉ์ 1์ ๋ก์ผ์ผ๋ก ์ฌ์ฉ์ 2์๊ฒ ๋ฉ์์ง๋ฅผ ๋ณด๋
๋๋ค.
์ฌ๋ฐ๋ฅธ ์ธ์ด์ ์ฌ๋ฐ๋ฅธ ์ง์ ๊ธฐ๋ฐ ID๋ก ๋ ๋ค๋ฅธ QnAMakerDialog ๊ฐ ์์ฑ๋ฉ๋๋ค.
@tommyJimmy87 ๊ฐ์ฌํฉ๋๋ค. ์์กด์ฑ ์ฃผ์ ๊ตฌํ๊ณผ ๊ด๋ จ๋ ์ ๋ฐ์ดํธ๊ฐ ์๋ ์ฆ์ ๋ค์ ์ฐ๋ฝ๋๋ฆฌ๊ฒ ์ต๋๋ค!
@tommyJimmy87๋ , ๋ด์ ์ข ์์ฑ ์ฃผ์ ์ ํตํฉ ํ์ฌ ์ด ๋ฌธ์ ๋ฅผ
๋น์ ์ด ๊ทธ๋ ๊ฒ ์น์ ํ๋ค๋ฉด ๋ค์ ์ฌํ ๋จ๊ณ๋ฅผ ๋ฐ๋ฅด๊ณ ์ด ๋ถ๊ธฐ๋ฅผ ์ฌ์ฉํ์ฌ ๋ณ๊ฒฝ ์ฌํญ์ ํ์ธํ ์ ์์ต๋๊น?
npm install
๋ฅผ ์คํํ์ฌ ์ข
์์ฑ์ ์ค์นํฉ๋๋ค.npm run build
๋ฅผ ์คํํ์ฌ ์๋ฃจ์
์ ์ปดํ์ผํฉ๋๋ค.npm pack
๋ฅผ ์คํํ์ฌ tgz๋ฅผ ์์ฑํฉ๋๋ค.๋ค์๊ณผ ๊ฐ์ด Virtual Assistant package.json ์์ ์์ฑ๋ tgz๋ฅผ ์ฌ์ฉํฉ๋๋ค.
"bot-solutions": "๋ด ์๋ฃจ์ TGZ๋ก ๊ฐ๋ ๊ฒฝ๋ก"
๋ค๊ตญ์ด๋ก ๊ฐ์ ๋์ฐ๋ฏธ ๋ฐฐํฌ
QnAMakerDialog
์๋๋ฆฌ์ค๋ฅผ ์ฌํํ๋ ๋จ๊ณ๋ฅผ ๋ฐ๋ฅด์ญ์์ค.๋ง์ง๋ง์ผ๋ก ์ธ๊ธํ๋ฏ์ด PR์๋ ๋ค์ ๋ณ๊ฒฝ ์ฌํญ์ด ํฌํจ๋ฉ๋๋ค.
inversifyjs
๋ผ์ด๋ธ๋ฌ๋ฆฌ) ๊ตฌํ ๋ฐ TypeScript ๊ธฐ์ ๊ณ ๊ฐ๋์ ๋ต๋ณ์ ๊ท๊ธฐ์ธ์ด๊ฒ ์ต๋๋ค ๐ .
์๋ ํ์ธ์ @Batta32 ์ ๋๋ค .
๊ทํ์ ์ง์์ ๊ฐ์ฌ๋๋ฆฝ๋๋ค. ๊ทํ์ ์ง์ ์์ ํตํฉํ ์๋ก์ด ๋ด ์๋ฃจ์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ก ๋ฌธ์ ๊ฐ ํด๊ฒฐ๋ ๊ฒ ๊ฐ์ต๋๋ค. :) ์ธ์ ์ถ์ํ ์์ ์ธ์ง ๋๋ต์ ์ผ๋ก ์์ํ์ญ๋๊น?
์๋
ํ์ธ์ @ Batta32 , ๋จ์ ํ
์คํธ๋ฅผ ์คํํ๋ ค๊ณ ํ ๋ TypeError: Reflect.hasOwnMetadata is not a function
์ค๋ฅ๊ฐ ๋ฐ์ํ๋ค๋ ๊ฒ์ ์์์ต๋๋ค.
inversify๋ฅผ ์ฌ์ฉํ๋๋ก ํ
์คํธ๋ฅผ ๋ง์ด๊ทธ๋ ์ด์
ํ์ง ์์๊ธฐ ๋๋ฌธ์
๋๊น?
@tommyJimmy87 ๊ฐ์ฌํฉ๋๋ค! ์ด ๋ถ๋ถ์ ๊ฒํ ํ ํ ์ ๋ฐ์ดํธ๋๋ ๋๋ก ๋ค์ ์๋ ค๋๋ฆฌ๊ฒ ์ต๋๋ค ๐.
@Batta32๋ , ์ด ๊ฐ์ ธ์ค๊ธฐ๋ฅผ ํ
์คํธ ๊ธฐ๋ฐ js ํ์ผ์ ์ถ๊ฐํ์ฌ ์ด ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ์ต๋๋ค. require('reflect-metadata');
์๋ ํ์ธ์ @tommyJimmy87 - ๋จ์ ํ ์คํธ์ ๊ด๋ จํ์ฌ ๋ง์ํ์ ๋ฌธ์ ๋ฅผ ์ฌํํ ์ ์์ต๋๋ค.
์ฐ๋ฆฌ๋ ๋ค์๊ณผ ๊ฐ์ ์ง๋ฌธ ์
์ด๊ฒ์ ์ฐ๋ฆฌ์ ํ๊ฒฝ์ ๋๋ค :
feature/southworks/dependency-injection-implementation
Virtual Assistant ๋ฐ Skill์ ๋ํ ๋ฌธ์ ๋ฅผ ์ฌํํ๊ธฐ ์ํด ๋ค์ ๋จ๊ณ๋ฅผ ์ํํ์ต๋๋ค.
npm install
๋ฅผ ์คํํ์ฌ ์ข
์์ฑ์ ์ค์นํฉ๋๋ค.npm run build
๋ฅผ ์คํํ์ฌ ์๋ฃจ์
์ ์ปดํ์ผํฉ๋๋ค.npm pack
๋ฅผ ์คํํ์ฌ .tgz
.tgz
๋ฅผ ๋ค์๊ณผ ๊ฐ์ด ์ฌ์ฉํฉ๋๋ค.npm install
๋ฅผ ์คํํ์ฌ ์ข
์์ฑ์ ์ค์นํฉ๋๋ค.npm run build
๋ฅผ ์คํํ์ฌ ์๋ฃจ์
์ ์ปดํ์ผํฉ๋๋ค.npm run test
๋ฅผ ์คํํ์ฌ ์๋ฃจ์
์ ์ปดํ์ผํฉ๋๋ค.์๋ ํ์ธ์ @tommyJimmy87 - PR #3559์ ์ ์๋ ๋ณ๊ฒฝ ์ฌํญ์ ์ถ๊ฐํ์ต๋๋ค.
์ฐ๋ฆฌ๋ ๋ค์๊ณผ ๊ฐ์ ์์
ํ
์คํธ ํ์ผ์ ์ถ๊ฐ ๊ฐ์ ์ง์ ๋ฐ ๊ธฐ์ ๋ด ์
๋ฐ์ดํธ : require('reflect-metadata');
ํน๋ณํ์์ BotTestBase ๋ฐ SkillTestBase , ๋น์ ์ ๋จ์ ํ
์คํธ์ ๊ดํ ์ธ๊ธํ๋ ๋ฌธ์ ๋ฅผ ๋ฐฉ์งํ๊ธฐ ์ํด.
๋ค์ ๋จ๊ณ ์ ๋ฐ๋ผ ๊ฐ์ ๋์ฐ๋ฏธ ๋ฐ ๊ธฐ์ ์ ๋ณ๊ฒฝ ์ฌํญ์ ํ ์คํธํ ์ ์์ต๋๋ค.
๊ฐ์ฌ ํด์,
๋์๊ณ .
์๋ ํ์ธ์ @Batta32 ์ @DiegoCardozo94 ,
์ผ๋ฐ์ ์ธ ์ง๋ฌธ์ด ํ๋ ์์ง๋ง ์์ง ๋ฆด๋ฆฌ์ค๋์ง ์์์์๋ ํ๋ก์ ํธ์์ ์ด ๋ถ๊ธฐ๋ฅผ ์ฌ์ฉํ๊ณ ์๊ธฐ ๋๋ฌธ์ ์ฌ๊ธฐ์ ์ง๋ฌธํ๊ฒ ์ต๋๋ค.
์ด ์๋๋ฆฌ์ค์์๋ MS Teams๊ฐ ์ ์ผํ ์ฑ๋๋ก ์ฌ์ฉ๋ฉ๋๋ค. TeamsActivityHandler๋ VA์์๋ง ์ฌ์ฉ๋๋ฉฐ ๊ธฐ์ ์ํ์์๋ ์ฌ์ฉ๋์ง ์์ต๋๋ค. ๋ง์ต๋๊น? ์๋ง๋ ๋ด๊ฐ ์๋ชป TeamsActivityHandler ๊ธฐ์ ์ ํ์ฅํ๊ณ ์์๊ธฐ ๋๋ฌธ์ ๊ตฌ์ฒด์ ์ผ๋ก ํ ๊ฐ์ง ๋ฌธ์ ๊ฐ ๋ฐ์ํ์ต๋๋ค. ๊ธฐ๋ณธ์ ์ผ๋ก endOfConversation
๋ฉ์๋๋ ๊ธฐ์ ์ DefaultActivityHandler
์์ cancel
์ ํธ์ถ๋์ง ์์ต๋๋ค. . ํ์ง๋ง ์คํฌ ๋ด์์ "์ผ๋ฐ" ActivityHandler ํ์ฅ์ผ๋ก ์ ํํด์ผ ํ ์๋ ์์ต๋๋ค. ์ ๋ฅผ ๋์์ฃผ์๊ฒ ์ต๋๊น ์๋๋ฉด ์ด์ ๋ํ ํผ๋๋ฐฑ์ ์ฃผ์๊ฒ ์ต๋๊น?
๊ฐ์ฌ ํด์
@tommyJimmy87๋ , TeamsActivityHandler
๋ Microsoft Teams ํน์ ์ด๋ฒคํธ ๋ฐ ์ํธ ์์ฉ์ ๋ํ ์ง์์ ์ถ๊ฐํ๋ ActivityHandler
์์ ํ์๋์์ต๋๋ค.
Virtual Assistant๋ Skills์ ์ฐ๊ฒฐ๋ Virtual Assistant์ ์คํค๋ง์์ Microsoft Teams Channel๊ณผ ์ํธ ์์ฉํ๋ ๊ฒ์ด๋ฏ๋ก Virtual Assistant์ DefaultActivityHandler
๋ Skill์ด ์๋๋ผ TeamsActivityHandler
์์ ํ์ฅํด์ผ ํฉ๋๋ค. ์ํ์์ ๋ณผ ์ ์๋ฏ์ด ์ธ๊ธ๋ ์คํค๋ง์์.
DefaultActivityHandler
ํ
ํ๋ฆฟ / ์ํ ๊ตฌํ์ ๊ฐ์ ์ด์์คํดํธ์ TeamsActivityHandler
์์ ๋ฐ์ผ๋ก ํ ์๋๋ฆฌ์ค๋ฅผ ๊ฐ๋ฅํ๊ฒํ๋ค.
๋ํ ๊ฒํ ํ ์ ์๋ ๋ค์ ๋ฌธ์๋ฅผ ์กฐ์ฌํ์ต๋๋ค.
๋์์ด ๋์ จ๋ค๋ฉด ์๋ ค์ฃผ์ธ์ ๐.
์ด ๋ฌธ์ ๋ 30์ผ ๋์ ํ๋์ด ์์๊ธฐ ๋๋ฌธ์ ์ ํจํ์ง ์์ต๋๋ค. ์ค๋๋ ๋ผ๋ฒจ์ด๋ ๋๊ธ์ ์ ๊ฑฐํ์ง ์์ผ๋ฉด 5์ผ ํ์ ๋ซํ๋๋ค.
@Batta32 ์์ง ์ถ์
์๋ ํ์ธ์ @tommyJimmy87 - ์ ํจํค์ง ์ถ์ ๊ณํ์ ๋ง๋ฌด๋ฆฌ ์ค์ ๋๋ค. ์ ๋ฐ์ดํธ๋๋ ๋๋ก ์ฌ๊ธฐ๋ก ๋ค์ ์ฐ๋ฝ๋๋ฆฌ๊ฒ ์ต๋๋ค ๐.
@ Batta32 ์ ๋ฐ์ดํธ๊ฐ ์์ต๋๊น?
์๋ ํ์ธ์ @cwhitten,์ด ๋ฌธ์ ๋ ์ด๋ฏธ @peterinnesmsft์ ์์ฒญ ๋ ๋ณ๊ฒฝ์ผ๋ก ์ ๋ฐ์ดํธ๋๋ PR # 3559๋ก ๊ณ ์ ๋ฉ๋๋ค.
PR์ด ๋ณํฉ๋๋ ์ฆ์ next
๋ถ๊ธฐ์ ๋ณ๊ฒฝ ์ฌํญ์ด ํ์๋ฉ๋๋ค.
#3559์ ์ํ๋ ๋ฌด์์ ๋๊น? @๋ฐํ32
๋ง์ง๋ง ์ ๋ฐ์ดํธ๋ 9์ 11์ผ์ด์์ต๋๋ค.
๊ฐ์ฌ ํด์
@tonyanziano๋ , PR #3559๋ฅผ ๊ฒํ ํ๊ณ @peterinnesmsft์ ์์ฒญ๋ ๋ณ๊ฒฝ ์ฌํญ์ ํฌํจํ์ฌ ๋ณํฉํ ์ค๋น๊ฐ ๋์์ต๋๋ค.
PR์ด ๋ณํฉ๋๋ ์ฆ์ next
๋ถ๊ธฐ์ ๋ณ๊ฒฝ ์ฌํญ์ด ํ์๋ฉ๋๋ค.
์ด ๋ฌธ์ ๋ 30์ผ ๋์ ํ๋์ด ์์๊ธฐ ๋๋ฌธ์ ์ ํจํ์ง ์์ต๋๋ค. ์ค๋๋ ๋ผ๋ฒจ์ด๋ ๋๊ธ์ ์ ๊ฑฐํ์ง ์์ผ๋ฉด 5์ผ ํ์ ๋ซํ๋๋ค.
@joshgummersall #3752์ ์ํ๋ ๋ฌด์์ ๋๊น? ์ธ์ ํตํฉํ ๊ฒ์ผ๋ก ์์ํ์ญ๋๊น?
๋ค๋ฅธ ์ฌ๋์ด ๊ฒํ ํ๊ณ ์น์ธํ๋ ์ฆ์!
@joshgummersall ,
์ด ํฐ์ผ์ ๋ซ์ ์ ์๋๋ก PR์ ๋ณํฉํ ์ ์์ต๋๊น?
@virtual-josh, ํ ๋ฒ ๋ PR ๊ฒํ ๋ฅผ ๊ธฐ๋ค๋ฆฌ๊ณ ์์ต๋๋ค. ์ด๋ฏธ ํ ๋ฆฌ๋ทฐ์ด๊ฐ ์น์ธํ์ต๋๋ค. ๋ ๋ฒ์งธ ๋ฆฌ๋ทฐ๋ฅผ ์ํด ๋๊ตฌ์๊ฒ ํ์ ๋ณด๋ผ์ง ์ ๋ชจ๋ฅด๊ฒ ์ต๋๋ค.
๊ฐ์ฅ ์ ์ฉํ ๋๊ธ
์๋ ํ์ธ์ @Batta32 ์ ๋๋ค .
๊ทํ์ ์ง์์ ๊ฐ์ฌ๋๋ฆฝ๋๋ค. ๊ทํ์ ์ง์ ์์ ํตํฉํ ์๋ก์ด ๋ด ์๋ฃจ์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ก ๋ฌธ์ ๊ฐ ํด๊ฒฐ๋ ๊ฒ ๊ฐ์ต๋๋ค. :) ์ธ์ ์ถ์ํ ์์ ์ธ์ง ๋๋ต์ ์ผ๋ก ์์ํ์ญ๋๊น?