๋ณธ๋ฌธ์œผ๋กœ ๊ฑด๋„ˆ๋›ฐ๊ธฐ

๐ŸŒŠ Open WebUI์—์„œ์˜ MermaidJS ๋ Œ๋”๋ง ์ง€์›

๊ฐœ์š”โ€‹

Open WebUI๋Š” ๋งค๋ ฅ์ ์ธ ์‹œ๊ฐ์  MermaidJS ๋‹ค์ด์–ด๊ทธ๋žจ, ํ๋ฆ„๋„, ์›ํ˜• ์ฐจํŠธ ๋“ฑ์„ ์ฑ„ํŒ… ์ธํ„ฐํŽ˜์ด์Šค ๋‚ด์—์„œ ์ง์ ‘ ๋ Œ๋”๋งํ•˜๋Š” ๊ฒƒ์„ ์ง€์›ํ•ฉ๋‹ˆ๋‹ค. MermaidJS๋Š” ๋ณต์žกํ•œ ์ •๋ณด์™€ ์•„์ด๋””์–ด๋ฅผ ์‹œ๊ฐํ™”ํ•˜๋Š” ๊ฐ•๋ ฅํ•œ ๋„๊ตฌ์ด๋ฉฐ, ๋Œ€ํ˜• ์–ธ์–ด ๋ชจ๋ธ(LLM)์˜ ๊ธฐ๋Šฅ๊ณผ ๊ฒฐํ•ฉ๋  ๋•Œ ์ƒˆ๋กœ์šด ์•„์ด๋””์–ด๋ฅผ ์ƒ์„ฑํ•˜๊ณ  ํƒ๊ตฌํ•˜๋Š” ๋ฐ ๊ฐ•๋ ฅํ•œ ๋„๊ตฌ๊ฐ€ ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

Open WebUI์—์„œ MermaidJS ์‚ฌ์šฉโ€‹

MermaidJS ๋‹ค์ด์–ด๊ทธ๋žจ์„ ์ƒ์„ฑํ•˜๋ ค๋ฉด, ์ฑ„ํŒ…์—์„œ LLM์—๊ฒŒ MermaidJS๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋‹ค์ด์–ด๊ทธ๋žจ์ด๋‚˜ ์ฐจํŠธ๋ฅผ ์ƒ์„ฑํ•ด๋‹ฌ๋ผ๊ณ  ์š”์ฒญํ•˜๋ฉด ๋ฉ๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์š”์ฒญํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค:

  • "Mermaid๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๊ฐ„๋‹จํ•œ ์˜์‚ฌ๊ฒฐ์ • ๊ณผ์ •์— ๋Œ€ํ•œ ํ๋ฆ„๋„๋ฅผ ๋งŒ๋“ค์–ด ์ฃผ์„ธ์š”. ํ๋ฆ„๋„๊ฐ€ ์–ด๋–ป๊ฒŒ ์ž‘๋™ํ•˜๋Š”์ง€ ์„ค๋ช…ํ•ด ์ฃผ์„ธ์š”."
  • "Mermaid๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋ฐ–์— ๋‚˜๊ฐ€์„œ ์‚ฐ์ฑ…ํ•˜๊ธฐ ์ ํ•ฉํ•œ์ง€๋ฅผ ๊ฒฐ์ •ํ•˜๊ธฐ ์œ„ํ•œ ์˜์‚ฌ๊ฒฐ์ • ํŠธ๋ฆฌ๋ฅผ ์‹œ๊ฐํ™”ํ•ด ์ฃผ์„ธ์š”."

LLM ์‘๋‹ต์ด ์˜ฌ๋ฐ”๋ฅด๊ฒŒ ๋ Œ๋”๋ง๋˜๋ ค๋ฉด, ์‘๋‹ต์€ mermaid๋ผ๋Š” ๋‹จ์–ด๋กœ ์‹œ์ž‘ํ•œ ๋‹ค์Œ MermaidJS ์ฝ”๋“œ๊ฐ€ ์™€์•ผ ํ•ฉ๋‹ˆ๋‹ค. MermaidJS ๋ฌธ์„œ๋ฅผ ์ฐธ์กฐํ•˜์—ฌ ๊ตฌ๋ฌธ์ด ์˜ฌ๋ฐ”๋ฅธ์ง€ ํ™•์ธํ•˜๊ณ , LLM์—๊ฒŒ ๊ตฌ์กฐํ™”๋œ ํ”„๋กฌํ”„ํŠธ๋ฅผ ์ œ๊ณตํ•˜์—ฌ ๋” ๋‚˜์€ MermaidJS ๊ตฌ๋ฌธ์„ ์ƒ์„ฑํ•˜๋„๋ก ๊ฐ€์ด๋“œํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ฑ„ํŒ…์—์„œ ์ง์ ‘ MermaidJS ์ฝ”๋“œ ์‹œ๊ฐํ™”โ€‹

MermaidJS ์‹œ๊ฐํ™”๋ฅผ ์š”์ฒญํ•˜๋ฉด, ๋Œ€ํ˜• ์–ธ์–ด ๋ชจ๋ธ(LLM)์ด ํ•„์š”ํ•œ ์ฝ”๋“œ๋ฅผ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค. MermaidJS ๋ฌธ๋ฒ•์ด ์˜ฌ๋ฐ”๋ฅด๊ฒŒ ์‚ฌ์šฉ๋˜์—ˆ๋Š” ํ•œ, Open WebUI๋Š” ์ฑ„ํŒ… ์ธํ„ฐํŽ˜์ด์Šค ๋‚ด์—์„œ ์ž๋™์œผ๋กœ ์‹œ๊ฐํ™”๋ฅผ ๋ Œ๋”๋งํ•ฉ๋‹ˆ๋‹ค.

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

์‹œ๊ฐํ™”์™€์˜ ์ƒํ˜ธ์ž‘์šฉโ€‹

์‹œ๊ฐํ™”๊ฐ€ ํ‘œ์‹œ๋˜๋ฉด ๋‹ค์Œ ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค:

  • ํ™•๋Œ€ ๋ฐ ์ถ•์†Œํ•˜์—ฌ ์ž์„ธํžˆ ๊ฒ€์‚ฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • ๋””์Šคํ”Œ๋ ˆ์ด ์˜์—ญ์˜ ์šฐ์ธก ์ƒ๋‹จ์— ์žˆ๋Š” ๋ณต์‚ฌ ๋ฒ„ํŠผ์„ ํด๋ฆญํ•˜์—ฌ ์‹œ๊ฐํ™”๋ฅผ ์ƒ์„ฑํ•˜๋Š” ๋ฐ ์‚ฌ์šฉ๋œ ์›๋ž˜ MermaidJS ์ฝ”๋“œ๋ฅผ ๋ณต์‚ฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์˜ˆ์ œโ€‹

๋‹ค์Œ๊ณผ ๊ฐ™์€ ํ๋ฆ„๋„๋ฅผ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค:

 startAncestor [ start ]
A[A] --> B[B]
B --> C[Decision]
C -->| Yes | D[D]
C -->| No | E[E]
D --> F[F]
E --> F[F]

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