في بعض الأحيان نحتاج إلى LLM (نماذج لغة كبيرة) لإنتاج معلومات هيكلية بدلاً من اللغة الطبيعية. أسهل طريقة هي استخدام JSON.
ولكن قبل تلقي الرمز المميز الأخير للاستجابة ، يتم كسر JSON ، مما يعني أنه لا يمكنك استخدام JSON.parse لفك تشفيره. لكننا ما زلنا نريد دفق البيانات إلى المستخدم.
هنا يأتي partial-json-parser ، مكتبة خفيفة الوزن وقابلة للتخصيص لحلية سلاسل JSON جزئية. هنا عرض تجريبي.
(لاحظ أن هناك تطبيق JavaScript أيضًا)
pip install partial-json-parser # or poetry / pdm / uv يتم تنفيذ partial-json-parser بحت في بيثون ، مع تلميحات من النوع الجيد. إنه صفر يعتمد ويعمل مع Python 3.6+.
يمكنك تثبيت تشغيل ملعبه التجريبي عن طريق تثبيت rich أيضًا أو:
pip install partial-json-parser[playground] ثم قم بتشغيل json-playground في المحطة الخاصة بك ، ويمكنك تجربة المحلل بشكل تفاعلي.
from partial_json_parser import loads
> >> loads ( '{"key": "v' ) # {'key': 'v'} بدلاً من ذلك ، يمكنك استخدام ensure_json للحصول على سلسلة JSON المكتملة:
from partial_json_parser import ensure_json
> >> ensure_json ( '{"key": "v' ) # '{"key": "v"}' يمكنك استيراد وظيفة loads والكائن Allow من المكتبة مثل هذا:
from partial_json_parser import loads , Allow الكائن Allow هو مجرد تعداد للخيارات. يحدد الأنواع التي يمكن أن تكون جزئية. تظهر الأنواع غير المدرجة في allow فقط بعد إكماله.
تعمل وظيفة loads تمامًا مثل json.loads المدمجة عند تحليل سلسلة JSON كاملة:
result = loads ( '{"key":"value"}' )
print ( result ) # Outputs: {'key': 'value'} يمكنك تحليل سلسلة JSON جزئية عن طريق تمرير معلمة إضافية إلى وظيفة loads . هذه المعلمة هي قليلا أو الثوابت من العلم Allow :
(لاحظ أنه يمكنك استيراد الثوابت التي تحتاجها مباشرة من partial-json-parser )
from partial_json_parser import loads , Allow , STR , OBJ
result = loads ( '{"key": "v' , STR | OBJ )
print ( result ) # Outputs: {'key': 'v'} في هذا المثال ، Allow.STR يخبر المحلل أنه لا بأس إذا كانت السلسلة غير مكتملة ، Allow.OBJ . ثم يحاول المحللون إرجاع أكبر قدر ممكن من البيانات.
إذا لم تسمح بسلاسل جزئية ، فلن يضيف "key" إلى الكائن لأن "v غير قريبة:
result = loads ( '{"key": "v' , OBJ )
print ( result ) # Outputs: {}
result = loads ( '{"key": "value"' , OBJ )
print ( result ) # Outputs: {'key': 'value'}التشابه ، يمكنك تحليل القوائم الجزئية أو حتى قيم خاصة جزئية إذا سمحت بذلك:
(لاحظ أن allow بالتخلف عن Allow.ALL .
result = loads ( '[ {"key1": "value1", "key2": [ "value2' )
print ( result ) # Outputs: [{'key1': 'value1', 'key2': ['value2']}]
result = loads ( "-Inf" )
print ( result ) # Outputs: -inf إذا كانت سلسلة JSON مشوهة ، فسترمي وظيفة parse خطأً:
loads ( "wrong" ) # MalformedJSON: Malformed node or string on line 1 json_string <string> : سلسلة (غير مكتملة) JSON إلى PARSE.allow_partial <Allow | int> : حدد نوع الجزئي المسموح به أثناء تحليل JSON (الافتراضي: Allow.ALL ).parser (str) -> JSON : محلل JSON العادي. الافتراضي هو json.loads . أكمل سلسلة JSON واجوء مع وظيفة parser .
إرجاع قيمة Python المحلية.
الاسم المستعار: decode ، parse_json .
json_string <string> : سلسلة (غير مكتملة) JSON لإكمالها.allow_partial <Allow | int> : حدد نوع الجزئي المسموح به أثناء تحليل JSON (الافتراضي: Allow.ALL ).إرجاع سلسلة JSON المكتملة.
json_string <string> : سلسلة (غير مكتملة) JSON لإكمالها.allow_partial <Allow | int> : حدد نوع الجزئي المسموح به أثناء تحليل JSON (الافتراضي: Allow.ALL ).إرجاع تناقض من شريحة من سلسلة الإدخال والإكمال.
لاحظ أن هذا هو واجهة برمجة تطبيقات منخفضة المستوى ، وهي مفيدة فقط لتصحيح الأخطاء والتوضيح.
تعداد الفئة التي تحدد نوع الجزئي المسموح به خلال تحليل JSON. لديها الأعضاء التالية:
STR : السماح بسلسلة جزئية.NUM : السماح بالرقم الجزئي.ARR : السماح صفيف جزئي.OBJ : السماح للكائن الجزئي.NULL : السماح الجزئي لاغية.BOOL : السماح الجزئي المنطقي.NAN : السماح جزئيا نان.INFINITY : السماح الجزئي اللانهائي._INFINITY : السماح الجزئي -infinity.INF : السماح لكل من اللانهاية الجزئية و -infinity.SPECIAL : السماح لجميع القيم الخاصة.ATOM : السماح لجميع القيم الذرية.COLLECTION : السماح لجميع قيم التجميع.ALL : السماح لجميع القيم. لتشغيل اختبارات هذه المكتبة ، يجب عليك استنساخ المستودع وتثبيت التبعيات:
git clone https://github.com/promplate/partial-json-parser.git
cd partial-json-parser
pdm installبعد ذلك ، يمكنك إجراء الاختبارات باستخدام الفرضية و pytest:
pdm testيرجى ملاحظة أنه بينما نسعى جاهدين لتغطية أكبر عدد ممكن من حالات الحافة ، من الممكن دائمًا عدم تغطية بعض الحالات.
هذا المشروع مرخص بموجب ترخيص معهد ماساتشوستس للتكنولوجيا.