Wordcraft ile AI yazma asistanı oluşturma

Hikayeleri severiz. Hikaye anlatmak ve diğer yaratıcı yazı biçimlerini kullanmak, ve tatmin edici olacaktır. Boş bir sayfadan kendi hikayelerinizi oluşturmak, ancak bazen göz korkutucu ve hatta korkutucu görünebilir. Yapay yapay zeka (AI) destekli üretken modeller, ve anlatınızı oluşturun.

Bu eğitimde, kampanyalarınızı Wordcraft, Google İnsan ve Yapay Zeka Araştırması'nın geliştirdiği yapay zeka destekli hikaye yazma aracı ekibi ile iletişime geçin. Bu web uygulaması, Gemini'ın Fikir üreterek, öykü anlatımı ve ve daha fazla ayrıntı eklemek için içeriği gözden geçirmeyi unutmayın. Wordcraft'i değiştirebilirsiniz yazım stilinize daha uygun bir hale getirmek ve yeni yazım denetimleri oluşturmak için daha iyi desteklemenizi sağlayabilir.

Analizler de dahil olmak üzere projeye ve projenin nasıl genişletileceğine dair genel bir bakış videosu için inşa edenlerden gelecek olursak, Yapay Zeka Yazma Asistanı - Google AI ile geliştirin. Aksi takdirde talimatları uygulayarak projeyi genişletmeye başlayabilirsiniz. bölümüne göz atın.

Proje ayarlama

Buradaki talimatlar Google Dokümanlar ve Google Slaytlar gibi ürün geliştirme ve test süreci. Klonlama kodu içeren ön koşul yazılımını yüklemeniz gerekiyor. kod deposundan projeyi başlatın, yapılandırma kurulumunu çalıştırın ve ortam değişkeni oluşturabilirsiniz. Projeyi çalıştırarak kurulumunuzu test edebilirsiniz bu adımları izleyebilirsiniz.

Ön koşulları yükleme

Wordcraft projesi, öğeleri yönetmek için Node ve npm'yi kullanır paketlerini oluşturup uygulamayı çalıştırın. Aşağıdaki yükleme talimatları anlamına gelir.

Gerekli yazılımları yüklemek için:

  • Şu adımları uygulayarak node ve npm uygulamasını yükleyin: kurulum talimatları tercih edebilirsiniz.

Projeyi klonlama ve yapılandırma

Proje kodunu indirin ve npm yükleme komutunu kullanarak bağımlılıkları tespit edip projeyi yapılandırmalısınız. İhtiyacınız olanlar Projeyi almak için git kaynak kontrolü yazılımı kaynak kodudur.
Proje kodunu indirmek ve yapılandırmak için:

  1. Aşağıdaki komutu kullanarak git deposunu klonlayın.
    git clone https://github.com/PAIR-code/wordcraft
    
  2. Wordcraft projesinin kök dizinine gidin.
    cd wordcraft/
    
  3. Bağımlılıkları indirmek ve projeyi yapılandırmak için yükleme komutunu çalıştırın:
    npm install
    

Ortam değişkenlerini ayarlama

Wordcraft koduna izin vermek için gereken ortam değişkenlerini ayarlayın projesi, özellikle de bir Google Gemini API Anahtarı. İlgili içeriği oluşturmak için kullanılan aşağıdaki yükleme talimatları bir Linux ana makinesi için geçerlidir.

Ortam değişkenlerini ayarlamak için:

  1. Bir Google Gemini API Anahtarı alın ve anahtar dizesini kopyalayın.
  2. Wordcraft projesinin kök dizinine gidin."
    cd wordcraft/
    
  3. API Anahtarını ortam değişkeni olarak ayarlayın. Linux ana makinelerinde aşağıdaki komutlardan birini seçin.
    touch .env
    echo "API_KEY="<YOUR_API_KEY>"" > .env
    

Kurulumunuzu test etme

Artık cihazınızda Wordcraft'i çalıştırarak proje kurulumunuzu test edebilirsiniz. olanak tanır. Bu adım isteğe bağlıdır, ancak önerilir.

Wordcraft başlangıç ekranı

Yükleme ve kurulumunuzu test etmek için:

  1. Wordcraft projesinin kök dizinine gidin.
    cd wordcraft/
    
  2. Projeyi geliştirme modunda çalıştırma:
    npm run dev
    
  3. Web tarayıcınızda Wordcraft kullanıcı arayüzüne gidin. İlgili içeriği oluşturmak için kullanılan önceki komutun çıkışında belirli bir adres gösterilir. Örneğin:
    http://localhost:3000/
    

İstem örnek metnini değiştir

Wordcraft komutları kullanıcı arayüzü Wordcraft, üretken yapay zeka modeli için bir dizi örnek kullanarak istem oluşturur. yeni hikaye başlatma ve yeni hikaye oluşturma text komutlarını kullanabilirsiniz. Örnekler, üretken modele metin oluşturma konusunda yol gösterir. görebilirsiniz. Bir işlem için örnekleri değiştirerek, farklı bir yazı tipi veya stili takip etmesi için üretilir. Bu yaklaşım, kolayca oluşturabilirsiniz.

Aşağıdaki örnekte,new_story Wordcraft. Bu değişikliğin amacı, üretken yapay zeka modelini iç monolog yaklaşımından yararlanarak hikaye tanıtımları yazma ve bir stil kullanma bir gizem romanı için daha uygun. Bu konudan birkaç örnek yazarak üretken modelin genel yönergeleri takip etmesini sağlayabilirsiniz. ama farklı bir tema için giriş bölümü oluşturun.

Wordcraft'taki yeni hikaye örneklerini değiştirmek için:

  1. wordcraft/app/context/json/new_story.json dosyasını açın.
  2. JSON'un genel yapısını korurken örnekleri değiştirin dosyası olarak kaydedebilirsiniz. Gizemli hikaye girişi için basit bir dahili bir monolog stili.
    [
      {
        "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. Değişiklikleri "new_story.json" dosyasına kaydedin.

Değiştirilmiş yeni hikaye işlemini test etmek için:

  1. Wordcraft projesinin kök dizinine gidin.
    cd wordcraft/
    
  2. Projeyi geliştirme modunda çalıştırın. Zaten çalışıyorsa uygulamayı durdurup yeniden başlatmanız gerekiyor.
    npm run dev
    
  3. Web tarayıcınızda Wordcraft kullanıcı arayüzüne gidin. İlgili içeriği oluşturmak için kullanılan önceki komutun çıkışında belirli bir adres gösterilir. Örneğin:
    http://localhost:3000/
    
  4. Wordcraft'in ana menüsüne gidin ve Yeni Bir Hikaye Başlat'ı seçin.
  5. Yeni hikaye istemini güncelleyin veya istediğiniz şekilde değiştirin, ardından yeni hikaye başlatın.

Wordcraft'taki mevcut tüm hikaye yazma kontrollerini şu komutu kullanarak değiştirebilirsiniz: tekniği inceleyelim. Şuradaki örnekleri güncelleyerek diğer hikaye kontrollerini değiştirmeyi deneyin: wordcraft/app/context/json/ dizini.

Yeni yazma kontrolü oluşturun

Wordcraft, karakter kullanıcı arayüzünü tanıtır Wordcraft uygulaması, yeni yazılar ekleyebilmeniz için genişletilecek şekilde tasarlanmıştır metin oluşturma veya cümleyi yeniden yazma gibi, size yardımcı olacak kontroller Denetimler sekmesindeki düğmeleri kullanın. Bunları yapmak biraz daha fazla çaba gerektirdiğini ancak ekibinizin özelliklerini İş akışınıza ve hedeflerinize uygun Wordcraft.

Aşağıdaki örnek değişiklik, yeni bir karakter denetimi oluşturmak için Wordcraft. Bunu kullanarak bir hikayeye yeni bir karakter tanıtabilirsiniz: söz konusu karakterin özelliklerinin açıklaması. Bu denetimin temeli Yeni hikaye başlat kontrolü gibi diğer Wordcraft kontrolleriyle aynıdır. ele alacağız. Birkaç örnekle bir JSON dosyası oluşturabilirsiniz. her karakterin bir araya gelmesiyle oluşur. Diğer değişiklikler, kullanıcı arayüzünü ve Yapay zeka istemi yönetim işlevleri.

Örnek oluşturma

Üretken modelin sunmasını istediğiniz konularla ilgili birkaç örnek yazın. karakteri ekleyin. Mesela onları bir anlatıcı gibi mi tanıtmak istiyorsunuz yoksa Onları ana karakterinizin sunduğu deneyim yoluyla tanıtmak ister misiniz? İlgili içeriği oluşturmak için kullanılan Aşağıdaki örneklerde ise ikinci yaklaşımı benimseyerek ve ana karakterin bakış açısını anlamaktır. Bu örnekleri yeni bir JSON dosyasıyla eklersiniz dosya:

Yeni kontrole örnek eklemek için:

  1. Bir wordcraft/app/context/json/new_character.json dosyası oluşturun.
  2. Örnekleri JSON dosyasında oluşturun. Bu örnekte her örnek İstemi temsil eden character açıklama alanı metin ve beklenen çıkışı gösteren bir target alanı yer alır.
    [
      {
        "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. new_character.json dosyasındaki değişiklikleri kaydedin.

Örneklerinizi oluşturduktan sonra app/context/schema.ts ve index.ts öğelerini değiştirin dosyalarını bu yeni karakter kontrolünün istem içeriğini yansıtacak şekilde ayarlayın.

Örnekleri schema.ts dosyasına eklemek için:

  • wordcraft/app/context/schema.ts dosyasını, yeni dosyayı içerecek şekilde değiştirin örnek veri yapısından bahsedeceğiz.
    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(),
    });

Bu yeni örneklerle ilişkili bir işlem türü tanımlayın. Bu yeni type, istem örneklerinin kullanıcı arayüzüne ve isteme bağlanmasına yardımcı olur. sonraki adımlarda değiştireceğiniz bina kodudur.

Yeni bir işlem türü oluşturmak için

  • Yeni dosyayı eklemek için wordcraft/app/core/shared/types.ts dosyasını değiştirin karakter işlem türü.
    export const enum OperationType {
      ...
      NEW_CHARACTER = 'NEW_CHARACTER', // add to list of types
      ...
    }

index.ts dosyasındaki örnekleri kaydetmek için:

  1. wordcraft/app/context/index.ts dosyasına yeni şemayı içe aktarın.
    import {
      continueSchema,
      ...
      newCharacterSchema // add new schema
    } from './schema';
    
  2. Yeni JSON dosyasını newCharacterJson olarak içe aktarın.
    import newCharacterJson from './json/new_character.json';
    
  3. Yeni karakter örnek içeriğini uygulama bağlamında kaydedin.
    export class WordcraftContext {
      constructor() {
      ...
        this.registerExamples(
          OperationType.NEW_CHARACTER,
          newCharacterSchema,
          newCharacterJson
        );
      ...
    }
  4. NewCharacterExample türünü dışa aktarın.
    export type NewCharacterExample = z.infer<typeof newCharacterSchema>;
    

Kullanıcı arayüzü oluşturma

İçerik oluşturma örneklerini oluşturup kaydettikten sonra yeni denetim için kullanıcı arayüzünü oluşturun. Bu konuda yapılacak işin büyük kısmı yeni bir operasyon sınıfı oluşturmak ve ardından bu sınıfı ana kodu vardır.

Yeni bir işlem oluşturmak için:

  1. wordcraft/app/core/operations/ dizininde bir mevcut işlem sınıflarından birini kullanarak yeni işlem sınıfı tıklayın. Yeni karakter kontrolü için, new_story_operation.ts sınıf yeniden adlandırıldı ve şu şekilde yeniden adlandırıldı: new_character_operation.ts.
  2. Sınıfa yeni bir ad verin ve denetimin kullanıcı arayüzünden en az bir OperationSite değeri tanımlayarak.
    export class NewCharacterOperation extends ChoiceOperation {
      static override isAvailable(operationSite: OperationSite) {
        return (
          operationSite === OperationSite.END_OF_SECTION ||
          operationSite === OperationSite.EMPTY_SECTION
        );
      }
    
  3. İşlem için id değerini ayarlayın.
      static override id = OperationType.NEW_CHARACTER;
    
  4. get ve run işlevlerini değerleri için bir değer girin. Bu kod, istem metnini alır yapay zeka isteminde kullanılması için kullanıcı arayüzünden kaldırın.
      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. Kullanıcı arayüzü metnini ve açıklamalarını güncelleyin.
      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.',
        }),
      };
    

Yeni işlemi Wordcraft uygulamasında kaydetmek için:

  1. wordcraft/app/core/operations/index.ts dosyasına bir içe aktarılmalıdır.
    import {NewCharacterOperation} from './new_character_operation';
    
  2. Aynı index.ts dosyasına NewCharacterOperation sınıf.
    export {
      ...
      NewCharacterOperation, // add this class
      ...
    };
  3. wordcraft/app/main.ts dosyasında, yeni işlemidir.
    const operationsService = wordcraftCore.getService(OperationsService);
    operationsService.registerOperations(
      ...
      Operations.NewCharacterOperation, // add new operation
      ...
    );
    

İstem işleme oluştur

Yeni denetimi oluşturmanın son aşaması olarak, kontrol etmek için üretken yapay zeka modeli için istem oluşturma ve bu yanıtları ele alma. Bu işin ana bölümü, Kullanıcıdan giriş alan wordcraft/app/models/gemini/prompts/ dizin arayüzü oluşturup üretken modele iletilecek bir istem derler.

İstem parametreleri için bir arayüz tanımlamak üzere:

  • wordcraft/app/core/shared/interfaces.ts dosyasına bir parametreleri içeren yeni işlemlerin arayüzü.
    export interface NewCharacterPromptParams {
      character: string;
    }
    

Yeni işlemle ilgili bir istem işleyici tanımlamak için:

  1. wordcraft/app/models/gemini/prompts/ dizininde Mevcut işlem sınıflarından birini kullanarak yeni bir istem işleyici sınıfı tıklayın. Yeni karakter kontrolü için, new_story.ts sınıf yeniden adlandırıldı ve şu şekilde yeniden adlandırıldı: Başlangıç noktası olarak new_character.ts.
  2. İstem işleyici işlevi tanımlayın ve NewCharacterExample sınıf.
    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. Şunun için kullanıcı arayüzü girişini almak üzere bir generatePrompt() işlevi oluşturun: yapay zeka modeli istemi.
      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. Kullanıcıyı derlemek için bir getPromptContext() işlevi oluşturun örnek yanıtlarla arayüz girişini yapın ve istemin tamamını oluşturun.
      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;
      }

Yeni karakter istemi işleyicisini entegre etmek için:

  1. wordcraft/app/models/gemini/index.ts dosyasına yeni karakter işlemi için istem işleyicisi vardır.
    import {makePromptHandler as newCharacter} from './prompts/new_character';
  2. newCharacter istemi için geçersiz kılma tanımı ekleyin gösterir.
      override newCharacter = this.makePromptHandler(newCharacter);

İstem parametrelerini model tanımıyla kaydetmek için:

  1. wordcraft/app/models/model.ts dosyasında şunun için içe aktarma işlemi ekleyin: yeni NewCharacterPromptParams arayüzü.
    import {
      ...
      NewCharacterPromptParams,
      ...
    } from '@core/shared/interfaces';
  2. Model sınıfına newCharacter istem parametrelerini ekleyin.
      async newCharacter(params: NewCharacterPromptParams): Promise<ModelResults> {
        throw new Error('Not yet implemented');
      }

Yeni yazma kontrolünü test edin

Yeni denetiminiz Wordcraft arayüzünde test edilmeye hazır olmalıdır. Şunlardan emin olun: inceleyin.

Yeni karakter kontrolünü test etmek için:

  1. Wordcraft projesinin kök dizinine gidin."
    cd wordcraft/
    
  2. Projeyi geliştirme modunda çalıştırın:
    npm run dev
    
  3. Web tarayıcınızda Wordcraft kullanıcı arayüzüne gidin. İlgili içeriği oluşturmak için kullanılan önceki komutun çıkışında belirli bir adres gösterilir. Örneğin:
    http://localhost:3000/
    
  4. Wordcraft uygulamasında yeni bir hikaye oluşturun veya mevcut bir hikayeyi açın.
  5. Hikaye düzenleme alanında imlecinizi hikayenin sonuna taşıyın. İçinde Kontroller sekmesinde yer alırsa giriş karakteri denetiminin görünür.
  6. Giriş karakteri alanına yeni karakteri ekleyin ve ardından karakter tanıtımı düğmesini seçin.

Ek kaynaklar

Wordcraft projesi hakkında daha fazla bilgi için koda bakın depo. Şunları görüntüleyebilirsiniz: bu eğitimde açıklanan değişiklikleri pull isteği.

Üretim uygulamaları

Wordcraft'ın özelleştirilmiş bir sürümünü geniş bir kitleye dağıtmayı planlıyorsanız Google Gemini API kullanımınızın hız sınırlamasına ve diğer kullanım kısıtlamaları hakkında daha fazla bilgi edinin. Gemini API ile bir üretim uygulaması oluşturmayı düşünüyorsanız Dokümanlar Aracısı, check-out Google Cloud Vertex AI hizmetleri sunmanızı sağlar.