์ฐจํธ ์๊ฐํ ๋๊ตฌ
์ฐจํธ ์๊ฐํ ๋๊ตฌ๋ Python์ ํตํด ๋ฐ์ดํฐ ์ฒ๋ฆฌ ์ฝ๋๋ฅผ ์์ฑํ๊ณ , ์ต์ข ์ ์ผ๋ก @visactor/vmind๋ฅผ ํธ์ถํ์ฌ ์ฐจํธ ์ฌ์์ ์ป์ต๋๋ค. ์ฐจํธ ๋ ๋๋ง์ @visactor/vchart๋ฅผ ์ฌ์ฉํ์ฌ ๊ตฌํ๋ฉ๋๋ค.
์ค์น (Mac / Linux)
- Node.js 18 ์ด์ ์ค์น
curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.7/install.sh | bash
# nvm ํ์ฑํ, ์๋ฅผ ๋ค์ด Bash
source ~/.bashrc
# ๊ทธ๋ฐ ๋ค์ ์ต์ ์์ ๋ฒ์ ์ Node ์ค์น
nvm install node
# ์ฌ์ฉ ํ์ฑํ, ์๋ฅผ ๋ค์ด ์ต์ ์์ ๋ฒ์ ์ด 22์ธ ๊ฒฝ์ฐ use 22
nvm use 22
- ์์กด์ฑ ์ค์น
# ํ์ฌ ์ ์ฅ์์์ ํด๋น ์์น๋ก ์ด๋
cd app/tool/chart_visualization
npm install
์ค์น (Windows)
nvm-windows ์ค์น
๊ณต์ GitHub ํ์ด์ง์์ ์ต์ ๋ฒ์ ์
nvm-setup.exe๋ฅผ ๋ค์ด๋ก๋ํ๊ณ ์ค์นํฉ๋๋ค.nvm์ ์ฌ์ฉํ์ฌ Node.js ์ค์น
# ๊ทธ๋ฐ ๋ค์ ์ต์ ์์ ๋ฒ์ ์ Node ์ค์น
nvm install node
# ์ฌ์ฉ ํ์ฑํ, ์๋ฅผ ๋ค์ด ์ต์ ์์ ๋ฒ์ ์ด 22์ธ ๊ฒฝ์ฐ use 22
nvm use 22
- ์์กด์ฑ ์ค์น
# ํ์ฌ ์ ์ฅ์์์ ํด๋น ์์น๋ก ์ด๋
cd app/tool/chart_visualization
npm install
๋๊ตฌ
python_execute
Python ์ฝ๋๋ฅผ ์ฌ์ฉํ์ฌ ๋ฐ์ดํฐ ๋ถ์์ ํ์ํ ๋ถ๋ถ(๋ฐ์ดํฐ ์๊ฐํ ์ ์ธ)์ ์คํํฉ๋๋ค. ์ฌ๊ธฐ์๋ ๋ฐ์ดํฐ ์ฒ๋ฆฌ, ๋ฐ์ดํฐ ์์ฝ, ๋ณด๊ณ ์ ์์ฑ ๋ฐ ์ผ๋ถ ์ผ๋ฐ์ ์ธ Python ์คํฌ๋ฆฝํธ ์ฝ๋๊ฐ ํฌํจ๋ฉ๋๋ค.
์ ๋ ฅ
{
// ์ฝ๋ ์ ํ: ๋ฐ์ดํฐ ์ฒ๋ฆฌ/๋ฐ์ดํฐ ๋ณด๊ณ ์/๊ธฐํ ์ผ๋ฐ ์์
code_type: "process" | "report" | "others"
// ์ต์ข
์คํ ์ฝ๋
code: string;
}
์ถ๋ ฅ
Python ์คํ ๊ฒฐ๊ณผ, ์ค๊ฐ ํ์ผ ์ ์ฅ ๋ฐ ์ถ๋ ฅ ๊ฒฐ๊ณผ ํฌํจ.
visualization_preparation
๋ฐ์ดํฐ ์๊ฐํ๋ฅผ ์ํ ์ฌ์ ๋๊ตฌ๋ก ๋ ๊ฐ์ง ๋ชฉ์ ์ด ์์ต๋๋ค.
๋ฐ์ดํฐ -> ์ฐจํธ
๋ถ์์ ํ์ํ ๋ฐ์ดํฐ(.csv)์ ํด๋น ์๊ฐํ ์ค๋ช ์ ๋ฐ์ดํฐ์์ ์ถ์ถํ์ฌ ์ต์ข ์ ์ผ๋ก JSON ๊ตฌ์ฑ ํ์ผ์ ์ถ๋ ฅํฉ๋๋ค.
์ฐจํธ + ์ธ์ฌ์ดํธ -> ์ฐจํธ
๊ธฐ์กด ์ฐจํธ์ ํด๋น ๋ฐ์ดํฐ ์ธ์ฌ์ดํธ๋ฅผ ์ ํํ๊ณ , ๋ฐ์ดํฐ ์ฃผ์ ํํ๋ก ์ฐจํธ์ ์ถ๊ฐํ ๋ฐ์ดํฐ ์ธ์ฌ์ดํธ๋ฅผ ์ ํํ์ฌ ์ต์ข ์ ์ผ๋ก JSON ๊ตฌ์ฑ ํ์ผ์ ์์ฑํฉ๋๋ค.
์ ๋ ฅ
{
// ์ฝ๋ ์ ํ: ๋ฐ์ดํฐ ์๊ฐํ ๋๋ ๋ฐ์ดํฐ ์ธ์ฌ์ดํธ ์ถ๊ฐ
code_type: "visualization" | "insight"
// ์ต์ข
JSON ํ์ผ์ ์์ฑํ๋ ๋ฐ ์ฌ์ฉ๋๋ Python ์ฝ๋
code: string;
}
์ถ๋ ฅ
data_visualization tool์ ์ฌ์ฉ๋๋ ๋ฐ์ดํฐ ์๊ฐํ๋ฅผ ์ํ ๊ตฌ์ฑ ํ์ผ.
data_visualization
visualization_preparation์ ๋ด์ฉ์ ๊ธฐ๋ฐ์ผ๋ก ํน์ ๋ฐ์ดํฐ ์๊ฐํ๋ฅผ ์์ฑํฉ๋๋ค.
์ ๋ ฅ
{
// ๊ตฌ์ฑ ํ์ผ ๊ฒฝ๋ก
json_path: string;
// ํ์ฌ ๋ชฉ์ , ๋ฐ์ดํฐ ์๊ฐํ ๋๋ ์ธ์ฌ์ดํธ ์ฃผ์ ์ถ๊ฐ
tool_type: "visualization" | "insight";
// ์ต์ข
์ ํ png ๋๋ html; html์ vchart ๋ ๋๋ง ๋ฐ ์ํธ์์ฉ ์ง์
output_type: 'png' | 'html'
// ์ธ์ด, ํ์ฌ ์ค๊ตญ์ด ๋ฐ ์์ด ์ง์
language: "zh" | "en"
}
VMind ๊ตฌ์ฑ
LLM
VMind๋ ์ง๋ฅํ ์ฐจํธ ์์ฑ์ ์ํด LLM ํธ์ถ์ด ํ์ํฉ๋๋ค. ๊ธฐ๋ณธ์ ์ผ๋ก config.llm["default"] ๊ตฌ์ฑ์ ์ฌ์ฉํฉ๋๋ค.
์์ฑ ์ค์
์ฃผ์ ๊ตฌ์ฑ์๋ ์ฐจํธ ํฌ๊ธฐ, ํ ๋ง ๋ฐ ์์ฑ ๋ฐฉ๋ฒ์ด ํฌํจ๋ฉ๋๋ค.
์์ฑ ๋ฐฉ๋ฒ
๊ธฐ๋ณธ๊ฐ: png. ํ์ฌ LLM์ด ์ปจํ
์คํธ์ ๋ฐ๋ผ output_type์ ์๋์ผ๋ก ์ ํํ๋ ๊ฒ์ ์ง์ํฉ๋๋ค.
ํฌ๊ธฐ
๊ธฐ๋ณธ ํฌ๊ธฐ๋ ์ง์ ๋์ง ์์์ต๋๋ค. HTML ์ถ๋ ฅ์ ๊ฒฝ์ฐ ์ฐจํธ๋ ๊ธฐ๋ณธ์ ์ผ๋ก ์ ์ฒด ํ์ด์ง๋ฅผ ์ฑ์๋๋ค. PNG ์ถ๋ ฅ์ ๊ฒฝ์ฐ ๊ธฐ๋ณธ๊ฐ์ 1000*1000์
๋๋ค.
ํ ๋ง
๊ธฐ๋ณธ ํ
๋ง: 'light'. VChart๋ ์ฌ๋ฌ ํ
๋ง๋ฅผ ์ง์ํฉ๋๋ค. ํ
๋ง๋ฅผ ์ฐธ์กฐํ์ธ์.
ํ ์คํธ
ํ์ฌ, ์๋ก ๋ค๋ฅธ ๋์ด๋์