> ## Documentation Index
> Fetch the complete documentation index at: https://docs.usefini.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Magic Articles

> Turn transcripts, docs, or notes into structured help articles with AI. Fini drafts, deduplicates, and routes new content through Review before publishing.

Magic Articles (the **Generate** page in the dashboard) is one of the main ways knowledge enters Fini's [Knowledge](/en/knowledge/overview) model. Instead of writing an [Article](/en/knowledge/articles) by hand, you paste raw content: a transcript, a Notion dump, a release-notes draft, a customer ticket explaining a workflow, and Fini generates a structured article in your knowledge base format. It also decides what *kind* of operation makes sense: is this a new article, an update to an existing one, or a duplicate that doesn't need to land?

<Frame>
  <img src="https://mintcdn.com/fini/zef_RDWlJqADKDlS/images/en/knowledge/magic-articles/generate.png?fit=max&auto=format&n=zef_RDWlJqADKDlS&q=85&s=eaf1d2d293b8692d4dcd22de64851c38" alt="Generate page in the Fini Demo workspace with the Raw Content textarea, Additional Instructions field, Target Bot selector, Live and Suggest for Review status toggle, three enabled Generation Action tiles, and the Generate Magic Article button" width="1680" height="1050" data-path="images/en/knowledge/magic-articles/generate.png" />
</Frame>

<Info>
  **Where Magic Articles fits in the flow.** Magic Articles produces drafts. Those drafts can go to [Review Queue](/en/knowledge/review) or directly to the **Published** tab, depending on **Status After Generation**. Either way, they land in [Articles](/en/knowledge/articles), which is the source of truth your agents retrieve from. Magic Articles doesn't bypass Articles, it's a fast lane *into* it.
</Info>

Use Magic Articles when you have unstructured content you want to turn into curated knowledge.

## Generation Action

The **Generation Action** section exposes three tiles, each with a checkbox. Unlike a single radio choice, these are *allowed behaviors*, you can enable any combination, and the AI chooses which one to apply based on what your raw content actually looks like.

<CardGroup cols={3}>
  <Card title="Create New Article" icon="plus">
    **Always create a new article. Don't merge with existing.** Use when you know the content is genuinely new and don't want Fini second-guessing.
  </Card>

  <Card title="Update Existing" icon="pen-to-square">
    **Find the closest match and update it. Flag if no match found.** Use when the content is most likely a revision of something already in your knowledge graph.
  </Card>

  <Card title="Detect Duplicates" icon="copy">
    **Check against existing articles and flag overlaps without writing.** No article is created. Use to audit a batch of content before committing, pairs well with bulk generation.
  </Card>
</CardGroup>

The page reads *"AI will intelligently choose between the enabled options."* Practical combinations:

* **All three enabled (default).** Fini decides between create, update, and flag-as-duplicate based on overlap with your existing articles. The safest setting for most runs.
* **Just Create New Article.** Force new article creation regardless of overlap. Use when you're certain the content is novel and don't want a near-duplicate to silently turn into an "update."
* **Just Detect Duplicates.** Dry-run mode. No writes happen, Fini only tells you which of your raw inputs duplicate existing articles. Useful before a bulk import.
* **Update Existing + Detect Duplicates (no Create).** Conservative mode. Fini will only update or flag, never create new articles. Use when you're consolidating, not expanding.

<Note>
  This is the layer where Magic Articles helps prevent the conflict-and-duplication problem that Review Queue exists to solve. By letting you choose which behaviors are *allowed*, Fini routes your content through the right consolidation path instead of blindly creating yet another near-duplicate article.
</Note>

## Generating an article

<Steps>
  <Step title="Paste raw content">
    Drop your content into **Raw Content**. Helper text reads *"Paste notes, emails, Slack threads, docs"*. Markdown, plain text, transcripts, exported docs all work. There's no firm length limit; longer inputs produce richer articles but take longer to generate.
  </Step>

  <Step title="Add Additional Instructions (optional)">
    The **Additional Instructions** field tells Fini how to shape the article: tone, audience, what to emphasize, what to skip.

    Useful examples:

    * *"The new content should replace the old, treat it as new source of truth."*
    * *"Strip out internal jargon; phrase for end customers."*
    * *"Focus on the steps the customer takes, not the underlying API."*
    * *"This applies only to Enterprise customers, note that in the article."*
    * *"Match anything"* or *"Focus on billing topics"* (the placeholder shows lightweight scoping examples).
  </Step>

  <Step title="Pick a Target Bot (optional)">
    The dropdown narrows the operation to articles attached to that agent. Fini compares against that agent's existing articles when deciding create vs update vs duplicate.

    Leave it unset and the helper text reads *"No bot selected — available to all."* The article will be created against the workspace's full knowledge graph and made available to every agent.

    <Tip>
      Because duplicate detection is scoped to the selected agent, the same content can land as a duplicate for one agent and a brand-new article for another. If you run a multi-agent workspace, pick the agent whose knowledge base this content most logically belongs to.
    </Tip>
  </Step>

  <Step title="Pick Status After Generation">
    Toggle between two options:

    * **Live**, the page warns: *"Generated articles will be published immediately and available to your bots."* Use only when you're regenerating known-good source content, working solo, or running a trusted bulk import.
    * **Suggest for Review**, the generated article goes to [Review Queue](/en/knowledge/review) for vetting before serving customer queries. **Recommended** for almost all runs, it's the safety net that catches LLM hallucinations, wrong folder picks, and unresolved conflicts before customers see them.
  </Step>

  <Step title="Enable Generation Actions">
    Check the boxes for which behaviors Fini is allowed to take (**Create New Article**, **Update Existing**, **Detect Duplicates**). You can enable any combination; the AI chooses between the enabled options.
  </Step>

  <Step title="Generate">
    Click **Generate Magic Article**. Fini runs the LLM, applies the operation it picked from your enabled actions, and produces output. The success message tells you what happened:

    * *"Article created successfully"*
    * *"Article updated successfully"*
    * *"Duplicate detected, please check review tab"*
  </Step>
</Steps>

## What Fini does behind the scenes

Magic Articles isn't just a "wrap raw text in a template" operation. The LLM:

<Steps>
  <Step title="Reads">
    Parses your raw content and any Additional Instructions.
  </Step>

  <Step title="Searches">
    Looks across your existing articles (scoped to the selected agent, or to the whole workspace if no agent is selected) for near-duplicates.
  </Step>

  <Step title="Picks an action">
    Chooses among the actions you enabled. If only **Create New Article** is checked, it creates. If only **Detect Duplicates** is checked, it never writes. If multiple are enabled, it picks the one that best fits the input, for example, "this is clearly an update to an existing article" → Update Existing, "this is overlapping but distinct" → Create New, "this is a near-perfect duplicate" → flag for review.
  </Step>

  <Step title="Picks the folder">
    For Create operations, Fini chooses the folder based on your existing structure and the article's topic. Folder picking is heuristic, you can override by naming the folder in Additional Instructions.
  </Step>

  <Step title="Drafts the article">
    Fills in Title, Main Knowledge, Questions, Keywords, and (optionally) Agent Instruction to match your authoring conventions.
  </Step>

  <Step title="Submits">
    Routes to [Review Queue](/en/knowledge/review) or directly to live, per your status choice.
  </Step>
</Steps>

## Bulk generation from existing sources

A separate flow under [Sources](/en/knowledge/sources) lets you bulk-generate articles from sources you've already ingested. The same Magic Articles engine runs, but operates over an entire crawled site or a folder of files instead of a single paste.

<Tip>
  **This is the standard first-day workflow.** Ingest your help center as Sources, run bulk Magic Articles generation against everything (with all three Generation Actions enabled), let the drafts and flags pile up in Review, then work through them as a batch. It's the fastest way to go from zero to a functional knowledge graph.
</Tip>

See the [Knowledge first-day setup](/en/knowledge/overview#first-day-setup) for the full playbook.

## Why a Magic Articles run produced an unexpected result

<AccordionGroup>
  <Accordion title="Detect Duplicates fired when you expected Create" icon="copy">
    A close duplicate already exists in your knowledge graph. Options:

    * Uncheck **Detect Duplicates** and re-run, only **Create New Article** will be available.
    * Edit the existing article instead of creating a new one.
    * Refine the Additional Instructions to specify what makes this content distinct.
  </Accordion>

  <Accordion title="Update Existing fired when you expected Create" icon="pen-to-square">
    The LLM thought your input was an extension of an existing article. Options:

    * Uncheck **Update Existing** and re-run, Fini will be forced to create new (or flag as duplicate, if that's also enabled).
    * Be more explicit in Additional Instructions about what's new vs. what's an extension.
  </Accordion>

  <Accordion title="The generated article landed in the wrong folder" icon="folder">
    Folder picking is heuristic. After generation, move the article manually in [Articles](/en/knowledge/articles), or specify the folder name explicitly in Additional Instructions on the next run.
  </Accordion>

  <Accordion title="The Title or Questions don't match how customers ask" icon="comments">
    The LLM's first guess at Title and Questions is a starting point, not the final answer. Open the article in [Articles](/en/knowledge/articles), pull real phrasings from **View training conversations** or Inbox, and add them to the Questions list.
  </Accordion>

  <Accordion title="The article looks too generic" icon="square-dashed">
    Longer, more specific raw content produces more specific articles. If you fed a brief, the output will be too. Re-run with the source-of-truth document instead of a summary.
  </Accordion>

  <Accordion title="Status went to Live but you wanted Review (or vice versa)" icon="toggle-on">
    Status is set per-run; check the toggle before clicking Generate. The Live mode explicitly warns *"Generated articles will be published immediately and available to your bots"*, if you missed it, you can edit the article in [Articles](/en/knowledge/articles) and resubmit through Review. The live version keeps serving until the draft is approved.
  </Accordion>

  <Accordion title="A conflict went undetected and made it live" icon="triangle-exclamation">
    This happens when **Live** was picked instead of **Suggest for Review**, and either:

    * **Detect Duplicates was unchecked**, so Fini wasn't allowed to flag the overlap, or
    * Detect Duplicates was on but the LLM's similarity check missed it.

    Fix by deleting the duplicate in [Articles](/en/knowledge/articles), or by merging the two articles via a new draft routed through Review. Going forward, keep **Detect Duplicates** enabled and prefer **Suggest for Review**.
  </Accordion>
</AccordionGroup>


## Related topics

- [Articles](/en/knowledge/articles.md)
- [Review Queue](/en/knowledge/review.md)
- [Sources](/en/knowledge/sources.md)


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.