Hikayeleri severiz. Hikaye anlatmak ve diğer yaratıcı yazma biçimlerini kullanmak hem zor hem de ödüllendirici olabilir. Ancak boş bir sayfadan kendi hikayelerinizi oluşturmak bazen korkutucu ve hatta bunaltıcı görünebilir. Yapay zeka (AI) üretken modelleri, boş sayfayı aşmanıza ve hikayenizi oluşturmanıza yardımcı olacak mükemmel bir araç olabilir.
Bu eğitimde, Google Kişiler ve Yapay Zeka Araştırma Ekibi tarafından geliştirilen yapay zeka destekli bir hikaye yazma aracı olan Wordcraft'i nasıl genişleteceğiniz gösterilmektedir. Bu web uygulaması, fikir üreterek, hikayelerinizin bölümlerini yazarak ve daha fazla ayrıntı eklemek için içeriği gözden geçirerek hikayelerinizi adım adım oluşturmanıza yardımcı olmak için Gemini API'yi kullanır. Wordcraft'ı kendi yazı stilinize daha uygun olacak şekilde değiştirebilir ve iş akışınızı daha iyi desteklemek için yeni yazım kontrolleri oluşturabilirsiniz.
Projenin geliştiricilerinden alınan bilgiler de dahil olmak üzere projeye ve nasıl genişletileceğine dair videolu bir genel bakış için Yapay Zeka Yazma Asistanı - Google Yapay Zeka ile Geliştirme başlıklı makaleyi inceleyin. Aksi takdirde, aşağıdaki talimatları uygulayarak projeyi genişletmeye başlayabilirsiniz.
Proje ayarlama
Bu talimatlar, Wordcraft projesini geliştirme ve test için ayarlama konusunda size yol gösterir. Gerekli yazılımı yüklemeniz, projeyi kod deposundan kopyalamanız, yapılandırma yüklemesini çalıştırmanız ve birkaç ortam değişkeni ayarlamanız gerekir. Bu adımları tamamladıktan sonra projeyi çalıştırarak kurulumunuzu test edebilirsiniz.
Gerekli ön koşulları yükleme
Wordcraft projesi, paketleri yönetmek ve uygulamayı çalıştırmak için Node ve npm'i kullanır. Aşağıdaki yükleme talimatları, Linux ana makine içindir.
Gerekli yazılımı yüklemek için:
- Platformunuza yönelik yükleme talimatlarını uygulayarak
node
venpm
'yi yükleyin.
Projeyi klonlama ve yapılandırma
Proje kodunu indirin ve gerekli bağımlılıkları indirip projeyi yapılandırmak için npm
yükleme komutunu kullanın. Projenin kaynak kodunu almak için git kaynak denetimi yazılımına ihtiyacınız vardır.
Proje kodunu indirip yapılandırmak için:
- Aşağıdaki komutu kullanarak git deposunu klonlayın.
git clone https://github.com/PAIR-code/wordcraft
- Wordcraft proje kök dizinine gidin.
cd wordcraft/
- 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 kod projesinin çalışması için gereken ortam değişkenlerini (özellikle Google Gemini API Anahtarı) ayarlayın. Aşağıdaki kurulum talimatları, Linux ana makine içindir.
Ortam değişkenlerini ayarlamak için:
- Google Gemini API anahtarı alın ve anahtar dizesini kopyalayın.
- Wordcraft proje kök dizinine gidin.`
cd wordcraft/
- API anahtarını bir ortam değişkeni olarak ayarlayın. Linux ana makinelerinde aşağıdaki komutları kullanın.
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. Bu adım isteğe bağlıdır ancak önerilir.
Yükleme ve kurulumunuzu test etmek için:
- Wordcraft proje kök dizinine gidin.
cd wordcraft/
- Projeyi geliştirme modunda çalıştırarak:
npm run dev
- Web tarayıcınızda Wordcraft kullanıcı arayüzüne gidin. Belirli adres, önceki komutun çıkışında gösterilir. Örneğin:
http://localhost:3000/
İstem örnek metnini değiştirme
Wordcraft, her yazma yardımı işlemi için bir dizi örnek kullanarak yapay zeka üretken modeli için istemler oluşturur (ör. yeni hikaye başlat ve metin oluştur komutları). Örnekler, üretken modeli hikayeniz için metin oluşturma konusunda yönlendirir. Bir işleme yönelik örnekleri değiştirerek çıktıyı farklı bir kalıba veya yazı stiline göre ayarlayabilirsiniz. Bu yaklaşım, Wordcraft'in istediğiniz şekilde yazmasını sağlamanın basit bir yoludur.
Aşağıdaki örnekte, Wordcraft'teki new_story
örneklerinde yapılan bir değişiklik gösterilmektedir. Bu değişikliğin amacı, yapay zeka üretken modelini iç monolog yaklaşımını kullanarak hikaye girişleri yazmaya ve polisiye roman için daha uygun bir üslup kullanmaya yönlendirmektir. Bu tür bir hikaye girişine dair birkaç örnek yazarak üretken modelin genel kalıbı takip etmesini ancak farklı bir tema için giriş oluşturmasını sağlayabilirsiniz.
Wordcraft'teki yeni hikaye örneklerini değiştirmek için:
wordcraft/app/context/json/new_story.json
dosyasını açın.- JSON dosyasının genel yapısını korurken örnekleri değiştirin. İç monolog stili kullanılan bir gizem hikayesi girişi örneğini aşağıda bulabilirsiniz.
[ { "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." } ]
- Değişiklikleri "new_story.json" dosyasına kaydedin.
Değiştirilen yeni hikaye işlemini test etmek için:
- Wordcraft proje kök dizinine gidin.
cd wordcraft/
- Projeyi geliştirme modunda çalıştırın. Uygulama zaten çalışıyorsa uygulamayı durdurup yeniden başlatmanız gerekebilir.
npm run dev
- Web tarayıcınızda Wordcraft kullanıcı arayüzüne gidin. Belirli adres, önceki komutun çıkışında gösterilir. Örneğin:
http://localhost:3000/
- Wordcraft'in ana menüsüne gidip Yeni Hikaye Başlat'ı seçin.
- Yeni hikaye istemini güncelleyin veya istediğiniz şekilde değiştirin, ardından yeni hikaye başlat'ı seçin.
Bu tekniği kullanarak Wordcraft'taki mevcut tüm hikaye yazma kontrollerini değiştirebilirsiniz. wordcraft/app/context/json/
dizininde bulunan örnekleri güncelleyerek diğer hikaye kontrollerini değiştirmeyi deneyin.
Yeni yazma denetimi oluşturma
Wordcraft uygulaması, genişletilebilir şekilde tasarlanmıştır. Böylece, uygulamanın sağ tarafındaki Denetimler sekmesindeki metin oluştur veya cümleyi yeniden yaz düğmelerine benzer şekilde size yardımcı olacak yeni yazma kontrolleri ekleyebilirsiniz. Bu değişiklikleri yapmak biraz daha fazla çaba gerektirir ancak Wordcraft'ın özelliklerini iş akışınıza ve hedeflerinize uyacak şekilde şekillendirmenize olanak tanır.
Aşağıdaki örnekte, Wordcraft için yeni bir karakter denetimi oluşturuluyor. Bu özelliği, bir hikayeye yeni bir karakter tanıtmak için karakterin özelliklerinin açıklamasını ekleyerek kullanabilirsiniz. Bu kontrolün temeli, daha önce bahsedilen yeni hikaye başlat kontrolü gibi diğer Wordcraft kontrolleriyle aynıdır. Karakterlerin nasıl tanıtılmasını istediğinize dair birkaç örnek içeren bir JSON dosyası oluşturursunuz. Değişikliklerin geri kalanı, kullanıcı arayüzünü ve yapay zeka istemi yönetimi işlevlerini ekler.
Örnek oluşturma
Üretken modelin karakterleri nasıl tanıtmasını istediğinize dair birkaç örnek yazın. Örneğin, onları bir anlatıcı gibi mi tanımlamak istiyorsunuz yoksa ana karakterinizin deneyimi üzerinden mi tanıtmak istiyorsunuz? Aşağıdaki örneklerde, yeni karakterler ana karakterin bakış açısından tanıtılarak ikinci yaklaşım kullanılmıştır. Bu örnekleri yeni bir JSON dosyasıyla eklersiniz:
Yeni denetim için örnekler eklemek üzere:
wordcraft/app/context/json/new_character.json
dosyası oluşturun.- Örnekleri JSON dosyasında oluşturun. Bu örnekte her örnekte, istem metnini temsil eden bir
character
açıklama alanı ve beklenen çıkışı gösteren birtarget
alanı vardı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." } ]
- Değişiklikleri
new_character.json
dosyasına kaydedin.
Örneklerinizi oluşturduktan sonra app/context/schema.ts
ve index.ts
dosyalarını, bu yeni karakter denetiminin istem içeriğini yansıtacak şekilde değiştirin.
Örnekleri schema.ts
dosyasına eklemek için:
wordcraft/app/context/schema.ts
dosyasını, yeni karakter örneği veri yapısını içerecek şekilde değiştirin.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 tür, istem örneklerini kullanıcı arayüzüne ve sonraki adımlarda değiştireceğiniz istem oluşturma koduna bağlamanıza yardımcı olur.
Yeni bir işlem türü oluşturmak için
- Yeni karakter işlem türünü eklemek için
wordcraft/app/core/shared/types.ts
dosyasını değiştirin.export const enum OperationType { ... NEW_CHARACTER = 'NEW_CHARACTER', // add to list of types ... }
Örnekleri index.ts
dosyasına kaydetmek için:
wordcraft/app/context/index.ts
dosyasına yeni şemayı aktarın.import { continueSchema, ... newCharacterSchema // add new schema } from './schema';
- Yeni JSON dosyasını
newCharacterJson
olarak içe aktarın.import newCharacterJson from './json/new_character.json';
- Yeni karakter örneği içeriğini uygulama bağlamına kaydedin.
export class WordcraftContext { constructor() { ... this.registerExamples( OperationType.NEW_CHARACTER, newCharacterSchema, newCharacterJson ); ... }
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 denetimin kullanıcı arayüzünü oluşturabilirsiniz. Bu aşamadaki çalışmaların büyük kısmı, yeni bir işlem sınıfı oluşturmak ve ardından bu sınıfı Wordcraft uygulamasının ana koduna kaydetmektir.
Yeni bir işlem oluşturmak için:
wordcraft/app/core/operations/
dizininde, mevcut işlem sınıflarından birini şablon olarak kullanarak yeni bir işlem sınıfı oluşturun. Yeni karakter kontrolü içinnew_story_operation.ts
sınıfının bir kopyasını oluşturabilir venew_character_operation.ts
olarak yeniden adlandırabilirsiniz.- Sınıfa yeni bir ad verin ve en az bir
OperationSite
değeri tanımlayarak kontrolün kullanıcı arayüzünde ne zaman görüneceğini belirtin.export class NewCharacterOperation extends ChoiceOperation { static override isAvailable(operationSite: OperationSite) { return ( operationSite === OperationSite.END_OF_SECTION || operationSite === OperationSite.EMPTY_SECTION ); }
- İşlem için
id
değerini ayarlayın.static override id = OperationType.NEW_CHARACTER;
get
verun
işlevlerini, şema parametrelerinin değerlerini yansıtacak şekilde güncelleyin. Bu kod, bilgi istemi metnini kullanıcı arayüzünden alarak yapay zeka isteminde kullanır.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); }
- Kullanıcı arayüzü metinlerini 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ına kaydetmek için:
wordcraft/app/core/operations/index.ts
dosyasına yeni işlem için bir içe aktarma işlemi ekleyin.import {NewCharacterOperation} from './new_character_operation';
- Aynı
index.ts
dosyasınaNewCharacterOperation
sınıfı için bir dışa aktarma işlemi ekleyin.export { ... NewCharacterOperation, // add this class ... };
wordcraft/app/main.ts
dosyasında yeni işlemi kaydedin.const operationsService = wordcraftCore.getService(OperationsService); operationsService.registerOperations( ... Operations.NewCharacterOperation, // add new operation ... );
İstem oluşturma
Yeni kontrolü oluşturmanın son aşamasında, yapay zeka üretken modeli için istem oluşturma ve yanıtı işleme kodunu oluşturursunuz.
Çalışmanın ana kısmı, wordcraft/app/models/gemini/prompts/
dizininde kullanıcı arayüzünden giriş alan ve üretken modele iletilecek bir istem oluşturan bir istem işleyici oluşturmaktır.
İstem parametreleri için bir arayüz tanımlamak üzere:
wordcraft/app/core/shared/interfaces.ts
dosyasına, parametre isteminde bulunan yeni işlemler için bir arayüz ekleyin.export interface NewCharacterPromptParams { character: string; }
Yeni işlem için istem işleyicisi tanımlamak üzere:
wordcraft/app/models/gemini/prompts/
dizininde, mevcut işlem sınıflarından birini şablon olarak kullanarak yeni bir istem işleyici sınıfı oluşturun. Yeni karakter kontrolü içinnew_story.ts
sınıfının bir kopyasını oluşturabilir ve başlangıç noktası olaraknew_character.ts
olarak yeniden adlandırabilirsiniz.- İstem işleyici işlevi tanımlayın ve
NewCharacterExample
sınıfını içe aktarın.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) { ... }
- Yapay zeka modeli istemi için kullanıcı arayüzü girişini almak üzere bir
generatePrompt()
işlevi oluşturun.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}`; } }
- Kullanıcı arayüzü girişini örnek yanıtlarla birleştirip istemi tamamlamak için bir
getPromptContext()
işlevi 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:
wordcraft/app/models/gemini/index.ts
dosyasına yeni karakter işlemi için istem işleyiciyi aktarın.import {makePromptHandler as newCharacter} from './prompts/new_character';
newCharacter
istemi işleyicisi için geçersiz kılma tanımı ekleyin.override newCharacter = this.makePromptHandler(newCharacter);
İstem parametrelerini model tanımına kaydetmek için:
wordcraft/app/models/model.ts
dosyasına yeniNewCharacterPromptParams
arayüzü için bir içe aktarma işlemi ekleyin.import { ... NewCharacterPromptParams, ... } from '@core/shared/interfaces';
- Model sınıfına
newCharacter
istemi parametreleri ekleyin.async newCharacter(params: NewCharacterPromptParams): Promise<ModelResults> { throw new Error('Not yet implemented'); }
Yeni yazma denetimini test etme
Yeni kontrolünüz Wordcraft arayüzünde test edilmeye hazırdır. Devam etmeden önce kodunuzda derleme hatası olup olmadığını kontrol edin.
Yeni karakter denetimini test etmek için:
- Wordcraft proje kök dizinine gidin.`
cd wordcraft/
- Projeyi geliştirme modunda çalıştırın:`
npm run dev
- Web tarayıcınızda Wordcraft kullanıcı arayüzüne gidin. Belirli adres, önceki komutun çıkışında gösterilir. Örneğin:
http://localhost:3000/
- Wordcraft uygulamasında yeni bir hikaye oluşturun veya mevcut bir hikayeyi açın.
- Hikaye düzenleme alanında imleci hikayenin sonuna getirin. Sağdaki Kontroller sekmesinde karakter tanıt denetimi görünür.
- Karakter tanıt alanına yeni karakterin kısa bir açıklamasını yazın ve Karakter tanıt düğmesini seçin.
Ek kaynaklar
Wordcraft projesi hakkında daha fazla bilgi için kod deposuna bakın. Bu eğitimde açıklanan değişiklikleri bu pull isteğinde görebilirsiniz.
Üretim uygulamaları
Wordcraft'ın özelleştirilmiş bir sürümünü geniş bir kitle için dağıtmayı planlıyorsanız Google Gemini API'yi kullanımınız sıklık sınırlamasına ve diğer kullanım kısıtlamalarına tabi olabilir. Gemini API ile Docs Agent gibi bir üretim uygulaması oluşturmayı düşünüyorsanız uygulamanızın ölçeklenebilirliğini ve güvenilirliğini artırmak için Google Cloud Vertex AI hizmetlerine göz atın.