Proyek ini meniru penerapan OpneAI Chat Completion API (GPT3.5 API) dan menyediakan streaming HTTP API untuk ChatGLM-6B.
Repositori ini menyediakan layanan sampel di bawah Flask dan FastAPI serta UI Web statis siap pakai tanpa Node.js, npm, atau webpack.
Versi sebenarnya tunduk pada ChatGLM-6B resmi. Tapi ini pengingatnya:
stream_chat
, paket trafo 4.25.1 tidak dapat digunakan lagi, jadi trafo==4.26.1.Berikut ini adalah konfigurasi lingkungan pengembangan saya:
protobuf>=3.18,<3.20.1
transformers==4.26.1
torch==1.12.1+cu113
torchvision==0.13.1
icetk
cpm_kernels
antarmuka non-streaming
URL Antarmuka: http://{host_name}/chat
Metode permintaan: POST(badan JSON)
Parameter permintaan:
Nama bidang | jenis | menjelaskan |
---|---|---|
pertanyaan | rangkaian | Masalah pengguna |
sejarah | susunan[string] | riwayat sesi |
Hasil pengembalian:
Nama bidang | jenis | menjelaskan |
---|---|---|
pertanyaan | rangkaian | Masalah pengguna |
tanggapan | rangkaian | balasan penuh |
sejarah | susunan[string] | riwayat sesi |
Antarmuka streaming , menggunakan teknologi acara yang dikirim server.
URL Antarmuka: http://{host_name}/stream
Metode permintaan: POST(badan JSON)
Metode pengembalian:
delta
Hasil pengembalian:
Nama bidang | jenis | menjelaskan |
---|---|---|
delta | rangkaian | karakter yang dihasilkan |
pertanyaan | rangkaian | Masalah pengguna, untuk menghemat aliran, dikembalikan setelah selesai adalah true |
tanggapan | rangkaian | Balasan sejauh ini, ketika selesai adalah true , adalah balasan yang lengkap |
sejarah | susunan[string] | Riwayat sesi, untuk menghemat alur, dikembalikan setelah selesai adalah true |
selesai | boolean | true menandakan akhir, false menandakan masih ada aliran data. |
Bersihkan antarmuka memori
http://{host_name}/clear
Untuk mengimplementasikan peristiwa yang dikirim oleh server di bawah Flask, Anda dapat menggunakan Flask-SSE
. Namun, karena paket ini bergantung pada Redis, maka dalam skenario ini saya tidak memerlukannya jalan. .
Flask
Flask-Cors
gevent
python3 -u chatglm_service_flask.py --host 127.0.0.1 --port 8800 --quantize 8 --device 0
Di antara parameternya, -1 untuk --device mewakili cpu, dan angka lainnya i
mewakili kartu i
.
FastAPI dapat menggunakan sse-starlette
untuk membuat dan mengirim acara yang dikirim ke server.
Perhatikan bahwa keluaran aliran peristiwa oleh sse-starlette mungkin berisi simbol-simbol yang berlebihan, yang perlu diperhatikan selama pemrosesan front-end .
fastApi
sse-starlette
unicorn
python3 -u chatglm_service_fastapi.py --host 127.0.0.1 --port 8800 --quantize 8 --device 0
Repositori ini menyediakan halaman demo untuk memanggil API streaming, yang dapat langsung digunakan di lingkungan intranet tanpa memerlukan Nodejs, npm, atau webpack.
Berdasarkan kendala lingkungan pengembangan saya yang terbatas dan cadangan teknis yang buruk, Demo HTML dikembangkan menggunakan bootstrap.js 3.x + Vue.js 2.x dan dirender menggunakan mark.js+highlight.js tautan CDN dalam HTML.
Karena implementasi EventSource milik browser tidak mendukung metode POST, kemampuan untuk mengatur header permintaan perlu digantikan oleh implementasi pihak ketiga.
Jika Anda menggunakan NPM dalam pengembangan yang serius, Anda dapat menggunakan @microsoft/fetch-event-source;
Namun karena kondisi saya yang terbatas, saya terlalu malas untuk mengkompilasi TypeScript, jadi saya menggunakan @rangermauve/fetch-event-source. Namun, proyek ini hanya memiliki fungsi paling dasar dari EventSource, jadi modifikasi ajaib dibuat atas dasar ini.
Namun, setelah menggunakan metode ini, EventStream tidak dapat ditampilkan dengan benar di DevTools Chrome.
Ubah port yang sesuai dengan baris 1 di static/js/chatglm.js
:
var baseUrl = "http://localhost:8800/"
Karakter yang kacau mungkin muncul selama streaming generasi Tanya Jawab
Hal ini terutama disebabkan oleh fakta bahwa beberapa token bukanlah karakter yang lengkap, sehingga antarmuka akhirnya mengembalikan hasil pembuatan yang lengkap. Jika karakter Unicode bukan nol, maka dapat diproses melalui penilaian pengkodean, namun masih ada beberapa karakter lain yang kacau, dan saya akan menyelidikinya lebih lanjut.
Selain repositori yang disebutkan di atas, proyek-proyek berikut juga perlu diberi ucapan terima kasih:
ikechan8370/SimpleChatGLM6BAPI mengacu pada logika parameter