300 - 《如何用 ChatGPT 写书》
发布于 2023年5月15日
上周用 ChatGPT 写了本书,内容我放 github 了。1300+ 提问次数,跑了几小时,24W 字,1.6M。由于用的 GPT 3,感觉质量并不太好,我手动对比了 GPT-3 和 GPT-4 针对一些问题的答案,后者明显更好。所以,找机会我会用 GPT-4 的 API 再跑一边。
由于是关于前端面试题的书,所以内容结构非常简单,「大纲」+「问题」就好了。所以,生成这本书只要三步。
1、生成大纲(章节信息)
2、为每一节生成题目列表
3、为每个题目生成答案
生成大纲我用的 prompt 是这个。
我想写一本关于前端面试题大全的书,请帮我列一个大纲。不需要描述和介绍,只返回 JSON 数据,JSON 数据最多两级。JSON 格式比如这样。
[
{level:1,title:'123'},
{level:2,title:'345'},
]
生成题目列表我用的 prompt 是这个。
我需要 20 个关于「JavaScript > 高级概念与性能优化」的面试题,请以 JSON 格式输出给我,不需要额外介绍。比如这样。
["问题1", "问题2"]
生成答案我用的 prompt 是这个。
请回答这道前端面试题「闭包是什么?它有哪些应用场景?」,尽量详细,如果有示例代码则更好。
代码。
import axios from 'axios';
import path from 'path';
import fs from 'fs';
import { Cache } from './cache';
import { getEnv } from './env';
const cache = new Cache({
filePath: path.join(__dirname, '../.cache/cache.json'),
});
type Outline = { title: string; level: number }[];
export async function main() {
// 生成大纲
const defaultOutline = require('../data/outline.json');
const outline: Outline = (cache.get('outline') || defaultOutline) as Outline;
// 生成题目
let level1 = '';
let level2 = '';
let level3 = '';
let count = 0;
const total = outline.length;
for (const item of outline) {
count += 1;
console.log(`正在生成 ${count}/${total}`);
const { title, level } = item;
if (level === 1) level1 = title;
if (level === 2) level2 = title;
if (level === 3) level3 = title;
if (level < 3) continue;
// if (count >= 1) break;
const totalTitle = `${level1} > ${level2} > ${level3}`;
const prompt = `我需要 20 个关于「${totalTitle}」的面试题,请以 JSON 格式输出给我,不需要额外介绍,不需要给答案。比如这样 ["问题1", "问题2"]。`;
console.log('> ', prompt);
const result = await getPromptAnswer(prompt);
console.log(result);
const key = `questions-${totalTitle}`;
cache.set(key, JSON.parse(result));
/