يحاكي هذا المشروع تنفيذ OpneAI Chat Completion API (GPT3.5 API) ويوفر تدفق HTTP API لـ ChatGLM-6B.
يوفر هذا المستودع نماذج من الخدمات ضمن Flask وFastAPI وواجهة مستخدم ويب ثابتة جاهزة للاستخدام بدون Node.js أو npm أو webpack.
الإصدار الفعلي يخضع لـ ChatGLM-6B الرسمي. ولكن هنا تذكير:
stream_chat
، لم يعد من الممكن استخدام حزمة المحولات 4.25.1، لذلك المحولات==4.26.1.فيما يلي تكوين بيئة التطوير الخاصة بي:
protobuf>=3.18,<3.20.1
transformers==4.26.1
torch==1.12.1+cu113
torchvision==0.13.1
icetk
cpm_kernels
واجهة غير متدفقة
عنوان URL للواجهة: http://{host_name}/chat
طريقة الطلب: POST(نص JSON)
معلمات الطلب:
اسم الحقل | يكتب | يوضح |
---|---|---|
استفسار | خيط | قضايا المستخدم |
تاريخ | صفيف [سلسلة] | تاريخ الجلسة |
نتائج العودة:
اسم الحقل | يكتب | يوضح |
---|---|---|
استفسار | خيط | قضايا المستخدم |
إجابة | خيط | الرد الكامل |
تاريخ | صفيف [سلسلة] | تاريخ الجلسة |
واجهة البث ، باستخدام تقنية الأحداث المرسلة من الخادم.
عنوان URL للواجهة: http://{host_name}/stream
طريقة الطلب: POST(نص JSON)
طريقة العودة:
delta
نتائج العودة:
اسم الحقل | يكتب | يوضح |
---|---|---|
دلتا | خيط | الشخصيات المولدة |
استفسار | خيط | مشكلة المستخدم، حفظ التدفق، التي تم إرجاعها عند الانتهاء true |
إجابة | خيط | الرد حتى الآن، عندما انتهى true ، هو الرد الكامل |
تاريخ | صفيف [سلسلة] | سجل الجلسة، لحفظ التدفق، الذي تم إرجاعه عند الانتهاء true |
انتهى | منطقية | true يشير إلى النهاية، false يشير إلى أنه لا يزال هناك تدفق للبيانات. |
تنظيف واجهة الذاكرة
http://{host_name}/clear
لتنفيذ الأحداث المرسلة من الخادم ضمن Flask، كان من الممكن استخدام Flask-SSE
، ومع ذلك، نظرًا لأن هذه الحزمة تعتمد على Redis، فهي ليست ضرورية في هذا السيناريو، لذلك، قمت بالإشارة إلى هذا المستند وقمت بتنفيذ الأحداث المرسلة من الخادم بأبسط طريقة طريق. .
Flask
Flask-Cors
gevent
python3 -u chatglm_service_flask.py --host 127.0.0.1 --port 8800 --quantize 8 --device 0
من بين المعلمات، -1 لـ --device يمثل وحدة المعالجة المركزية، والأرقام الأخرى i
البطاقة i
.
يمكن لـ FastAPI استخدام sse-starlette
لإنشاء وإرسال الأحداث المرسلة من الخادم.
لاحظ أن إخراج دفق الحدث بواسطة sse-starlette قد يحتوي على رموز زائدة عن الحاجة، والتي يجب الانتباه إليها عند معالجتها بواسطة الواجهة الأمامية .
fastApi
sse-starlette
unicorn
python3 -u chatglm_service_fastapi.py --host 127.0.0.1 --port 8800 --quantize 8 --device 0
يوفر هذا المستودع صفحة تجريبية لاستدعاء واجهة برمجة التطبيقات المتدفقة، والتي يمكن استخدامها خارج الصندوق في بيئة الإنترانت دون الحاجة إلى Nodejs أو npm أو webpack.
استنادًا إلى قيود بيئة التطوير المحدودة والاحتياطات الفنية الضعيفة، تم تطوير عرض HTML التجريبي باستخدام bootstrap.js 3.x + Vue.js 2.x وتم تقديمه باستخدام Mark.js+highlight.js. للحصول على الإصدار المحدد، يرجى الرجوع إلى رابط CDN بتنسيق HTML .
نظرًا لأن تطبيق EventSource الخاص بالمتصفح لا يدعم طريقة POST، فإن تعيين رأس الطلب والإمكانات الأخرى يتطلب تنفيذ جهة خارجية بدلاً من ذلك.
إذا كنت تستخدم NPM في التطوير الجاد، فيمكنك استخدام @microsoft/fetch-event-source؛
ومع ذلك، نظرًا لظروفي المحدودة، كنت كسولًا جدًا في ترجمة TypeScript، لذلك استخدمت @rangermauve/fetch-event-source. ومع ذلك، يحتوي هذا المشروع فقط على الوظائف الأساسية لـ EventSource، لذلك تم إجراء تعديلات سحرية على هذا الأساس.
ومع ذلك، بعد استخدام هذه الطريقة، لا يمكن عرض EventStream بشكل صحيح في DevTools في Chrome.
قم بتعديل المنفذ المقابل للسطر 1 في static/js/chatglm.js
:
var baseUrl = "http://localhost:8800/"
قد تظهر أحرف مشوهة أثناء بث الأسئلة والأجوبة
ويرجع ذلك أساسًا إلى حقيقة أن بعض الرموز المميزة ليست أحرفًا كاملة، لذا تقوم الواجهة أخيرًا بإرجاع نتيجة الإنشاء الكاملة. إذا كان حرف Unicode غير صفري، فيمكن معالجته من خلال حكم التشفير؛ ومع ذلك، لا تزال هناك بعض الأحرف المشوهة الأخرى، وسوف أقوم بمزيد من التحقيق.
بالإضافة إلى المستودعات المذكورة أعلاه، يجب أيضًا شكر المشاريع التالية:
يشير ikechan8370/SimpleChatGLM6BAPI إلى منطق المعلمة