Ai:embeddings:backfill - التعامل مع خطأ OpenAI 400 للـ Tokens الزائدة في Embeddings

أحاول تنفيذ مهمة الـ rake هذه باستخدام تضمينات OpenAI:

أتلقى رسالة خطأ

[:/var/www/discourse# rake ai:embeddings:backfill --trace
** Invoke ai:embeddings:backfill (first_time)
** Invoke environment (first_time)
** Execute environment
** Execute ai:embeddings:backfill
.rake aborted!
Net::HTTPBadResponse: Net::HTTPBadResponse (Net::HTTPBadResponse)
/var/www/discourse/plugins/discourse-ai/lib/inference/open_ai_embeddings.rb:27:in `perform!’
/var/www/discourse/plugins/discourse-ai/lib/embeddings/vector_representations/text_embedding_ada_002.rb:36:in `vector_from’
/var/www/discourse/plugins/discourse-ai/lib/embeddings/vector_representations/base.rb:144:in `generate_representation_from’
/var/www/discourse/plugins/discourse-ai/lib/tasks/modules/embeddings/database.rake:19:in `block (2 levels) in ’
/var/www/discourse/vendor/bundle/ruby/3.2.0/gems/activerecord-7.0.8/lib/active_record/relation/batches.rb:71:in `each’
/var/www/discourse/vendor/bundle/ruby/3.2.0/gems/activerecord-7.0.8/lib/active_record/relation/batches.rb:71:in `block in find_each’
/var/www/discourse/vendor/bundle/ruby/3.2.0/gems/activerecord-7.0.8/lib/active_record/relation/batches.rb:138:in `block in find_in_batches’
/var/www/discourse/vendor/bundle/ruby/3.2.0/gems/activerecord-7.0.8/lib/active_record/relation/batches.rb:245:in `block in in_batches’
/var/www/discourse/vendor/bundle/ruby/3.2.0/gems/activerecord-7.0.8/lib/active_record/relation/batches.rb:229:in `loop’
/var/www/discourse/vendor/bundle/ruby/3.2.0/gems/activerecord-7.0.8/lib/active_record/relation/batches.rb:229:in `in_batches’
/var/www/discourse/vendor/bundle/ruby/3.2.0/gems/activerecord-7.0.8/lib/active_record/relation/batches.rb:137:in `find_in_batches’
/var/www/discourse/vendor/bundle/ruby/3.2.0/gems/activerecord-7.0.8/lib/active_record/relation/batches.rb:70:in `find_each’
/var/www/discourse/plugins/discourse-ai/lib/tasks/modules/embeddings/database.rake:17:in `block in ’
/var/www/discourse/vendor/bundle/ruby/3.2.0/gems/rake-13.1.0/lib/rake/task.rb:281:in `block in execute’
/var/www/discourse/vendor/bundle/ruby/3.2.0/gems/rake-13.1.0/lib/rake/task.rb:281:in `each’
/var/www/discourse/vendor/bundle/ruby/3.2.0/gems/rake-13.1.0/lib/rake/task.rb:281:in `execute’
/var/www/discourse/vendor/bundle/ruby/3.2.0/gems/rake-13.1.0/lib/rake/task.rb:219:in `block in invoke_with_call_chain’
/var/www/discourse/vendor/bundle/ruby/3.2.0/gems/rake-13.1.0/lib/rake/task.rb:199:in `synchronize’
/var/www/discourse/vendor/bundle/ruby/3.2.0/gems/rake-13.1.0/lib/rake/task.rb:199:in `invoke_with_call_chain’
/var/www/discourse/vendor/bundle/ruby/3.2.0/gems/rake-13.1.0/lib/rake/task.rb:188:in `invoke’
/var/www/discourse/vendor/bundle/ruby/3.2.0/gems/rake-13.1.0/lib/rake/application.rb:182:in `invoke_task’
/var/www/discourse/vendor/bundle/ruby/3.2.0/gems/rake-13.1.0/lib/rake/application.rb:138:in `block (2 levels) in top_level’
/var/www/discourse/vendor/bundle/ruby/3.2.0/gems/rake-13.1.0/lib/rake/application.rb:138:in `each’
/var/www/discourse/vendor/bundle/ruby/3.2.0/gems/rake-13.1.0/lib/rake/application.rb:138:in `block in top_level’
/var/www/discourse/vendor/bundle/ruby/3.2.0/gems/rake-13.1.0/lib/rake/application.rb:147:in `run_with_threads’
/var/www/discourse/vendor/bundle/ruby/3.2.0/gems/rake-13.1.0/lib/rake/application.rb:132:in `top_level’
/var/www/discourse/vendor/bundle/ruby/3.2.0/gems/rake-13.1.0/lib/rake/application.rb:83:in `block in run’
/var/www/discourse/vendor/bundle/ruby/3.2.0/gems/rake-13.1.0/lib/rake/application.rb:208:in `standard_exception_handling’
/var/www/discourse/vendor/bundle/ruby/3.2.0/gems/rake-13.1.0/lib/rake/application.rb:80:in `run’
bin/rake:13:in `<top (required)>’
/usr/local/lib/ruby/gems/3.2.0/gems/bundler-2.5.3/lib/bundler/cli/exec.rb:58:in `load’
/usr/local/lib/ruby/gems/3.2.0/gems/bundler-2.5.3/lib/bundler/cli/exec.rb:58:in `kernel_load’
/usr/local/lib/ruby/gems/3.2.0/gems/bundler-2.5.3/lib/bundler/cli/exec.rb:23:in `run’
/usr/local/lib/ruby/gems/3.2.0/gems/bundler-2.5.3/lib/bundler/cli.rb:451:in `exec’
/usr/local/lib/ruby/gems/3.2.0/gems/bundler-2.5.3/lib/bundler/vendor/thor/lib/thor/command.rb:28:in `run’
/usr/local/lib/ruby/gems/3.2.0/gems/bundler-2.5.3/lib/bundler/vendor/thor/lib/thor/invocation.rb:127:in `invoke_command’
/usr/local/lib/ruby/gems/3.2.0/gems/bundler-2.5.3/lib/bundler/vendor/thor/lib/thor.rb:527:in `dispatch’
/usr/local/lib/ruby/gems/3.2.0/gems/bundler-2.5.3/lib/bundler/cli.rb:34:in `dispatch’
/usr/local/lib/ruby/gems/3.2.0/gems/bundler-2.5.3/lib/bundler/vendor/thor/lib/thor/base.rb:584:in `start’
/usr/local/lib/ruby/gems/3.2.0/gems/bundler-2.5.3/lib/bundler/cli.rb:28:in `start’
/usr/local/lib/ruby/gems/3.2.0/gems/bundler-2.5.3/exe/bundle:28:in `block in <top (required)>’
/usr/local/lib/ruby/gems/3.2.0/gems/bundler-2.5.3/lib/bundler/friendly_errors.rb:117:in `with_friendly_errors’
/usr/local/lib/ruby/gems/3.2.0/gems/bundler-2.5.3/exe/bundle:20:in `<top (required)>’
/usr/local/bin/bundle:25:in `load’
/usr/local/bin/bundle:25:in `’
Tasks: TOP => ai:embeddings:backfill

لست مضطرًا لقراءته، لقد اكتشفت المشكلة.

يتم طرح خطأ HTTPBadResponse من السطر أدناه:

تُظهر صفحة /logs هذا:

OpenAI Embeddings failed with status: 400 body: {
  "error": {
    "message": "This model's maximum context length is 8192 tokens, however you requested 8506 tokens (8506 in your prompt; 0 for the completion). Please reduce your prompt; or completion length.",
    "type": "invalid_request_error",
    "param": null,
    "code": null
  }
}

بشكل أساسي، يبدو أن هناك شيئًا ما يحتوي على عدد كبير جدًا من الكلمات. لست متأكدًا من الفرق بين “prompt” و “completion” في هذا السياق. على أي حال، هذا يمنعني من الملء الاحتياطي.

لقد قمت بتغيير الحد الأقصى لعدد المشاركات في إعدادات الموقع، لذا ربما يكون السبب هو منشور طويل جدًا؟ في هذه الحالة، أتوقع أن يتم اقتطاع محتوى هذا المنشور أو ربما يتم تخطيه؟ على أي حال، فإنه يمنع عملية الملء الاحتياطي بالكامل.

إعجاب واحد (1)

شكرا على التقرير، سألقي نظرة عليه يوم الاثنين.

إعجابَين (2)

نقوم باقتطاع المحتوى قبل إرساله باستخدام أداة OpenAI Tokenizer الخاصة بنا، لذا هذا خطأ غير متوقع.

هل يمكنك مشاركة النص الإشكالي؟

كل ما يمكنني رؤيته هو تتبع المكدس (stacktrace) وخطأ 400. هل هناك مكان يمكنني النظر فيه لمعرفة ما كان الطلب؟ بخلاف ذلك، لا أعرف ما هو النص الذي يسبب المشكلة.

بما أنك تقوم بتشغيل مهمة rake، هل يمكنك تعديل الملف في

وإضافة puts t.id بين السطرين 18 و 19 لطباعة معرف الموضوع.

شكراً لتوجيهاتك. أعتقد أنني وجدت حالة استثنائية للغاية.

المشكلة كانت نص زالجو

أي، هذا الشيء:

هذا “أهلاً بالعالم” يصبح 607 أحرف مع كل الهراء المضاف إليه

كان هناك منشور يحتوي على الكثير منه، فقمت بحذفه. تمكنت عملية الملء الخلفي من المتابعة. ربما ليست مشكلة ذات أولوية عالية، ولكني لا يمكن أن أكون الوحيد الذي لديه منشور كهذا في منتداه.

أوه، هذا مثير للاهتمام. أعتقد أنه يثير مشكلة مع مُرمّز OpenAI، مما يجعل عدّنا خاطئًا.

إعجابَين (2)

قد يكون هذا في الواقع خطأ في المُرمّز الرسمي!!

تتوافق أعدادنا تمامًا!

أيضًا… بالنظر إلى عدد الرموز المميزة، فإن نص “زالجو” هو هجوم واحد كبير على الذكاء الاصطناعي، نظرًا لأنه يضخم عدد الرموز المميزة مقابل قيمة ضئيلة جدًا.

@piffy هل هناك أي فرصة يمكنك لصق النص الدقيق الذي كان لديك في https://platform.openai.com/tokenizer لمعرفة ما إذا كانت أعداد الرموز المميزة تتوافق مع ما تقوله واجهة برمجة التطبيقات، قد يكون هناك تكرار لـ Open AI هنا.

إعجابَين (2)


هذا هو محتوى المنشور الخام الذي أراه عند النقر على “تحرير”

لمزيد من السياق، كان هذا فشلاً في تضمين الموضوع، لذلك لا أعرف تفاصيل التنفيذ حول كيفية تضمين موضوع كامل. ولكن يمكنني أن أخبرك أن إزالة هذا المنشور الواحد جعل الأمر يعمل بعد أن كان لا يعمل.

يمكنني أن أرسل لك الرسالة الأصلية في الدردشة، أشعر أن نشرها في هذا الموضوع قد يعيد إنشاء المشكلة هنا :laughing:

تم الإصلاح في

إعجاب واحد (1)