บางครั้งเราต้องการ LLM (แบบจำลองภาษาขนาดใหญ่) เพื่อสร้าง ข้อมูลโครงสร้าง แทนภาษาธรรมชาติ วิธีที่ง่ายที่สุดคือใช้ JSON
แต่ก่อนที่จะได้รับโทเค็นสุดท้ายของการตอบสนอง JSON จะเสียซึ่งหมายความว่าคุณไม่สามารถใช้ JSON.parse
เพื่อถอดรหัสได้ แต่เรายังต้องการสตรีมข้อมูลไปยังผู้ใช้
ที่นี่ partial-json
ซึ่งเป็นห้องสมุดที่มีน้ำหนักเบาและปรับแต่งได้สำหรับการแยกแยะสตริง JSON บางส่วน นี่คือตัวอย่าง
(โปรดทราบว่ามีการใช้ Python ด้วย)
npm i partial-json # or pnpm / bun / yarn
partial-json
ถูกนำไปใช้อย่างหมดจดใน JavaScript และมีทั้ง commonjs
และ esm
Builds
คุณสามารถนำเข้าฟังก์ชั่น parse
และวัตถุ Allow
จากไลบรารีเช่นนี้:
import { parse , Allow } from "partial-json" ;
วัตถุ Allow
เป็นเพียง enum สำหรับตัวเลือก มันกำหนดประเภทที่สามารถเป็นบางส่วน ประเภทที่ไม่รวมอยู่ใน allow
จะปรากฏขึ้นหลังจากเสร็จสิ้นการเสร็จสิ้น
ฟังก์ชั่น parse
ใช้งานได้เหมือนกับ JSON.parse
ในตัวเมื่อแยกวิเคราะห์สตริง JSON ที่สมบูรณ์:
let result = parse ( '{"key":"value"}' ) ;
console . log ( result ) ; // Outputs: { key: 'value' }
คุณสามารถแยกวิเคราะห์สตริง JSON บางส่วนโดยผ่านพารามิเตอร์เพิ่มเติมไปยังฟังก์ชัน parse
พารามิเตอร์นี้เป็น bitwise หรือ ของค่าคงที่จากวัตถุ Allow
:
(โปรดทราบว่าคุณสามารถนำเข้าค่าคงที่ที่คุณต้องการโดยตรงจาก partial-json
)
import { parse , STR , OBJ } from "partial-json" ;
result = parse ( '{"key": "v' , STR | OBJ ) ;
console . log ( result ) ; // Outputs: { key: 'v' }
ในตัวอย่างนี้ Allow.STR
บอกตัวแยกวิเคราะห์ว่าไม่เป็นไรถ้าสตริงไม่สมบูรณ์และ Allow.OBJ
บอกตัวแยกวิเคราะห์เป็นวัตถุ ตัวแยกวิเคราะห์จากนั้นพยายามส่งคืนข้อมูลให้มากที่สุดเท่าที่จะทำได้
หากคุณไม่อนุญาตให้ใช้สตริงบางส่วนมันจะไม่เพิ่ม "key"
ลงในวัตถุเพราะ "v
ไม่ปิด:
result = parse ( '{"key": "v' , OBJ ) ;
console . log ( result ) ; // Outputs: {}
result = parse ( '{"key": "value"' , OBJ ) ;
console . log ( result ) ; // Outputs: { key: 'value' }
ความคล้ายคลึงกันคุณสามารถแยกวิเคราะห์อาร์เรย์บางส่วนหรือแม้แต่ค่าพิเศษบางส่วนหากคุณอนุญาต:
(โปรดทราบว่า allow
ให้ค่าเริ่มต้น Allow.ALL
)
result = parse ( '[ {"key1": "value1", "key2": [ "value2' ) ;
console . log ( result ) ; // Outputs: [ { key1: 'value1', key2: [ 'value2' ] } ]
result = parse ( "-Inf" ) ;
console . log ( result ) ; // Outputs: -Infinity
หากสตริง JSON ผิดรูปฟังก์ชั่น parse
จะทำให้เกิดข้อผิดพลาด:
parse ( "wrong" ) ; // MalformedJSON [Error]: SyntaxError: Unexpected token 'w', "wrong" is not valid JSON at position 0
jsonString
<string>
: สตริง JSON เพื่อแยกวิเคราะห์allowPartial
<number>
: ระบุประเภทของความเป็นส่วนหนึ่งที่อนุญาตในระหว่างการแยกวิเคราะห์ JSON (ค่าเริ่มต้น: Allow.ALL
ทั้งหมด)ส่งคืนค่า JavaScript ที่แยกวิเคราะห์
วัตถุที่ระบุว่าบางส่วนได้รับอนุญาตบางส่วนในระหว่างการแยกวิเคราะห์ JSON มันมีคุณสมบัติดังต่อไปนี้:
STR
: อนุญาตให้ใช้สตริงบางส่วนNUM
: อนุญาตหมายเลขบางส่วนARR
: อนุญาตอาร์เรย์บางส่วนOBJ
: อนุญาตให้วัตถุบางส่วนNULL
: อนุญาตให้บางส่วนเป็นโมฆะBOOL
: อนุญาตให้บูลีนบางส่วนNAN
: อนุญาตน่านบางส่วนINFINITY
: อนุญาตให้อินฟินิตี้บางส่วน_INFINITY
: อนุญาตบางส่วน -infinityINF
: อนุญาตทั้งอินฟินิตี้บางส่วนและ -infinitySPECIAL
: อนุญาตให้มีค่าพิเศษทั้งหมดATOM
: อนุญาตค่าอะตอมทั้งหมดCOLLECTION
: อนุญาตให้ค่าการรวบรวมทั้งหมดALL
: อนุญาตค่าทั้งหมด ในการเรียกใช้การทดสอบสำหรับไลบรารีนี้คุณควรโคลนที่เก็บและติดตั้งการอ้างอิง:
git clone https://github.com/promplate/partial-json-parser-js.git
cd partial-json-parser-js
npm i
จากนั้นคุณสามารถทำการทดสอบโดยใช้ Vitest:
npm run test
โปรดทราบว่าในขณะที่เรามุ่งมั่นที่จะครอบคลุมกรณีขอบมากที่สุดเท่าที่จะเป็นไปได้อาจเป็นไปได้เสมอว่าบางกรณีอาจไม่ครอบคลุม
โครงการนี้ได้รับใบอนุญาตภายใต้ใบอนุญาต MIT