支持大模型流式輸出的JSON提取工具 原創(chuàng)
在我們日常處理大模型的輸出時,經(jīng)常希望輸出的結果為結構化的(例如輸出json格式),這樣有助于我們進行結果的后處理。但是在模型輸出超過限制和流式輸出時就會遇到問題了,由于答案沒完全輸出,轉json就存在問題。
大型語言模型(LLMs)產(chǎn)生結構化輸出的原因包括:
- 提高可讀性:結構化輸出使得信息以一種邏輯清晰、易于理解的方式呈現(xiàn),提高了信息的可讀性和用戶體驗。
- 便于處理:結構化數(shù)據(jù)可以更容易地被機器讀取和處理,有助于后續(xù)的數(shù)據(jù)分析、存儲和檢索。
- 支持自動化:結構化輸出可以方便地與自動化工具和流程集成,例如自動填充表格、數(shù)據(jù)庫錄入或觸發(fā)特定的業(yè)務流程。
- 增強一致性:通過規(guī)定輸出的格式和結構,可以確保不同時間或不同情境下產(chǎn)生的輸出具有一致性。
- 促進數(shù)據(jù)交換:結構化數(shù)據(jù)遵循特定的標準和格式,便于在不同的系統(tǒng)和應用程序之間進行數(shù)據(jù)交換。
- 改善信息檢索:結構化輸出使得搜索引擎和檢索系統(tǒng)能夠更準確地索引和檢索信息。
- 適應多種用途:結構化數(shù)據(jù)可以根據(jù)需要被轉換成不同的格式,以適應報告、分析、可視化等多種用途。
- 減少歧義:明確的結構有助于減少對輸出內容的誤解或歧義。
- 促進多模態(tài)交互:結構化輸出可以支持與視覺、聲音等多種模態(tài)的交互,提高多模態(tài)應用的體驗。
- 提高可維護性:當需要更新或維護輸出內容時,結構化數(shù)據(jù)更容易管理和修改。
工具功能介紹:
- 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??
?著作權歸作者所有,如需轉載,請注明出處,否則將追究法律責任
贊
收藏
回復
分享
微博
QQ
微信
舉報

回復
相關推薦