This runbook implements the portal-first Azure AI Search ESCO/O*NET skill matching MVP.
Create a Storage Account:
- Resource group:
rg-powerplatform-billing - Name:
selectrytaxonomydata - Region:
Germany West Central - Performance:
Standard - Redundancy:
LRS
Create a private Blob container:
- Container name:
taxonomy-source
In azureaisearchselectry, create index selectry-skills-v2.
Use the JSON schema in:
taxonomy_mvp/selectry-skills-v2.index.json
Upload modern tool data directly to the new index.
Request:
POST https://azureaisearchselectry.search.windows.net/indexes/selectry-skills-v2/docs/index?api-version=2024-07-01
Headers:
Content-Type: application/json
api-key: <admin-key>
Body:
taxonomy_mvp/selectry-local-skills.json
Download English ESCO skills/competences CSV from:
https://esco.ec.europa.eu/en/use-esco/download
Transform it:
python3 taxonomy_mvp/prepare_taxonomy.py \
--source ESCO \
--input /path/to/esco_skills_en.csv \
--output taxonomy_mvp/out/esco-skills-upload.jsonUpload taxonomy_mvp/out/esco-skills-upload.json to the same Azure Search index
using the same /docs/index endpoint as above.
Download O*NET database files from:
https://www.onetcenter.org/
Start with skills, knowledge, abilities, and technology skills files.
Transform each file:
python3 taxonomy_mvp/prepare_taxonomy.py \
--source ONET \
--input /path/to/onet_file.csv \
--output taxonomy_mvp/out/onet-upload.jsonUpload each transformed JSON file to selectry-skills-v2.
Use selectry-skills-v2.
Test software development:
{
"search": "software development",
"queryType": "simple",
"top": 5,
"select": "id,source,preferredLabel,altLabels,description,skillType,uri"
}Test Docker:
{
"search": "Docker",
"queryType": "simple",
"top": 5,
"select": "id,source,preferredLabel,altLabels,description,skillType,uri"
}Test project management:
{
"search": "project management",
"queryType": "simple",
"top": 5,
"select": "id,source,preferredLabel,altLabels,description,skillType,uri"
}In PA_GetSkillTaxonomyMatches_v2, update the HTTP URI:
https://azureaisearchselectry.search.windows.net/indexes/selectry-skills-v2/docs/search?api-version=2024-07-01
Keep the body expression:
json(concat('{"search":"', item(), '","queryType":"simple","top":3,"select":"id,source,preferredLabel,altLabels,description,skillType,uri"}'))
The last action must be Return value(s) to Power Virtual Agents, not generic
Response.
Return:
taxonomyStatus = taxonomy_lookup_completed
taxonomyMatchesJson = string(variables('varResults'))
taxonomySourcesUsedJson = ["ESCO","O*NET","selectry-local"]
Tool display name:
Match job skills against ESCO and O*NET skill databases
Underlying flow:
PA_GetSkillTaxonomyMatches_v2
Model:
Claude Sonnet 4.6
Behavior:
- Input is role core JSON from Agent 1.
- Extract unique skill names.
- Call the taxonomy flow with a JSON string array.
- Preserve original priority and source.
- Use taxonomy only as enrichment.
- Do not invent ESCO/O*NET matches.
- Do not promote optional/unconfirmed signals to must-have.