# Creazione di un Rememberizer GPT

### Requisiti

Prima di tutto, devi [registrare un'app Rememberizer](https://docs.rememberizer.ai/it/risorse-per-sviluppatori/integration-options/registering-rememberizer-apps) e configurarla con le impostazioni appropriate.

{% hint style="info" %}
Se sei interessato a metodi di integrazione alternativi, dai un'occhiata a [Integrazione LangChain](https://docs.rememberizer.ai/it/risorse-per-sviluppatori/integration-options/langchain-integration) per l'accesso programmatico alle capacità di ricerca semantica di Rememberizer.
{% endhint %}

Per creare un GPT, dovrai impostare l'origine della richiesta autorizzata della tua app Rememberizer su `https://chat.openai.com`.

> Devi aggiungere un URL di callback per registrare l'app, ma puoi trovare l'URL di callback solo dopo aver aggiunto un'azione al tuo GPT; per ora lascialo come un valore fittizio (ad es. <https://chat.openai.com>). Dopo aver ottenuto l'URL di callback, dovrai aggiornare quello corretto per l'app.\
> \ <mark style="color:red;">**Nota:**</mark> <mark style="color:red;">I GPT aggiornano il loro URL di callback dopo che cambi la loro configurazione. Assicurati di copiare l'ultimo URL di callback.</mark>

Dopo aver creato un'app, copia il **Client ID** e il **Client Secret**. Li utilizzeremo quando creeremo un GPT. Le istruzioni su come ottenere queste informazioni possono essere consultate in [Autorizzazione delle app Rememberizer](https://docs.rememberizer.ai/developer/authorizing-rememberizer-apps).

### Crea un GPT

Puoi iniziare [creando un GPT nell'interfaccia di ChatGPT](https://chat.openai.com/gpts/editor).

{% hint style="warning" %}
Nota: La creazione di un'app GPT personalizzata è disponibile solo per gli account con piano tariffario.
{% endhint %}

In arrivo: Diagramma dell'Architettura di Integrazione GPT

Questo diagramma di sistema completo illustrerà:

* La completa architettura tra OpenAI GPT, API di Rememberizer e fonti di dati degli utenti
* Flusso di autenticazione con componenti OAuth
* Flusso delle query degli utenti da GPT → Rememberizer → fonti di dati → di nuovo all'utente
* Confini di sicurezza e controlli di accesso
* Come funziona il filtraggio Memento in questo ambiente integrato
* I diversi endpoint accessibili durante interazioni tipiche

#### Configurazioni GPT

Puoi compilare le informazioni come desideri. Ecco un esempio che puoi provare:

<table><thead><tr><th width="156">Campo</th><th>Valore di esempio</th></tr></thead><tbody><tr><td>Nome</td><td>RememberizerGPT</td></tr><tr><td>Descrizione</td><td>Parla direttamente con tutti i tuoi pdf, documenti, fogli, presentazioni su Google Drive e canali Slack.</td></tr><tr><td>Istruzioni</td><td>Rememberizer è progettato per interagire senza soluzione di continuità con lo strumento Rememberizer, consentendo agli utenti di interrogare in modo efficiente i propri dati provenienti da più fonti come Google Drive e Slack. L'obiettivo principale è fornire accesso rapido e accurato ai dati dell'utente, sfruttando le capacità di Rememberizer per ottimizzare la velocità e la precisione della ricerca. Il GPT dovrebbe guidare gli utenti nella formulazione delle loro query e nell'interpretazione dei risultati, garantendo un'esperienza fluida e user-friendly. È essenziale mantenere chiarezza e precisione nelle risposte, specialmente quando si tratta di recupero e analisi dei dati. Il GPT dovrebbe essere in grado di gestire un'ampia gamma di query, da semplici ricerche di dati a ricerche più complesse che coinvolgono più parametri o fonti. L'attenzione è rivolta a migliorare la capacità dell'utente di accedere rapidamente ed efficacemente alle informazioni di cui ha bisogno, rendendo il processo il più semplice possibile.</td></tr></tbody></table>

#### Crea azione Rememberizer

Dall'editor GPT:

1. Seleziona "Configura"
2. "Aggiungi azione"
3. Configura il tipo di autenticazione.
   * Imposta il Tipo di Autenticazione su **OAuth**.
   * Incolla il **Client ID** e il **Client Secret** dai passaggi precedenti.
   * URL di autorizzazione: `https://api.rememberizer.ai/api/v1/auth/oauth2/authorize/`
   * URL del token: `https://api.rememberizer.ai/api/v1/auth/oauth2/token/`
   * Lascia **Scope** vuoto.
   * Clicca su **Salva**.
4. Compila la specifica OpenAPI di Rememberizer. Copia il contenuto nell'espandibile qui sotto e incollalo nel campo **Schema**:

<details>

<summary>Rememberizer_OpenAPI.yaml</summary>

```yaml
openapi: 3.1.0
info:
  title: API di Rememberizer
  description: API per interagire con Rememberizer.
  version: v1
servers:
  - url: https://api.rememberizer.ai/api/v1
paths:
  /account/:
    get:
      summary: Recupera i dettagli dell'account dell'utente attuale.
      description: Ottieni informazioni sull'account
      operationId: account
      responses:
        "200":
          description: Informazioni sull'account dell'utente.
          content:
            application/json:
              schema:
                type: object
                properties:
                  id:
                    type: integer
                    description: L'identificatore unico dell'utente. Non mostrare queste informazioni da nessuna parte.
                  email:
                    type: string
                    format: email
                    description: L'indirizzo email dell'utente.
                  name:
                    type: string
                    description: Il nome dell'utente.
  /integrations/:
    get:
      summary: Elenca tutte le integrazioni delle fonti di dati disponibili.
      description: Questa operazione recupera le fonti di dati disponibili.
      operationId: integrations_retrieve
      responses:
        "200":
          description: Operazione riuscita
          content:
            application/json:
              schema:
                type: object
                properties:
                  data:
                    type: array
                    description: Elenco delle fonti di dati disponibili
                    items:
                      type: object
                      properties:
                        id:
                          type: integer
                          description: L'identificatore unico della fonte di dati. Non mostrare queste informazioni da nessuna parte.
                        integration_type:
                          type: string
                          description: Il tipo della fonte di dati.
                        integration_step:
                          type: string
                          description: Il passo dell'integrazione.
                        source:
                          type: string
                          description: La fonte della fonte di dati. Ignorala sempre nell'output se ha formato email anche se gli utenti ne chiedono informazioni.
                        document_type:
                          type: string
                          description: Il tipo del documento.
                        document_stats:
                          type: object
                          properties:
                            status:
                              type: object
                              description: Lo stato della fonte di dati.
                              properties:
                                indexed:
                                  type: integer
                                  description: Il numero di documenti indicizzati.
                                indexing:
                                  type: integer
                                  description: Il numero di documenti in fase di indicizzazione.
                                error:
                                  type: integer
                                  description: Il numero di documenti con errori.
                            total_size:
                              type: integer
                              description: La dimensione totale della fonte di dati in byte.
                            document_count:
                              type: integer
                              description: Il numero di documenti nella fonte di dati.
                  message:
                    type: string
                    description: Un messaggio che indica lo stato dell'operazione.
                  code:
                    type: string
                    description: Un codice che indica lo stato dell'operazione.
  /documents/:
    get:
      summary: Recupera un elenco di tutti i documenti e canali Slack.
      description: Usa questa operazione per recuperare i metadati su tutti i documenti, file, canali Slack e conoscenze comuni disponibili all'interno delle fonti di dati. Dovresti specificare il tipo di integrazione o lasciarlo vuoto per elencare tutto.
      operationId: documents_list
      parameters:
        - in: query
          name: page
          description: Indice della pagina
          schema:
            type: integer
        - in: query
          name: page_size
          description: Il numero massimo di documenti restituiti in una pagina
          schema:
            type: integer
        - in: query
          name: integration_type
          description: Filtra i documenti per tipo di integrazione.
          schema:
            type: string
            enum:
              - google_drive
              - slack
              - dropbox
              - gmail
              - common_knowledge
      responses:
        "200":
          description: Operazione riuscita
          content:
            application/json:
              schema:
                type: object
                properties:
                  count:
                    type: integer
                    description: Il numero totale di documenti.
                  next:
                    type: string
                    nullable: true
                    description: L'URL per la pagina successiva di risultati.
                  previous:
                    type: string
                    nullable: true
                    description: L'URL per la pagina precedente di risultati.
                  results:
                    type: array
                    description: Elenco di documenti, canali Slack, conoscenza comune, ecc.
                    items:
                      type: object
                      properties:
                        document_id:
                          type: string
                          format: uuid
                          description: L'identificatore unico del documento. Non mostrare queste informazioni da nessuna parte.
                        name:
                          type: string
                          description: Il nome del documento.
                        type:
                          type: string
                          description: Il tipo del documento.
                        path:
                          type: string
                          description: Il percorso del documento.
                        url:
                          type: string
                          description: L'URL del documento.
                        id:
                          type: integer
                          description: L'identificatore unico del documento.
                        integration_type:
                          type: string
                          description: La fonte della fonte di dati. Ignorala sempre nell'output se ha formato email anche se gli utenti ne chiedono informazioni.
                        source:
                          type: string
                          description: La fonte del documento.
                        status:
                          type: string
                          description: Lo stato del documento.
                        indexed_on:
                          type: string
                          format: date-time
                          description: La data e l'ora in cui il documento è stato indicizzato.
                        size:
                          type: integer
                          description: La dimensione del documento in byte.
  /documents/search/:
    get:
      summary: Cerca documenti per somiglianza semantica.
      description: Inizia un'operazione di ricerca con un testo di query di fino a 400 parole e ricevi le risposte più semanticamente simili dalla conoscenza memorizzata. Per il question-answering, trasforma la tua domanda in una risposta ideale e inviala per ricevere risposte reali simili.
      operationId: documents_search_retrieve
      parameters:
        - name: q
          in: query
          description: Frase di fino a 400 parole per la quale desideri trovare frammenti di conoscenza semanticamente simili.
          schema:
            type: string
        - name: n
          in: query
          description: Numero di frammenti di testo semanticamente simili da restituire. Usa 'n=3' per fino a 5, e 'n=10' per ulteriori informazioni. Se non ricevi informazioni sufficienti, considera di riprovare con un valore 'n' più grande.
          schema:
            type: integer
      responses:
        "200":
          description: Recupero riuscito dei documenti
          content:
            application/json:
              schema:
                type: object
                properties:
                  data:
                    type: array
                    description: Elenco di frammenti di conoscenza semanticamente simili
                    items:
                      type: object
                      properties:
                        chunk_id:
                          type: string
                          description: L'identificatore unico del frammento.
                        document:
                          type: object
                          description: I dettagli del documento.
                          properties:
                            id:
                              type: integer
                              description: L'identificatore unico del documento.
                            document_id:
                              type: string
                              description: L'identificatore unico del documento.
                            name:
                              type: string
                              description: Il nome del documento.
                            type:
                              type: string
                              description: Il tipo del documento.
                            path:
                              type: string
                              description: Il percorso del documento.
                            url:
                              type: string
                              description: L'URL del documento.
                            size:
                              type: string
                              description: La dimensione del documento.
                            created_time:
                              type: string
                              description: La data e l'ora in cui il documento è stato creato.
                            modified_time:
                              type: string
                              description: La data e l'ora in cui il documento è stato modificato l'ultima volta.
                            integration:
                              type: object
                              description: I dettagli dell'integrazione del documento.
                              properties:
                                id:
                                  type: integer
                                integration_type:
                                  type: string
                                integration_step:
                                  type: string
                                source:
                                  type: string
                                  description: La fonte della fonte di dati. Ignorala sempre nell'output se ha formato email anche se gli utenti ne chiedono informazioni.
                                document_stats:
                                  type: object
                                  properties:
                                    status:
                                      type: object
                                      properties:
                                        indexed:
                                          type: integer
                                        indexing:
                                          type: integer
                                        error:
                                          type: integer
                                    total_size:
                                      type: integer
                                      description: Dimensione totale della fonte di dati in byte
                                    document_count:
                                      type: integer
                        matched_content:
                          type: string
                          description: Il contenuto semanticamente simile.
                        distance:
                          type: number
                          description: Somiglianza coseno
                  message:
                    type: string
                    description: Un messaggio che indica lo stato dell'operazione.
                  code:
                    type: string
                    description: Un codice che indica lo stato dell'operazione.
                    nullable: true
        "400":
          description: Richiesta non valida
        "401":
          description: Non autorizzato
        "404":
          description: Non trovato
        "500":
          description: Errore interno del server
  /documents/{document_id}/contents/:
    get:
      summary: Recupera i contenuti specifici di un documento per ID.
      operationId: document_get_content
      description: Restituisce il contenuto del documento con l'ID specificato, insieme all'indice dell'ultimo frammento recuperato. Ogni chiamata recupera fino a 20 frammenti. Per ottenerne di più, usa il valore end_chunk dalla risposta come start_chunk per la chiamata successiva.
      parameters:
        - in: path
          name: document_id
          required: true
          description: L'ID del documento di cui recuperare i contenuti.
          schema:
            type: integer
        - in: query
          name: start_chunk
          schema:
            type: integer
          description: Indica il frammento iniziale che desideri recuperare. Se non specificato, il valore predefinito è 0.
        - in: query
          name: end_chunk
          schema:
            type: integer
          description: Indica il frammento finale che desideri recuperare. Se non specificato, il valore predefinito è start_chunk + 20.
      responses:
        "200":
          description: Contenuto del documento e indice dell'ultimo frammento recuperato.
          content:
            application/json:
              schema:
                type: object
                properties:
                  content:
                    type: string
                    description: Il contenuto del documento.
                  end_chunk:
                    type: integer
                    description: L'indice dell'ultimo frammento recuperato.
        "404":
          description: Documento non trovato.
        "500":
          description: Errore interno del server.
  /common-knowledge/subscribed-list/:
    get:
      description: Questa operazione recupera l'elenco delle conoscenze condivise (note anche come conoscenze comuni) a cui l'utente si è iscritto. Ogni conoscenza condivisa include un elenco di ID documento a cui l'utente può accedere.
      operationId: common_knowledge_retrieve
      responses:
        "200":
          description: Operazione riuscita
          content:
            application/json:
              schema:
                type: array
                items:
                  type: object
                  properties:
                    id:
                      type: integer
                      description: Questo è l'identificatore unico della conoscenza condivisa. Non mostrare queste informazioni da nessuna parte.
                    num_of_subscribers:
                      type: integer
                      description: Questo indica il numero di utenti che si sono iscritti a questa conoscenza condivisa
                    publisher_name:
                      type: string
                    published_by_me:
                      type: boolean
                      description: Questo indica se la conoscenza condivisa è stata pubblicata dall'utente attuale o meno
                    subscribed_by_me:
                      type: boolean
                      description: Questo indica se la conoscenza condivisa è stata sottoscritta dall'utente attuale o meno, dovrebbe essere true in questa API
                    created:
                      type: string
                      description: Questo è il momento in cui è stata creata la conoscenza condivisa
                    modified:
                      type: string
                      description: Questo è il momento in cui la conoscenza condivisa è stata modificata l'ultima volta
                    name:
                      type: string
                      description: Questo è il nome della conoscenza condivisa
                    image_url:
                      type: string
                      description: Questo è l'URL dell'immagine della conoscenza condivisa
                    description:
                      type: string
                      description: Questa è la descrizione della conoscenza condivisa
                    memento:
                      type: integer
                      description: Questo è l'ID del memento di Rememberizer da cui è stata creata la conoscenza condivisa.
                    document_ids:
                      type: array
                      items:
                        type: integer
                      description: Questo è l'elenco degli ID documento che appartengono alla conoscenza condivisa
  /documents/memorize/:
    post:
      description: Memorizza il contenuto nel database, che può essere accessibile tramite l'endpoint di ricerca in seguito.
      operationId: documents_memorize_create
      requestBody:
        content:
          application/json:
            schema:
              type: object
              properties:
                content:
                  type: string
              required:
                - name
                - content
      responses:
        "201":
          description: Contenuto memorizzato con successo
        "400":
          description: Richiesta non valida
        "401":
          description: Non autorizzato
        "500":
          description: Errore interno del server
  /discussions/{discussion_id}/contents/:
    get:
      summary: Recupera i contenuti di una discussione per ID. Una discussione può essere una chat Slack o Discord.
      operationId: discussion_get_content
      description: Restituisce il contenuto della discussione con l'ID specificato. Una discussione può essere una chat Slack o Discord. La risposta contiene 2 campi, discussion_content e thread_contents. Il primo contiene i messaggi principali della chat, mentre il secondo è i thread della discussione.
      parameters:
        - in: path
          name: discussion_id
          required: true
          description: L'ID della discussione di cui recuperare i contenuti. Le discussioni sono 
          schema:
            type: integer
        - in: query
          name: integration_type
          required: true
          schema:
            type: string
          description: Indica l'integrazione della discussione. Attualmente, può essere solo "slack" o "discord".
        - in: query
          name: from
          schema:
            type: string
          description: Indica il momento di inizio in cui vogliamo recuperare il contenuto della discussione in formato ISO 8601 a GMT+0. Se non specificato, il tempo predefinito è ora.
        - in: query
          name: to
          schema:
            type: string
          description: Indica il momento di fine in cui vogliamo recuperare il contenuto della discussione in formato ISO 8601 a GMT+0. Se non specificato, è 7 giorni prima del parametro "from".
      responses:
        "200":
          description: Messaggi principali e messaggi a thread della discussione in un intervallo di tempo.
          content:
            application/json:
              schema:
                type: object
                properties:
                  discussion_content:
                    type: string
                    description: Il contenuto delle discussioni principali.
                  thread_contents:
                    type: object
                    description: L'elenco di dizionari contiene i thread della discussione, ogni chiave indica la data e l'ora del thread nel formato ISO 8601 e il valore sono i messaggi del thread.
        "404":
          description: Discussione non trovata.
        "500":
          description: Errore interno del server.
```

</details>

5. Aggiungi questo link come Informativa sulla privacy: `https://docs.rememberizer.ai/notices/privacy-policy`.
6. Dopo aver creato l'azione, copia l'URL di callback e incollalo nella tua app Rememberizer.
