Forum Discussion
Tools in Teams AI Library
Hello Team,
In LLM we use tools like DynamicTool, DynamicStructuredTool to determine when to call which function and with what parameters. How to do the same using Teams AI Library?
My Use Case:
I want to find the intent from the user query and based on that intent further call the respective function/tool to perform respective action. How can I achieve this using Teams AI Library?
I went through the samples mentioned here:
https://github.com/microsoft/teams-ai/blob/main/js/samples/04.ai-apps/
but couldn't find anything similar.
11 Replies
- danielcartCopper Contributor
To achieve intent detection and call specific functions based on that in Teams AI Library, you can follow these steps: Use the built-in natural language understanding (NLU) capabilities or integrate an intent recognition model to analyze user queries. Based on the detected intent, write conditional logic in your bot code to call the appropriate function or tool. Although Teams AI Library doesn't have DynamicTool like classes, you can implement a custom intent-to-function mapping inside your bot handlers. Check for updates or community samples regularly, as advanced routing features may be added soon. In short, use intent detection outside the library, then route calls programmatically in your Teams bot based on that intent.
- Vaibhav-MSFTFormer Employee
Janhvi ,
Thanks for posting you query here. We will look into it and let you know.- JanhviCopper Contributor
Following the below example, I have replicated tools using actions :
https://github.com/microsoft/teams-ai/blob/main/js/samples/03.ai-concepts/c.actionMapping-lightBot/src/prompts/sequence/actions.json
Now if I want to create hierarchy of this action i.e under one action I want to create a set of other actions. How can we do that?
Use Case: Once it has understood the intent to execute the following action, now I want sub actions to be performed for that particular intent.
For example : Intents are creation, modification, deletion etc
Now when it understood the intent as modification, I further want this action to have sub actions say
1) Time (when was it modified)
2) User Event (who modified it)
3) Modified since (what are the modifications since yesterday) and so on
And these sub actions based on the data source provided so how to add data source as well.
How to achieve this?- Vaibhav-MSFTFormer Employee
Hello Janhvi,
Can you please try to register subhandlers for actions using the Teams AI Library.import { Application, ApplicationTurnState, PauseParameters } from 'your-teams-ai-library'; // Import necessary types from the Teams AI Library
// Define the JSON data for actions and subactions
const actionsAndSubactions = [
{
"name": "Pause",
"description": "Delays for a period of time",
"subactions": [
{
"name": "Resume",
"description": "Resumes after pause"
},
{
"name": "Stop",
"description": "Stops the pause"
}
]
}
// Add more actions and subactions as needed
];// Define the subaction handlers
const subactionHandlers: { [name: string]: (context: any, state: ApplicationTurnState, parameters: any) => Promise<string> } = {
async Resume(context: any, state: ApplicationTurnState, parameters: any) {
// Implement logic for handling the Resume subaction
return "Resume logic executed";
},
async Stop(context: any, state: ApplicationTurnState, parameters: any) {
// Implement logic for handling the Stop subaction
return "Stop logic executed";
}
// Add more subaction handlers as needed
};// Initialize the application
const app = new Application<ApplicationTurnState>({
storage,
ai: {
planner
}
});// Register action handlers
actionsAndSubactions.forEach(action => {
app.ai.action(action.name, async (context: any, state: ApplicationTurnState, parameters: PauseParameters) => {
const subactionName = context.activity.value?.subaction;if (subactionName && subactionHandlers[subactionName]) {
return subactionHandlers[subactionName](context, state, parameters);
} else {
await context.sendActivity(`[pausing for ${parameters.time / 1000} seconds]`);
await new Promise((resolve) => setTimeout(resolve, parameters.time));
return `done pausing`;
}
});
});