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

# 5. An AI agent

> Laissez un agent générer des documents à partir d'un chat, à l'aide de votre outil.

Parce que `generate-document` est exposé comme un **outil**, un agent AI peut l'appeler.
Ajoutons un agent et une compétence pour que les utilisateurs puissent simplement dire *"générer une proposition pour
Jeffery Griffin"*.

## La compétence

Un [skill](/l/fr/developers/extend/apps/logic/skills-and-agents) est des instructions réutilisables
— des connaissances que vous attachez aux agents. Le nôtre enseigne au modèle comment utiliser
l'outil.

```ts filename="src/skills/document-drafting.skill.ts" theme={null}
import { defineSkill } from 'twenty-sdk/define';

export default defineSkill({
  universalIdentifier: DOCUMENT_SKILL_UNIVERSAL_IDENTIFIER,
  name: 'document-drafting',
  label: 'Document drafting',
  icon: 'IconFileText',
  content: [
    'To generate a document, call the `generate-document` tool with:',
    '- `templateId`: the id of the document template to use.',
    '- `recordId`: the id of the Person or Company the document is for.',
    '',
    'If the user names a template or person instead of an id, find the record first,',
    'then pass its id. Make sure the template target matches the record type.',
  ].join('\n'),
});
```

## L'agent

Un [agent](/l/fr/developers/extend/apps/logic/skills-and-agents) paie une invite avec un modèle
. Définissez explicitement `responseFormat` pour éviter un avertissement de construction.

```ts filename="src/agents/document-assistant.agent.ts" theme={null}
import { defineAgent } from 'twenty-sdk/define';

export default defineAgent({
  universalIdentifier: DOCUMENT_AGENT_UNIVERSAL_IDENTIFIER,
  name: 'document-assistant',
  label: 'Document Assistant',
  description: 'Generates documents from your templates and CRM records.',
  icon: 'IconFileText',
  responseFormat: { type: 'text' },
  prompt: [
    'You are the Document Assistant for a CRM.',
    'You help users generate personalized documents from reusable templates',
    'and the data already in their CRM. Use the generate-document tool, and',
    'always confirm what you created.',
  ].join(' '),
});
```

<Note>
  L'agent ne peut appeler l'outil que si son rôle le permet. Nous avons déjà défini
  `canAccessAllTools: true` et `canBeAssignedToAgents: true` sur le rôle de l'application dans
  [Chapitre 2](/l/fr/developers/extend/apps/tutorials/document-generator/generating-documents#grant-it-access).
</Note>

## Essayez-le

Ouvrez une discussion avec **Document Assistant** et demandez-lui de rédiger un document pour une
personne dans votre CRM. Il trouve l'enregistrement, appelle `generate-document`, et rapporte
le document qu'il a créé — qui apparaît maintenant dans votre vue **Documents**
exactement comme les chemins du menu de commande et du workflow.

C'est le payoff de l'exposition de la logique en tant qu'outil : **une fonction, de nombreuses portes frontales** — Menu de commande
, HTTP, étape de workflow et maintenant langage naturel.

**Après cette étape:** l'application est complète et vraiment utile. Il est temps de
l’expédier.

<Card title="Suivant : publication →" icon="rocket" href="/fr/developers/extend/apps/tutorials/document-generator/publishing">
  Ajouter des métadonnées de marketplace et publier.
</Card>
