Chúng tôi yêu thích những câu chuyện. Kể chuyện và làm các hình thức viết sáng tạo khác có thể đầy thử thách và xứng đáng. Tạo dựng câu chuyện của riêng bạn từ một trang trống, tuy nhiên, việc này đôi khi có thể gây choáng ngợp và thậm chí là quá tải. Nhân tạo các mô hình trí tuệ nhân tạo (AI) có thể là công cụ hiệu quả giúp bạn vượt qua trang trống và xây dựng câu chuyện của bạn.
Hướng dẫn này chỉ cho bạn cách mở rộng Wordcraft, một công cụ viết truyện dựa trên AI do Google People and AI Research phát triển . Ứng dụng web này sử dụng Gemini API để giúp bạn xây dựng câu chuyện từng chút một bằng cách tạo ý tưởng, viết các phần của tin bài của bạn và sửa đổi nội dung để bổ sung chi tiết. Bạn có thể sửa đổi Wordcraft để phù hợp hơn với phong cách viết của riêng bạn, cũng như xây dựng các chế độ điều khiển mới khi viết để hỗ trợ tốt hơn cho quy trình làm việc của bạn.
Để xem video tổng quan về dự án và cách mở rộng dự án, bao gồm cả thông tin chi tiết từ những người tạo ra nó, hãy xem Trợ lý viết bằng AI – Xây dựng bằng AI của Google. Nếu không, bạn có thể bắt đầu mở rộng dự án theo hướng dẫn bên dưới.
Thiết lập dự án
Các hướng dẫn này hướng dẫn bạn cách thiết lập dự án Wordcraft cho phát triển và kiểm thử. Bạn cần cài đặt phần mềm tiên quyết, sao chép dự án từ kho lưu trữ mã, chạy cài đặt cấu hình và thiết lập một vài biến môi trường. Bạn có thể kiểm tra chế độ thiết lập bằng cách chạy dự án sau khi bạn hoàn tất các bước này.
Cài đặt điều kiện tiên quyết
Dự án Wordcraft sử dụng Nút và npm để quản lý các gói và chạy ứng dụng. Các hướng dẫn cài đặt sau đây dành cho máy chủ Linux.
Cách cài đặt phần mềm cần thiết:
- Cài đặt
node
vànpm
bằng cách làm theo hướng dẫn cài đặt cho nền tảng của bạn.
Sao chép và định cấu hình dự án
Tải mã dự án xuống rồi dùng lệnh cài đặt npm
để tải xuống
các phần phụ thuộc bắt buộc và định cấu hình dự án. Bạn cần
git phần mềm kiểm soát nguồn để truy xuất dự án
mã nguồn.
Cách tải xuống và định cấu hình mã dự án:
- Sao chép kho lưu trữ git bằng lệnh sau.
git clone https://github.com/PAIR-code/wordcraft
- Chuyển đến thư mục gốc của dự án Wordcraft.
cd wordcraft/
- Chạy lệnh cài đặt để tải các phần phụ thuộc xuống và định cấu hình dự án:
npm install
Đặt các biến môi trường
Đặt các biến môi trường bắt buộc để cho phép mã Wordcraft dự án bạn muốn chạy, cụ thể là Khoá API Gemini của Google. Chiến lược phát hành đĩa đơn các hướng dẫn cài đặt sau dành cho máy chủ Linux.
Cách đặt các biến môi trường:
- Lấy Khoá API Gemini của Google rồi sao chép chuỗi khoá.
- Chuyển đến thư mục gốc của dự án Wordcraft.`
cd wordcraft/
- Đặt Khoá API làm biến môi trường. Trên máy chủ Linux, hãy sử dụng
các lệnh sau.
touch .env echo "API_KEY="<YOUR_API_KEY>"" > .env
Kiểm tra thông tin thiết lập của bạn
Bây giờ, bạn có thể kiểm tra thiết lập dự án của mình bằng cách chạy Wordcraft trên thiết bị. Đây là bước không bắt buộc nhưng bạn nên thực hiện.
Cách kiểm tra quá trình cài đặt và thiết lập:
- Chuyển đến thư mục gốc của dự án Wordcraft.
cd wordcraft/
- Chạy dự án ở chế độ phát triển:
npm run dev
- Trong trình duyệt web, hãy chuyển đến giao diện người dùng Wordcraft. Chiến lược phát hành đĩa đơn
địa chỉ cụ thể sẽ xuất hiện trong kết quả của lệnh trước, ví dụ:
http://localhost:3000/
Sửa đổi nội dung mẫu câu lệnh
Wordcraft dùng một bộ ví dụ để tạo câu lệnh cho mô hình tạo sinh AI từng thao tác hỗ trợ viết, chẳng hạn như bắt đầu câu chuyện mới và tạo câu chuyện mới văn bản. Các ví dụ giúp định hướng cho mô hình tạo sinh cách tạo văn bản cho câu chuyện của bạn và bằng cách sửa đổi các ví dụ cho thao tác, bạn có thể thay đổi để tuân theo một mẫu hoặc kiểu viết khác. Đây là một phương pháp giúp bạn viết Wordcraft theo cách bạn muốn.
Ví dụ sau đây minh hoạ một sửa đổi của các ví dụ về new_story
trong
Trò chơi chữ. Mục tiêu của việc sửa đổi này là để hướng mô hình tạo sinh của AI đến
viết phần giới thiệu câu chuyện bằng cách tiếp cận độc thoại nội bộ và dùng văn phong
phù hợp hơn với một tiểu thuyết bí ẩn. Viết một vài ví dụ về trường hợp này
phần giới thiệu câu chuyện, bạn có thể áp dụng
mô hình tạo sinh để tuân theo
nhưng tạo phần giới thiệu cho một chủ đề khác.
Cách sửa đổi các ví dụ về câu chuyện mới trong Wordcraft:
- Mở tệp
wordcraft/app/context/json/new_story.json
. - Sửa đổi ví dụ trong khi vẫn duy trì cấu trúc tổng thể của JSON
. Sau đây là một ví dụ về cách sửa đổi phần giới thiệu câu chuyện bí ẩn bằng cách sử dụng
phong cách độc thoại nội bộ.
[ { "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." } ]
- Lưu các thay đổi vào tệp "new_story.json".
Cách kiểm thử thao tác sửa đổi câu chuyện mới:
- Chuyển đến thư mục gốc của dự án Wordcraft.
cd wordcraft/
- Chạy dự án ở chế độ phát triển. Nếu chiến dịch đang chạy, bạn có thể
cần dừng ứng dụng và khởi động lại.
npm run dev
- Trong trình duyệt web, hãy chuyển đến giao diện người dùng Wordcraft. Chiến lược phát hành đĩa đơn
địa chỉ cụ thể sẽ xuất hiện trong kết quả của lệnh trước, ví dụ:
http://localhost:3000/
- Chuyển đến trình đơn chính của Wordcraft rồi chọn Bắt đầu câu chuyện mới.
- Cập nhật lời nhắc mới cho tin bài hoặc thay đổi thành lời nhắc mà bạn muốn, sau đó chọn bắt đầu câu chuyện mới.
Bạn có thể sửa đổi tất cả các nút điều khiển viết câu chuyện hiện có trong Wordcraft bằng cách sử dụng nút này
kỹ thuật. Bạn có thể thử thay đổi các chế độ điều khiển tin bài khác bằng cách cập nhật ví dụ trong
Thư mục wordcraft/app/context/json/
.
Tạo chế độ điều khiển chức năng viết mới
Ứng dụng Wordcraft được thiết kế để mở rộng để bạn có thể thêm cách viết mới các nút điều khiển để hỗ trợ bạn, tương tự như tính năng tạo văn bản hoặc viết lại câu trong thẻ Điều khiển ở phía bên phải của ứng dụng. Tạo những video này sửa đổi sẽ tốn nhiều công sức hơn, nhưng cho phép bạn tạo ra các tính năng của Văn bản phù hợp với quy trình làm việc và mục tiêu của bạn.
Sửa đổi mẫu sau sẽ tạo ra một chế độ điều khiển ký tự mới cho Trò chơi chữ. Bạn có thể dùng công cụ này để giới thiệu một nhân vật mới vào câu chuyện bằng phần mô tả các đặc điểm của nhân vật đó. Nền tảng của chế độ kiểm soát này giống như các chế độ điều khiển khác trong Wordcraft chẳng hạn như chế độ điều khiển bắt đầu câu chuyện mới thảo luận trước đó. Bạn tạo một tệp JSON với một vài ví dụ về cách bạn muốn các ký tự được giới thiệu. Những thay đổi còn lại bổ sung giao diện người dùng và Các chức năng quản lý lời nhắc bằng AI.
Tạo mẫu
Viết một vài ví dụ về cách bạn muốn mô hình tạo sinh giới thiệu ký tự. Ví dụ: bạn có muốn mô tả chúng như một người dẫn chuyện hay không bạn có muốn giới thiệu chúng thông qua trải nghiệm của nhân vật chính không? Chiến lược phát hành đĩa đơn các ví dụ sau sử dụng phương pháp thứ hai, giới thiệu các ký tự mới từ góc nhìn của nhân vật chính. Bạn thêm các ví dụ này bằng một tệp JSON mới tệp:
Cách thêm ví dụ cho chế độ kiểm soát mới:
- Tạo một tệp
wordcraft/app/context/json/new_character.json
. - Tạo các ví dụ trong tệp JSON. Trong ví dụ này, mỗi ví dụ có
trường mô tả
character
thể hiện lời nhắc và trườngtarget
cho thấy kết quả dự kiến.[ { "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." } ]
- Lưu các thay đổi đối với tệp
new_character.json
.
Sau khi tạo các ví dụ, hãy sửa đổi app/context/schema.ts
và index.ts
để phản ánh nội dung lời nhắc của chế độ kiểm soát ký tự mới này.
Cách thêm các ví dụ vào tệp schema.ts
:
- Sửa đổi tệp
wordcraft/app/context/schema.ts
để đưa vào tệp mới cấu trúc dữ liệu mẫu.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(), });
Xác định loại thao tác liên kết với các ví dụ mới này. Thông tin mới này giúp kết nối các ví dụ về lời nhắc với giao diện người dùng và lời nhắc mã bản dựng mà bạn sẽ sửa đổi trong các bước sau.
Để tạo một loại thao tác mới
- Sửa đổi tệp
wordcraft/app/core/shared/types.ts
để thêm tệp mới loại toán tử.export const enum OperationType { ... NEW_CHARACTER = 'NEW_CHARACTER', // add to list of types ... }
Cách đăng ký các ví dụ trong tệp index.ts
:
- Trong tệp
wordcraft/app/context/index.ts
, hãy nhập giản đồ mới.import { continueSchema, ... newCharacterSchema // add new schema } from './schema';
- Nhập tệp JSON mới dưới dạng
newCharacterJson
.import newCharacterJson from './json/new_character.json';
- Đăng ký nội dung mẫu nhân vật mới trong ngữ cảnh ứng dụng.
export class WordcraftContext { constructor() { ... this.registerExamples( OperationType.NEW_CHARACTER, newCharacterSchema, newCharacterJson ); ... }
- Xuất một loại
NewCharacterExample
.export type NewCharacterExample = z.infer<typeof newCharacterSchema>;
Xây dựng giao diện người dùng
Sau khi tạo và đăng ký ví dụ về việc tạo nội dung, bạn có thể tạo giao diện người dùng cho chế độ điều khiển mới. Phần lớn công việc cần làm giai đoạn này sẽ tạo một lớp thao tác mới và sau đó đăng ký lớp đó bằng mã chính của ứng dụng Wordcraft.
Cách tạo một thao tác mới:
- Trong thư mục
wordcraft/app/core/operations/
, hãy tạo một lớp thao tác mới bằng cách sử dụng một trong các lớp thao tác hiện có làm một mẫu. Đối với chế độ điều khiển ký tự mới, bạn có thể tạo bản sao Lớpnew_story_operation.ts
rồi đổi tên thànhnew_character_operation.ts
. - Đặt tên mới cho lớp và chỉ định thời điểm thành phần điều khiển xuất hiện trong
giao diện người dùng bằng cách xác định ít nhất một giá trị
OperationSite
.export class NewCharacterOperation extends ChoiceOperation { static override isAvailable(operationSite: OperationSite) { return ( operationSite === OperationSite.END_OF_SECTION || operationSite === OperationSite.EMPTY_SECTION ); }
- Đặt
id
cho thao tác.static override id = OperationType.NEW_CHARACTER;
- Cập nhật các hàm
get
vàrun
để phản ánh của các thông số giản đồ. Mã này xử lý việc lấy văn bản lời nhắc từ giao diện người dùng để sử dụng trong câu lệnh AI.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); }
- Cập nhật văn bản và nội dung mô tả giao diện người dùng.
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.', }), };
Để đăng ký thao tác mới trong ứng dụng Wordcraft:
- Trong tệp
wordcraft/app/core/operations/index.ts
, hãy thêm một nhập cho thao tác mới.import {NewCharacterOperation} from './new_character_operation';
- Trong cùng tệp
index.ts
, hãy thêm một tệp xuất cho LớpNewCharacterOperation
.export { ... NewCharacterOperation, // add this class ... };
- Trong tệp
wordcraft/app/main.ts
, hãy đăng ký hoạt động.const operationsService = wordcraftCore.getService(OperationsService); operationsService.registerOperations( ... Operations.NewCharacterOperation, // add new operation ... );
Tạo nội dung xử lý câu lệnh
Trong giai đoạn cuối cùng của quá trình tạo chế độ kiểm soát mới, bạn tạo mã
xử lý việc tạo câu lệnh cho mô hình tạo sinh AI và xử lý câu trả lời.
Công việc chính là xây dựng một trình xử lý lời nhắc trong
Thư mục wordcraft/app/models/gemini/prompts/
nhận dữ liệu đầu vào từ người dùng
và tập hợp một lời nhắc để truyền đến mô hình tạo sinh.
Cách xác định giao diện cho các tham số lời nhắc:
- Trong tệp
wordcraft/app/core/shared/interfaces.ts
, hãy thêm một cho các tham số nhắc thao tác mới.export interface NewCharacterPromptParams { character: string; }
Cách xác định trình xử lý lời nhắc cho thao tác mới:
- Trong thư mục
wordcraft/app/models/gemini/prompts/
, hãy tạo một lớp trình xử lý lời nhắc mới bằng cách sử dụng một trong các lớp thao tác hiện có làm một mẫu. Đối với chế độ điều khiển ký tự mới, bạn có thể tạo bản sao Lớpnew_story.ts
rồi đổi tên thànhnew_character.ts
làm điểm xuất phát. - Xác định hàm xử lý lời nhắc và nhập
Lớp
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) { ... }
- Tạo một hàm
generatePrompt()
để lấy dữ liệu đầu vào trong giao diện người dùng cho lời nhắc về mô hình AI.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}`; } }
- Tạo một hàm
getPromptContext()
để tập hợp người dùng đầu vào giao diện cùng với các phản hồi mẫu và tạo lời nhắc hoàn chỉnh.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; }
Cách tích hợp trình xử lý lời nhắc ký tự mới:
- Trong tệp
wordcraft/app/models/gemini/index.ts
, hãy nhập trình xử lý lời nhắc cho thao tác ký tự mới.import {makePromptHandler as newCharacter} from './prompts/new_character';
- Thêm định nghĩa ghi đè cho lời nhắc
newCharacter
trình xử lý.override newCharacter = this.makePromptHandler(newCharacter);
Cách đăng ký các tham số lời nhắc bằng định nghĩa mô hình:
- Trong tệp
wordcraft/app/models/model.ts
, hãy thêm dữ liệu nhập cho giao diệnNewCharacterPromptParams
mới.import { ... NewCharacterPromptParams, ... } from '@core/shared/interfaces';
- Thêm các tham số lời nhắc
newCharacter
vào lớp mô hình.async newCharacter(params: NewCharacterPromptParams): Promise<ModelResults> { throw new Error('Not yet implemented'); }
Kiểm thử chức năng điều khiển ghi mới
Chế độ điều khiển mới của bạn đã sẵn sàng để thử nghiệm trong giao diện Wordcraft. Đảm bảo để kiểm tra mã nhằm tìm lỗi biên dịch trước khi tiếp tục.
Cách kiểm thử chế độ điều khiển nhân vật mới:
- Chuyển đến thư mục gốc của dự án Wordcraft.`
cd wordcraft/
- Chạy dự án ở chế độ nhà phát triển:`
npm run dev
- Trong trình duyệt web, hãy chuyển đến giao diện người dùng Wordcraft. Chiến lược phát hành đĩa đơn
địa chỉ cụ thể sẽ xuất hiện trong kết quả của lệnh trước, ví dụ:
http://localhost:3000/
- Trong ứng dụng Wordcraft, hãy tạo một câu chuyện mới hoặc mở một câu chuyện hiện có.
- Trong vùng chỉnh sửa câu chuyện, hãy di chuyển con trỏ đến cuối câu chuyện. Ngang bằng thẻ Điều khiển ở bên phải, nút điều khiển giới thiệu ký tự xuất hiện.
- Trong trường giới thiệu nhân vật, nhập nội dung mô tả ngắn gọn nhân vật mới rồi chọn nút giới thiệu nhân vật.
Tài nguyên khác
Để biết thêm thông tin về dự án Wordcraft, hãy xem đoạn mã kho lưu trữ. Bạn có thể xem những thay đổi được mô tả trong hướng dẫn này yêu cầu kéo.
Ứng dụng phát hành công khai
Nếu bạn dự định triển khai một phiên bản Wordcraft tuỳ chỉnh cho nhiều đối tượng, xin lưu ý rằng việc bạn sử dụng Google Gemini API có thể phải tuân theo giới hạn số lượng yêu cầu và hạng mục khác hạn chế sử dụng. Nếu bạn đang cân nhắc xây dựng một ứng dụng phát hành công khai bằng Gemini API, chẳng hạn như Tác nhân Tài liệu, thanh toán Vertex AI của Google Cloud các dịch vụ khác để tăng khả năng có thể mở rộng và độ tin cậy cho ứng dụng của bạn.