Discourse 챗봇 πŸ€–

μž‘μ—… λŒ€κΈ°μ—΄μ΄ κΈΈλ©΄ 봇 응닡이 지연될 수 μžˆμŠ΅λ‹ˆλ‹€.

트리거된 μž‘μ—…λ„ 지연될 수 μžˆλ‹€κ³  μƒκ°ν•©λ‹ˆλ‹€.

λ¨Όμ € 백둜그λ₯Ό μ²˜λ¦¬ν•΄ μ£Όμ„Έμš” :slight_smile:

μ—¬λŸ¬ 번 닡변을 μž‘μ„±ν•΄ 보렀 ν–ˆμœΌλ‚˜ κ²°κ΅­ μ‹€νŒ¨ν–ˆμŠ΅λ‹ˆλ‹€. 이 λ¬Έμ œκ°€ κ³„μ†λ˜λ©΄ κ΄€λ¦¬μžμ—κ²Œ λ¬Έμ˜ν•΄ μ£Όμ„Έμš”. κ°μ‚¬ν•©λ‹ˆλ‹€!

원인을 확인해야 ν•©λ‹ˆλ‹€. λ‘œκ·Έμ— 였λ₯˜κ°€ κΈ°λ‘λ˜μ–΄ μžˆμ–΄μ•Ό ν•©λ‹ˆλ‹€.

상세 λ‘œκΉ…μ„ ν™œμ„±ν™”(λ§ˆμ§€λ§‰ μ„€μ •)ν•˜κ³  둜그λ₯Ό Warn μˆ˜μ€€μœΌλ‘œ λ³€κ²½ν•˜μ—¬ AI 응닡을 ν™•μΈν•˜μ„Έμš”. (Production ν™˜κ²½μ—μ„œλŠ” Info 둜그λ₯Ό 읽을 수 μ—†μŠ΅λ‹ˆλ‹€.)

이후 /logsμ—μ„œ ν•΄λ‹Ή 둜그λ₯Ό ν™•μΈν•˜μ„Έμš”.

μ΄λŸ¬ν•œ λ¬Έμ œλŠ” μœ νš¨ν•œ ν‚€λ₯Ό μ œκ³΅ν•˜μ§€ μ•Šμ•˜κ±°λ‚˜ 계정 μž”μ•‘μ΄ λΆ€μ‘±ν•˜κΈ° λ•Œλ¬Έμ— λ°œμƒν•˜λŠ” κ²½μš°κ°€ λ§ŽμŠ΅λ‹ˆλ‹€. κ·ΈλŸ¬λ‚˜ λ‹€λ₯Έ 원인일 μˆ˜λ„ μžˆμŠ΅λ‹ˆλ‹€.

Sidekiq에 큰 λ°±λ‘œκ·Έκ°€ μŒ“μΈ 것 κ°™μŠ΅λ‹ˆλ‹€. μž‘μ—…μ„ 더 λΉ λ₯΄κ²Œ μ²˜λ¦¬ν•˜κΈ° μœ„ν•΄ Sidekiq의 처리 μš©λŸ‰μ„ λŠ˜λ¦¬λŠ” 방법이 μžˆμ„κΉŒμš”?

이것은 이 ν”ŒλŸ¬κ·ΈμΈμ˜ λ²”μœ„λ₯Ό μƒλ‹Ήνžˆ λ²—μ–΄λ‚˜λŠ” λ‚΄μš©μž…λ‹ˆλ‹€ :slight_smile:

μ•„λž˜ 두 κ°€μ§€λ₯Ό μ‘°ν•©ν•΄ λ³΄μ„Έμš”.

  1. 코어와 λ©”λͺ¨λ¦¬κ°€ 더 λ§Žμ€ 더 κ°•λ ₯ν•œ μ„œλ²„λ‘œ 이전.
  2. 이메일 μ„œλΉ„μŠ€ μ œκ³΅μ—…μ²΄μ˜ 레이트 리밋(속도 μ œν•œ)을 λ†’μž„ (ν•„μš”ν•œ 경우).

보톡 νλŠ” 거의 λΉ„μ–΄ μžˆμ–΄μ•Ό ν•©λ‹ˆλ‹€.

μ±„νŒ…λ΄‡: λ¬Έμ œκ°€ λ°œμƒν–ˆμ§€λ§Œ, ν•œλ„κΉŒμ§€ μž¬μ‹œλ„ν•©λ‹ˆλ‹€: nil을 Integer둜 λ³€ν™˜ν•  수 μ—†μŠ΅λ‹ˆλ‹€

μ œκ°€ λ°›λŠ” μ—λŸ¬μž…λ‹ˆλ‹€

μ±„νŒ…λ΄‡ μž„λ² λ”© ν™œμ„±ν™”λ₯Ό ν•˜μ…¨λ‚˜μš”?

μ•„λ§ˆλ„ 봇 μœ ν˜•μ΄ RAG일 것 κ°™μŠ΅λ‹ˆλ‹€(이 경우 μœ„ ν•­λͺ©μ΄ ν™œμ„±ν™”λ˜μ–΄ μžˆμ–΄μ•Ό ν•©λ‹ˆλ‹€).

μ–΄λ–€ λͺ¨λΈμ„ μ‚¬μš© μ€‘μ΄μ‹ κ°€μš”?

RAG μ—†μŒ.

gpt-4o-mini

이 였λ₯˜μ— λŒ€ν•΄ /logsμ—μ„œ 백트레이슀λ₯Ό λ³Ό 수 μžˆλ‚˜μš”?

λ©”μ‹œμ§€ (4건 보고됨)

챗봇: λ¬Έμ œκ°€ λ°œμƒν–ˆμ§€λ§Œ, ν•œλ„κΉŒμ§€ μž¬μ‹œλ„ν•©λ‹ˆλ‹€: nil can't be coerced into Integer

백트레이슀

/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/activesupport-7.2.2.1/lib/active_support/broadcast_logger.rb:134:in `block in error'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/activesupport-7.2.2.1/lib/active_support/broadcast_logger.rb:231:in `block in dispatch'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/activesupport-7.2.2.1/lib/active_support/broadcast_logger.rb:231:in `each'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/activesupport-7.2.2.1/lib/active_support/broadcast_logger.rb:231:in `dispatch'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/activesupport-7.2.2.1/lib/active_support/broadcast_logger.rb:134:in `error'
/var/www/discourse/plugins/discourse-chatbot/app/jobs/regular/chatbot_reply.rb:140:in `rescue in execute'
/var/www/discourse/plugins/discourse-chatbot/app/jobs/regular/chatbot_reply.rb:121:in `execute'
/var/www/discourse/app/jobs/base.rb:316:in `block (2 levels) in perform'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/rails_multisite-6.1.0/lib/rails_multisite/connection_management/null_instance.rb:49:in `with_connection'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/rails_multisite-6.1.0/lib/rails_multisite/connection_management.rb:21:in `with_connection'
/var/www/discourse/app/jobs/base.rb:303:in `block in perform'
/var/www/discourse/app/jobs/base.rb:299:in `each'
/var/www/discourse/app/jobs/base.rb:299:in `perform'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/sidekiq-6.5.12/lib/sidekiq/processor.rb:202:in `execute_job'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/sidekiq-6.5.12/lib/sidekiq/processor.rb:170:in `block (2 levels) in process'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/sidekiq-6.5.12/lib/sidekiq/middleware/chain.rb:177:in `block in invoke'
/var/www/discourse/lib/sidekiq/pausable.rb:132:in `call'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/sidekiq-6.5.12/lib/sidekiq/middleware/chain.rb:179:in `block in invoke'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/sidekiq-6.5.12/lib/sidekiq/middleware/chain.rb:182:in `invoke'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/sidekiq-6.5.12/lib/sidekiq/processor.rb:169:in `block in process'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/sidekiq-6.5.12/lib/sidekiq/processor.rb:136:in `block (6 levels) in dispatch'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/sidekiq-6.5.12/lib/sidekiq/job_retry.rb:113:in `local'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/sidekiq-6.5.12/lib/sidekiq/processor.rb:135:in `block (5 levels) in dispatch'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/sidekiq-6.5.12/lib/sidekiq.rb:44:in `block in <module:Sidekiq>'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/sidekiq-6.5.12/lib/sidekiq/processor.rb:131:in `block (4 levels) in dispatch'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/sidekiq-6.5.12/lib/sidekiq/processor.rb:263:in `stats'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/sidekiq-6.5.12/lib/sidekiq/processor.rb:126:in `block (3 levels) in dispatch'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/sidekiq-6.5.12/lib/sidekiq/job_logger.rb:13:in `call'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/sidekiq-6.5.12/lib/sidekiq/processor.rb:125:in `block (2 levels) in dispatch'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/sidekiq-6.5.12/lib/sidekiq/job_retry.rb:80:in `global'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/sidekiq-6.5.12/lib/sidekiq/processor.rb:124:in `block in dispatch'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/sidekiq-6.5.12/lib/sidekiq/job_logger.rb:39:in `prepare'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/sidekiq-6.5.12/lib/sidekiq/processor.rb:123:in `dispatch'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/sidekiq-6.5.12/lib/sidekiq/processor.rb:168:in `process'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/sidekiq-6.5.12/lib/sidekiq/processor.rb:78:in `process_one'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/sidekiq-6.5.12/lib/sidekiq/processor.rb:68:in `run'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/sidekiq-6.5.12/lib/sidekiq/component.rb:8:in `watchdog'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/sidekiq-6.5.12/lib/sidekiq/component.rb:17:in `block in safe_thread'

상기 λ‚΄μš©μ„ 적절히 μ„€μ •ν•΄ μ£Όμ‹œκ³ , λ‘œκ·Έμ—μ„œ μ˜μ‹¬μŠ€λŸ¬μš΄ 뢀뢄이 μΆ”κ°€λ‘œ 보이면 μ•Œλ €μ£Όμ„Έμš”:

P.S. μ΅œμ‹  λ²„μ „μ—μ„œ Basic 및 RAG 봇이 정상 μž‘λ™ν•˜λŠ” 것을 ν™•μΈν–ˆμŠ΅λ‹ˆλ‹€.

λΉ„κ³΅κ°œ ν† λ‘  κ²°λ‘ : ν• λ‹ΉλŸ‰ 리셋 μž‘μ—…μ΄ 아직 μ‹€ν–‰λ˜μ§€ μ•Šμ•˜μŠ΅λ‹ˆλ‹€.

이 μž‘μ—…μ€ 봇을 μ‚¬μš©ν•˜κΈ° 전에 ν•œ 번 μ‹€ν–‰λ˜μ–΄μ•Ό ν•©λ‹ˆλ‹€.

ν˜„μž¬ ν”ŒλŸ¬κ·ΈμΈ μ„€μΉ˜ ν›„ 이 μž‘μ—…μ„ ν•œ 번 μˆ˜λ™μœΌλ‘œ νŠΈλ¦¬κ±°ν•΄μ•Ό ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

μ‘°λ§Œκ°„ 이 일회용 초기 싀행을 μžλ™μœΌλ‘œ μˆ˜ν–‰ν•˜λ„λ‘ κ°œμ„ ν•  μ˜ˆμ •μž…λ‹ˆλ‹€.

이둜써 ν•΄λ‹Ή λ¬Έμ œκ°€ 영ꡬ적으둜 해결될 κ²ƒμœΌλ‘œ κΈ°λŒ€ν•©λ‹ˆλ‹€.

3개의 μ’‹μ•„μš”

DeepSeek 열풍 :sweat_smile:

Chatbot으둜 λ°”λ‘œ μ°Έμ—¬ν•˜μ„Έμš” :rocket:

μ΅œμ†Œ Basic λͺ¨λ“œμ—μ„œ V3와 R1에 μ ‘κ·Όν•  수 μžˆμŠ΅λ‹ˆλ‹€.

μ €λŠ” λ‹€μŒμ„ μ‚¬μš©ν–ˆμŠ΅λ‹ˆλ‹€:

(제휴 링크 μ•„λ‹˜)

이 μ‚¬μ΄νŠΈμ—μ„œ λͺ¨λΈμ„ ν˜ΈμŠ€νŒ…ν•©λ‹ˆλ‹€.

μ•„λž˜μ™€ 같이 μ„€μ •ν•˜μ„Έμš”:

λ°˜λ“œμ‹œ Basic 봇 λͺ¨λ“œλ₯Ό μ„€μ •ν•˜κ³  ν‚€λ₯Ό λŒ€μ²΄ν•˜μ„Έμš”.

μ›Ήμ‚¬μ΄νŠΈμ— μ ‘κ·Όν•˜μ—¬ κ°€μž…ν•  수 μžˆλ‹€λ©΄ DeepSeek AIλ₯Ό 직접 μ‚¬μš©ν•  μˆ˜λ„ μžˆμŠ΅λ‹ˆλ‹€ :sweat_smile:

Base URL은 "https://api.deepseek.com"μž…λ‹ˆλ‹€.

4개의 μ’‹μ•„μš”

λŒ€μ²΄ λͺ¨λΈ, 특히 λŒ€κ·œλͺ¨ ν˜ΈμŠ€νŒ… μ˜€ν”ˆμ†ŒμŠ€ λͺ¨λΈμ˜ μ‚¬μš©λ²•μ— λŒ€ν•΄μ„œλŠ” 이전 κ²Œμ‹œλ¬Όμ„ μ°Έκ³ ν•˜μ„Έμš”.

Hi @merefield .

제 주제 μ±„νŒ…λ΄‡ μžλ™ 응닡기가 μ£Όμ œμ—μ„œ 응닡할 λ•Œ 2번 μ‘λ‹΅ν•˜κ³  μžˆμŠ΅λ‹ˆλ‹€. 즉, μ‚¬μš©μžκ°€ μ§ˆλ¬Έν•˜λ©΄ μ±„νŒ…λ΄‡μ΄ 닡변을 ν•œ ν›„ λ°”λ‘œ 같은 μ§ˆλ¬Έμ— 두 번째둜 λ‹€μ‹œ 닡변을 ν•˜λŠ” μ‹μœΌλ‘œ μ—°μ†ν•΄μ„œ 두 번 닡변을 ν•©λ‹ˆλ‹€. 이 녀석을 μ’€ μ§„μ •μ‹œν‚€λŠ” 방법에 λŒ€ν•œ 아이디어가 μžˆμœΌμ‹ κ°€μš”? :sunglasses:

1개의 μ’‹μ•„μš”

정말 μ΄μƒν•˜λ„€μš”.

μ΅œμ‹  λ²„μ „μ—μ„œ 이 문제λ₯Ό ν…ŒμŠ€νŠΈν•΄ λ³΄μ•˜λŠ”λ°, 각 κ²Œμ‹œλ¬Όλ§ˆλ‹€ ν•˜λ‚˜μ˜ μ‘λ‹΅λ§Œ λ°›μ•˜μŠ΅λ‹ˆλ‹€. 즉, 초기 κ²Œμ‹œλ¬Ό β†’ μžλ™ 응닡 β†’ λ‹΅κΈ€ β†’ 또 λ‹€λ₯Έ 봇 응닡 μˆœμ„œμ˜€μ£ .

ν˜„μž¬ μ œκ°€ ν•΄λ‹Ή 문제λ₯Ό μž¬ν˜„ν•  수 μžˆλŠ”μ§€ 확신이 μ„œμ§€ μ•ŠμœΌλ‹ˆ, μ‚¬μš© 쀑인 ν™˜κ²½μ„ μžμ„Ένžˆ μ„€λͺ…ν•΄ μ£Όμ‹œκ² μ–΄μš”?

μ•„λ‹ˆλ©΄, μ§€κΈˆ λ³΄μ‹œλŠ” λ™μž‘μ΄ λ°”λ‘œ κ·Έ μƒνƒœμΈκ°€μš”?

참고둜, 봇은 ν•΄λ‹Ή μ£Όμ œμ— ν•œ λͺ…μ˜ μ‚¬μš©μžκ°€ μΆ”κ°€λ‘œ κ²Œμ‹œλ¬Όμ„ 올릴 λ•ŒκΉŒμ§€ 계속 μ‘λ‹΅ν•©λ‹ˆλ‹€. λ”°λΌμ„œ μ²˜μŒμ—λŠ” λŒ€ν™” μƒλŒ€κ°€ μ‚¬μš©μžμ™€ 봇 μ‚¬μ΄μ—μ„œλ§Œ μ΄λ£¨μ–΄μ§€λ―€λ‘œ, 봇이 항상 λ§ˆμ§€λ§‰ 말을 ν•˜κ²Œ λ©λ‹ˆλ‹€(이 λ‚΄μš©μ€ OP에도 λͺ…μ‹œλ˜μ–΄ μžˆμŠ΅λ‹ˆλ‹€).

λˆ„κ΅°κ°€ 이 κΈ°λŠ₯을 κ°œμ„ ν•˜κΈ° μœ„ν•΄ κΈ°κΈˆμ„ λ‚΄κΈ°λ‘œ ν–ˆμ§€λ§Œ, μ²­κ΅¬μ„œλ₯Ό κ²°μ œν•˜μ§€ μ•Šμ•„ ν˜„μž¬λ‘œμ„œλŠ” κΈ°μ‘΄ λ™μž‘ 방식을 μœ μ§€ν•  μˆ˜λ°–μ— μ—†μŠ΅λ‹ˆλ‹€.

λ‘œλ²„νŠΈ, κ°μ‚¬ν•©λ‹ˆλ‹€. λͺ‡ κ°€μ§€ μ•Œμ•„λ³Όκ²Œμš”. 항상 그런 건 μ•„λ‹ˆμ—μš”. 봇에 λ‹΅μž₯ν•˜λ©΄μ„œ λ™μ‹œμ— @bot을 λ©˜μ…˜ν•˜λŠ” 것과 관련이 μžˆμ„μ§€, μ•„λ‹ˆλ©΄ 같은 λΈŒλΌμš°μ €μ—μ„œ λ‹€λ₯Έ κ³„μ •μœΌλ‘œ 둜그인/λ‘œκ·Έμ•„μ›ƒν•  λ•Œ μΊμ‹œ λ¬Έμ œμΌμ§€ 확신이 μ—†μ—ˆμŠ΅λ‹ˆλ‹€. 졜근 μ—…λ°μ΄νŠΈλ‘œ 인해 λ­”κ°€ λ¬Έμ œκ°€ 생긴 건 μ•„λ‹Œμ§€ 생각도 ν•΄λ΄€μ–΄μš”. 제 ν™˜κ²½ 섀정도 μ΅œμ‹ μœΌλ‘œ μ—…λ°μ΄νŠΈλ˜μ–΄ μžˆμŠ΅λ‹ˆλ‹€. νŠΉμ • μƒν™©μ—μ„œ μž¬ν˜„λœλ‹€λŠ” κ±Έ 찾으면 μ•Œλ €λ“œλ¦΄κ²Œμš”.

이것도 ν…ŒμŠ€νŠΈν•΄ λ³΄μ•˜λŠ”λ°, 이쀑 응닡이 λ°œμƒν•˜μ§€ μ•Šμ•˜μŠ΅λ‹ˆλ‹€.

κ²Œμ‹œλ¬Όμ˜ ν‰κ°€λŠ” ν•œ 번만 μˆ˜ν–‰λ˜λ©°, λ©˜μ…˜λ˜κ±°λ‚˜ 닡글이 달린 κ²½μš°μ—λ§Œ μ‘λ‹΅ν•˜μ§€λ§Œ μ€‘λ³΅λ˜μ§€ μ•Šμ•„μ•Ό ν•©λ‹ˆλ‹€.

평가 μ‹œ λ΄‡μ˜ κ²Œμ‹œλ¬Όμ€ λ¬΄μ‹œλ˜μ–΄μ•Ό ν•˜λ―€λ‘œ, 봇이 μŠ€μŠ€λ‘œμ— 닡글을 남기렀 μ‹œλ„ν•˜λŠ” 일도 κ²°μ½” μΌμ–΄λ‚˜μ§€ μ•Šμ•„μ•Ό ν•©λ‹ˆλ‹€.

νŠΉμ • 상황과 κ΄€λ ¨λœ 더 μžμ„Έν•œ 정보λ₯Ό νŒŒμ•…ν•  수 μžˆλ‹€λ©΄ μ•Œλ € μ£Όμ„Έμš”.

1개의 μ’‹μ•„μš”

이 AI λ΄‡μ—μ„œ μ–΄λ–€ AI λͺ¨λΈμ΄ μ‚¬μš©λ˜λŠ”μ§€ 찾을 수 μ—†μ—ˆμŠ΅λ‹ˆλ‹€. 이 봇은 제 ν™ˆνŽ˜μ΄μ§€μ— λ‘œλ΄‡ μ•„μ΄μ½˜μœΌλ‘œ ν‘œμ‹œλ©λ‹ˆλ‹€:

그리고 이 λ΄‡μ˜ AI(λͺ¨λΈ)λ₯Ό λ³€κ²½ν•  수 μžˆλŠ”μ§€ κΆκΈˆν•©λ‹ˆλ‹€. λ‹€λ₯Έ κ°€λŠ₯ν•œ μ˜΅μ…˜μ€ λ¬΄μ—‡μΈκ°€μš”?

가끔은 닡변을 ν•˜μ§€ λͺ»ν•œλ‹€κ³  μ‘λ‹΅ν•˜κΈ°λ„ ν•©λ‹ˆλ‹€:

λ‹€λ₯Έ κ²½μš°μ—λŠ” 계속 닡변을 μ‹œλ„ν•˜μ§€λ§Œ 끝내 λ‹΅λ³€ν•˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€: