Configure AI features

What AI does for feedback (summaries, duplicate detection, suggestions) and how to point a self-hosted install at any OpenAI-compatible or local model endpoint.

JM
James Morton
Written By James MortonLast updated 1 day ago

Quackback uses language models and vector embeddings to summarize feedback, find duplicates, and turn incoming feedback into suggestions. This article explains what each feature does and how to set up the AI endpoint on a self-hosted install.

Note: This article covers AI for feedback. For Quinn (the AI agent and Copilot) and workflows, see the AI & Automation overview.

Quackback Cloud

On Cloud there is nothing to configure: AI runs on a model Quackback provides. The AI features and Quinn are included from the Pro plan, and the Free plan has no AI features. Cloud meters Quinn usage and lets you buy $10 top-up packs. See Quinn usage and top-ups.

What AI does for feedback

Feature

What it does

Post summaries

Summarizes the comments on a post

Duplicate detection

Finds existing posts that match new feedback, using vector similarity, full-text search and a model check

AI suggestions

Turns feedback from integrations such as Slack into suggestions: merge posts, vote on a post, or create a post

Embeddings

Vector representations of posts and help center articles, used for similarity and semantic search

Post summaries

Posts with comments show an AI summary on the post detail page:

  • Overview: one to three sentences on the core user need
  • Key quotes: notable comments from users (not team replies)
  • Next steps: suggested actions such as "Investigate..." or "Respond to..."

Summaries refresh automatically in the background when new comments arrive. A Stale badge shows next to the timestamp until the refresh finishes.

Duplicate detection

When feedback arrives, Quackback looks for existing posts on the same topic in three stages:

  1. Vector similarity: compares the new content with existing post embeddings.
  2. Full-text search: catches keyword matches that embeddings might miss.
  3. Model check: asks the model to confirm each candidate pair and filter out false matches.

Strong matches appear as merge suggestions. You also see similar posts in the Merge section of any post, with one-click merge.

AI suggestions

Feedback from integration sources such as Slack passes a quality check, is matched against existing posts, and becomes a suggestion to merge posts, vote on an existing post, or create a new post with an AI-written title. See Triage AI suggestions.

Configure AI (self-hosted)

Note: Self-hosted only. Cloud workspaces skip this section.

All AI features are off until you set an endpoint and models. Without them, AI features stay inactive and their buttons don't appear.

Set four environment variables: an API key, an endpoint, and a model for each of the two roles.

OPENAI_API_KEY="sk-..."
OPENAI_BASE_URL="https://api.openai.com/v1"
AI_CHAT_MODEL="gpt-4o-mini"
AI_EMBEDDING_MODEL="text-embedding-3-small"

Quackback works with any OpenAI-compatible endpoint and never assumes one. Point OPENAI_BASE_URL at a model provider, a gateway such as OpenRouter or Cloudflare AI Gateway, or a model server you run yourself. Use model ids your endpoint accepts. Gateways usually want provider-prefixed ids such as google/gemini-3.1-flash-lite-preview.

  • AI_CHAT_MODEL powers summaries, duplicate checks, suggestions, Quinn, and help center answers.
  • AI_EMBEDDING_MODEL powers duplicate detection and help center semantic search. It must produce 1536-dimensional vectors (for example text-embedding-3-small).

Add the variables to your environment and restart Quackback. If the configuration is incomplete (for example, a key without an endpoint), AI stays off and a warning is logged at startup.

Warning: Upgrading from a version before 0.12.0? OPENAI_API_KEY alone no longer turns AI on. Add OPENAI_BASE_URL and both model variables.

Local model servers

Local and self-run model servers work if they expose an OpenAI-compatible API. Set OPENAI_BASE_URL to the server's /v1 address and use its model names. OPENAI_API_KEY must still be set: use any non-empty value if your server doesn't check keys. Your embedding model must return 1536-dimensional vectors.

Per-feature models

Give one feature its own model, or switch one feature off while keeping the rest:

AI_SUMMARY_MODEL="off"     # turn off post summaries only
AI_MERGE_MODEL="gpt-4o"    # use a stronger model for duplicate checks

Feature overrides: AI_SUMMARY_MODEL, AI_SENTIMENT_MODEL, AI_EXTRACTION_MODEL, AI_QUALITY_GATE_MODEL, AI_INTERPRETATION_MODEL, AI_MERGE_MODEL, AI_HELP_CENTER_MODEL, AI_HELP_CENTER_TRANSLATE_MODEL, AI_ASSISTANT_MODEL (Quinn), AI_INBOX_TRANSLATION_MODEL, and AI_CLASSIFICATION_MODEL. Each falls back to AI_CHAT_MODEL when unset. A value of off, none or false turns off just that feature.

Backfill embeddings

Posts created before AI was turned on have no embeddings. From a source install, generate them with:

bun run ai:backfill

The command skips posts that already have embeddings, so it is safe to run more than once. It makes one model call per post, so a large workspace can take several minutes and use API credit.

Where your data goes

On a self-hosted install, every AI request goes to the endpoint you set in OPENAI_BASE_URL, and nowhere else. Quackback never sends data to an endpoint you didn't configure. For the feedback features it sends:

  • Post titles and descriptions, for embeddings and duplicate detection
  • Comment text from users (not team replies), for summaries
  • Candidate post pairs, for the duplicate check

Warning: If you have data residency requirements, choose an endpoint or proxy that meets them, and review your model provider's data retention policy before turning AI on.

To turn AI off entirely, see FAQ: Turn AI features off.

Was this helpful?

Your feedback shapes what we write next.