Advisory AI Assistant Parameters

Primary audience: platform operators & policy authors • Updated: 2025-11-13

This note centralises the tunable knobs that control Advisory AI’s planner, retrieval stack, inference clients, and guardrails. All options live under the AdvisoryAI configuration section and can be set via appsettings.* files or environment variables using ASP.NET Core’s double-underscore convention (ADVISORYAI__Inference__Mode, etc.).

AreaKey(s)Environment variableDefaultNotes
Inference modeAdvisoryAI:Inference:ModeADVISORYAI__INFERENCE__MODELocalLocal runs the deterministic pipeline only; Remote posts sanitized prompts to Remote.BaseAddress.
Remote base URIAdvisoryAI:Inference:Remote:BaseAddressADVISORYAI__INFERENCE__REMOTE__BASEADDRESSRequired when Mode=Remote. HTTPS strongly recommended.
Remote API keyAdvisoryAI:Inference:Remote:ApiKeyADVISORYAI__INFERENCE__REMOTE__APIKEYInjected as Authorization: Bearer <key> when present.
Remote timeoutAdvisoryAI:Inference:Remote:TimeoutSecondsADVISORYAI__INFERENCE__REMOTE__TIMEOUTSECONDS30Failing requests fall back to the sanitized prompt with inference.fallback_reason=remote_timeout.
Guardrail prompt capAdvisoryAI:Guardrails:MaxPromptLengthADVISORYAI__GUARDRAILS__MAXPROMPTLENGTH16000Prompts longer than the cap are blocked with prompt_too_long.
Guardrail citationsAdvisoryAI:Guardrails:RequireCitationsADVISORYAI__GUARDRAILS__REQUIRECITATIONStrueWhen true, at least one citation must accompany every prompt.
Guardrail phrase seedsAdvisoryAI:Guardrails:BlockedPhrases[]
AdvisoryAI:Guardrails:BlockedPhraseFile
ADVISORYAI__GUARDRAILS__BLOCKEDPHRASES__0
ADVISORYAI__GUARDRAILS__BLOCKEDPHRASEFILE
See defaults belowFile paths are resolved relative to the content root; phrases are merged, de-duped, and lower-cased.
Plan cache TTLAdvisoryAI:PlanCache:DefaultTimeToLive*ADVISORYAI__PLANCACHE__DEFAULTTIMETOLIVE00:10:00Controls how long cached plans are reused. (CleanupInterval defaults to 00:05:00).
Queue capacityAdvisoryAI:Queue:CapacityADVISORYAI__QUEUE__CAPACITY1024Upper bound on in-memory tasks when using the default queue.
Queue wait intervalAdvisoryAI:Queue:DequeueWaitIntervalADVISORYAI__QUEUE__DEQUEUEWAITINTERVAL00:00:01Back-off between queue polls when empty.

* The plan-cache section is bound via AddOptions<AdvisoryPlanCacheOptions>(); override by adding an AdvisoryAI__PlanCache block to the host configuration.


1. Inference knobs & “temperature”

Advisory AI supports two inference modes:

  • Local (default) – The orchestrator emits deterministic prompts and the worker returns the sanitized prompt verbatim. This mode is offline-friendly and does not call any external LLMs. There is no stochastic “temperature” here—the pipeline is purely rule-based.
  • Remote – Sanitized prompts, citations, and metadata are POSTed to Remote.BaseAddress + Remote.Endpoint (default /v1/inference). Remote providers control sampling temperature on their side. StellaOps treats remote responses deterministically: we record the provider’s modelId, token usage, and any metadata they return. If your remote tier exposes a temperature knob, set it there; Advisory AI simply forwards the prompt.

Remote inference quick sample

{
  "AdvisoryAI": {
    "Inference": {
      "Mode": "Remote",
      "Remote": {
        "BaseAddress": "https://inference.internal",
        "Endpoint": "/v1/inference",
        "ApiKey": "${ADVISORYAI_REMOTE_KEY}",
        "TimeoutSeconds": 45
      }
    }
  }
}

2. Guardrail configuration

SettingDefaultExplanation
MaxPromptLength16000 charsUpper bound enforced after redaction. Increase cautiously—remote providers typically cap prompts at 32k tokens.
RequireCitationstrueForces each prompt to include at least one citation. Disable only when testing synthetic prompts.
BlockedPhrases[]ignore previous instructions, disregard earlier instructions, you are now the system, override the system prompt, please jailbreakInline list merged with the optional file. Comparisons are case-insensitive.
BlockedPhraseFilePoints to a newline-delimited list. Relative paths resolve against the content root (AdvisoryAI.Hosting sticks to AppContext base).

Violations surface in the response metadata (guardrail.violations[*]) and increment advisory_ai_guardrail_blocks_total. Console consumes the same payload for its ribbon state.

3. Retrieval & ranking weights (per-task)

Each task type (Summary, Conflict, Remediation) inherits the defaults below. Override any value via AdvisoryAI:Tasks:<TaskType>:<Property>.

TaskStructuredMaxChunksVectorTopKVectorQueries (default)SbomMaxTimelineEntriesSbomMaxDependencyPathsIncludeBlastRadius
Summary255Summarize key facts, What is impacted?1020
Conflict306Highlight conflicting statements, Where do sources disagree?815
Remediation356Provide remediation steps, Outline mitigations and fixes1225

These knobs act as weighting levers: lower VectorTopK emphasises deterministic evidence; higher values favor breadth. StructuredMaxChunks bounds how many CSAF/OSV/VEX chunks reach the prompt, keeping token budgets predictable.

4. Token budgets

AdvisoryTaskBudget holds PromptTokens and CompletionTokens per task. Defaults:

TaskPrompt tokensCompletion tokens
Summary2 048512
Conflict2 048512
Remediation2 048640

Overwrite via AdvisoryAI:Tasks:Summary:Budget:PromptTokens, etc. The worker records actual consumption in the response metadata (inference.prompt_tokens, inference.completion_tokens).

5. Cache TTLs & queue directories

  • Plan cache TTLs – In-memory and file-system caches honour AdvisoryAI:PlanCache:DefaultTimeToLive (default 10 minutes) and CleanupInterval (default 5 minutes). Shorten the TTL to reduce stale plans or increase it to favour offline reuse. Both values accept ISO 8601 or hh:mm:ss time spans.
  • Queue & storage pathsAdvisoryAI:Queue:DirectoryPath, AdvisoryAI:Storage:PlanCacheDirectory, and AdvisoryAI:Storage:OutputDirectory default to data/advisory-ai/{queue,plans,outputs} under the content root; override these when mounting RWX volumes in sovereign clusters.
  • Output TTLs – Output artefacts inherit the host file-system retention policies. Combine DefaultTimeToLive with a cron or systemd timer to prune outputs/ periodically when operating in remote-inference-heavy environments.

Example: raised TTL & custom queue path

{
  "AdvisoryAI": {
    "PlanCache": {
      "DefaultTimeToLive": "00:20:00",
      "CleanupInterval": "00:05:00"
    },
    "Queue": {
      "DirectoryPath": "/var/lib/advisory-ai/queue"
    }
  }
}

6. Operational notes

  • Updating guardrail phrases triggers only on host reload. When distributing blocked-phrase files via Offline Kits, keep filenames stable and version them through Git so QA can diff changes.
  • Temperature / sampling remains a remote-provider concern. StellaOps records the provider’s modelId and exposes fallback metadata so policy authors can audit when sanitized prompts were returned instead of model output.
  • Always track changes in docs/implplan/SPRINT_0111_0001_0001_advisoryai.md (task DOCS-AIAI-31-006) when promoting this document so the guild can trace which parameters were added per sprint.