回复
支持大模型流式输出的JSON提取工具 原创
在我们日常处理大模型的输出时,经常希望输出的结果为结构化的(例如输出json格式),这样有助于我们进行结果的后处理。但是在模型输出超过限制和流式输出时就会遇到问题了,由于答案没完全输出,转json就存在问题。
大型语言模型(LLMs)产生结构化输出的原因包括:
- 提高可读性:结构化输出使得信息以一种逻辑清晰、易于理解的方式呈现,提高了信息的可读性和用户体验。
- 便于处理:结构化数据可以更容易地被机器读取和处理,有助于后续的数据分析、存储和检索。
- 支持自动化:结构化输出可以方便地与自动化工具和流程集成,例如自动填充表格、数据库录入或触发特定的业务流程。
- 增强一致性:通过规定输出的格式和结构,可以确保不同时间或不同情境下产生的输出具有一致性。
- 促进数据交换:结构化数据遵循特定的标准和格式,便于在不同的系统和应用程序之间进行数据交换。
- 改善信息检索:结构化输出使得搜索引擎和检索系统能够更准确地索引和检索信息。
- 适应多种用途:结构化数据可以根据需要被转换成不同的格式,以适应报告、分析、可视化等多种用途。
- 减少歧义:明确的结构有助于减少对输出内容的误解或歧义。
- 促进多模态交互:结构化输出可以支持与视觉、声音等多种模态的交互,提高多模态应用的体验。
- 提高可维护性:当需要更新或维护输出内容时,结构化数据更容易管理和修改。
工具功能介绍:
- json补全
- 配合流式输出
- 解析markdown格式
- 字段校验
效果展示
部分输出的
text = '''{"name":"张三", "age":'''
print(parse_json_markdown(text))
# {'name': '张三'}
markdown格式
text = '''```json\n{"name":"张三", "age":27'''
print(parse_json_markdown(text))
# {'name': '张三', 'age': 27}
多维嵌套
text = '''```json\n{"name":"张三", "age": 27, "爱好": ["羽毛球'''
print(parse_json_markdown(text))
# {'name': '张三', 'age': 27, '爱好': ['羽毛球']}
核心代码介绍
核心处理代码如下:
new_chars = []
stack = []
is_inside_string = False
escaped = False
# Process each character in the string one at a time.
for char in s:
if is_inside_string:
if char == '"' and not escaped:
is_inside_string = False
elif char == "\n" and not escaped:
char = "\\n" # Replace the newline character with the escape sequence.
elif char == "\\":
escaped = not escaped
else:
escaped = False
else:
if char == '"':
is_inside_string = True
escaped = False
elif char == "{":
stack.append("}")
elif char == "[":
stack.append("]")
elif char == "}" or char == "]":
if stack and stack[-1] == char:
stack.pop()
else:
# Mismatched closing character; the input is malformed.
return None
本文转载自公众号哎呀AIYA
原文链接:https://mp.weixin.qq.com/s/-I3wXkRGgyEuRYUQa84AEQ
©著作权归作者所有,如需转载,请注明出处,否则将追究法律责任
赞
收藏
回复
相关推荐