format_output():即使使用prompt工程要求大模型输出格式json格式的数据,但大模型返回的输出仍有可能带有额外的信息(在json数据之外有额外的字符串),或是非标准格式的json格式,将非预期格式输出尝试输送给前端或是存入数据库可能导致预料之外的程序行为。format_output()将模型的输出从字符串或其他格式转换为JSON对象。它尝试识别和格式化JSON格式的数据,确保输出是标准的JSON结构。
因为大模型生成算法本身的原因,调整prompt几乎不可能让它不会有额外的输出,但是在大量的测试下,发现它在出现额外输出时,一般仍会按要求在其之后有json数据,所以在进一步使用该数据(传给前端或存到数据库)之前,用另一个调整函数对输出进行调整,使用正则表达式筛选出其中的json数据,并且删除其他内容。但是在进一步测试中发现,还是有小概率出现额外的输出,格式调整函数并没有一直生效。在反复调试后发现,其输出的json数据有时并不是标准形式(以'```json')开头,但是仍然会有中括号,所以如果没有找到json数据,再在一个elseif里面用正则表达式匹配位于‘{}’中的数据,删除其他数据,再重新加入'```json'标识,变为json数据。同时,json字符串中间应该是‘,’但是有时返回的数据会使用‘、’,再进行一次匹配,将'、'替换成','