我想要一个JSON语法的变体,禁止输出中的换行符。有时候当你激活JSON语法时,模型会输出一串无尽的换行符。如果有一个版本的JSON语法禁止换行(以及字符串外的空白字符),就可以防止这种情况发生。
vdgimpew1#
你好,Xe!我也遇到了这个问题。可能的重复项:#2351 和 #2577 。我认为在 #2577 中的建议可能是最干净的修复方法:[强制]在顶级JSON对象的关闭}之后立即终止消息
tyg4sfes2#
看起来这可能很简单,只需要从以下字符串的末尾删除 ws :
ws
object ::= "{" ws ( string ":" ws value ("," ws string ":" ws value)* )? "}" ws
在 jsonGrammar 中。需要进行一些测试。有趣的是,上游的 llama.cpp 有一个 json_arr.gbnf,它限制了根数组末尾的空白字符,但对象没有相同的限制。
9rnv2umw3#
我更倾向于完全从语法中移除 ws 。为什么要在漂亮的打印令牌上浪费循环?如果我们关心的话,可以使用 encoding/json 之后。对于这个问题的另一种可能更好的方法是暴露一个 "gbnf grammar" 参数,这样人们可以根据自己的需求随意操作。
q43xntqr4#
我以一种略微曲折的方式解决了这个问题。我创建了一个名为 Hallucinate 的函数,该函数返回一个具有自定义 "验证" 逻辑的新值 T。我认为 Xe/x@590a15a 将满足我的需求并修复它。我将提交 PR 以从语法中完全删除空格。
Hallucinate
mbjcgjjk5#
已为BYO GBNF支持提交了#2895文件。
8zzbczxx6#
@Xe,你是否仍然计划发送一个PR来修复JSON语法?在处理其他事情时,我注意到JSON语法可以生成无效的json:它在其字符串定义中没有禁止未转义的\t、或\r。类似这样的东西可能会有所帮助:
- [^"\\] | + [^"\\\n\t\r] |
也许你可以将这个添加到你的JSON清理PR中?(如果没有,我可以拼凑一个。)
6条答案
按热度按时间vdgimpew1#
你好,Xe!我也遇到了这个问题。可能的重复项:#2351 和 #2577 。我认为在 #2577 中的建议可能是最干净的修复方法:
[强制]在顶级JSON对象的关闭}之后立即终止消息
tyg4sfes2#
看起来这可能很简单,只需要从以下字符串的末尾删除
ws
:在 jsonGrammar 中。需要进行一些测试。有趣的是,上游的 llama.cpp 有一个 json_arr.gbnf,它限制了根数组末尾的空白字符,但对象没有相同的限制。
9rnv2umw3#
我更倾向于完全从语法中移除
ws
。为什么要在漂亮的打印令牌上浪费循环?如果我们关心的话,可以使用 encoding/json 之后。对于这个问题的另一种可能更好的方法是暴露一个 "gbnf grammar" 参数,这样人们可以根据自己的需求随意操作。
q43xntqr4#
我以一种略微曲折的方式解决了这个问题。我创建了一个名为
Hallucinate
的函数,该函数返回一个具有自定义 "验证" 逻辑的新值 T。我认为 Xe/x@590a15a 将满足我的需求并修复它。我将提交 PR 以从语法中完全删除空格。
mbjcgjjk5#
已为BYO GBNF支持提交了#2895文件。
8zzbczxx6#
@Xe,你是否仍然计划发送一个PR来修复JSON语法?
在处理其他事情时,我注意到JSON语法可以生成无效的json:它在其字符串定义中没有禁止未转义的\t、
或\r。类似这样的东西可能会有所帮助:
也许你可以将这个添加到你的JSON清理PR中?(如果没有,我可以拼凑一个。)