deploy-ai-search-portal — independently scanned and version-tracked by SaferSkills.
SaferSkills independently audited deploy-ai-search-portal (Agent Skill) and scored it 100/100 (green). The audit ran 55 deterministic rules across Security, Supply Chain, Maintenance, Transparency, and Community; it found 0 high-severity and 0 lower-severity findings. The full rule-by-rule trace and per-finding evidence are below. Free, methodology-open.
Findings & checks · 0 flagged
Every scanned point with the score it earned and what moved between them.
First recorded scan — no prior version to compare against.
The primary manifest — the file an agent reads to learn what this artifact does.
az account showaz bicep versionaz bicep lint -f infra/main.bicep
az bicep build -f infra/main.bicepVerify resources:
az deployment group create \
--resource-group $RESOURCE_GROUP \
--template-file infra/main.bicep \
--parameters infra/parameters.jsonDefine index fields with appropriate types and attributes:
| Field | Type | Searchable | Filterable | Facetable | Sortable |
|---|---|---|---|---|---|
| id | Edm.String | — | — | — | — |
| title | Edm.String | ✅ | — | — | ✅ |
| content | Edm.String | ✅ | — | — | — |
| category | Edm.String | — | ✅ | ✅ | — |
| date | Edm.DateTimeOffset | — | ✅ | — | ✅ |
| author | Edm.String | ✅ | ✅ | ✅ | — |
| contentVector | Collection(Edm.Single) | — | — | — | — |
Vector configuration: HNSW algorithm, cosine metric, dimensions matching embedding model (3072 for text-embedding-3-large).
{
"search": {
"queryType": "semantic",
"semanticConfiguration": "default-semantic",
"vectorQueries": [{ "kind": "vector", "fields": "contentVector", "k": 5 }],
"searchFields": "title,content",
"select": "id,title,content,category,date"
}
}Enable all three search modes: BM25 keyword + vector similarity + semantic reranking.
| Source | Indexer Type | Schedule | Delta Detection |
|---|---|---|---|
| Blob Storage | blob | Every 5 min | Change detection |
| SQL Database | sql | Every 15 min | High watermark |
| Cosmos DB | cosmosdb | Real-time | Change feed |
| SharePoint | sharepoint | Every 1 hour | Last modified |
Skillset: Add cognitive skills for OCR, language detection, entity extraction, and vectorization.
title and category fieldstwoTerms (best balance)# Build and deploy static web app
cd portal/
npm run build
az staticwebapp deploy --app-name $APP_NAME --output-location build/# Test keyword search
curl "$SEARCH_ENDPOINT/indexes/portal-index/docs?search=azure+pricing&api-version=2024-07-01"
# Test vector search
python scripts/test_vector_search.py --query "How to deploy containers"
# Test hybrid search
python scripts/test_hybrid_search.py --query "kubernetes scaling" --top 5
# Test autocomplete
curl "$SEARCH_ENDPOINT/indexes/portal-index/docs/autocomplete?search=kub&suggesterName=sg&api-version=2024-07-01"| Issue | Cause | Fix |
|---|---|---|
| Zero results | Index empty | Check indexer status, verify data source |
| Vector search returns irrelevant | Wrong embedding model | Match query embedding to index embedding model |
| Semantic ranking not working | SKU too low | Requires Standard S1 or higher |
| Slow autocomplete | Too many suggestable fields | Limit suggester to 2-3 fields |
| Indexer fails | Schema mismatch | Compare source schema to index fields |
| Facet counts wrong | Filter not applied | Verify filterable attribute on facet fields |
~30 seconds. Free. No account. Every finding cites a rule and a line of evidence.