Muistiinpano
Tämän sivun käyttö edellyttää valtuutusta. Voit yrittää kirjautua sisään tai vaihtaa hakemistoa.
Tämän sivun käyttö edellyttää valtuutusta. Voit yrittää vaihtaa hakemistoa.
Tässä artikkelissa kuvataan tarvittavat muutokset siirtymiseksi Bot Framework SDK:sta Node.jsvarten.
Vaatimukset
- Node.js versio 20 tai uudempi
- Aiemmin luotu Bot Framework SDK -projekti
- Azure Bot Service -resurssi (pysyy samana siirron aikana)
NodeJS SDK -koodin muutokset
Tämän osion muutokset johtuvat Azure Bot Framework SDK :n ja Microsoft 365 -agenttien SDK JavaScriptin välisistä eroista.
Azure-resurssit
Azure-resurssisi pysyvät muuttumattomina. Sinun on viitattava appsettings-ominaisuuksiin kohteille MicrosoftAppType, MicrosoftAppId, MicrosoftAppPasswordja MicrosoftAppTenantId. Näitä asetusten nimiä ei kuitenkaan enää käytetä, ja ne voidaan poistaa myöhemmin.
Lue lisätietoja ympäristön määrityksestä
Ensimmäiset vaiheet
Ota seuraavat muutokset käyttöön ensin, jotta voit ottaa useimmat erot huomioon. Sinun täytyy silti korjata virheenkorjaus ja tarkistaa muut erot, kun olet ensin ottaa nämä muutokset käyttöön.
Pakettien riippuvuuksien päivittäminen
Tämä muutos ei saat kaikkia vaadittuja nimitiloja selvitetyiksi, mutta se kattaa suurimman osan niistä.
| Skenaario | Bot Framework SDK | Agentit SDK |
|---|---|---|
| Ydinisännöinti | botbuilder |
@microsoft/agents-hosting |
| Toimintorakenne | botframework-schema |
@microsoft/agents-activity |
| Valintaikkunat | botbuilder-dialogs |
@microsoft/agents-hosting-dialogs |
| Azure Cosmos DB | botbuilder-azure |
@microsoft/agents-hosting-storage-cosmos |
| Azure Blob -säilö | botbuilder-azure-blobs |
@microsoft/agents-hosting-storage-blob |
| Pikapalvelinapuohjelmat | Manuaalinen määritys | @microsoft/agents-hosting-express |
Botit käyttäen Teamsia
Jos bottisi käyttää Teamsia, lisää pakettiriippuvuus @microsoft/agents-hosting-extensions-teams
Päivitä tuonnit/edellytä
Tee seuraavat muutokset Etsi ja korvaa -kohteella:
| Bot Framework | Agentit SDK |
|---|---|
require('botframework-schema'); |
require('@microsoft/agents-activity') |
require('botbuilder'); |
require('@microsoft/agents-hosting') |
require('botbuilder-dialogs'); |
require('@microsoft/agents-hosting-dialogs') |
Agenttien SDK-toimintaluokka
Paketti @microsoft/agents-activity sisältää Activity-luokan , joka suorittaa jäsennystä zod-kohteen perusteella. Voit jäsentää ja vahvistaa mukautettuja toimintoja JSON:stä literaalin JavaScript-objektien kanssa Activity.fromJson() tai literaalista käyttäen Activity.fromObject().
Lisäksi Activity luokka keskittää kaikki toimintokuormaan liittyvät toiminnot, kuten getConversationReference. Seuraavan taulukon menetelmät ovat siirtyneet nykyisestä TurnContext toimintoesiintymästä ja toimivat nyt nykyisessä toimintoesiintymässä:
Käynnistys ja määritys
Agents SDK -määritysjärjestelmä korvaa luokan - ConfigurationBotFrameworkAuthentication liittymällä AuthConfiguration .
Jos haluat ladata määrityksen oletustiedostosta.env, käytä .loadAuthConfigFromEnv
Tärkeää
Määritysmuuttujat on kuvattu artikkelissa Todentamisen määrittäminen JavaScriptissä.
Ympäristön määritys
Luo tiedosto, jossa .env on seuraavat muuttujat:
# Required for Azure Bot Service
clientId=your-app-id
clientSecret=your-app-secret
tenantId=your-tenant-id
# Optional - for local debugging
PORT=3978
DEBUG=true
Siirron huomautus: päivitä ympäristömuuttujien nimet seuraavassa taulukossa esitetyllä tavalla:
| Bot Framework SDK | Agentit SDK |
|---|---|
MicrosoftAppId |
clientId |
MicrosoftAppPassword |
clientSecret |
MicrosoftAppTenantId |
tenantId |
Todennus ja suojaus
Kun Bot Framework SDK valtuuttaa saapuvat pyynnöt, se sisältää pinoon JSON-verkkotunnuksen (JWT). Agentit, joita SDK ei tee. Kun käytät verkkopalvelimen suorituspalvelua, kuten pikasovellusta, sinun täytyy määrittää JWT-väliohjelmisto, jotta saapuva pyyntö voidaan sallia JWT-haltijatunnuksen perusteella, Agents SDK tarjoaa -menetelmän authorizeJWT(AuthConfiguration) .
JWT Middleware (pakollinen tuotantoon):
import { authorizeJWT, loadAuthConfigFromEnv } from '@microsoft/agents-hosting'
const authConfig = loadAuthConfigFromEnv()
server.use(authorizeJWT(authConfig))
Paikallinen kehitys:
Paikallista virheenkorjausta varten JWT-tarkistus voidaan poistaa käytöstä:
// Only for local development - NEVER in production
if (process.env.NODE_ENV === 'development') {
// JWT validation disabled for local testing
} else {
server.use(authorizeJWT(authConfig))
}
Palvelimen asetukset
Agents SDK tarjoaa kaksi tapaa palvelimen määrittämiseen:
StartServer-menetelmän käyttäminen
Käytä tätä yksinkertaistettua lähestymistapaa uusissa projekteissa, kun haluat vähimmäismäärityksen etkä tarvitse mukautettua väliohjelmistoa.
Päivitä alustuskoodisi kohteesta botbuilder:
const { EchoBot } = require('./bot');
const {
CloudAdapter,
ConfigurationBotFrameworkAuthentication
} = require('botbuilder');
const botFrameworkAuthentication = new ConfigurationBotFrameworkAuthentication(process.env);
const adapter = new CloudAdapter(botFrameworkAuthentication);
const myBot = new EchoBot();
const server = express();
server.use(express.json());
server.post('/api/messages', async (req, res) =>
await adapter.process(req, res, (context) =>
myBot.run(context));
);
Agenteille, joilla on isännöinti startServer():
const { EchoBot } = require('./bot');
const { startServer } = require('@microsoft/agents-hosting-express')
startServer(new EchoBot());
Manuaalinen pika-asennus
Käytä tätä menetelmää siirtyessäsi olemassa olevia botteja, tarvitset mukautetun välitason ohjelmiston, haluat täydet express-määritykset hallintaa varten
const { EchoBot } = require('./bot');
const {
CloudAdapter,
loadAuthConfigFromEnv, // Update
authorizeJWT // Update
} = require('@microsoft/agents-hosting'); // Update
const authConfig = loadAuthConfigFromEnv(); // Update
const adapter = new CloudAdapter(authConfig); // Update
const myBot = new EchoBot();
const server = express();
server.use(express.json());
server.use(authorizeJWT(authConfig)); // Update
server.post('/api/messages', async (req, res) =>
await adapter.process(req, res, (context) =>
myBot.run(context));
);
const port = process.env.PORT || 3978;
server.listen(port, () => {
console.log(`Server listening on port ${port}`);
}).on('error', (err) => {
console.error('Server failed to start:', err);
process.exit(1);
});
ActivityHandler-tuki
Useimmat Bot Framework SDK:n avulla luodut botit perustuvat botbuilder-core.ActivityHandler perusluokkaan.
Agents SDK tarjoaa yhteensopivan agents-hosting.ActivityHandler , joka ylläpitää samaa ohjelmointirajapintaa helpottaakseen siirtoa.
Tärkeimmät erot
Bot Framework SDK:n ja Agents SDK:n välisiä merkittäviä eroja ovat muun muassa seuraavat:
Käsittelijän parametrit:
| SDK | Käsittelijän tyyppi |
|---|---|
| Bot Framework SDK | BotHandler |
| Agentit SDK | AgentHandler |
Lisämenetelmät agenttien SDK:ssa:
| Tapa | Kuvaus |
|---|---|
onMessageDelete |
Käsittelee viestin poistotoimia |
onMessageUpdate |
Käsittelee sanoman päivitystoiminnot |
onSignInInvoke |
Käsittelee kirjautumiskutsutoiminnot |
Puuttuvat menetelmät agenttien SDK:ssa:
| Tapa | Syy |
|---|---|
onCommand |
Komentotoimintoja ei tueta |
onCommandResult |
Komentotulostoimintoja ei tueta |
onEvent |
Yleinen tapahtumien käsittely (tietyt tapahtumatyypit, kuten onTokenResponseEvent ovat edelleen tuettuja) |
onTokenResponseEvent |
OAuth-tunnuksen vastaustapahtumat |
Menetelmän allekirjoituksen muutokset:
Kaikki käsittelijän menetelmät palaavat ActivityHandler menetelmän this ketjutuksen sijaan. Käsittelijän funktiot käyttävät -tyyppiä AgentHandler , jolla on sama allekirjoitus kuin BotHandler
Siirtoesimerkki:
Bot Framework SDK:
const { ActivityHandler } = require('botbuilder');
class MyBot extends ActivityHandler {
constructor() {
super();
this.onMessage(async (context, next) => {
await context.sendActivity('Hello!');
await next();
});
}
}
Siirtyminen on pääosin yksinkertaista, ja tärkein muutos on tuontilauseke ja käsittelijän tyyppi. Useimmat olemassa olevat ActivityHandler-pohjaiset botit toimivat mahdollisimman vähäisin muutoksin.
Tärkeää
On ActivityHandler syrjäytetty uuden AgentApplication luokan hyväksi.
Siirtyminen kohteesta ActivityHandler kohteeseen AgentApplication
Yhteensopivuus ActivityHandler aiempien versioiden kanssa on tuettua, mutta suosittelemme käyttämään AgentApplicationseuraavaa menetelmää:
:n käyttäminen ActivityHandler
import { ActivityHandler } from '@microsoft/agents-hosting'
class MyBot extends ActivityHandler {
constructor() {
super()
this.onMessage(async (context, next) => {
await context.sendActivity('Hello!')
await next()
})
this.onMembersAdded(async (context, next) => {
await context.sendActivity('Welcome!')
await next()
})
}
}
Tärkeimmät erot
Seuraavassa taulukossa kuvataan - ja ActivityHandler-ominaisuuksien väliset AgentApplication tärkeimmät ominaisuuksien erot:
| Ominaisuus | ActivityHandler |
AgentApplication |
|---|---|---|
| Osavaltion hallinta | Manuaalinen tilanhallinta vaaditaan | Sisäänrakennettu tilanhallinta tarjolla |
| Tapahtuman käsittely | Yleiset tapahtumakäsittelijät (esimerkiksi onMembersAdded) |
Tarkempia tapahtumakäsittelijöitä (esimerkiksi membersAdded) |
| Next Function | Käsittelijöiden tulee kutsua next() |
Käsittelijät eivät vaadi kutsumista next() |
| Tallennus | Manuaalinen tallennustilan määritys | Sisäinen tallennustuki ja automaattinen tilan pysyvyys |
Yleiset siirtotavat
Yleisiä siirtomalleja ovat:
Yksinkertainen Echo-botti
Bot Framework
const { ActivityHandler } = require('botbuilder')
class EchoBot extends ActivityHandler {
constructor() {
super()
this.onMessage(async (context, next) => {
await context.sendActivity(`You said: ${context.activity.text}`)
await next()
})
}
}
Osavaltion hallinta
:n käyttäminen AgentApplication
import { AgentApplication, MemoryStorage } from '@microsoft/agents-hosting'
const agent = new AgentApplication({
storage: new MemoryStorage()
})
agent.onMessage('/count', async (context, state) => {
const count = state.conversation.count ?? 0
state.conversation.count = count + 1
await context.sendActivity(`Count: ${state.conversation.count}`)
})
Periytyminen AgentApplication-kohteesta
Monimutkaisempia skenaarioita varten voit luoda luokan, joka perii kohteesta AgentApplication:
import { AgentApplication, MemoryStorage, MessageFactory } from '@microsoft/agents-hosting'
class MyAgent extends AgentApplication {
constructor() {
super({
storage: new MemoryStorage()
})
this.setupRoutes()
}
setupRoutes() {
this.onMessage('/help', this.handleHelp)
this.onMessage('/status', this.handleStatus)
this.onMessage('/reset', this.handleReset)
this.onActivity('message', this.handleDefault)
this.onConversationUpdate('membersAdded', this.handleWelcome)
}
handleHelp = async (context, state) => {
const helpText = `
Available commands:
- /help - Show this help message
- /status - Show current status
- /reset - Reset conversation state
`
await context.sendActivity(MessageFactory.text(helpText))
}
handleStatus = async (context, state) => {
const messageCount = state.conversation.messageCount ?? 0
await context.sendActivity(`Messages processed: ${messageCount}`)
}
handleReset = async (context, state) => {
state.deleteConversationState()
await context.sendActivity('Conversation state has been reset.')
}
handleWelcome = async (context, state) => {
const welcomeText = 'Welcome! Type /help to see available commands.'
await context.sendActivity(MessageFactory.text(welcomeText))
}
handleDefault = async (context, state) => {
// Increment message counter
const messageCount = (state.conversation.messageCount ?? 0) + 1
state.conversation.messageCount = messageCount
const replyText = `Echo: ${context.activity.text} (Message #${messageCount})`
await context.sendActivity(MessageFactory.text(replyText))
}
}
export default new MyAgent()
Tämän mallin edut
| Etu | Kuvaus |
|---|---|
| Parempi organisaatio | Erilliset menetelmät eri käsittelijöille |
| Uudelleenkäytettävyys | Voidaan helposti laajentaa tai periä edelleen |
| Koeteltavuus | Yksittäisiä menetelmiä voidaan testata yksittäin |
| Ylläpidettävyyttä | Monimutkaisten bottien siistimpi koodirakenne |
| Nuolifunktiot | Kontekstin automaattinen sitominen this ilman tarvetta .bind() |
Liittyvä sisältö
- Azure Bot Framework SDK:sta Agents SDK:n siirto-ohjeisiin
- Azure Bot Framework SDK–Microsoft 365 -agenttien SDK-siirto-ohjeet .NET:lle
Azure Bot Framework SDK:sta Microsoft 365 -agenttien SDK Python