Discourse ์ฑ—๋ด‡ ๐Ÿค–

:information_source: ์š”์•ฝ Discourse์šฉ ์›๋ณธ AI ์ฑ—๋ด‡
:hammer_and_wrench: ๋ฆฌํฌ์ง€ํ† ๋ฆฌ ๋งํฌ GitHub - merefield/discourse-chatbot: An AI bot with RAG capability for Topics, Chat & Customer Support in Discourse, currently powered by OpenAI ยท GitHub
:open_book: ์„ค์น˜ ๊ฐ€์ด๋“œ Discourse์— ํ”Œ๋Ÿฌ๊ทธ์ธ ์„ค์น˜ ๋ฐฉ๋ฒ•
:heart: ์Šคํฐ์„œ์‹ญ ์ด ํ”Œ๋Ÿฌ๊ทธ์ธ์ด ๋งˆ๋•…ํžˆ ๋ฐ›์•„์•ผ ํ•  ์œ ์ง€๋ณด์ˆ˜๋ฅผ ๋ฐ›๊ณ  ํ–ฅํ›„์—๋„ ์‚ฌ์šฉ์ž์˜ ์‚ฌ์ดํŠธ์—์„œ ๊ณ„์† ์ž‘๋™ํ•  ์ˆ˜ ์žˆ๋„๋ก, ์‚ฌ์šฉ์ž์˜ ์กฐ์ง๊ณผ ๊ฐœ์ธ์˜ ์ž์› ๋ฐ ํ•„์š”์— ๋งž๋Š” ์ˆ˜์ค€์œผ๋กœ ์ €์˜ ์˜คํ”ˆ์†Œ์Šค ์ž‘์—…์— ๋Œ€ํ•œ ์ •๊ธฐ์ ์ธ ์Šคํฐ์„œ๊ฐ€ ๋˜์–ด ์ฃผ์‹ญ์‹œ์˜ค.

์ด ํ”Œ๋Ÿฌ๊ทธ์ธ์„ ์ฆ๊ธฐ๊ณ  ๊ณ„์‹ ๊ฐ€์š”? GitHub์—์„œ :star:๋ฅผ ๋ˆŒ๋Ÿฌ ์ฃผ์„ธ์š”! :pray:

:information_source: ์ด๋Š” ๋…๋ฆฝ์ ์œผ๋กœ ๊ธฐ์—ฌ๋œ ํ”Œ๋Ÿฌ๊ทธ์ธ์ด๋ฏ€๋กœ, ์ง€์›, ๋ฒ„๊ทธ, UX, ๊ธฐ๋Šฅ ์š”์ฒญ์€ ์ด ํ† ํ”ฝ์—์„œ ํ•ด ์ฃผ์‹ญ์‹œ์˜ค. ์ฐธ๊ณ : ์ด ํ”Œ๋Ÿฌ๊ทธ์ธ์€ Discourse.org ํ˜ธ์ŠคํŒ…์—์„œ๋Š” ์‚ฌ์šฉํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. ์…€ํ”„ ํ˜ธ์ŠคํŒ…์„ ํ•˜๊ณ  ์žˆ๊ฑฐ๋‚˜, ์ œ3์ž ํ˜ธ์ŠคํŒ…์„ ์‚ฌ์šฉ ์ค‘์ด๋ผ๋ฉด(๋‹จ, ์ œ๊ณต์—…์ฒด์™€ ํ™•์ธ ํ•„์š”) ์„ค์น˜ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

Discourse์šฉ ์›๋ณธ AI ์ฑ—๋ด‡

Chatbot์€ ํ† ํ”ฝ, ๊ฐœ์ธ ๋ฉ”์‹œ์ง€, ์ฑ„ํŒ… ์ฑ„๋„, ์ฑ„ํŒ… ์Šค๋ ˆ๋“œ์— ์„ค์ • ๊ฐ€๋Šฅํ•œ AI ๋Œ€ํ™”๋ฅผ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค. ์ปค๋ฎค๋‹ˆํ‹ฐ์— ์ ํ•ฉํ•œ ์บ๋ฆญํ„ฐ๋ฅผ ๋ด‡์— ๋ถ€์—ฌํ•˜๊ณ , ์–ด๋–ค ๊ทธ๋ฃน์ด ์ด๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š”์ง€ ๊ฒฐ์ •ํ•˜๋ฉฐ, ์‹ ๋ขฐ๋„๊ฐ€ ๋‚ฎ๊ฑฐ๋‚˜ ์ค‘๊ฐ„์ด๊ฑฐ๋‚˜ ๋†’์€ ์‚ฌ์šฉ์ž๋ฅผ ์œ„ํ•ด ์„œ๋กœ ๋‹ค๋ฅธ ๋ชจ๋ธ๊ณผ ๋„๊ตฌ๋ฅผ ์„ ํƒํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋‹ค์Œ๊ณผ ๊ฐ™์€ ๊ธฐ๋Šฅ์„ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค:

  • ํ˜„์žฌ ๋Œ€ํ™”์—์„œ ์ •์ƒ์ ์œผ๋กœ ๋‹ต๋ณ€;
  • ์„ ํƒ๋œ ํฌ๋Ÿผ ์ฝ˜ํ…์ธ ๋ฅผ ์‹œ๋งจํ‹ฑ ๋˜๋Š” ํ•˜์ด๋ธŒ๋ฆฌ๋“œ ๊ฒ€์ƒ‰์œผ๋กœ ํƒ์ƒ‰;
  • ์œ„ํ‚ค๋ฐฑ๊ณผ, ์ตœ์‹  ๋‰ด์Šค, ์›น ๊ฒ€์ƒ‰;
  • ์›๊ฒฉ ํŽ˜์ด์ง€ ํฌ๋กค๋ง ๋ฐ ์ข…์ผ ์‹œ์žฅ ๋ฐ์ดํ„ฐ ์กฐํšŒ;
  • ์‹ ๋ขฐํ•  ์ˆ˜ ์žˆ๋Š” ์‹๊ธฐ ๊ธฐ๋ฐ˜ ๊ณ„์‚ฐ ์ˆ˜ํ–‰;
  • ์—…๋กœ๋“œ๋œ ์ด๋ฏธ์ง€ ๋ณด๊ธฐ ๋ฐ ์„ ํƒ์ ์œผ๋กœ PDF ์ฝ๊ธฐ;
  • ์ด๋ฏธ์ง€ ์ƒ์„ฑ ๋ฐ ํŽธ์ง‘;
  • ๋น„๊ณต๊ฐœ ๋Œ€ํ™”์—์„œ ๋ฏธ์ž…๋ ฅ๋œ ํŽธ์ง‘ ๊ฐ€๋Šฅํ•œ ์‚ฌ์šฉ์ž ํ•„๋“œ ์ˆ˜์ง‘;
  • ๋น„๊ณต๊ฐœ ์ฑ„ํŒ… ๋Œ€ํ™”๋ฅผ ์„ค์ •๋œ ์Šคํƒœํ”„ ๊ทธ๋ฃน์œผ๋กœ ์—์Šค์ปฌ๋ ˆ์ด์…˜;
  • ์„ ํƒ๋œ ์นดํ…Œ๊ณ ๋ฆฌ์—์„œ ์ƒˆ๋กœ์šด ํ† ํ”ฝ์— ์ž๋™์œผ๋กœ ์‘๋‹ต; ๊ทธ๋ฆฌ๊ณ 
  • ๋‹ค๋ฅธ ํ”Œ๋Ÿฌ๊ทธ์ธ์ด ์ œ๊ณตํ•˜๋Š” ์ถ”๊ฐ€ ๋„๊ตฌ ์ˆ˜์šฉ.

์‹ค์šฉ์ ์ธ ์ง€์› ์›Œํฌํ”Œ๋กœ์šฐ์— ๋Œ€ํ•ด์„œ๋Š” ๊ธฐ์ˆ  ์ง€์› ์ฑ—๋ด‡ ๊ตฌ์ถ•ํ•˜๊ธฐ๋ฅผ ์ฐธ๊ณ ํ•˜์‹ญ์‹œ์˜ค.

๋กœ์ปฌ ํฌ๋Ÿผ ๊ฒ€์ƒ‰์ด ํ™œ์„ฑํ™”๋˜๋ฉด, ๋ด‡์€ ์ปค๋ฎค๋‹ˆํ‹ฐ์˜ ์ฝ˜ํ…์ธ ์— ๊ธฐ๋ฐ˜ํ•˜์—ฌ ๋‹ต๋ณ€์„ ๋’ท๋ฐ›์นจํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค:

๋” ๋‹จ์ˆœํ•œ ๋Œ€ํ™”๋ฅผ ์œ„ํ•ด, ํ˜ธ์ถœ ํšŸ์ˆ˜, ์ง€์—ฐ ์‹œ๊ฐ„, ๋น„์šฉ์„ ์ค„์ด๋ ค๋ฉด ๋„๊ตฌ๋ฅผ ์ ๊ฒŒ ๋…ธ์ถœํ•˜๊ฑฐ๋‚˜ ๋…ธ์ถœํ•˜์ง€ ๋งˆ์‹ญ์‹œ์˜ค:

ํ”„๋กœ๋ฐ”์ด๋” ์ง€์›

์‘๋‹ต, ์ž„๋ฒ ๋”ฉ, ๋น„์ „, ์ด๋ฏธ์ง€ ์ƒ์„ฑ์„ ์œ„ํ•ด ํ”„๋กœ๋ฐ”์ด๋”๋ฅผ ๋…๋ฆฝ์ ์œผ๋กœ ์„ ํƒํ•˜์‹ญ์‹œ์˜ค. ๊ฐ ๊ธฐ๋Šฅ์€ ์„ ํƒ๋œ ํ”„๋กœ๋ฐ”์ด๋”์— ์†ํ•œ API ํ‚ค๋ฅผ ์žฌ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

๊ธฐ๋Šฅ OpenAI Anthropic Google Gemini xAI
LLM ์‘๋‹ต ๋ฐ ๋„๊ตฌ :white_check_mark: :white_check_mark: :white_check_mark: :white_check_mark:
์ž„๋ฒ ๋”ฉ :white_check_mark: โ€” :white_check_mark: :white_check_mark:
๋น„์ „ :white_check_mark: :white_check_mark: :white_check_mark: :white_check_mark:
์ด๋ฏธ์ง€ ์ƒ์„ฑ :white_check_mark: โ€” :white_check_mark: :white_check_mark:
์ด๋ฏธ์ง€ ํŽธ์ง‘ GPT Image ๋ชจ๋ธ โ€” โ€” :white_check_mark:
PDF ๋Œ€ํ™” ์ž…๋ ฅ :white_check_mark: โ€” โ€” โ€”

์ปค์Šคํ…€ URL์ด ์„ค์ •๋˜์ง€ ์•Š์€ ๊ฒฝ์šฐ, Chatbot์€ ์„ ํƒ๋œ ํ”„๋กœ๋ฐ”์ด๋”์˜ ๋‚ด์žฅ๋œ ๊ณต์‹ ์—”๋“œํฌ์ธํŠธ๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. ์ปค์Šคํ…€ ๋ชจ๋ธ ์ด๋ฆ„๊ณผ URL์€ ์ง€์›๋˜๋Š” ํ”„๋กœ๋ฐ”์ด๋”์˜ API ํ˜•์‹์„ ๊ตฌํ˜„ํ•˜๋Š” Azure OpenAI, Ollama, ํ”„๋ก์‹œ ๋ฐ ๊ธฐํƒ€ ์„œ๋น„์Šค๋ฅผ ์ง€์›ํ•ฉ๋‹ˆ๋‹ค.

ํ”„๋กœ๋ฐ”์ด๋”๋ณ„ ๋ชจ๋ธ ๋“œ๋กญ๋‹ค์šด์€ ํ•ด๋‹น ํ”„๋กœ๋ฐ”์ด๋”๊ฐ€ ํ™œ์„ฑํ™”๋œ ๊ฒฝ์šฐ์—๋งŒ ํ‘œ์‹œ๋ฉ๋‹ˆ๋‹ค. ์‘๋‹ต ๋ชจ๋ธ์€ ์‹ ๋ขฐ ์ˆ˜์ค€์— ๋”ฐ๋ผ ๋‹ฌ๋ผ์งˆ ์ˆ˜ ์žˆ์œผ๋ฉฐ, ์ž„๋ฒ ๋”ฉ, ๋น„์ „, ์ด๋ฏธ์ง€ ์ƒ์„ฑ์€ ๊ฐ๊ฐ ๊ณ ์œ ํ•œ ํ”„๋กœ๋ฐ”์ด๋”์™€ ๋ชจ๋ธ ์„ ํƒ๊ธฐ๋ฅผ ๊ฐ€์ง‘๋‹ˆ๋‹ค.

์ „์ฒด ํ”„๋กœ๋ฐ”์ด๋” ๋ฐ ์ปค์Šคํ…€ ์—”๋“œํฌ์ธํŠธ ๊ฐ€์ด๋“œ ๋ณด๊ธฐ

์•ก์„ธ์Šค, ํ• ๋‹น๋Ÿ‰ ๋ฐ ๋„๊ตฌ

Chatbot์˜ ๋‚ฎ์€, ์ค‘๊ฐ„, ๋†’์€ ์‹ ๋ขฐ ์ˆ˜์ค€ ๊ทธ๋ฃน ์„ค์ •์— ๊ทธ๋ฃน์„ ํ• ๋‹นํ•˜๊ธฐ ์ „๊นŒ์ง€๋Š” ์•„๋ฌด๋„ ์•ก์„ธ์Šคํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. ์‚ฌ์šฉ์ž๋Š” ๊ฐ€์žฅ ๋†’์€ ์ผ์น˜ํ•˜๋Š” Chatbot ์‹ ๋ขฐ ์ˆ˜์ค€์˜ ํ• ๋‹น๋Ÿ‰, ๋ชจ๋ธ, ๋„๊ตฌ ํ—ˆ์šฉ ๋ชฉ๋ก์„ ์ƒ์†๋ฐ›์Šต๋‹ˆ๋‹ค. ํ• ๋‹น๋Ÿ‰์€ ์ฟผ๋ฆฌ ๋˜๋Š” ํ† ํฐ์œผ๋กœ ์ธก์ •ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋‚ด์žฅ ๋„๊ตฌ๋Š” ๊ฐ ์‹ ๋ขฐ ์ˆ˜์ค€๋ณ„๋กœ ๋…๋ฆฝ์ ์œผ๋กœ ์„ ํƒ๋ฉ๋‹ˆ๋‹ค. ์ž๊ฒฉ ์ฆ๋ช… ๋ฐ ์ง€์› ์„ค์ •์€ ์—ฌ์ „ํžˆ ๋Ÿฐํƒ€์ž„ ๊ฐ€์šฉ์„ฑ์„ ์ œ์–ดํ•˜๋ฏ€๋กœ, API ํ‚ค ์—†์ด ์›น ๋„๊ตฌ๋ฅผ ์„ ํƒํ•ด๋„ ๋…ธ์ถœ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

์•ก์„ธ์Šค ๋ฐ ํ• ๋‹น๋Ÿ‰๊ณผ ์‹ ๋ขฐ ์ˆ˜์ค€๋ณ„ ๋„๊ตฌ์— ๋Œ€ํ•ด ์ฝ์–ด๋ณด์„ธ์š”.

๋กœ์ปฌ ํฌ๋Ÿผ ๊ฒ€์ƒ‰ ๋ฐ ๊ฐœ์ธ์ •๋ณด ๋ณดํ˜ธ

:biohazard: ๋กœ์ปฌ ํฌ๋Ÿผ ๊ฒ€์ƒ‰์„ ํ™œ์„ฑํ™”ํ•˜๊ธฐ ์ „์— ์ž„๋ฒ ๋”ฉ ๋ฒ”์œ„๋ฅผ ์ดํ•ดํ•˜์‹ญ์‹œ์˜ค.

๊ธฐ๋ณธ benchmark_user ์ „๋žต์€ ๊ตฌ์„ฑ๋œ ์‹ ๋ขฐ ์ˆ˜์ค€์—์„œ ์ ํ•ฉํ•œ ์‚ฌ์šฉ์ž์—๊ฒŒ ๋ณด์ด๋Š” ์ฝ˜ํ…์ธ ๋ฅผ ์ž„๋ฒ ๋”ฉํ•ฉ๋‹ˆ๋‹ค. categories ์ „๋žต์€ ๋ช…์‹œ์ ์œผ๋กœ ์„ ํƒ๋œ ์นดํ…Œ๊ณ ๋ฆฌ์˜ ์ฝ˜ํ…์ธ ๋ฅผ ์ž„๋ฒ ๋”ฉํ•ฉ๋‹ˆ๋‹ค. ์‹œ๋งจํ‹ฑ ๊ฒ€์ƒ‰์€ ์†๋„๋ฅผ ์ตœ์ ํ™”ํ•˜๋„๋ก ์„ค๊ณ„๋˜์–ด ๋ด‡์—๊ฒŒ ์งˆ๋ฌธํ•˜๋Š” ๋ชจ๋“  ์‚ฌ๋žŒ์—๊ฒŒ ๊ฐ€์‹œ์„ฑ ๊ฒ€์‚ฌ๋ฅผ ๋ฐ˜๋ณตํ•˜์ง€ ์•Š์œผ๋ฏ€๋กœ, ๋ฒ”์œ„์— ์ œํ•œ๋œ ์ฝ˜ํ…์ธ ๊ฐ€ ํฌํ•จ๋˜๋ฉด ์›๋ž˜ ๋Œ€์ƒ ๋ฐ–์œผ๋กœ ๊ณต์œ ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๊ฐœ์ธ ๋ฉ”์‹œ์ง€๋Š” ์ ˆ๋Œ€ ์ž„๋ฒ ๋”ฉ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๋ฒค์น˜๋งˆํฌ ์‹ ๋ขฐ ์ˆ˜์ค€์„ ๋‚ฎ๊ฒŒ ์œ ์ง€ํ•˜๊ณ , ์ฝ˜ํ…์ธ ๊ฐ€ ๋ชจ๋“  Chatbot ์‚ฌ์šฉ์ž์—๊ฒŒ ๊ณต๊ฐœ๋  ์ˆ˜ ์žˆ๋Š” ๊ฒฝ์šฐ๋ฅผ ์ œ์™ธํ•˜๊ณ ๋Š” ๋น„๊ณต๊ฐœ ์นดํ…Œ๊ณ ๋ฆฌ๋ฅผ ํ”ผํ•˜๋ฉฐ, ์‚ฌ์šฉํ•˜์ง€ ์•Š์•„์•ผ ํ•˜๋Š” ์‹ ๋ขฐ ์ˆ˜์ค€์—์„œ local_forum_search๋ฅผ ์ œ๊ฑฐํ•˜์‹ญ์‹œ์˜ค.

์„ ํƒ๋œ ํ”„๋กœ๋ฐ”์ด๋”๋Š” ๋Œ€ํ™” ์ฝ˜ํ…์ธ , ์—…๋กœ๋“œ, ์ž„๋ฒ ๋”ฉ๋œ ๊ฒ€์ƒ‰ ๊ฒฐ๊ณผ, ๋„๊ตฌ ๊ฒฐ๊ณผ๋ฅผ ๋ฐ›์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ํ•ด๋‹น ํ”„๋กœ๋ฐ”์ด๋”์˜ ๋ณด์œ  ๋ฐ ๋ฐ์ดํ„ฐ ์‚ฌ์šฉ ์•ฝ๊ด€์„ ๊ฒ€ํ† ํ•˜๊ณ , ํฌ๋Ÿผ์˜ ์•ฝ๊ด€ ๋ฐ ๊ฐœ์ธ์ •๋ณด ๋ณดํ˜ธ ๊ณ ์ง€์— ์ด ์ฒ˜๋ฆฌ๋ฅผ ๋ช…์‹œํ•˜์‹ญ์‹œ์˜ค.

์ „์ฒด ์ž„๋ฒ ๋”ฉ, ๋ฒ”์œ„ ๋ฐ ๊ฐœ์ธ์ •๋ณด ๋ณดํ˜ธ ๊ฐ€์ด๋“œ ๋ณด๊ธฐ

๋น ๋ฅธ ์‹œ์ž‘

  1. ์ผ๋ฐ˜์ ์ธ ์…€ํ”„ ํ˜ธ์ŠคํŒ… ํ”Œ๋Ÿฌ๊ทธ์ธ ์ ˆ์ฐจ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ํ”Œ๋Ÿฌ๊ทธ์ธ์„ ์„ค์น˜ํ•˜์‹ญ์‹œ์˜ค.
  2. chatbot_llm_provider๋ฅผ ์„ ํƒํ•˜๊ณ  ํ•ด๋‹น ํ”„๋กœ๋ฐ”์ด๋”์˜ API ํ‚ค๋ฅผ ์ž…๋ ฅํ•œ ํ›„, ๊ฐ ์‹ ๋ขฐ ์ˆ˜์ค€์— ๋Œ€ํ•œ ๋ชจ๋ธ์„ ์„ ํƒํ•˜์‹ญ์‹œ์˜ค.
  3. ๋‚ฎ์€, ์ค‘๊ฐ„, ๋˜๋Š” ๋†’์€ ์‹ ๋ขฐ ์•ก์„ธ์Šค ์„ค์ •์— ๊ทธ๋ฃน์„ ์ถ”๊ฐ€ํ•˜๊ณ  ํ• ๋‹น๋Ÿ‰์„ ๊ตฌ์„ฑํ•˜์‹ญ์‹œ์˜ค.
  4. ๊ฐ ์‹ ๋ขฐ ์ˆ˜์ค€์—์„œ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ๋‚ด์žฅ ๋„๊ตฌ๋ฅผ ์„ ํƒํ•˜์‹ญ์‹œ์˜ค.
  5. local_forum_search๋ฅผ ํ™œ์„ฑํ™”ํ•˜๋Š” ๊ฒฝ์šฐ, ๊ทธ ์ž„๋ฒ ๋”ฉ ํ”„๋กœ๋ฐ”์ด๋”๋ฅผ ๊ตฌ์„ฑํ•˜๊ณ  ๋ฒ”์œ„๋ฅผ ์‹ ์ค‘ํ•˜๊ฒŒ ๊ฒ€ํ† ํ•˜์‹ญ์‹œ์˜ค.
  6. ๋ด‡์„ ๋ฉ˜์…˜ํ•˜๊ฑฐ๋‚˜, ๋ด‡์—๊ฒŒ ๋‹ต์žฅํ•˜๊ฑฐ๋‚˜, ๋น ๋ฅธ ์•ก์„ธ์Šค ๋ฒ„ํŠผ์„ ์‚ฌ์šฉํ•˜๊ฑฐ๋‚˜, ์นดํ…Œ๊ณ ๋ฆฌ ์ž๋™ ์‘๋‹ต ํ”„๋กฌํ”„ํŠธ๋ฅผ ๊ตฌ์„ฑํ•˜์‹ญ์‹œ์˜ค.

๋น ๋ฅธ OpenAI ์˜ˆ์‹œ

  1. OpenAI API ํ‚ค๋ฅผ ์ƒ์„ฑํ•˜๊ณ  API ๊ฒฐ์ œ๊ฐ€ ํ™œ์„ฑํ™”๋˜์–ด ์žˆ๋Š”์ง€ ํ™•์ธํ•˜์‹ญ์‹œ์˜ค.
  2. chatbot_llm_provider๋ฅผ OpenAI๋กœ ์„ค์ •ํ•˜๊ณ  ํ‚ค๋ฅผ chatbot_open_ai_token์— ๋ถ™์—ฌ๋„ฃ์œผ์‹ญ์‹œ์˜ค.
  3. ์ปค์Šคํ…€ URL์„ ๋น„์›Œ ๋‘๊ณ , ์‚ฌ์šฉํ•˜๋ ค๋Š” ๊ฐ ์‹ ๋ขฐ ์ˆ˜์ค€์— OpenAI ๋ชจ๋ธ์„ ์„ ํƒํ•œ ํ›„, ํ…Œ์ŠคํŠธ ๊ทธ๋ฃน์„ ์ผ์น˜ํ•˜๋Š” Chatbot ์•ก์„ธ์Šค ์„ค์ •์— ์ถ”๊ฐ€ํ•˜์‹ญ์‹œ์˜ค.
  4. ํ—ˆ์šฉ๋œ ํ† ํ”ฝ, ๊ฐœ์ธ ๋ฉ”์‹œ์ง€, ์ฑ„ํŒ…์—์„œ ๋ด‡์„ ๋ฉ˜์…˜ํ•˜์—ฌ ํ…Œ์ŠคํŠธํ•˜์‹ญ์‹œ์˜ค.

๋ฆฌํฌ์ง€ํ† ๋ฆฌ README๋Š” ์‚ฌ์ „ ์š”๊ตฌ ์‚ฌํ•ญ, ๋ชจ๋“  ์ฃผ์š” ์„ค์ • ๊ทธ๋ฃน, ํ”„๋กœ๋ฐ”์ด๋”๋ณ„ ๋™์ž‘, ์ปค์Šคํ…€ ์—”๋“œํฌ์ธํŠธ, ์ž„๋ฒ ๋”ฉ ์œ ์ง€๋ณด์ˆ˜, ํ”„๋กฌํ”„ํŠธ ์ปค์Šคํ„ฐ๋งˆ์ด์ง•, ๋””๋ฒ„๊น…, ํ™•์žฅ ๊ฐœ๋ฐœ, ์–ธ์ธ์Šคํ†จ๋ง์— ๋Œ€ํ•œ ์‚ฌ์‹ค์˜ ์›์ฒœ์ž…๋‹ˆ๋‹ค:

:books: ์ „์ฒด README ์—ด๊ธฐ

์„ ํƒ๋œ UI ๊ธฐ๋Šฅ

์นดํ…Œ๊ณ ๋ฆฌ๋Š” ์ƒˆ๋กœ์šด ํ† ํ”ฝ์„ ํ™˜์˜ํ•˜๊ณ  ๋ด‡์ด ๊ด€๋ จ ์ปค๋ฎค๋‹ˆํ‹ฐ ์ฝ˜ํ…์ธ ๋ฅผ ๊ฒ€์ƒ‰ํ•˜๋„๋ก ์š”์ฒญํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค:

์„ ํƒ์ ์ธ ๋น ๋ฅธ ์•ก์„ธ์Šค ๋ฒ„ํŠผ์€ ๋ด‡๊ณผ์˜ ์ง์ ‘์ ์ธ ์ฑ„ํŒ… ๋˜๋Š” ๊ฐœ์ธ ๋ฉ”์‹œ์ง€๋ฅผ ์—ด ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค:

์‚ฌ์šฉ์ž ํ•„๋“œ ๋„๊ตฌ๋Š” ์ง€์›๋˜๋Š” ๋นˆ ํ•„๋“œ๋ฅผ ๋น„๊ณต๊ฐœ๋กœ ์ˆ˜์ง‘ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค:

์‚ฌ์šฉ์ž ํ•„๋“œ ์ˆ˜์ง‘

์ง€์› ๋ฐ ์Šคํฐ์„œ์‹ญ

์ง€์› ์š”์ฒญ, ๋ฒ„๊ทธ, UX ํ”ผ๋“œ๋ฐฑ, ๊ธฐ๋Šฅ ์•„์ด๋””์–ด๋ฅผ ์ด Meta ํ† ํ”ฝ์—์„œ ๋ณด๊ณ ํ•ด ์ฃผ์‹ญ์‹œ์˜ค. API ํ‚ค์™€ ๋น„๊ณต๊ฐœ ์ฝ˜ํ…์ธ ๋ฅผ ์ œ๊ฑฐํ•œ ์ƒํƒœ์—์„œ ํ”„๋กœ๋ฐ”์ด๋”, ๋ชจ๋ธ ์ด๋ฆ„, ๊ด€๋ จ ์„ค์ •, HTTP ์ƒํƒœ ๋ฐ ํ”„๋กœ๋ฐ”์ด๋” ์‘๋‹ต ๋ณธ๋ฌธ์„ ํฌํ•จํ•˜์‹ญ์‹œ์˜ค.

์ด ์ž‘์—…์€ ์ปค๋ฎค๋‹ˆํ‹ฐ์˜ ์ง€์›์— ์˜์กดํ•ฉ๋‹ˆ๋‹ค. ์ด ํ”Œ๋Ÿฌ๊ทธ์ธ์ด ์‚ฌ์šฉ์ž์˜ ์‚ฌ์ดํŠธ์— ๊ฐ€์น˜ ์žˆ๋‹ค๋ฉด, ์ง€์†์ ์ธ ์œ ์ง€๋ณด์ˆ˜๋ฅผ ์Šคํฐ์„œํ•ด ์ฃผ์‹ญ์‹œ์˜ค.

ํ”„๋กœ์ ํŠธ ์Šคํฐ์„œ

์Šคํฐ์„œ ๋ ˆ๋ฒจ ์›น์‚ฌ์ดํŠธ
Surety Silver Plus suretyhome.com

๋ฉด์ฑ… ์กฐํ•ญ

LLM์€ ์„ค๋“์ ์ด์ง€๋งŒ ์ž˜๋ชป๋œ ์ถœ๋ ฅ์„ ์ƒ์„ฑํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ํ”Œ๋Ÿฌ๊ทธ์ธ์„ ์ปค๋ฎค๋‹ˆํ‹ฐ์˜ ํ•„์š”์— ๋งž๊ฒŒ ํ…Œ์ŠคํŠธํ•˜๊ณ , ๊ฐœ์ธ์ •๋ณด ๋ณดํ˜ธ ๋ฐ ๋น„์šฉ ์˜ํ–ฅ์„ ์ดํ•ดํ•˜๋ฉฐ, ์ ์ ˆํ•œ ๋ชจ๋”๋ ˆ์ด์…˜์„ ์ ์šฉํ•˜์‹ญ์‹œ์˜ค. ์ƒ์„ฑ๋œ ์ถœ๋ ฅ์— ๋Œ€ํ•œ ์•ฝ๊ด€์€ ํ”„๋กœ๋ฐ”์ด๋”์™€ ๊ด€ํ• ๊ถŒ์— ๋”ฐ๋ผ ๋‹ค๋ฅด๋ฉฐ, ํ™œ์„ฑํ™”ํ•˜๋Š” ๋ชจ๋“  ํ”„๋กœ๋ฐ”์ด๋”์˜ ์•ฝ๊ด€์„ ๊ฒ€ํ† ํ•˜์‹ญ์‹œ์˜ค.

104๊ฐœ์˜ ์ข‹์•„์š”
Building a technical support chatbot
Answer feature
Webhooks on chat messages?
How to check what prevents rake migrate?
Weekly Summary of AI topics
Advice on a support bot for a technical support forum (Discourse AI vs Discourse Chatbot)
Interact with discourse from Python?
Sidekiq not working
Locations Plugin :earth_africa:
Lessons from Colossal Caves
Issue after Rebuilding Discourse on Digital Ocean Droplet
Locations Plugin :earth_africa:
I have error when upgrade new version of discourse
I have error when upgrade new version of discourse
Site down after upgrade via SSH - how to fix?
2023: The Year in Review
Character count when writing description
Advice on a support bot for a technical support forum (Discourse AI vs Discourse Chatbot)
Is there an option to use Discourse Chat as a customer service type of chat?
Configure AI Chatbot for Trust Level 0 Access
Creating bot on discourse
AI Helper Plugin
Copy custom file in discourse container while build
Voice to text integration
Allow specifiy user different from guardian.user in chat services such as Chat::CreateMessage
How to add a ChatGPT trained AI to discourse?
Cannot get the js in my component to compile SyntaxError: Private field must be used in an enclosing class
Allow ChatBot to read PDFs so it can join in a group discussion
How to create a custom ChatGPT based bot?
Discourse and Coveo
Link for new DM / personal chat message with pre-filled information
UX IPhone issues
How to respond to automatic topics with AI
Comparison between discourse-ai AI Bot and merefield/discourse-chatbot
Allow multiple โ€˜new topicโ€™ drafts
I have error when upgrade the latest discourse
Two different answers from gpt4o - one right, one wrong.. !?
Is the shortcut to start AI conversation a user setting or not?
Setting Form Templates with a tag
Recommendation: chatbot to support discussion in threads
Photography Mentor Bot
Grouped Site Settings under Headings in Plugins
Update Not Completed and Discourse not opening
Recommendation: chatbot to support discussion in threads
Discourse AI Topic Summary :robot:
Discourse AI Topic Summary :robot:
Hubot Adapter for Discourse
Hubot Adapter for Discourse
Verbose log
Making the case for a hard cap feature on user group AI usage for AI bots and AI Helper
LLMs and the impact on customer support
2024: The Year in Review
How to respond to automatic topics with AI
What User Information is Exposed to LLMs in Discourse AI
Advice on a support bot for a technical support forum (Discourse AI vs Discourse Chatbot)
Configure AI Chatbot for Trust Level 0 Access
Auto responder using AI
Locations Plugin :earth_africa:
Discourse AI Topic Summary :robot:
Discourse Chat Bridge (Telegram)
AI personas integration of the chat plugin: It would be great if site users could chat with AI personas
What's the best way to store data with a plugin?
Locations Plugin :earth_africa:
Locations Plugin :earth_africa:
Is there any built-in chatbot or conversational assistant available in Discourse?
ChatGPT Assistant Integration
Create posts with AI
Multisite vs multiple containers
Training a model on a site's posts?
How are we all feeling about ChatGPT and other LLMs and how they'll impact forums?
GPT-4 with vision available
Use AI to request summary and others things from topic
Upgrading from /admin/upgrade takes *very* long
Embed additional explainer text in Form Template
We need prompt chains: Allow custom AI persona tools to access LangChain.js and/or longer execution time
Advice on a support bot for a technical support forum (Discourse AI vs Discourse Chatbot)
Advice on a support bot for a technical support forum (Discourse AI vs Discourse Chatbot)
Advice on a support bot for a technical support forum (Discourse AI vs Discourse Chatbot)
Configure AI Chatbot for Trust Level 0 Access
Enabling AI Bot in Chat
When I start a conversation with the AI, it gives two answers to my question
Balancing Costs and Functionality in AI-Powered Forums
Advice on a support bot for a technical support forum (Discourse AI vs Discourse Chatbot)

I added Jina.ai to the list of supported APIโ€™s which can be used for web search and web crawling. One key serves both services. Existing APIโ€™s are used if you do not remove their keys.

There were two main reasons:

  • crawling performance seems really good
  • they offer a pay as you go model as opposed to a monthly fee which suits me and may suit you.

Link in settings.

Hey thanks for your interest in Discourse Chatbot.

Two things may be relevant:

  • the bot will Reply to every Post if invoked in a Topic with only a single User until more people join the Topic
  • Per Category, you can get Chatbot to Reply to every new Topic and you can give it special instructions on what to do, governed by a Category specific prompt that you set up in the Category settings.

the bot will always be invoked if you @ mention it so I donโ€™t know if you can utilise that feature too.

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

โ€˜everyโ€™ post? Or only those with a keyword? Are those two different requirements?

Perhaps you could mention Chatbot in the predefined response and the bot will follow up? That would mean two Posts but might work.

So if your predefined response was โ€œ@Chatbot (or whatever youโ€™ve renamed it to) please handle thisโ€ then Chatbot would follow up. Obviously you can tailor that response.

Note Chatbot can respond to whispers too (if you configure it so), so if the predefined response was in a whisper then normal users would only see the Chatbot response which might look neater.

Iโ€™m open to extending the capability of Chatbot if you wish to hire me to do so, so long as we can come up with a sufficiently generic solution that would be useful to others, but it makes sense to leverage what exists I think?

I wonder if the best action here is to add a Whisper capability to the AI Post Classifier? You could hire someone to PR that or raise it as a Contribute > Feature and hope it gets prioritised. That would undoubtedly be genericly useful?

I made some code simplifications by making use of a feature that was added to the Open AI API. Let me know if you encounter any issues.

https://github.com/merefield/discourse-chatbot/pull/116

I decided it was time to call this 1.0.0 :champagne: :tada: :partying_face:

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

Added the ability to add other functions in separate plugins, so you donโ€™t have to maintain a fork of the Chatbot repo.

Example function plugin here:

https://github.com/merefield/discourse-chatbot-function-extension-example

but of course you could add this to any plugin โ€ฆ

PR:

https://github.com/merefield/discourse-chatbot/pull/117

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

@Festinger did you solve this?

Post Embedding: There was a problem, but will retry til limit: undefined method `destroy!โ€™ for nil

After the last update, I started getting the above error. I get this error especially when it comes to images. My vision mode setting is: directly. I wasnโ€™t getting such an error before.

Do you recall deleting a Post (or Topic) shortly after creating one?

This error will occur if you create a Post then delete it before it has chance to create an embedding, so when you delete it, Chatbot tries to delete a non-existent embedding which creates an annoying log message but does not harm :wink:

If you can think of a better way of doing that, feel free to PR.

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

It gave an error like this in the issue sent by the user. It wasnโ€™t something I deleted.

How did the user see this? This is only in logs?

I saw it in the logs. Iโ€™ve been following it for a day, especially the problem occurs in the posts of users who have been members for a long time. If a new member opens a topic with a picture, there is usually no problem, no error is received. When old users open a topic with a picture, there is a problem.

Can you please share the backtrace?

Then why did the user send you an issue? What did they tell you? The user should not be aware of any issue, it just shows up in the logs?

Sounds like your โ€œold membersโ€ might be deleting their recently new topic or post (as they know how to do this) ?

Do you have any automation of any kind in place?

There is no destruction during posting of a post containing a picture, so Iโ€™m not sure how that could happen.

Update: I just uploaded an image to a site and cannot repro.

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

SerpAPI is ok, and theirs statistic shows that request to use Google is done, but Chatbot claims it canโ€™t use Google. That situations has been on for longer time, but I didnโ€™t react because at the moment DAI didnโ€™t want to use Google either.

No error messages.

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

What happens if you say โ€œsearch the web for โ€ฆโ€?

The internal prompt is generic so doesnโ€™t assume Google โ€ฆ

Let me show you a very good demo of this powerful capability:

(although this is using the bundled alternative jina.ai)

I tried that. The system prompt had โ€when an user asks seaching using Google user actually means you should use that web seaching function you had access toโ€. I deleted that part and then tried web search wording in my user prompt โ€” after all, it isnโ€™t using API by Google. No luck and similar answer: I canโ€™t do web searchโ€ฆ

This is only I found, but it doesnโ€™t open this:

{
  "id": "chatcmpl-A1wT9Dp1fCIVSzRsVPhr3NnNCcPjW",
  "object": "chat.completion",
  "created": 1725026447,
  "model": "gpt-4o-2024-05-13",
  "choices": [
    {
      "index": 0,
      "message": {
        "role": "assistant",
        "content": null,
        "tool_calls": [
          {
            "id": "call_MvzexRPsDj6EGuXhuiFcmtrd",
            "type": "function",
            "function": {
              "name": "web_search",
              "arguments": "{\"query\":\"International Dog Day date, reason, and history\"}"
            }
          }
        ],
        "refusal": null
      },
      "logprobs": null,
      "finish_reason": "stop"
    }
  ],
  "usage": {
    "prompt_tokens": 1203,
    "completion_tokens": 20,
    "total_tokens": 1223
  },
  "system_fingerprint": "fp_157b3831f5"
}
2๊ฐœ์˜ ์ข‹์•„์š”

I can live without that because my target is using Chatbot as an internal Q/A-bot, and Jina may solve out the issue of using my maincontent site (by WordPress).

But the result when I tried searching from outside world wasnโ€™t expected.

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

Iโ€™ll see if I can repro

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

Itโ€™s working for me either via Serp API or Jina.ai.

Can you provide the bots โ€œinner thoughtsโ€ from the PM please?

Inner Thoughts
[
  {
    "role": "assistant",
    "content": "",
    "tool_calls": [
      {
        "id": "call_mKY7pfG54xRduRKCz5xee9E0",
        "type": "function",
        "function": {
          "name": "web_search",
          "arguments": "{\"query\":\"list of English butterflies\"}"
        }
      }
    ]
  },
  {
    "role": "tool",
    "tool_call_id": "call_mKY7pfG54xRduRKCz5xee9E0",
    "content": "A-Z of butterflies ยท A. Adonis Blue ยท B Black Hairstreak ยท Brimstone ยท Brown Argus ยท Brown Hairstreak ยท C Chalk Hill Blue ยท Chequered Skipper ยท Clouded Yellow ยท D."
  }
]
1๊ฐœ์˜ ์ข‹์•„์š”

Should we do this using PM? We are now just polluting this topic.

But:

[
  {
    "role": "assistant",
    "content": "",
    "tool_calls": [
      {
        "id": "call_4xitHqRBJ8Wc1HI546r3Wj1U",
        "type": "function",
        "function": {
          "name": "web_search",
          "arguments": "{\"query\":\"International Dog Day date and history\"}"
        }
      }
    ]
  },
  {
    "role": "tool",
    "tool_call_id": "call_4xitHqRBJ8Wc1HI546r3Wj1U",
    "content": "International Dog Day date and history: my search for this on the internet failed."
  }
]