符号化方法通常通过定义符号、符号之间的关系以及基于这些关系的规则来表示知识。
简单来说,我们可以创建一个符号来表示特写的规则,诸如于:
"""
我们来玩一个名为 gkzw 的写作游戏,每当我说 gkzw,你开始写作,规则如下:
1. 字数不少于 200 字。
2. 文中必须出现 "小明"。
明白了吗?
"""
围绕这个模式,我们可以创建复制的规则。
反向 Prompt 模式
Negative prompt(负向提示)是一种在使用语言模型时,针对模型输出不希望的结果而设置的一种文本输入方式。通过使用负向提示,可以帮助模型避免输出不良、不准确或不恰当的文本。
具体来说,负向提示通常是以否定的形式呈现的,例如在文本生成任务中,使用“不要写...”、“不要提及...”、“不要使用...”等方式来限制模型生成不想要的文本。在情感分析任务中,使用“不是...”、“并不...”等方式来指示模型识别出一段文本的负面情感。在 QA(问答)任务中,使用“不是...”、“不包括...”等方式来指示模型回答问题时避免输出错误或不准确的答案。
Negative Prompt 在 Stable Diffusion 被广泛使用,相似的,在 ChatGPT 中,我们也会经常使用到。
诸如于:
我们能玩一个名为 KFC 的谜语创作游戏,当我说 "kfc",你写一个谜题,要求:
1. 不少于 200 字
2. 谜题不能出现肯德基、星期四、KFC
3. 正文可以夹杂小语种语言,如 """他说:Ciao"""
4. 谜底必须是 ###原来今天是肯德基疯狂星期四!!###
格式类似于:
....
再生成模式
根据 AI 提供的信息,再让 AI 生成内容。
例子 1,当我们无法确定我们的 prompt 是否准确,便可以通过 AI 来帮我们丰富 prompt 。
如我在:基于编程、绘画、写作的 AI 探索与总结的例子一样
phodal: 我想写一段话描述一张照片,帮我美化一下:一年轻女子穿着裙子,背对着镜头,在海边看着日落,太阳已经到地平线下面了,她的头发在风中飘动。
ChatGPT: 这张照片中的场景令人心醉,一位年轻女子穿着一条裙子,站在海边,背对着镜头,凝视着地平线下的夕阳。太阳已经沉入了海面,一片金黄色的光芒在海面上弥漫,照亮了整片海洋,仿佛这个时刻被定格在了时间的某个角落里。女子的头发随着微风轻轻飘动,轮廓被余晖映照得柔和而温暖。她的目光凝视着远方,仿佛在思考着生命的意义和无尽的未来。这张照片中蕴含着一种深刻的内涵,让人感受到时间和自然的力量,也让人思考着自己在这个宏大而美丽的世界中的角色和意义。
再去除掉不合适的词,进行润色,就可以再创作:
phodal:翻译成英语
然后再提炼直至扔至 Stable Diffusion 中:
women back view without face, flowing dress, edge of the sea, backview, back turned to the camera, upon the glow of the setting sun, sun below the horizon, golden light over the water, hair sways gently, Chinese style clothes, black hair,
而后,根据图片的结果,我们再反复修改。
控线模式
TODO:这里需要给出更精准的定义,如何让 ChatGPT 做到?
在没有推出 ControlNet,对于一个 Stable Diffusion 玩家,它需要反复地吟唱咒语,才能获取到满意的图案。
在有了 ControlNet 之后,我们可以创建一个 Openpose,或者是导入图片从图片生成 pose,相当于是给机器一个示例,而后生成的图片就会有令人满意的姿势。
在 GitHub Copilot,我们可以通过设置输入和输出,结合函数名三个要素,Copilot 就能生成大致准确的代码:
而在必要的情况下,添加一下注释就能更完整了:
fun listAllDirInDir(dir: String): List<File> {
// ignore hidden files
}
生成的代码会更贴近我们的需求。
概念模式集Language is Language
对于 ChatGPT 来说,语言就是语言,他不区分自然语言和编程语言,甚至有可能编程语言对它更友好。所以我们可以直接通过编程语言与之交流:
我有下列遗留代码,我想在接口的函数名、参数名不变的情况下(可以新参数,旧的参数不能变)加入新功能:
module.exports = async function loadYAMLFile(filepath, workdir = path.dirname(filepath)) {
const content = await fs.readFile(filepath, 'utf8'); // 读取文件内容
// TODO: 将 content 看做ejs模板的字符串,进行渲染,如果传入了渲染ejs时的context值不为undefined,就进行渲染,否则不进行渲染。
// TODO:将渲染后的结果传给yaml.load
const data = yaml.load(content); // 解析YAML为JSON对象
// 遍历JSON对象,查找$ref属性
const processRef = async (obj) => {
if (typeof obj === 'object' && obj !== ) { // 如果是对象
if ('$ref' in obj) { // 如果包含$ref属性
const refPath = path.join(workdir, obj.$ref.split('#')[0]); // 获取引用文件路径
const pointer = obj.$ref.split('#')[1]; // 获取JSON指针
// TODO: 递归调用的时候,取出context中以obj.$ref的属性值作为属性名的值作为新的context向下传递
const refData = await loadYamlFile(refPath, path.dirname(refPath)); // 递归读取引用文件
const value = getValueByPointer(refData, pointer); // 修复了 # 号问题
return value;
} else { // 如果不包含$ref属性,递归处理子属性
for (const prop in obj) {
obj[prop] = await processRef(obj[prop]);
}
}
}
return obj;
};
上述描述会比纯自然语言更容易描述我们的需求,适合于更精细的指导。同时,不一定是编程语言,结构化的声明式 DSL 它也可以很好的解析,如:
把我给定的输入输出,按照下面的格式写成一个测试用例的描述:
{
desc: 'Test with $p_ref returning array',
input: {
filepath: './test18.yml',
workdir: './test/v2',
},
expected: {
"name": "Alice",
"age": 20
}
}
结果:
{
desc: 'Test with $p_ref returning array',
input: {
filepath: './test19.yml',
workdir: './test/v2',
},
expected: [
{
"name": "Bob"
},
{
"name": "Alice"
},
{
"name": "Bob"
},
{
"name": "Alice"
}
]
}
该测试用例输入了一个 YAML 文件 test19.yml,该文件中包含了一个 $flaten 属性,其值为两个 $p_ref 对象组成的数组,引用了一个返回数组的 YAML 文件 test19_ref.yml。
执行该测试用例后,期望得到的输出是一个数组,其中包含了两个 $p_ref 引用结果的 flatten 后的结果。
需要注意的是,由于该测试用例涉及到文件读取和模板渲染等操作,需要在测试前确保相关文件和依赖库已经正确安装并配置好。
通过使用DSL,还可以缩短输入和输出的token数,从而放大 ChatGPT 的能力。
概念抽象
对于 ChatGPT 尚不存在的概念,可以通过 Google 相关的内容之后,由 ChatGPT 进行总结。
根据下面的文本重新解释一下 ControlNet:
- 官网介绍:ControlNet is a neural network structure to control diffusion models by adding extra conditions.
- 模式:根据给的底图,生成一个类似建模效果(法线贴图)的中间图,再生成图片
- 场景:用来实现骨骼绑定、精准控线、线稿上色、依据深度图结构透视精准重绘等。
结果:
根据给出的文本,ControlNet是一种神经网络结构,旨在通过添加额外条件来控制扩散模型。在特定场景下,ControlNet被用于生成类似建模效果(法线贴图)的中间图和相关的图像。这种技术可以被应用于多个领域,如骨骼绑定、精准控线、线稿上色、深度图结构透视精准重绘等。
具体来说,ControlNet技术可以被用来控制模型的扩散过程,从而提取特定的信息并生成新的图像。在骨骼绑定、线稿上色等场景中,ControlNet技术可以被用来增强图像,使其更加真实和生动。在依据深度图结构透视精准重绘的场景中,ControlNet技术可以被用来根据图像的深度信息,生成精确的重绘图像,从而提高图像的真实感和逼真度。
缩短:能用一句话解释一下 ControlNet 吗
结果:
ControlNet 是一种神经网络结构,通过添加额外的条件来控制扩散模型,从而实现图像增强、重构和生成等功能。
概念对齐