Discourse ์ฑ—๋ด‡ ๐Ÿค–

์ตœ๊ทผ PR ์š”์•ฝ โ€” 2026๋…„ 8์›” 1์ผ~3์ผ

Discourse Chatbot ๋ฐ ๊ทธ ํ™•์žฅ ํ”Œ๋Ÿฌ๊ทธ์ธ ์ „๋ฐ˜์—์„œ ์—ฌ๋Ÿฌ ๊ด€๋ จ PR์ด ๋ณ‘ํ•ฉ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

์ฃผ์š” ๋‚ด์šฉ

  • verify-and-revise, best-of-two, ๋ถˆํ™•์‹ค์„ฑ ๊ธฐ๋ฐ˜ ์ถ”๋ก ์„ ํฌํ•จํ•œ ๊ณ ๊ธ‰ ๋กœ์ปฌ ์ถ”๋ก  ์ „๋žต์„ ๋„์ž…ํ–ˆ์Šต๋‹ˆ๋‹ค.
  • ์ตœ์‹  OpenAI ๋ชจ๋ธ๊ณผ ์ƒˆ๋กœ์šด ์ตœ๋Œ€ ์ถ”๋ก  ๋…ธ๋ ฅ(max reasoning effort)์„ ์ถ”๊ฐ€ํ–ˆ์Šต๋‹ˆ๋‹ค.
  • ์ž„๋ฒ ๋”ฉ ์œ ์‚ฌ๋„๋ฅผ ํ™œ์šฉํ•œ ์˜๋ฏธ๋ก ์  ์ฐจ๋‹จ ์งˆ๋ฌธ ๊ฒŒ์ดํŠธ๋ฅผ ์ถ”๊ฐ€ํ–ˆ์Šต๋‹ˆ๋‹ค.
    • LLM ํ† ํฐ ๋น„์šฉ ์—†์ด ๋ด‡์ด ์ฒ˜๋ฆฌํ•˜์ง€ ์•Š๊ธฐ๋ฅผ ์›ํ•˜๋Š” ์ฃผ์ œ๋ฅผ ์ž„๋ฒ ๋”ฉ์„ ํ†ตํ•ด ์ฐจ๋‹จํ•˜๋ฏ€๋กœ ์ƒ๋‹นํ•œ ๋น„์šฉ ์ ˆ๊ฐ ํšจ๊ณผ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.
  • ๊ธฐ๋ณธ ๊ตฌํ˜„๊ณผ RAG ๊ตฌํ˜„์„ ๋‹จ์ผ DiscourseChatbot::Bot์œผ๋กœ ํ†ตํ•ฉํ–ˆ์Šต๋‹ˆ๋‹ค.
  • ๋ด‡ ๋ชจ๋“œ ์„ค์ •์„ ์‹ ๋ขฐ ์ˆ˜์ค€ ๋‚ด์žฅ ๋„๊ตฌ ์„ ํƒ์ž๋กœ ๋Œ€์ฒดํ–ˆ์Šต๋‹ˆ๋‹ค.
  • ํ™•์žฅ API ๋ช…์นญ์„ โ€œFunctionโ€์—์„œ โ€œToolโ€๋กœ ๋ณ€๊ฒฝํ–ˆ์Šต๋‹ˆ๋‹ค.
  • SafeRuby ๊ธฐ๋ฐ˜ ๊ณ„์‚ฐ๊ธฐ ๋„๊ตฌ๋ฅผ ์ œ์•ฝ๋œ Dentaku ํ‘œํ˜„์‹ ํ‰๊ฐ€๊ธฐ๋กœ ๋Œ€์ฒดํ–ˆ์Šต๋‹ˆ๋‹ค - ์ด๋ฆ„๊ณผ๋Š” ๋‹ฌ๋ฆฌ SafeRuby์—๋Š” ์ทจ์•ฝ์ ์ด ์กด์žฌํ•˜๋ฏ€๋กœ ๋ณด์•ˆ ์ธก๋ฉด์—์„œ ํฐ ๊ฐœ์„  ์‚ฌํ•ญ์ž…๋‹ˆ๋‹ค.
  • Chatbot ๋ฐ ๊ทธ ํ™•์žฅ ํ”Œ๋Ÿฌ๊ทธ์ธ ์ „๋ฐ˜์— ๊ฑธ์ณ Zeitwerk ๋กœ๋”ฉ์„ ์ฑ„ํƒํ–ˆ์Šต๋‹ˆ๋‹ค.
  • ์œ„์น˜ ๊ด€๋ จ ๋„๊ตฌ๋ฅผ Locations Early Access ํ”Œ๋Ÿฌ๊ทธ์ธ์œผ๋กœ ์ด๋™ํ–ˆ์Šต๋‹ˆ๋‹ค (์ ‘๊ทผ ๊ถŒํ•œ ์žฌํš๋“์„ ์œ„ํ•ด ์Šคํฐ์„œ๋ฅผ ํ•ด์ฃผ์„ธ์š”)
  • ๊ณ„์‚ฐ๊ธฐ ์˜ค๋ฅ˜ ๋ณต๊ตฌ ๋ฐ ์ผ๋ฐ˜ ฯ€/e ํ‘œ๊ธฐ๋ฒ•์— ๋Œ€ํ•œ ์ง€์›์„ ๊ฐœ์„ ํ–ˆ์Šต๋‹ˆ๋‹ค.
  • README๋ฅผ ๊ฐฑ์‹ ํ–ˆ์Šต๋‹ˆ๋‹ค.
  • ๋ฉ”์ธ ํ”Œ๋Ÿฌ๊ทธ์ธ ๋ฒ„์ „์„ 1.8.0์—์„œ 2.4.1๋กœ ์—…๋ฐ์ดํŠธํ–ˆ์Šต๋‹ˆ๋‹ค.

Discourse Chatbot

  • #162 โ€” ์ˆ˜์ •: Responses API ์ถ”๋ก  ์ƒํƒœ ๋ณด์กด (FIX: Preserve Responses API reasoning state - Pull Request #162 - merefield/discourse-chatbot - GitHub)
    Responses API์˜ ์ถ”๋ก  ๋ฐ ๋„๊ตฌ ์—ฐ์†์„ฑ์„ ์•ˆ์ •ํ™”ํ•˜๊ณ , ๊ตฌ์„ฑ ๊ฐ€๋Šฅํ•œ ๋ฐ˜๋ณต ๋ฐ ํ† ํฐ ํ•œ๋„๋ฅผ ๋„์ž…ํ–ˆ์œผ๋ฉฐ, URL ์ถœ์ฒ˜ ๊ฒ€์ฆ์„ ๊ฐœ์„ ํ•˜๊ณ  ์œ ์šฉํ•œ ๋ถ€๋ถ„ ์‘๋‹ต์„ ๋ณด์กดํ•˜๋ฉฐ, ๋นˆ ์‘๋‹ต์ด๋‚˜ ํ˜•์‹์ด ์ž˜๋ชป๋œ ์‘๋‹ต์ด ์ˆ˜์šฉ๋˜๋Š” ๊ฒƒ์„ ๋ฐฉ์ง€ํ–ˆ์Šต๋‹ˆ๋‹ค.

  • #163 โ€” ๊ธฐ๋Šฅ: ๊ณ ๊ธ‰ ๋กœ์ปฌ ์ถ”๋ก  ์ „๋žต ์ถ”๊ฐ€ (FEATURE: Add advanced local reasoning strategies - Pull Request #163 - merefield/discourse-chatbot - GitHub)
    Chat Completions์„ ์œ„ํ•œ ๋‹จ์ˆœ, verify-and-revise, best-of-two, ๋ถˆํ™•์‹ค์„ฑ ๊ธฐ๋ฐ˜ ์ถ”๋ก  ์ „๋žต์„ ์ถ”๊ฐ€ํ–ˆ์œผ๋ฉฐ, ๋ณด์กฐ ์š”์ฒญ์— ํ•œ๊ณ„๋ฅผ ๋‘์—ˆ๊ณ  ์Šคํƒœํ”„๊ฐ€ ๋ณผ ์ˆ˜ ์žˆ๋Š” ๊ฐ์‚ฌ ๊ธฐ๋ก์„ ๋„์ž…ํ–ˆ์Šต๋‹ˆ๋‹ค.

  • #164 โ€” ๊ธฐ๋Šฅ: ์ตœ์‹  OpenAI ๋ชจ๋ธ ์ถ”๊ฐ€ (FEATURE: Add current OpenAI models - Pull Request #164 - merefield/discourse-chatbot - GitHub)
    ๋ชจ๋ธ ์„ ํƒ๊ธฐ์— ์ตœ์‹  GPT-5.x ๋ฐ Pro ๋ณ€ํ˜•์„ ์—…๋ฐ์ดํŠธํ•˜๊ณ , ์ ์ ˆํ•œ ๋ชจ๋ธ์„ Responses API๋กœ ๋ผ์šฐํŒ…ํ•˜๋ฉฐ, ์ตœ๋Œ€ ์ถ”๋ก  ๋…ธ๋ ฅ์„ ์ถ”๊ฐ€ํ–ˆ์Šต๋‹ˆ๋‹ค.

  • #165 โ€” ์ˆ˜์ •: ๊ณ„์‚ฐ๊ธฐ ์žฌ์‹œ๋„ ๊ฐ€์ด๋“œ ๊ฐœ์„  (FIX: Improve calculator retry guidance - Pull Request #165 - merefield/discourse-chatbot - GitHub)
    ๋ชจ๋ธ์ด ๊ณ„์‚ฐ๊ธฐ ๊ตฌ๋ฌธ๊ณผ ๋ณต๊ตฌ ๊ฐ€์ด๋“œ๋ฅผ ๋” ๋ช…ํ™•ํ•˜๊ฒŒ ์ดํ•ดํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•˜์—ฌ, ์ˆ˜์ • ๊ฐ€๋Šฅํ•œ ์‹คํŒจ๊ฐ€ ์ ์ ˆํžˆ ์žฌ์‹œ๋„๋˜๋„๋ก ํ–ˆ์Šต๋‹ˆ๋‹ค.

  • #166 โ€” ๊ธฐ๋Šฅ: ์˜๋ฏธ๋ก ์  ์ฐจ๋‹จ ์งˆ๋ฌธ ๊ฒŒ์ดํŠธ ์ถ”๊ฐ€ (FEATURE: Add semantic blocked-question gate - Pull Request #166 - merefield/discourse-chatbot - GitHub)
    ๊ด€๋ฆฌ์ž๊ฐ€ ์ •์˜ํ•œ ์ฐจ๋‹จ๋œ ์ฃผ์‹์„ ์‹๋ณ„ํ•˜๊ณ  ๋ฉ”์ธ ๋ชจ๋ธ์„ ํ˜ธ์ถœํ•˜๊ธฐ ์ „์— ํ‘œ์ค€ ์‘๋‹ต์„ ๋ฐ˜ํ™˜ํ•  ์ˆ˜ ์žˆ๋Š” ์„ ํƒ์  ์ž„๋ฒ ๋”ฉ ๊ธฐ๋ฐ˜ ๊ฒŒ์ดํŠธ๋ฅผ ์ถ”๊ฐ€ํ–ˆ์Šต๋‹ˆ๋‹ค. ์บ์‹ฑ, ์Šคํƒœํ”„ ๊ฐ์‚ฌ, ์‹คํŒจ ์‹œ ๊ฐœ๋ฐฉ(fail-open) ๋™์ž‘, ์‚ฌ์šฉ์ž ์ •์˜ ์ž„๋ฒ ๋”ฉ ๋ชจ๋ธ ์ง€์›์„ ํฌํ•จํ•ฉ๋‹ˆ๋‹ค.

  • #167 โ€” ๊ฐœ๋ฐœ: SafeRuby ๋Œ€์ฒด ๋ฐ Zeitwerk ๋กœ๋”ฉ ์ฑ„ํƒ (DEV: Replace SafeRuby and adopt Zeitwerk loading - Pull Request #167 - merefield/discourse-chatbot - GitHub)
    ๋ฒค๋”๋ง๋œ SafeRuby ํ‰๊ฐ€๊ธฐ๋ฅผ Dentaku๋กœ ๋Œ€์ฒดํ•˜๊ณ , ๋„ค์ž„์ŠคํŽ˜์ด์Šค์™€ ํŒŒ์ผ๋ช…์„ Zeitwerk์™€ ์ •๋ ฌํ–ˆ์œผ๋ฉฐ, ํ”Œ๋Ÿฌ๊ทธ์ธ์˜ ๋กœ๋”ฉ ๋ฐ ๋ฆฐํŠธ ๊ตฌ์„ฑ์„ ํ˜„๋Œ€ํ™”ํ–ˆ์Šต๋‹ˆ๋‹ค. SafeRuby์— ์ทจ์•ฝ์ ์ด ์žˆ์—ˆ๋˜ ๊ฒƒ์œผ๋กœ ๋ฐํ˜€์ ธ ์ด ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜์ด ์ด๋ฃจ์–ด์กŒ์Šต๋‹ˆ๋‹ค.

  • #168 โ€” ๊ฐœ๋ฐœ: Chatbot์—์„œ Locations ํ•จ์ˆ˜ ์ถ”์ถœ (DEV: Extract Locations functions from Chatbot - Pull Request #168 - merefield/discourse-chatbot - GitHub)
    ๋ฉ”์ธ ํ”Œ๋Ÿฌ๊ทธ์ธ์—์„œ ์œ„์น˜ ๊ด€๋ จ ๋„๊ตฌ์™€ ์„ค์ •์„ ์ œ๊ฑฐํ•˜์—ฌ, discourse-locations๊ฐ€ ๋…๋ฆฝ์ ์œผ๋กœ ์ œ๊ณตํ•  ์ˆ˜ ์žˆ๋„๋ก ํ–ˆ์Šต๋‹ˆ๋‹ค.

  • #169 โ€” ๊ธฐ๋Šฅ: ๋ด‡ ๋ชจ๋“œ๋ฅผ ์‹ ๋ขฐ ์ˆ˜์ค€ ๋„๊ตฌ ์„ ํƒ์œผ๋กœ ๋Œ€์ฒด
    (FEATURE: Replace bot modes with trust-level tool selection - Pull Request #169 - merefield/discourse-chatbot - GitHub)
    ์ด๋Š” ์ฃผ์š” ์•„ํ‚คํ…์ฒ˜ ํ•ฉ๋ฆฌํ™” ์ž‘์—…์ด์—ˆ์Šต๋‹ˆ๋‹ค:

    • ๊ฐœ๋ณ„ ๊ธฐ๋ณธ ๋ฐ RAG ๋ด‡์„ DiscourseChatbot::Bot์œผ๋กœ ๋Œ€์ฒดํ–ˆ์Šต๋‹ˆ๋‹ค.
    • ๊ฐ ์‹ ๋ขฐ ์ˆ˜์ค€์— ๋Œ€ํ•œ ๋‚ด์žฅ ๋„๊ตฌ ์„ ํƒ์ž๋ฅผ ์ถ”๊ฐ€ํ–ˆ์Šต๋‹ˆ๋‹ค.
    • ๋นˆ ์„ ํƒ์ž๋ฅผ ๋„๊ตฌ ์—†์ด ๋‹จ์ˆœํ•œ ๋ด‡๊ณผ ๋™๋“ฑํ•˜๊ฒŒ ์ทจ๊ธ‰ํ•˜๋„๋ก ํ–ˆ์Šต๋‹ˆ๋‹ค.
    • ๋น„์ „(Vision) ๋ฐ ํŽ˜์ธํŒ…์„ ๋„๊ตฌ ์„ ํƒ ์‹œ์Šคํ…œ์— ํ†ตํ•ฉํ–ˆ์Šต๋‹ˆ๋‹ค.
    • ์™ธ๋ถ€์—์„œ ๊ณต๊ธ‰๋˜๋Š” ํ”Œ๋Ÿฌ๊ทธ์ธ ๋„๊ตฌ๋Š” ๋‚ด์žฅ ์„ ํƒ์ž ์™ธ๋ถ€์— ๋‘์—ˆ์Šต๋‹ˆ๋‹ค.
    • Function ์šฉ์–ด, ์„ค์ • ๋ฐ ํด๋ž˜์Šค๋ฅผ Tool๋กœ ๋ณ€๊ฒฝํ–ˆ์Šต๋‹ˆ๋‹ค.
    • ์„ค์ •์„ ์žฌ๋ฐฐ์น˜, ์ธ์ ‘ ๋ฐฐ์น˜ ๋ฐ ์กฐ๊ฑด๋ถ€๋กœ ์ˆจ๊ฒผ์Šต๋‹ˆ๋‹ค.
    • ๊ธฐ์กด ๊ตฌ์„ฑ์„ ์œ„ํ•œ ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜ ์ฒ˜๋ฆฌ๋ฅผ ์ถ”๊ฐ€ํ–ˆ์Šต๋‹ˆ๋‹ค.
    • ํ• ๋‹น๋Ÿ‰ ์ฐจ๊ฐ์„ ๋™์‹œ์„ฑ ์•ˆ์ „ํ•˜๋„๋ก ๋งŒ๋“ค์—ˆ์Šต๋‹ˆ๋‹ค.
    • ์‘๋‹ต ๋ฌธ์ž ์ˆ˜ ์ œํ•œ, ๋กœ๊น… ์„ ํƒ, ๋ฐ”์ด๋„ˆ๋ฆฌ PDF ์ฝ๊ธฐ๋ฅผ ์ˆ˜์ •ํ–ˆ์Šต๋‹ˆ๋‹ค.
  • #170 โ€” ์ˆ˜์ •: ๊ณ„์‚ฐ๊ธฐ ๋„๊ตฌ ๋ณต๊ตฌ ๊ฐœ์„  (FIX: Improve calculator tool recovery - Pull Request #170 - merefield/discourse-chatbot - GitHub)
    Math::PI, Math.PI, Math::E, Math.E, ฯ€์™€ ๊ฐ™์€ ์นœ์ˆ™ํ•œ ํ‘œํ˜„์‹์„ Dentaku ํ˜ธํ™˜ ๊ตฌ๋ฌธ์œผ๋กœ ์ •๊ทœํ™”ํ–ˆ์Šต๋‹ˆ๋‹ค.
    ๋ณ€๊ฒฝ๋˜์ง€ ์•Š์€ ์ž˜๋ชป๋œ ํ˜ธ์ถœ์ด ๋ฐ˜๋ณต๋  ๊ฒฝ์šฐ ์‹คํ–‰ ๊ฐ€๋Šฅํ•œ ๊ฐ€์ด๋“œ์™€ ํ•จ๊ป˜ ๊ฑฐ๋ถ€๋ฉ๋‹ˆ๋‹ค.

  • #171 โ€” ๊ฐœ๋ฐœ: ์ฑ—๋ด‡ ๋ฌธ์„œ ๊ฐฑ์‹  (DEV: Refresh chatbot documentation - Pull Request #171 - merefield/discourse-chatbot - GitHub)
    ํ†ตํ•ฉ๋œ ๋ด‡ ๋ฐ ๋„๊ตฌ ์•„ํ‚คํ…์ฒ˜, ์ถ”๋ก  ์ „๋žต, ์ฐจ๋‹จ๋œ ์งˆ๋ฌธ, ๊ณ„์‚ฐ๊ธฐ ๋™์ž‘, ํ•œ๋„, ํ• ๋‹น๋Ÿ‰, ์‚ฌ์šฉ์ž ์ •์˜ ์—”๋“œํฌ์ธํŠธ, ์ด๋ฏธ์ง€/PDF ์ง€์›, ํ˜„์žฌ ์„ค์ •์— ๋Œ€ํ•ด README๋ฅผ ์—…๋ฐ์ดํŠธํ–ˆ์Šต๋‹ˆ๋‹ค. ๋น„์ „ ์ง€์›์€ ๋” ์ด์ƒ ์‹คํ—˜์ ์ด๋ผ๊ณ  ์„ค๋ช…๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

๋™๋ฐ˜ ํ”Œ๋Ÿฌ๊ทธ์ธ

  • discourse-locations #4 โ€” ์ˆ˜์ •: ๋„๊ตฌ API์— ๋งž๊ฒŒ Chatbot ์œ„์น˜ ํ™•์žฅ ์—…๋ฐ์ดํŠธ (https://github.com/merefield/discourse-locations-early-access/pull/4)
    ์ถ”์ถœ๋œ ์œ„์น˜ ํ†ตํ•ฉ์„ DiscourseChatbot::Tool๋กœ ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜ํ•˜๊ณ , Locations::Chatbot::Tools ์•„๋ž˜์— ๋ฐฐ์น˜ํ–ˆ์œผ๋ฉฐ, ํ†ตํ•ฉ๋œ ๋ด‡์— ๋งž๊ฒŒ ์—…๋ฐ์ดํŠธํ–ˆ์Šต๋‹ˆ๋‹ค.

  • Function ํ™•์žฅ ์˜ˆ์ œ #1 โ€” ์ˆ˜์ •: Chatbot ๋„๊ตฌ API์— ๋งž๊ฒŒ ์˜ˆ์ œ ํ™•์žฅ ์—…๋ฐ์ดํŠธ (FIX: Update example extension for Chatbot tool API - Pull Request #1 - merefield/discourse-chatbot-function-extension-example - GitHub)
    ์˜ˆ์ œ ํ”Œ๋Ÿฌ๊ทธ์ธ์„ DiscourseChatbot::Tool, Zeitwerk ๋กœ๋”ฉ, ๋„๊ตฌ ์ง€ํ–ฅ ์„ค์ • ๋ฐ ๋ฒˆ์—ญ, ๋ ˆ๊ฑฐ์‹œ ํ˜ธํ™˜์„ฑ ์ฝ”๋“œ ์—†์ด ์ดˆ์ ์„ ๋งž์ถ˜ ๋™์ž‘ ํ…Œ์ŠคํŠธ๋ฅผ ์‹œ์—ฐํ•˜๋„๋ก ์—…๋ฐ์ดํŠธํ–ˆ์Šต๋‹ˆ๋‹ค.

2๊ฐœ์˜ ์ข‹์•„์š”