链载Ai

标题: 支持大模型流式输出的JSON提取工具 [打印本页]

作者: 链载Ai    时间: 5 小时前
标题: 支持大模型流式输出的JSON提取工具

在我们日常处理大模型的输出时,经常希望输出的结果为结构化的(例如输出json格式),这样有助于我们进行结果的后处理。但是在模型输出超过限制和流式输出时就会遇到问题了,由于答案没完全输出,转json就存在问题。

大型语言模型(LLMs)产生结构化输出的原因包括:

工具功能介绍:

ingFang SC", "Hiragino Sans GB", "Microsoft YaHei UI", "Microsoft YaHei", Arial, sans-serif;border-left: 4px solid rgb(248, 57, 41);">效果展示

ingFang SC", "Hiragino Sans GB", "Microsoft YaHei UI", "Microsoft YaHei", Arial, sans-serif;letter-spacing: 0.544px;background-color: rgb(255, 255, 255);text-align: left;">部分输出的

text = '''{"name":"张三", "age":'''print(parse_json_markdown(text))
# {'name': '张三'}

ingFang SC", "Hiragino Sans GB", "Microsoft YaHei UI", "Microsoft YaHei", Arial, sans-serif;letter-spacing: 0.544px;text-wrap: wrap;background-color: rgb(255, 255, 255);text-align: left;margin-bottom: 0px;">markdown格式

text = '''```json\n{"name":"张三", "age":27'''print(parse_json_markdown(text))
# {'name':'张三','age':27}

ingFang SC", "Hiragino Sans GB", "Microsoft YaHei UI", "Microsoft YaHei", Arial, sans-serif;letter-spacing: 0.544px;text-wrap: wrap;background-color: rgb(255, 255, 255);text-align: left;margin-bottom: 0px;">

ingFang SC", "Hiragino Sans GB", "Microsoft YaHei UI", "Microsoft YaHei", Arial, sans-serif;letter-spacing: 0.544px;text-wrap: wrap;background-color: rgb(255, 255, 255);text-align: left;margin-bottom: 0px;">多维嵌套

text = '''```json\n{"name":"张三", "age": 27, "爱好": ["羽毛球'''print(parse_json_markdown(text))
# {'name': '张三', 'age': 27, '爱好': ['羽毛球']}

ingFang SC", "Hiragino Sans GB", "Microsoft YaHei UI", "Microsoft YaHei", Arial, sans-serif;letter-spacing: 0.544px;text-wrap: wrap;background-color: rgb(255, 255, 255);text-align: left;margin-bottom: 0px;">

ingFang SC", "Hiragino Sans GB", "Microsoft YaHei UI", "Microsoft YaHei", Arial, sans-serif;border-left: 4px solid rgb(248, 57, 41);">核心代码介绍

核心处理代码如下:

new_chars = []stack = []is_inside_string = Falseescaped = 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 = Falseelif char == "\n" and not escaped:char = "\\n"# Replace the newline character with the escape sequence.elif char == "\\":escaped = not escapedelse:escaped = Falseelse:if char == '"':is_inside_string = Trueescaped = Falseelif 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






欢迎光临 链载Ai (https://www.lianzai.com/) Powered by Discuz! X3.5