نحن نحب القصص. يمكن أن يكون سرد القصص وأشكال الكتابة الإبداعية الأخرى مفيدًا ومفيدًا. ومع ذلك، قد يبدو إنشاء قصصك الخاصة من صفحة فارغة مهمة شاقة ومُرهقة في بعض الأحيان. يمكن أن تكون نماذج الذكاء الاصطناعي التوليدي أداة رائعة لمساعدتك في تجاوز مشكلة إنشاء المحتوى من خلال صفحات فارغة وإنشاء قصة.
يشرح لك هذا الدليل التعليمي كيفية توسيع نطاق استخدام Wordcraft، وهي أداة كتابة قصص مستندة إلى الذكاء الاصطناعي أنشأها فريق أبحاث الذكاء الاصطناعي والأشخاص في Google. يستخدم تطبيق الويب هذا واجهة برمجة التطبيقات Gemini API لمساعدتك في إنشاء القصص تدريجيًا من خلال توليد الأفكار وكتابة أجزاء من قصصك ومراجعة المحتوى لإضافة المزيد من التفاصيل. يمكنك تعديل Wordcraft لتتطابق بشكلٍ أكبر مع أسلوب الكتابة الخاص بك، وإنشاء عناصر تحكّم جديدة في الكتابة لتحسين سير عملك.
للحصول على فيديو يقدّم نظرة عامة على المشروع وكيفية توسيع نطاقه، بما في ذلك إحصاءات من الفريق الذي أنشأه، يمكنك الاطّلاع على مساعِد الكتابة المستنِد إلى الذكاء الاصطناعي: الإنشاء باستخدام تكنولوجيات الذكاء الاصطناعي من Google. بخلاف ذلك، يمكنك البدء في تمديد المشروع باتّباع التعليمات التالية:
إعداد المشروع
سترشدك هذه التعليمات إلى كيفية إعداد مشروع Wordcraft بغرض تطويره واختباره. عليك تثبيت البرامج المُسبقة، ونسْخ المشروع من مستودع الرموز البرمجية، وتشغيل عملية تثبيت الإعدادات، وضبط بعض متغيّرات البيئة. يمكنك اختبار عملية الإعداد من خلال تشغيل المشروع بعد إكمال هذه الخطوات.
تثبيت المتطلبات الأساسية
يستخدم مشروع Wordcraft Node وnpm لإدارة الحِزم وتشغيل التطبيق. تعليمات التثبيت التالية مخصّصة لجهاز مضيف يعمل بنظام التشغيل Linux.
لتثبيت البرنامج المطلوب، يُرجى اتّباع الخطوات التالية:
- ثبِّت
node
وnpm
باتّباع تعليمات التثبيت المخصّصة للمنصّة التي تستخدمها.
استنساخ المشروع وضبطه
نزِّل رمز المشروع واستخدِم الأمر npm
لتثبيت
الملحقات المطلوبة وضبط المشروع. تحتاج إلى استخدام برنامج التحكّم في المصدر
git لاسترداد رمز المصدر
للمشروع.
لتنزيل رمز المشروع وضبطه:
- استنسِخ مستودع git باستخدام الأمر التالي.
git clone https://github.com/PAIR-code/wordcraft
- انتقِل إلى الدليل الجذري لمشروع Wordcraft.
cd wordcraft/
- شغِّل الأمر install لتنزيل التبعيات وضبط المشروع:
npm install
ضبط متغيّرات البيئة
اضبط متغيّرات البيئة المطلوبة للسماح بتشغيل رمز برمجي مشروع Wordcraft، وتحديدًا مفتاح Google Gemini API. تهدف تعليمات التثبيت التالية إلى تثبيت البرنامج على جهاز مضيف يعمل بنظام التشغيل Linux.
لضبط متغيّرات البيئة:
- احصل على مفتاح Google Gemini API وانسخ سلسلة المفتاح.
- انتقِل إلى الدليل الجذري لمشروع Wordcraft.
cd wordcraft/
- اضبط مفتاح واجهة برمجة التطبيقات كمتغيّر بيئة. على مضيفي Linux، استخدِم
الأوامر التالية.
touch .env echo "API_KEY="<YOUR_API_KEY>"" > .env
اختبار الإعداد
من المفترض أن تتمكّن الآن من اختبار إعداد مشروعك من خلال تشغيل Wordcraft على جهازك. هذه الخطوة اختيارية، ولكن ننصح بها.
لاختبار عملية التثبيت والإعداد:
- انتقِل إلى الدليل الجذري لمشروع Wordcraft.
cd wordcraft/
- تشغيل المشروع من خلال وضع التطوير:
npm run dev
- في متصفح الويب، انتقِل إلى واجهة مستخدم Wordcraft. يظهر العنوان
المحدد في نتيجة الأمر السابق، على سبيل المثال:
http://localhost:3000/
تعديل نص مثال الطلب
تُنشئ ميزة Wordcraft طلبات للنموذج التوليدي الذكي باستخدام مجموعة من الأمثلة لكل عملية مساعدة في الكتابة، مثل الأوامر بدء قصة جديدة وإنشاء
نص. ترشد الأمثلة النموذج التوليدي في إنشاء نص لقصتك، ومن خلال تعديل الأمثلة لعملية معيّنة، يمكنك تغيير النتيجة لتتّبع نمطًا أو أسلوب كتابة مختلفًا. هذه الطريقة هي
طريقة بسيطة لجعل Wordcraft يكتب بالطريقة التي تريدها.
يعرض المثال التالي تعديلاً على أمثلة new_story
في
Wordcraft. يهدف هذا التعديل إلى توجيه نموذج الذكاء الاصطناعي التوليدي لكتابة مقدمات القصص باستخدام أسلوب الحوار الداخلي واستخدام أسلوب
يكون أكثر ملاءمةً لرواية غامضة. من خلال كتابة بعض الأمثلة على
هذا النوع من المقدّمات القصصية، يمكنك جعل النموذج التوليدي يتّبع الأسلوب
العام، ولكن ينشئ مقدمة لموضوع مختلف.
لتعديل أمثلة القصص الجديدة في Wordcraft:
- افتح ملف
wordcraft/app/context/json/new_story.json
. - عدِّل الأمثلة مع الحفاظ على البنية العامة لملف JSON. في ما يلي مثال على تعديل لمقدمة قصة غامضة باستخدام
نمط مونولوج داخلي.
[ { "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." } ]
- احفظ التغييرات في ملف new_story.json.
لاختبار عملية إنشاء القصة الجديدة المعدَّلة:
- انتقِل إلى الدليل الجذري لمشروع Wordcraft.
cd wordcraft/
- شغِّل المشروع في وضع التطوير. إذا كان التطبيق قيد التشغيل، قد تحتاج
إلى إيقافه وإعادة تشغيله.
npm run dev
- في متصفح الويب، انتقِل إلى واجهة مستخدم Wordcraft. يظهر العنوان
المحدد في نتيجة الأمر السابق، على سبيل المثال:
http://localhost:3000/
- انتقِل إلى القائمة الرئيسية في Wordcraft واختَر بدء قصة جديدة.
- عدِّل طلب إنشاء قصة جديدة أو غيِّره إلى ما تريد، ثم انقر على بدء قصة جديدة.
يمكنك تعديل جميع عناصر التحكّم الحالية في كتابة القصص في Wordcraft باستخدام هذه
الطريقة. محاولة تغيير عناصر التحكّم الأخرى في القصص من خلال تعديل الأمثلة في الدليل
wordcraft/app/context/json/
إنشاء عنصر تحكّم جديد للكتابة
تم تصميم تطبيق Wordcraft ليتم توسيع نطاقه حتى تتمكّن من إضافة عناصر تحكّم جديدة في الكتابة لمساعدتك، مثل زرَّي إنشاء نص أو إعادة كتابة الجملة
في علامة التبويب "عناصر التحكّم" على يسار التطبيق. يتطلّب إجراء هذه
التعديلات مجهودًا أكبر قليلاً، ولكنه يتيح لك تشكيل ميزات
Wordcraft لتلائم سير عملك وأهدافك.
ينشئ مثال التعديل التالي عنصر تحكّم جديدًا في الأحرف لتطبيق Wordcraft. يمكنك استخدامها لتعريف قصة بشخصية جديدة مع وصف لسمات هذه الشخصية. إنّ أساس هذا العنصر التحكّمي هو نفسه أساس عناصر التحكّم الأخرى في Wordcraft، مثل عنصر التحكّم بدء قصة جديدة الذي سبق أن ناقشناه. يمكنك إنشاء ملف JSON يتضمّن بعض الأمثلة على كيفية تريد إدخال الأحرف. تضيف بقية التغييرات واجهة المستخدم ووظائف إدارة طلبات الذكاء الاصطناعي.
إنشاء أمثلة
اكتب بعض الأمثلة على الطريقة التي تريد من خلالها أن يقدّم النموذج التوليدي الشخصيات. على سبيل المثال، هل تريد وصفه كراوٍ، أم هل تريد تقديمه من خلال تجربة الشخصية الرئيسية؟ تستخدِم المثالان التاليان الأسلوب الأخير، حيث يتم تقديم شخصيات جديدة من وجهة نظر الشخصية الرئيسية. يمكنك إضافة هذه الأمثلة باستخدام ملف JSON جديد:
لإضافة أمثلة لعنصر التحكّم الجديد:
- أنشئ ملفًا بتنسيق
wordcraft/app/context/json/new_character.json
. - أنشئ الأمثلة في ملف JSON. في هذا المثال، يحتوي كل مثال على
حقل وصف
character
يمثّل نص الطلب وحقلtarget
يعرض الناتج المتوقّع.[ { "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." } ]
- احفظ التغييرات في ملف
new_character.json
.
بعد إنشاء الأمثلة، عدِّل الملفَّين app/context/schema.ts
وindex.ts
لعرض محتوى الطلب الخاص بعنصر التحكّم في الأحرف الجديد هذا.
لإضافة الأمثلة إلى ملف schema.ts
:
- عدِّل ملف
wordcraft/app/context/schema.ts
لتضمين بنية بيانات مثال الحرف الجديد.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(), });
حدِّد نوع عملية مرتبطًا بهذه الأمثلة الجديدة. يساعد هذا النوع الجديد من الطلبات في ربط أمثلة الطلبات بواجهة المستخدم ورمز بناء الطلبات، والذي تعدّله في الخطوات اللاحقة.
لإنشاء نوع عملية جديد
- عدِّل ملف
wordcraft/app/core/shared/types.ts
لإضافة نوع عملية الحرف الجديد.export const enum OperationType { ... NEW_CHARACTER = 'NEW_CHARACTER', // add to list of types ... }
لتسجيل الأمثلة في ملف index.ts
:
- في ملف
wordcraft/app/context/index.ts
، استورِد المخطّط الجديد.import { continueSchema, ... newCharacterSchema // add new schema } from './schema';
- استورِد ملف JSON الجديد كملف
newCharacterJson
.import newCharacterJson from './json/new_character.json';
- سجِّل محتوى مثال الحرف الجديد في سياق التطبيق.
export class WordcraftContext { constructor() { ... this.registerExamples( OperationType.NEW_CHARACTER, newCharacterSchema, newCharacterJson ); ... }
- تصدير نوع
NewCharacterExample
export type NewCharacterExample = z.infer<typeof newCharacterSchema>;
إنشاء واجهة مستخدِم
بعد إنشاء أمثلة إنشاء المحتوى وتسجيلها، يمكنك إنشاء واجهة المستخدم للعنصر التحكّم الجديد. يتمثل الجزء الأكبر من العمل في هذه المرحلة في إنشاء فئة عملية جديدة ثم تسجيل هذه الفئة باستخدام الرمز الرئيسي لتطبيق Wordcraft.
لإنشاء عملية جديدة:
- في الدليل
wordcraft/app/core/operations/
، أنشئ فئة عملية جديدة باستخدام إحدى فئات العمليات الحالية كهي نموذج. بالنسبة إلى عنصر التحكّم في الأحرف الجديد، يمكنك إنشاء نسخة من فئةnew_story_operation.ts
وإعادة تسميتها إلىnew_character_operation.ts
. - أدخِل اسمًا جديدًا للفئة، وحدِّد وقت ظهور عنصر التحكّم في
واجهة المستخدم من خلال تحديد قيمة
OperationSite
واحدة على الأقل.export class NewCharacterOperation extends ChoiceOperation { static override isAvailable(operationSite: OperationSite) { return ( operationSite === OperationSite.END_OF_SECTION || operationSite === OperationSite.EMPTY_SECTION ); }
- اضبط
id
للعملية.static override id = OperationType.NEW_CHARACTER;
- عدِّل الدالتَين
get
وrun
لتعكس قيم مَعلمات المخطّط. يعالج هذا الرمز البرمجي الحصول على نص الطلب من واجهة المستخدم لاستخدامه في طلب الذكاء الاصطناعي.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); }
- عدِّل نصوص واجهة المستخدم والأوصاف.
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.', }), };
لتسجيل العملية الجديدة في تطبيق Wordcraft:
- في ملف
wordcraft/app/core/operations/index.ts
، أضِف عملية نقل بيانات للتشغيلية الجديدة.import {NewCharacterOperation} from './new_character_operation';
- في ملف
index.ts
نفسه، أضِف عملية تصدير لفئةNewCharacterOperation
.export { ... NewCharacterOperation, // add this class ... };
- في ملف
wordcraft/app/main.ts
، سجِّل العملية الجديدة.const operationsService = wordcraftCore.getService(OperationsService); operationsService.registerOperations( ... Operations.NewCharacterOperation, // add new operation ... );
إنشاء معالجة طلب
في المرحلة النهائية من إنشاء عنصر التحكّم الجديد، يمكنك إنشاء الرمز البرمجي الذي يُنشئ طلبات للنموذج التوليدي للذكاء الاصطناعي ويعالج الردّ.
يتمثل الجزء الرئيسي من العمل في إنشاء معالِج طلبات في دليل
wordcraft/app/models/gemini/prompts/
الذي يتلقّى إدخالات من واجهة
المستخدِم ويجمع طلبًا ليتم تمريره إلى النموذج التوليدي.
لتحديد واجهة لمَعلمات الطلب:
- في ملف
wordcraft/app/core/shared/interfaces.ts
، أضِف واجهة للمَعلمات التي تطلبها العمليات الجديدة.export interface NewCharacterPromptParams { character: string; }
لتحديد معالِج طلب للتشغيل الجديد:
- في الدليل
wordcraft/app/models/gemini/prompts/
، أنشئ فئة جديدة لمعالجة الطلبات باستخدام إحدى فئات العمليات الحالية كأحد النماذج. بالنسبة إلى عنصر التحكّم الجديد في الأحرف، يمكنك إنشاء نسخة من فئةnew_story.ts
وإعادة تسميتها إلىnew_character.ts
كنقطة بداية. - حدِّد دالة لمعالجة الطلب واستورِد فئة
NewCharacterExample
.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) { ... }
- أنشئ دالة
generatePrompt()
للحصول على إدخال واجهة المستخدم لطلب نموذج الذكاء الاصطناعي.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}`; } }
- أنشئ دالة
getPromptContext()
لتجميع مدخلات واجهة المستخدم مع أمثلة الردود وإنشاء الطلب الكامل.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; }
لدمج معالِج طلب إدخال الأحرف الجديد:
- في ملف
wordcraft/app/models/gemini/index.ts
، استورِد معالج الطلب لتشغيل الحرف الجديد.import {makePromptHandler as newCharacter} from './prompts/new_character';
- أضِف تعريفًا لتجاوز معالج الطلب
newCharacter
.override newCharacter = this.makePromptHandler(newCharacter);
لتسجيل مَعلمات الطلب مع تعريف النموذج:
- في ملف
wordcraft/app/models/model.ts
، أضِف عملية استيراد لملف antares.csv الجديد.NewCharacterPromptParams
import { ... NewCharacterPromptParams, ... } from '@core/shared/interfaces';
- أضِف مَعلمات طلب
newCharacter
إلى فئة النموذج.async newCharacter(params: NewCharacterPromptParams): Promise<ModelResults> { throw new Error('Not yet implemented'); }
اختبار عنصر التحكّم في الكتابة الجديد
من المفترض أن يكون عنصر التحكّم الجديد جاهزًا للاختبار في واجهة Wordcraft. احرص على التحقّق من الرمز البرمجي بحثًا عن أخطاء الترجمة قبل المتابعة.
لاختبار عنصر التحكّم في الأحرف الجديد:
- انتقِل إلى الدليل الجذري لمشروع Wordcraft.
cd wordcraft/
- شغِّل المشروع في وضع التطوير:
npm run dev
- في متصفح الويب، انتقِل إلى واجهة مستخدم Wordcraft. يظهر العنوان
المحدد في نتيجة الأمر السابق، على سبيل المثال:
http://localhost:3000/
- في تطبيق Wordcraft، أنشئ قصة جديدة أو افتح قصة حالية.
- في منطقة تعديل القصة، حرِّك المؤشر إلى نهاية القصة. في علامة التبويب "عناصر التحكّم" على يسار الصفحة، من المفترض أن يظهر عنصر التحكّم إدخال شخصية.
- في حقل تقديم الشخصية، اكتب وصفًا موجزًا للشخصية الجديدة، ثم انقر على الزر تقديم الشخصية.
مراجع إضافية
لمزيد من المعلومات عن مشروع Wordcraft، يُرجى الاطّلاع على مستودع код. يمكنك الاطّلاع على التغييرات الموضّحة في هذا الدليل التعليمي في طلب الدمج هذا.
تطبيقات الإصدار العلني
إذا كنت تخطّط لنشر إصدار مخصّص من Wordcraft لجمهور كبير، يُرجى العِلم أنّ استخدامك لواجهة برمجة التطبيقات Google Gemini API قد يخضع لقيود على معدّل الإرسال وغيرها من قيود الاستخدام. إذا كنت تفكر في إنشاء تطبيق متاح للجميع باستخدام واجهة برمجة التطبيقات Gemini API، مثل مساعد Docs، يمكنك الاطّلاع على خدمات Google Cloud Vertex AI لزيادة قابلية التطبيق للتوسع والموثوقية.