xiaoxx970 / chatgpt-in-terminal

Use ChatGPT in terminal
MIT License
201 stars 27 forks source link

标题生成prompt更新 #24

Closed Ace-Radom closed 1 year ago

Ace-Radom commented 1 year ago

刚刚发现目前的标题生成prompt无法保证输出的字符不是文件命名保留符

image

在这种情况下 虽然会在前台抛出error 但是仍然会显示保存成功 不知道是不是应该在prompt里加上类似于不允许使用无法用来命名的字符 (正反斜杠等) 或者在 /save 中加特殊处理

xiaoxx970 commented 1 year ago

哎昨天我还发现它生成标题的时候还会带换行,现在又带斜杠,看来是很难驯服了。等我试试有没有更优的prompt,不然就只能后期处理了

xiaoxx970 commented 1 year ago
image

优化了一点点,你可以测试看看

Ace-Radom commented 1 year ago

感觉是好一点了 测了几次都没出错

Ace-Radom commented 1 year ago

又发现一个问题 如果是英语问答的话他老是回复这种title

image

看来驯服是确实很难hhh 感觉很难找到tokens消耗和稳定性的平衡

Ace-Radom commented 1 year ago

我又优化了一下 现在应该更好一些 至少不换行了 当前的引导prompt:

Generate title shorter than 10 words for the following content in content\'s language. The tilte contains ONLY words. DO NOT include line-break.

然后他在被有意引导的情况下仍然会出现字符 平时是不怎么出现了但是一样会有【比如我问他"*"的作用是什么 他无论如何都会在title里出现"*"】 造成目前这样的问题可能是temperature太低了 但调高了他又天马行空 总之摆烂了 如果真的要继续引导规范的话title生成的tokens消耗就太大了 何况一直限制下去也会造成标题不准确 不太值得我觉得 我一会儿在save的地方写一个正则去除所有会出问题的字符吧

xiaoxx970 commented 1 year ago

可以的,那prompt就可以简化成一句话了(或者还是留着不要换行)

prompt = f'Generate a minimal title for the following content in content\'s language. \n\nContent: """\n{content}\n"""'

最好不要有shorter than 10 words这样的,一个是GPT对单词数不敏感,另一个就是我见过它在标题后面直接打括号写11words这样(11 words)

Ace-Radom commented 1 year ago

问题是加上了minimal title之后如果用英语交流那么他老是写一个 minimal title: *** 之类的标题出来 你可以看一下我上一张截图 这个还是要再考虑一下 在我这用中英德三语测试标题生成然后目前还没见过类似于 11 words 之类的标识 但类似于 minimal title 之类的起始语倒是见过不少( 然后我加上正则表达式了 在 /save 里调用生成的标题的时候会自动过一遍

gen_filename = re.sub(r'[\/\\\*\?\"\<\>\|\:]', '', gen_filename)

也就是说会直接把所有可能造成冲突的字符删掉 最后的效果类似于这样:

image

嘛这样的话出来的文件名确实有点怪 但也是真没办法gpt调教不好为了不异常退出只能这样 我觉得要在README里说明一下

Ace-Radom commented 1 year ago

或者突发奇想 如果在生成标题的时候就和gpt说清楚是用来做文件名的话会怎么样?我去试试 另外不要换行还是留着吧 我觉得有必要

xiaoxx970 commented 1 year ago

或者突发奇想 如果在生成标题的时候就和gpt说清楚是用来做文件名的话会怎么样?我去试试

前面有版本就是告诉它生成文件名的,那个时候它会把生成的结果用下划线连起来,比如 hello_world 这样,大部分时间是好的,但是还是会出现特殊字符,所以后来我才又改了

问题是加上了minimal title之后如果用英语交流那么他老是写一个 minimal title: *** 之类的标题出来 你可以看一下我上一张截图

那就可以用10 words这个再试试

Ace-Radom commented 1 year ago

目前就是用的这个prompt

Generate title shorter than 10 words for the following content in content\'s language. The tilte contains ONLY words. DO NOT include line-break.

大多数情况都是好的 只是如果他在提炼你的问题的时候必须用到那些不能用的字符的时候他仍然会用【就像我上面引导的那样】 这个可能没办法了 因为既要prompt精简又要出来的效果足够好确实很难【隔壁CMDGPT那个用自然语言生成命令的prompt出来效果确实好但也奇长无比】 我觉得暂时先这样吧 事实上我测试下来他出问题基本都是我在刻意引导的 大多数时候就算冒字符也就冒一个冒号啊引号之类的不痛不痒的 如果真的出现了别的字符那就用正则踢掉 影响表意了那还是让用户自己改吧【毕竟这个要深下去没底了我觉得】