Crea un assistente di scrittura basato sull'IA con Wordcraft

Amiamo le storie. Raccontare storie e realizzare altre forme di scrittura creativa può essere impegnativo e gratificante. Creiamo le tue storie da una pagina vuota, tuttavia, a volte può sembrare scoraggiante e persino faticoso. Artificiali di intelligenza artificiale (IA) possono essere un ottimo strumento per aiutarti ad andare oltre pagina vuota e crea la tua narrazione.

Questo tutorial mostra come estendere Wordcraft uno strumento di scrittura di storie basato sull'IA e realizzato da Google People and AI Research dell'assistenza clienti. Questa applicazione web utilizza Gemini per aiutarti a costruire storie, a poco a poco generando idee, scrivendo parti di le tue storie e la revisione dei contenuti per aggiungere ulteriori dettagli. Puoi modificare Wordcraft per rispecchiare meglio il tuo stile di scrittura e creare nuovi controlli di scrittura per supportare al meglio il tuo flusso di lavoro.

Per una panoramica video del progetto e di come estenderlo, inclusi approfondimenti da chi lo crea, dai un'occhiata Assistente alla scrittura con l'IA - Crea con l'IA di Google. In alternativa, puoi iniziare a estendere il progetto seguendo le istruzioni di seguito.

Configurazione del progetto

Queste istruzioni illustrano come configurare il progetto Wordcraft per sviluppo e test. È necessario installare il software prerequisito, clone il progetto dal repository di codice, eseguire l'installazione della configurazione e devi impostare alcune variabili di ambiente. Puoi testare la configurazione eseguendo il progetto dopo aver completato questi passaggi.

Installa i prerequisiti

Il progetto Wordcraft utilizza Node e npm per gestire pacchetti ed eseguire l'applicazione. Le seguenti istruzioni di installazione sono per un computer host Linux.

Per installare il software richiesto:

clona e configura il progetto

Scarica il codice del progetto e usa il comando di installazione npm per eseguire l'operazione le dipendenze richieste e configurare il progetto. Ti servono Software di controllo del codice sorgente git per recuperare il progetto codice sorgente.
Per scaricare e configurare il codice del progetto:

  1. Clona il repository git utilizzando il comando seguente.
    git clone https://github.com/PAIR-code/wordcraft
    
  2. Vai alla directory principale del progetto Wordcraft.
    cd wordcraft/
    
  3. Esegui il comando di installazione per scaricare le dipendenze e configurare il progetto:
    npm install
    

Imposta le variabili di ambiente

Imposta le variabili di ambiente necessarie per autorizzare il codice Wordcraft progetto da eseguire, nello specifico una chiave API Gemini di Google. La le seguenti istruzioni di installazione sono per un computer host Linux.

Per impostare le variabili di ambiente:

  1. Ottieni una chiave API Gemini di Google e copia la stringa della chiave.
  2. Vai alla directory principale del progetto Wordcraft.
    cd wordcraft/
    
  3. Imposta la chiave API come variabile di ambiente. Sugli host Linux, utilizza seguenti comandi.
    touch .env
    echo "API_KEY="<YOUR_API_KEY>"" > .env
    
di Gemini Advanced.

Verificare la configurazione

Ora dovresti essere in grado di testare la configurazione del tuo progetto eseguendo Wordcraft sul tuo dispositivo. Questo passaggio è facoltativo, ma consigliato.

Schermata di avvio Wordcraft

Per testare l'installazione e la configurazione:

  1. Vai alla directory principale del progetto Wordcraft.
    cd wordcraft/
    
  2. Esecuzione del progetto in modalità di sviluppo:
    npm run dev
    
  3. Nel browser web, vai all'interfaccia utente di Wordcraft. La un indirizzo specifico viene mostrato nell'output del comando precedente, ad esempio:
    http://localhost:3000/
    

Modifica il testo di esempio del prompt

Interfaccia utente dei comandi Wordcraft Wordcraft crea prompt per il modello generativo di IA utilizzando una serie di esempi per ogni operazione di assistenza alla scrittura, come inizia una nuova storia e genera di testo. Gli esempi guidano il modello generativo nella generazione di testo per la storia e, modificando gli esempi per un'operazione, puoi cambiare che segua uno schema o uno stile di scrittura diverso. Questo approccio è un modo semplice per far scrivere Wordcraft nel modo che preferisci.

L'esempio seguente mostra una modifica degli esempi di new_story in Wordcraft. L'obiettivo di questa modifica è indirizzare il modello di IA generativa scrivi introduzioni di storia usando un approccio monologo interno e usa uno stile che sia più appropriato per un romanzo giallo. Scrivendo alcuni esempi di introduzione della storia, puoi far sì che il modello generativo segua le ma genera un'introduzione per un tema diverso.

Per modificare i nuovi esempi di storie in Wordcraft:

  1. Apri il file wordcraft/app/context/json/new_story.json.
  2. Modifica gli esempi mantenendo la struttura complessiva del file JSON . Ecco un esempio di modifica per l'introduzione di una storia misteriosa utilizzando uno stile monologo interno.
    [
      {
        "topic": "scientist disappears and their research into a new technology is gone",
        "target": "I got the call from the chief early Tuesday morning, before I'd even had a second sip of coffee. Terrible timing. Something about a researcher disappearing from the local university. Unusual for the research lab to ask for assistance, so I headed over to main lab building."
      },
      {
        "topic": "a young woman wakes up with no memory",
        "target": "An unfamiliar ceiling with harsh, white lights greeted my eyes as I opened them. I looked around. White walls, medical equipment, a hospital? Wait. Where am I? How did I get here?!"
      },
      {
        "topic": "old man tries to recall an important task as his memories gradually fade away",
        "target": "What was I supposed to do today? Feels like it was important. I stared into the kitchen cabinet full of mismatched mugs, mirroring my own confusion. What was it? Like someone is...in danger? A chill shot down my spine, but the details skittered off and hid in some dark corner of my head."
      },
      {
        "topic": "billionaire is found dead in a hotel room",
        "target": "People meet their end every day, some naturally, some unnaturally. After 17 years of working as a homicide detective in Seattle, I'd seen a lot more of the unnatural variety than most. Comes with the job, along with a hard-learned sense of what side of the line any given incident sat on. This...was murder."
      },
      {
        "topic": "retired covert operative gets dragged back into an old mission",
        "target": "Steam rose gently off the cup of Earl Grey sitting in front of me as I sat at the cafe, pedestrians and light traffic rolling by. The city was slowly waking up around me and my perfect Paris morning routine was shaping up nicely. Then I noticed that old familiar and unwelcome tingling on the back of my neck. I was being watched."
      }
    ]
  3. Salva le modifiche apportate al file "new_story.json".

Per testare l'operazione modificata per la nuova storia:

  1. Vai alla directory principale del progetto Wordcraft.
    cd wordcraft/
    
  2. Esegui il progetto in modalità sviluppo. Se è già in esecuzione, puoi interrompere e riavviare l'app.
    npm run dev
    
  3. Nel browser web, vai all'interfaccia utente di Wordcraft. La un indirizzo specifico viene mostrato nell'output del comando precedente, ad esempio:
    http://localhost:3000/
    
  4. Vai al menu principale di Wordcraft e seleziona Inizia una nuova storia.
  5. Aggiorna il nuovo prompt della storia o modificalo come preferisci, quindi seleziona inizia una nuova storia.

Puoi modificare tutti i controlli di scrittura di storie esistenti in Wordcraft utilizzando questo tecnica. Prova a modificare altri controlli delle storie aggiornando gli esempi nel Directory wordcraft/app/context/json/.

Crea un nuovo controllo di scrittura

Wordcraft introduce l&#39;interfaccia utente dei personaggi L'app Wordcraft è progettata per essere estesa in modo da poter aggiungere nuova scrittura che ti assistano, come per genera testo o riscrivi frase nella scheda Controlli sul lato destro dell'app. In questo modo modifiche richiedono un po' più di sforzo, ma consentono di plasmare le caratteristiche Wordcraft adatta al tuo flusso di lavoro e ai tuoi obiettivi.

La seguente modifica di esempio crea un nuovo controllo dei caratteri per Wordcraft. Puoi usarlo per introdurre un nuovo personaggio in una storia con un la descrizione degli attributi di quel carattere. Le basi di questo controllo è uguale ad altri controlli di Wordcraft come il controllo Inizia una nuova storia. di cui abbiamo parlato in precedenza. Crei un file JSON con alcuni esempi di come vuoi da introdurre. Le altre modifiche aggiungono l'interfaccia utente Funzioni di gestione dei prompt basati sull'IA.

Creazione esempi

Scrivi alcuni esempi di come vuoi che il modello generativo presenti caratteri. Ad esempio, vuoi descriverli come un narratore o vuoi presentarli seguendo l'esperienza del tuo personaggio principale? La i seguenti esempi utilizzano quest'ultimo approccio, introducendo nuovi caratteri punto di vista del personaggio principale. Aggiungi questi esempi con un nuovo JSON file:

Per aggiungere esempi per il nuovo controllo:

  1. Crea un file wordcraft/app/context/json/new_character.json.
  2. Crea gli esempi nel file JSON. Per questo esempio, ogni esempio ha un campo di descrizione character, che rappresenta il prompt e un campo target, che mostra l'output previsto.
    [
      {
        "character": "A character who is helpful and modest.",
        "target": "\"You lost, buddy?\" came a voice from behind me. Turning, I discovered a man dressed in a simple but presentable outfit. Small signs of age and loose threads hinted that these clothes, and the man himself, had seen better days."
      },
      {
        "character": "A character who is attractive and devious.",
        "target": "Stepping out of the alley a little too quickly, I collided with something solidly muscular and surprisingly delicately scented. \"Sorry.\" I managed, regaining my balance. \"Easy there, buddy, you're gonna hurt yourself,\" came the reply from a man with an almost feline grace, further reinforced by a stare that reminded me of a hunting cat assessing its potential prey."
      },
      {
        "character": "A character who is old and hesitant.",
        "target": "\"Excuse me. Do you know the way to the train station from here?\" I looked up from my phone to see a elderly woman in a threadbare coat, purse clutched with two hands in front of her. \"I-I'm supposed to meet my nephew there. Do... do you think you can help me?\""
      },
      {
        "character": "A character who is intelligent and aloof.",
        "target": "Bookish. That was my immediate reaction to this person I now saw in front of me. \"You're finally here. Did you read the notes I sent you?\" The voice sat squarely in between feminine and masculine intonation. \"No, of course you didn't.\" Dismissing my answer before I'd even formulated one. Annoyance immediately flushed through me."
      },
      {
        "character": "A character who is clumsy and energetic.",
        "target": "\"Whoa!\" was the only warning I had before someone slammed into my back, almost knocking me off my feet. \"I'm so sorry! WOOO! These skates are a RUSH!\" The apology came from a rather loud redhead wearing rollerblades, dark glasses and a very beefy-looking pair of headphones. That explained the volume of the apology."
      }
    ]
  3. Salva le modifiche apportate al file new_character.json.

Dopo aver creato gli esempi, modifica i app/context/schema.ts e index.ts per riflettere i contenuti dei prompt di questo nuovo controllo dei caratteri.

Per aggiungere esempi al file schema.ts:

  • Modifica il file wordcraft/app/context/schema.ts in modo da includere il nuovo struttura dei dati di esempio.
    export const newStorySchema = z.object({
      topic: z.string(),
      target: z.string(),
    });
    
    // add the following:
    export const newCharacterSchema = z.object({
      character: z.string(),
      target: z.string(),
    });

Definisci un tipo di operazione associato a questi nuovi esempi. Questo nuovo il tipo consente di collegare gli esempi di prompt all'interfaccia utente e al prompt che potrai modificare nei passaggi successivi.

Per creare un nuovo tipo di operazione

  • Modifica il file wordcraft/app/core/shared/types.ts per aggiungere il nuovo tipo di operazione.
    export const enum OperationType {
      ...
      NEW_CHARACTER = 'NEW_CHARACTER', // add to list of types
      ...
    }

Per registrare gli esempi nel file index.ts:

  1. Nel file wordcraft/app/context/index.ts, importa il nuovo schema.
    import {
      continueSchema,
      ...
      newCharacterSchema // add new schema
    } from './schema';
    
  2. Importa il nuovo file JSON come newCharacterJson.
    import newCharacterJson from './json/new_character.json';
    
  3. Registra il nuovo contenuto di esempio di caratteri nel contesto dell'applicazione.
    export class WordcraftContext {
      constructor() {
      ...
        this.registerExamples(
          OperationType.NEW_CHARACTER,
          newCharacterSchema,
          newCharacterJson
        );
      ...
    }
  4. Esporta un tipo NewCharacterExample.
    export type NewCharacterExample = z.infer<typeof newCharacterSchema>;
    

Crea l'interfaccia utente

Dopo aver creato e registrato gli esempi di generazione di contenuti, puoi creano l'interfaccia utente per il nuovo controllo. La maggior parte del lavoro necessario è creare una nuova classe operativa e registrarla poi con il dell'applicazione Wordcraft.

Per creare una nuova operazione:

  1. Nella directory wordcraft/app/core/operations/, crea un'istanza una nuova classe operativa utilizzando una delle classi operative esistenti come modello. Per il nuovo controllo dei caratteri, puoi creare una copia new_story_operation.ts corso e rinominalo in new_character_operation.ts.
  2. Assegna un nuovo nome alla classe e specifica quando il controllo viene visualizzato nella dell'interfaccia utente definendo almeno un valore OperationSite.
    export class NewCharacterOperation extends ChoiceOperation {
      static override isAvailable(operationSite: OperationSite) {
        return (
          operationSite === OperationSite.END_OF_SECTION ||
          operationSite === OperationSite.EMPTY_SECTION
        );
      }
    
  3. Imposta id per l'operazione.
      static override id = OperationType.NEW_CHARACTER;
    
  4. Aggiorna le funzioni get e run in modo che riflettano il dei parametri dello schema. Questo codice gestisce il recupero del testo del prompt dall'interfaccia utente per l'uso nel prompt dell'IA.
      private get character(): string {
        return NewCharacterOperation.controls.character.value;
      }
    
      async run() {
        const params = { character: this.character };
        const choices = await this.getModel().newCharacter(params);
    
        this.setChoices(choices);
      }
    
  5. Aggiorna il testo e le descrizioni dell'interfaccia utente.
      static override getButtonLabel() {
        return 'introduce character';
      }
    
      static override getDescription() {
        return 'Introduce a new character at the cursor.';
      }
    
      static override controls = {
        character: new TextareaControl({
          prefix: 'prompt',
          description: 'A prompt to introduce a new character.',
          value: 'A new character.',
        }),
      };
    

Per registrare la nuova operazione nell'applicazione Wordcraft:

  1. Nel file wordcraft/app/core/operations/index.ts, aggiungi un elemento per la nuova operazione.
    import {NewCharacterOperation} from './new_character_operation';
    
  2. Nello stesso file index.ts, aggiungi un'esportazione per NewCharacterOperation corso.
    export {
      ...
      NewCharacterOperation, // add this class
      ...
    };
  3. Nel file wordcraft/app/main.ts, registra il nuovo operativa.
    const operationsService = wordcraftCore.getService(OperationsService);
    operationsService.registerOperations(
      ...
      Operations.NewCharacterOperation, // add new operation
      ...
    );
    

Crea gestione prompt

Come fase finale della creazione del nuovo controllo, devi creare il codice gestisce la generazione dei prompt per il modello generativo di IA e la risposta. La parte principale del lavoro è creare un gestore di prompt Directory wordcraft/app/models/gemini/prompts/ che accetta input dall'utente a riga di comando e assembla un prompt da passare al modello generativo.

Per definire un'interfaccia per i parametri del prompt:

  • Nel file wordcraft/app/core/shared/interfaces.ts, aggiungi un elemento per i nuovi parametri di prompt operativi.
    export interface NewCharacterPromptParams {
      character: string;
    }
    

Per definire un gestore di prompt per la nuova operazione:

  1. Nella directory wordcraft/app/models/gemini/prompts/, crea una nuova classe di gestore di prompt utilizzando una delle classi operative esistenti come modello. Per il nuovo controllo dei caratteri, puoi creare una copia new_story.ts corso e rinominalo in new_character.ts come punto di partenza.
  2. Definisci una funzione di gestore del prompt e importa NewCharacterExample corso.
    import { NewCharacterPromptParams } from '@core/shared/interfaces';
    import { NewCharacterExample, WordcraftContext } from '../../../context';
    import { OperationType } from '@core/shared/types';
    import { GeminiModel } from '..';
    
    export function makePromptHandler(model: GeminiModel, context: WordcraftContext) {
      ...
    }
    
  3. Crea una funzione generatePrompt() per ottenere l'input dell'interfaccia utente per il prompt del modello di IA.
      function generatePrompt(character: string) {
        const prefix = "Here's a character description: ";
        const suffix = "Introduce this character in the story.";
    
        if (character.trim() === '') {
          return 'Introduce a new character to the story.';
        } else {
          return `${prefix}${model.wrap(character)}\n${suffix}`;
        }
      }
  4. Crea una funzione getPromptContext() per comporre l'utente interfaccia di input con le risposte di esempio e crea il prompt completo.
      function getPromptContext() {
        const examples = context.getExampleData(
          OperationType.NEW_CHARACTER
        );
        let promptContext = model.getPromptPreamble();
        examples.forEach((example) => {
          const { character, target } = example;
          const prompt = generatePrompt(character);
          promptContext += `${prompt} ${model.wrap(target)}\n\n`;
        });
        return promptContext;
      }

Per integrare il nuovo gestore di prompt di caratteri:

  1. Nel file wordcraft/app/models/gemini/index.ts, importa il gestore di prompt per la nuova operazione del carattere.
    import {makePromptHandler as newCharacter} from './prompts/new_character';
  2. Aggiungi una definizione di override per il prompt newCharacter .
      override newCharacter = this.makePromptHandler(newCharacter);

Per registrare i parametri del prompt con la definizione del modello:

  1. Nel file wordcraft/app/models/model.ts, aggiungi un'importazione per la nuova interfaccia di NewCharacterPromptParams.
    import {
      ...
      NewCharacterPromptParams,
      ...
    } from '@core/shared/interfaces';
  2. Aggiungi i parametri del prompt newCharacter alla classe del modello.
      async newCharacter(params: NewCharacterPromptParams): Promise<ModelResults> {
        throw new Error('Not yet implemented');
      }

Testa il nuovo controllo di scrittura

Il nuovo controllo dovrebbe essere pronto per essere testato nell'interfaccia di Wordcraft. Assicurati che per verificare la presenza di errori di compilazione nel codice prima di procedere.

Per testare il nuovo controllo dei caratteri:

  1. Vai alla directory principale del progetto Wordcraft.
    cd wordcraft/
    
  2. Esegui il progetto in modalità sviluppo:
    npm run dev
    
  3. Nel browser web, vai all'interfaccia utente di Wordcraft. La un indirizzo specifico viene mostrato nell'output del comando precedente, ad esempio:
    http://localhost:3000/
    
  4. Nell'applicazione Wordcraft, crea una nuova storia o apri una storia esistente.
  5. Nell'area di modifica della storia, sposta il cursore alla fine della storia. Nel nella scheda Controlli a destra, il controllo carattere introduttivo dovrebbe vengono visualizzate.
  6. Nel campo Carattere introduttivo, digita una breve descrizione nuovo carattere, quindi seleziona il pulsante Introduci carattere.

Risorse aggiuntive

Per ulteriori informazioni sul progetto Wordcraft, consulta il codice un repository attendibile. Puoi visualizzare le modifiche descritte in questo tutorial richiesta di pull.

Applicazioni di produzione

Se prevedi di eseguire il deployment di una versione personalizzata di Wordcraft per un vasto pubblico, tieni presente che il tuo utilizzo dell'API Gemini di Google potrebbe essere soggetto a limitazioni di frequenza e altro limitazioni di utilizzo. Se stai pensando di creare un'applicazione di produzione con l'API Gemini, ad esempio Agente Documenti, controlla Vertex AI di Google Cloud per una maggiore scalabilità e affidabilità dell'app.