Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Bug: 存在吞掉prompt的行为 #270

Open
whitebloak opened this issue Feb 7, 2025 · 12 comments
Open

Bug: 存在吞掉prompt的行为 #270

whitebloak opened this issue Feb 7, 2025 · 12 comments
Labels
bug Something isn't working

Comments

@whitebloak
Copy link

Describe the bug

默认设置,使用令牌登录,输入长prompt将会被吞一部分。
与之前在此提交的#247相同。
https://github.com/koishijs/novelai-bot/issues/247

Steps to reproduce

在QQ输入一串长prompt,让插件绘画,发现返回的prompt中,部分被吞掉。

Expected behavior

希望能够修复这个bug,以正常使用

Screenshots

Image
Image

Relevant log output

koishi日志中,没有出现相关错误报告。

Launcher

Koishi Desktop

Backend

NovelAI (Token)

Versions

System:
OS: Windows 10 10.0.19045
CPU: (8) x64 Intel(R) Core(TM) i3-10105 CPU @ 3.70GHz

Binaries:
Node: 20.12.2
Yarn: 4.1.1

Koishi:
Core: 4.18.6
Console: 5.28.4
Koishi Desktop: 1.1.3

Additional context

No response

@whitebloak whitebloak added the bug Something isn't working label Feb 7, 2025
@hhs2275
Copy link

hhs2275 commented Feb 7, 2025

我也遇到同样问题,经我的排查这或许与自动翻译功能有关,关闭自动翻译后就不吞了。

@whitebloak
Copy link
Author

我也遇到同样问题,经我的排查这或许与自动翻译功能有关,关闭自动翻译后就不吞了。

这很迷惑的是,关闭自动翻译和翻译插件,问题依旧没有解决。

@whitebloak
Copy link
Author

已关闭翻译插件和自动翻译。

Image

加上下划线之后,发现不吞prompt了,而圆括号转换为花括号,这是什么奇怪的问题?

@hhs2275
Copy link

hhs2275 commented Feb 8, 2025

代码就是这样写的,如果是novelai则将中文和英文圆括号都替换成英文花括号

@whitebloak
Copy link
Author

代码就是这样写的,如果是novelai则将中文和英文圆括号都替换成英文花括号

这意味着我输入一个角色:nahida (genshin impact),然后根据代码转化为 nahida {genshin impact},这相当于直接给游戏名加权。
在我的实践过程中,我发现了个问题:如果有空格,则可能会吞掉空格后的prompt。
例如:用户输入 nahida (genshin impact) 返回的prompt中,只剩下nahida,而 (genshin impact) 被吞掉。
但将空格用下划线替代,不会被吞掉了,比如我之前的截图中,我输入了用下划线替代的prompt后,不会被吞prompt,反而在返回的prompt中,圆括号被转化为花括号,并下划线被替换为空格。这真让人迷惑。

@whitebloak
Copy link
Author

代码就是这样写的,如果是novelai则将中文和英文圆括号都替换成英文花括号

我做了以下实验:
实验一:
输入内容:"1girl,solo, leg lift,whtie pantyhose"
实际解析结果:"1girl,solo, leg"("lift,whtie pantyhose"部分丢失)
实验二:
修改为下划线后输入:"1girl,solo, leg_lift,whtie pantyhose"
实际解析结果:"1girl,solo, leg lift,whtie"(末尾"pantyhose"丢失)

发现问题:
1、截断位置发生在不同分隔符后的首个空格处
2、空格出现异常截断。

@whitebloak
Copy link
Author

代码就是这样写的,如果是novelai则将中文和英文圆括号都替换成英文花括号

实验三:
输入内容:"1girl,solo ,leg lift,whtie pantyhose"(注意solo后的空格)
实际解析结果:"1girl,solo,"(后续",leg lift,whtie pantyhose"完全丢失)

截断点规律如下:
1、普通空格分隔符后的首个空格处(实验一)
2、下划线转义后的后续空格处(实验二)
2、逗号+空格组合时直接截断(实验三)

@shigma
Copy link
Member

shigma commented Feb 9, 2025

感觉是可以修的……

但话说回来,为啥要在逗号前面放空格?英语和中文都不是这么写的吧……

@whitebloak
Copy link
Author

感觉是可以修的……

但话说回来,为啥要在逗号前面放空格?英语和中文都不是这么写的吧……

模拟有些用户可能在逗号前放空格的情况。

而我这一次又进行了一个实验:
实验四:
输入内容:"chen bin,1girl,solo,leg lift,whtie pantyhose"(外层添加双引号)
实际解析结果:完整保留所有内容
关键对比:与实验三"1girl,solo ,leg..."相比,仅通过添加外层引号即避免截断

这使用外层双引号包裹内容,不会吞掉prompt。

@whitebloak
Copy link
Author

whitebloak commented Feb 9, 2025

感觉是可以修的……

但话说回来,为啥要在逗号前面放空格?英语和中文都不是这么写的吧……

还有圆括号自动转换为花括号,这让人迷惑的功能,Novelai支持画师串,比如说画师ask (askzy),被转换为ask {askzy},这相当于给画师的后缀askzy加权。我希望将该功能移除出去。当然,用户可以自行添加转义符号”\“来解决,这是一个很麻烦的了,不可能在多个画师的情况下,给有圆括号的画师添加转义符号。

@shigma
Copy link
Member

shigma commented Feb 9, 2025

还有圆括号自动转换为花括号,这让人迷惑的功能

这个是 sd 第一版的语法,现在确实可以去掉了。新人不理解为啥这里有很多陈旧的设计其实挺正常的,太久没更新了(

@MaikoTan
Copy link
Member

I think we can add a new option, enabling it will convert the current user input to sd syntax / nai syntax, etc., and set it to false by default, which should satisfy different users.

我认为可以添加一个新的选项,启用它会将当前用户输入转换为 sd syntax / nai syntax 等,并将它默认置为 false,应该能满足不同用户的需求。

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
bug Something isn't working
Projects
None yet
Development

No branches or pull requests

4 participants