ollama JSON不带换行符语法

bttbmeg0  于 6个月前  发布在  其他
关注(0)|答案(6)|浏览(59)

我想要一个JSON语法的变体,禁止输出中的换行符。有时候当你激活JSON语法时,模型会输出一串无尽的换行符。如果有一个版本的JSON语法禁止换行(以及字符串外的空白字符),就可以防止这种情况发生。

vdgimpew

vdgimpew1#

你好,Xe!我也遇到了这个问题。可能的重复项:#2351#2577 。我认为在 #2577 中的建议可能是最干净的修复方法:
[强制]在顶级JSON对象的关闭}之后立即终止消息

tyg4sfes

tyg4sfes2#

看起来这可能很简单,只需要从以下字符串的末尾删除 ws :

object ::=
  "{" ws (
            string ":" ws value
    ("," ws string ":" ws value)*
  )? "}" ws

在 jsonGrammar 中。需要进行一些测试。有趣的是,上游的 llama.cpp 有一个 json_arr.gbnf,它限制了根数组末尾的空白字符,但对象没有相同的限制。

9rnv2umw

9rnv2umw3#

我更倾向于完全从语法中移除 ws 。为什么要在漂亮的打印令牌上浪费循环?如果我们关心的话,可以使用 encoding/json 之后。
对于这个问题的另一种可能更好的方法是暴露一个 "gbnf grammar" 参数,这样人们可以根据自己的需求随意操作。

q43xntqr

q43xntqr4#

我以一种略微曲折的方式解决了这个问题。我创建了一个名为 Hallucinate 的函数,该函数返回一个具有自定义 "验证" 逻辑的新值 T。我认为 Xe/x@590a15a 将满足我的需求并修复它。
我将提交 PR 以从语法中完全删除空格。

mbjcgjjk

mbjcgjjk5#

已为BYO GBNF支持提交了#2895文件。

8zzbczxx

8zzbczxx6#

@Xe,你是否仍然计划发送一个PR来修复JSON语法?
在处理其他事情时,我注意到JSON语法可以生成无效的json:它在其字符串定义中没有禁止未转义的\t、
或\r。类似这样的东西可能会有所帮助:

-    [^"\\] |
+    [^"\\\n\t\r] |

也许你可以将这个添加到你的JSON清理PR中?(如果没有,我可以拼凑一个。)

相关问题