8000 xerj/README.ko.md at main ยท hpahm/xerj ยท GitHub
[go: up one dir, main page]

Skip to content

Latest commit

ย 

History

History
630 lines (506 loc) ยท 41 KB

README.ko.md

File metadata and controls

630 lines (506 loc) ยท 41 KB

XERJ

AI ์—์ด์ „ํŠธ๋ฅผ ์œ„ํ•œ ๋กœ์ปฌ ์šฐ์„ (local-first) ๊ฒ€์ƒ‰ ์—”์ง„์ด์ž MCP ์„œ๋ฒ„. Rust ๋ฐ”์ด๋„ˆ๋ฆฌ ํ•˜๋‚˜๊ฐ€ ์ฝ”๋“œ, ๋ฌธ์„œ, ๋กœ๊ทธ, JSONL/CSV, PDF๋ฅผ ์ƒ‰์ธํ•ด BM25 ์ „๋ฌธ(full-text) ๊ฒ€์ƒ‰, ๋ฒกํ„ฐ ๊ฒ€์ƒ‰, ํ•˜์ด๋ธŒ๋ฆฌ๋“œ ๊ฒ€์ƒ‰, ์ฝ”๋“œ ๊ฒ€์ƒ‰, ์—์ด์ „ํŠธ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ์ œ๊ณตํ•˜๋ฉฐ, Elasticsearch ํ˜ธํ™˜ API ๋’ค์—์„œ ๋™์ž‘ํ•ฉ๋‹ˆ๋‹ค. Claude Code, Cursor ๋ฐ ๋ชจ๋“  MCP ํด๋ผ์ด์–ธํŠธ์—์„œ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

xerj-org%2Fxerj | Trendshift

English | ็ฎ€ไฝ“ไธญๆ–‡ | ๆ—ฅๆœฌ่ชž | ุงู„ุนุฑุจูŠุฉ | Espaรฑol | ํ•œ๊ตญ์–ด

CI Release License Stars Rust Discussions Discord X

Reference coding Autoindex Search Agent memory MCP llms.txt ES-YAML conformance Single static binary Default embedder Neural

XERJ๋Š” ์ปค๋ฎค๋‹ˆํ‹ฐ์˜ ์‹ ๋ขฐ๋ฅผ ๋ฐ›๋Š” ๋กœ์ปฌ AI ๊ฒ€์ƒ‰ ์—”์ง„์œผ๋กœ, ์–ด๋–ค ํด๋”๋“  ์ž๋™์œผ๋กœ ์ƒ‰์ธํ•ฉ๋‹ˆ๋‹ค. ๋•๋ถ„์— ์ฝ”๋”ฉ ์—์ด์ „ํŠธ๋Š” ํŒŒ์ผ์„ ํ•˜๋‚˜์”ฉ ์ฝ์œผ๋ฉฐ ํ† ํฐ์„ ๋‚ญ๋น„ํ•˜๋Š” ๋Œ€์‹ , ์ •ํ™•ํžˆ ํ•„์š”ํ•œ ์ฝ”๋“œ๋ฅผ ๋ฐ”๋กœ ๊ฐ€์ ธ์˜ฌ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋ ˆํผ๋Ÿฐ์Šค ์ฝ”๋”ฉ(reference coding)์ด ๋Œ€ํ‘œ์ ์ธ ์‚ฌ์šฉ ์‚ฌ๋ก€์ด์ž ๊ฐ€์žฅ ํ™•์‹คํ•œ ์Šน๋ฆฌ์ž…๋‹ˆ๋‹ค: ์—์ด์ „ํŠธ์—๊ฒŒ ์ž‘์—…์„ ์ง€์‹œํ•˜๋ฉด ๊ทธ์™€ ๊ฐ€์žฅ ๊ฐ€๊นŒ์šด ์˜คํ”ˆ์†Œ์Šค ์ €์žฅ์†Œ๋“ค์„ ๋‚ด๋ ค๋ฐ›์•„ ์ƒ‰์ธํ•˜๊ณ , ์ž๊ธฐ ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•˜๊ธฐ ์ „์— ๊ทธ ๋ฌธ์ œ๋ฅผ ๋‹ค๋ฅธ ์‚ฌ๋žŒ๋“ค์ด ์–ด๋–ป๊ฒŒ ํ•ด๊ฒฐํ–ˆ๋Š”์ง€ ์žฌํ™œ์šฉํ•ฉ๋‹ˆ๋‹ค. ์ œ์–ด๋œ ์‹คํ—˜์—์„œ ์ฝ”๋”ฉ ์—์ด์ „ํŠธ์˜ ์ถœ๋ ฅ ํ† ํฐ์„ ๋™์ผํ•œ 16/16 ํ•ด๊ฒฐ๋ฅ ๋กœ 2.7๋ฐฐ ์ค„์˜€๊ณ (์‚ฌ๋ก€ ์—ฐ๊ตฌ), ์‚ฌ์šฉ์ž๋“ค์€ ์‹ค๋ฌด์—์„œ ๋Œ€๋žต 5๋ฐฐ ์ ˆ๊ฐ์„ ๋ณด๊ณ ํ•ฉ๋‹ˆ๋‹ค (์‹ค์‚ฌ์šฉ ๋ณด๊ณ ์„œ). ๋•๋ถ„์— ๋” ์ž‘๊ณ  ์ €๋ ดํ•œ ๋ชจ๋ธ์ด ๊ธฐ์–ต์— ์˜์กดํ•˜๋Š” ๋น„์‹ผ ๋ชจ๋ธ๋ณด๋‹ค ๋” ์ž˜ ์ฝ”๋”ฉํ•  ์ˆ˜ ์žˆ๊ณ , ์—ฌ๋Ÿฌ๋ถ„์€ ์ˆ˜์ • ๋ฃจํ”„์— ์“ฐ๋Š” ์‹œ๊ฐ„๋„ ์ค„์–ด๋“ญ๋‹ˆ๋‹ค. ํ”„๋กฌํ”„ํŠธ ํ•˜๋‚˜๋กœ ๋ฐ”๋กœ ์„ค์น˜ํ•ด ๋ณด์„ธ์š”:

Install XERJ (docs: https://xerj.org/llms.txt), index this project's sources, and set up
reference coding: clone and index the open-source repos closest to what we're building,
and search how they solved a problem before writing code.

์ง์ ‘ ์‹คํ–‰ํ•  ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค:

curl -fsSL https://xerj.org/get | sh
xerj --insecure --data-dir ~/xerj-data &
xerj init                                        # Claude Code/Cursor์— XERJ ์—ฐ๋™ (MCP + skill), ๋ช…๋ น ํ•œ ๋ฒˆ
xerj autoindex ~/my-project
xerj search "how do we rotate the WAL segment"   # ์ˆœ์œ„๊ฐ€ ๋งค๊ฒจ์ง„ ๊ตฌ์ ˆ, file:line
xerj def "euler_to_rotationmatrix"               # ์ •์˜๋กœ ์ด๋™: file:line + ์‹œ๊ทธ๋‹ˆ์ฒ˜
xerj gain                                        # ๋ฌด์—‡์„ ํ•ด์คฌ๋Š”์ง€ โ€” ์ถ”์ •์ด ์•„๋‹Œ ์‹ค์ธก

๋ฐ์ดํ„ฐ ๋””๋ ‰ํ„ฐ๋ฆฌ๋Š” autoindexํ•  ํด๋” ๋ฐ–์— ๋‘์„ธ์š”. data/๋Š” ๊ธฐ๋ณธ ๋ฌด์‹œ ๋ชฉ๋ก์— ์—†์œผ๋ฏ€๋กœ, ์ƒ‰์ธํ•  ํŠธ๋ฆฌ ์•ˆ์— --data-dir ./data๋ฅผ ๋‘๋ฉด ๋…ธ๋“œ๊ฐ€ ์ž๊ธฐ ์ €์žฅ์†Œ๋ฅผ ์ƒ‰์ธํ•˜๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.

Windows ๋ฐ ์ˆ˜๋™ ๊ฒ€์ฆ๋œ ์„ค์น˜๋Š” ์ˆ˜๋™ ์„ค์น˜๋ฅผ ์ฐธ๊ณ ํ•˜์„ธ์š”.

์ด --insecure ํ”Œ๋ž˜๊ทธ๋Š” ํ˜•์‹์ ์ธ ์ ˆ์ฐจ๊ฐ€ ์•„๋‹ˆ๋ผ ์‹ ๋ขฐ ๊ฒฝ๊ณ„์ž…๋‹ˆ๋‹ค. TLS์™€ API ํ‚ค ์ธ์ฆ์„ ๋„๋ฏ€๋กœ, ํ•ด๋‹น ํฌํŠธ์— ๋„๋‹ฌํ•  ์ˆ˜ ์žˆ๋Š” ๋ชจ๋“  ํ˜ธ์ถœ์ž๋Š” ๋ชจ๋“  /_memory ๋„ค์ž„์ŠคํŽ˜์ด์Šค๋ฅผ ํฌํ•จํ•ด ๋ชจ๋“  ์ธ๋ฑ์Šค๋ฅผ ์ฝ๊ณ  ์‚ญ์ œํ•  ์ˆ˜ ์žˆ๋Š” ์Šˆํผ์œ ์ €๊ฐ€ ๋ฉ๋‹ˆ๋‹ค. ๊ฐœ๋ฐœ ๋จธ์‹ ์˜ ๋‹จ์ผ ์‚ฌ์šฉ์ž๋ฅผ ์œ„ํ•œ ๊ฒƒ์ž…๋‹ˆ๋‹ค: ์ƒˆ ๋…ธ๋“œ๋Š” 127.0.0.1์—๋งŒ ๋ฐ”์ธ๋”ฉํ•˜๋ฉฐ, ๋‹ค๋ฅธ ์ธํ„ฐํŽ˜์ด์Šค์˜ ํ‰๋ฌธ ๋ฐ”์ธ๋”ฉ์€ ๋ช…์‹œ์ ์œผ๋กœ ํ—ˆ์šฉํ•˜์ง€ ์•Š๋Š” ํ•œ ์‹œ์ž‘์„ ๊ฑฐ๋ถ€ํ•ฉ๋‹ˆ๋‹ค. ์ „์ฒด ๋ชจ๋ธ์€ docs/SECURITY_MODEL.md์— ์žˆ์Šต๋‹ˆ๋‹ค.

์ปค๋ฎค๋‹ˆํ‹ฐ ์ฐธ์—ฌ

XERJ์— ์ฐธ์—ฌํ•˜๋Š” ๋ฐฉ๋ฒ•์€ ์‹คํ–‰ํ•ด ๋ณด๊ณ  ์งง์€ ์‚ฌ์šฉ ํ›„๊ธฐ๋ฅผ ํ•˜๋‚˜ ๋ณด๋‚ด๋Š” ๊ฒƒ โ€” ์ปค๋ฐ‹์ด๋‚˜ PR ํ•˜๋‚˜ โ€” ์ž…๋‹ˆ๋‹ค. ๊ทธ ๋ณด๊ณ ์„œ๊ฐ€ ํšŒ์›์ฆ์ด๋ฉฐ, ๋ฌด๋ฃŒ Apache-2.0 ๋ฐ”์ด๋„ˆ๋ฆฌ์— ๋Œ€ํ•œ ํ”„๋กœ์ ํŠธ์˜ ์œ ์ผํ•œ ๋Œ€๊ฐ€์ž…๋‹ˆ๋‹ค. ๋•๋ถ„์— ๋‹ค์Œ ์‚ฌ์šฉ์ž๋ฅผ ์œ„ํ•ด ์—”์ง„์ด ๊ณ„์† ๊ฐœ์„ ๋ฉ๋‹ˆ๋‹ค.

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

์‚ฌ์šฉ ํ›„๊ธฐ PR์€ CLA ๋ฉด์ œ๋ผ ์„œ๋ช… ์—†์ด ๋ณ‘ํ•ฉ๋ฉ๋‹ˆ๋‹ค. ์–ด๋–ค ๋นŒ๋“œ์—์„œ๋“  ๋™์ž‘ํ•˜๋Š” ๋ฐฉ๋ฒ•์€ user-feedback/16-agent-field-reports/์— ๋งˆํฌ๋‹ค์šด ํŒŒ์ผ ํ•˜๋‚˜๋งŒ ์ถ”๊ฐ€ํ•˜๋Š” ์ผ๋ฐ˜ gh pr create์ž…๋‹ˆ๋‹ค(๋””ํ”„์— ๋‹ค๋ฅธ ๊ฒƒ์€ ์—†์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค). ํ•ด๋‹น ๋ช…๋ น์ด ์žˆ๋Š” ๋นŒ๋“œ์—์„œ๋Š” xerj feedback์ด ๋ณด๊ณ ์„œ ์ดˆ์•ˆ์„ ์ž‘์„ฑํ•ด ๋ฒ„์ „, OS, ์ƒ‰์ธ ๋Œ€์ƒ์„ ์ฑ„์›Œ์ฃผ๊ณ , xerj feedback --open-pr๊ฐ€ PR์„ ์—ด์–ด์ค๋‹ˆ๋‹ค. ๋‚ด ๋ฐ”์ด๋„ˆ๋ฆฌ์— ์ด ๋ช…๋ น์ด ์žˆ๋Š”์ง€๋Š” xerj --help๋กœ ํ™•์ธํ•˜์„ธ์š”.

์ธก์ •๋œ ์ด์œ : ๋ ˆํผ๋Ÿฐ์Šค ์ฝ”๋”ฉ

grepํ•˜๋Š” ์—์ด์ „ํŠธ๋Š” ํŒŒ์ผ ์ „์ฒด๋ฅผ ์ปจํ…์ŠคํŠธ์— ๋Œ์–ด๋“ค์ž…๋‹ˆ๋‹ค. ์šฐ๋ฆฌ ์ธก์ •์—์„œ ํ•œ ์ฝ”ํผ์Šค์—์„œ๋Š” ์ž…๋ ฅ ํ† ํฐ์ด ์ตœ๋Œ€ 1.06M์— ๋‹ฌํ–ˆ๊ณ , ๊ฒฐ๊ตญ ๊ทธ๊ฒƒ์„ ๋‹ค ์ฝ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. XERJ์— ์งˆ์˜ํ•˜๋Š” ์—์ด์ „ํŠธ๋Š” ํ•„์š”ํ•œ ๊ตฌ์ ˆ(passage)์„ ๋ฐ›์Šต๋‹ˆ๋‹ค. ๋ชจ๋ธ์ด ์•”๊ธฐํ•˜์ง€ ๋ชปํ•œ ์ฝ”๋“œ๋กœ ์—”๋“œํˆฌ์—”๋“œ ์ธก์ •ํ•œ ๊ฒฐ๊ณผ (์‚ฌ๋ก€ ์—ฐ๊ตฌ: ์ž‘์—… 8๊ฐœ, ์–ธ์–ด 4๊ฐœ, ๊ทธ๋ฃน๋‹น 16ํšŒ ์‹คํ–‰, ์‹ค์ œ claude -p ํ† ํฐ ์นด์šดํŠธ):

์ถœ๋ ฅ ํ† ํฐ ๋น„์šฉ ํ•ด๊ฒฐ
๊ธฐ์–ต๋งŒ์œผ๋กœ 260,916 $11.18 11/16
grep ๊ธฐ๋ฐ˜ ์—์ด์ „ํŠธ 26,477 $3.27 16/16
XERJ 9,982 $1.58 16/16

๋™์ผํ•œ ํ•ด๊ฒฐ๋ฅ ์—์„œ grep ๋Œ€๋น„ ์ถœ๋ ฅ ํ† ํฐ 2.7๋ฐฐ, ๊ธฐ์–ต๋งŒ ์‚ฌ์šฉ ๋Œ€๋น„ 26๋ฐฐ ์ ˆ๊ฐ์ด๋ฉฐ, ๋‹จ์ผ Java ์ž‘์—…์—์„œ๋Š” ์ตœ๋Œ€ 278๋ฐฐ ์ ˆ๊ฐ์ด์—ˆ์Šต๋‹ˆ๋‹ค. ์‹ค์ œ ๊ฐœ๋ฐœ์—์„œ ์‚ฌ์šฉ์ž๋“ค์€ ์—”๋“œํˆฌ์—”๋“œ๋กœ ๋Œ€๋žต 5๋ฐฐ์˜ ํ† ํฐ ์ ˆ๊ฐ์„ ๋ณด๊ณ ํ•ฉ๋‹ˆ๋‹ค (์‹ค์‚ฌ์šฉ ๋ณด๊ณ ์„œ). ์ด ๊ฐ€์น˜๋Š” ์•”๊ธฐ ์—ฌ๋ถ€์— ์ขŒ์šฐ๋ฉ๋‹ˆ๋‹ค: ๋น„๊ณต๊ฐœยท๋‚ด๋ถ€ยท๋‹ˆ์น˜ยทํ•™์Šต ์ปท์˜คํ”„ ์ดํ›„ ์ฝ”๋“œ์—์„œ ์Šน๋ฆฌํ•˜๊ณ , ๋ชจ๋ธ์ด ์ด๋ฏธ ์•„๋Š” ์œ ๋ช… ๊ณต๊ฐœ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์—์„œ๋Š” ์ค‘๋ฆฝ์ ์ด๊ฑฐ๋‚˜ ๋ถˆ๋ฆฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ •์งํ•œ ํ•œ๊ณ„๋Š” ์‚ฌ๋ก€ ์—ฐ๊ตฌ์— ์žˆ์Šต๋‹ˆ๋‹ค.

์•„๋ฌด ํด๋”๋‚˜ ๋„ฃ์–ด ๋ณด์„ธ์š”

๋ ˆํผ๋Ÿฐ์Šค ์ฝ”๋”ฉ๋„ ๊ฐ™์€ ์›์‹œ ๊ธฐ๋Šฅ์˜ ํ•œ ์‚ฌ์šฉ๋ก€์ž…๋‹ˆ๋‹ค: xerj autoindex <folder>๋Š” ์—์ด์ „ํŠธ๊ฐ€ ์ฝ”ํผ์Šค๋ฅผ grepํ•˜๋Š” ๋Œ€์‹  ์•Œ๊ฒŒ ๋งŒ๋“ญ๋‹ˆ๋‹ค. ๋ช…๋ น ํ•˜๋‚˜๋กœ ์ฝ”๋“œ, ๋ฌธ์„œ, ๋กœ๊ทธ, PDF, SQLite, ๊นŒ๋‹ค๋กœ์šด CSV๊นŒ์ง€ ํƒ€์ž…์ด ์ง€์ •๋˜๊ณ  ์งˆ์˜ ๊ฐ€๋Šฅํ•œ ์ธ๋ฑ์Šค๋กœ ๋งŒ๋“ค์–ด ๊ฒ€์ƒ‰, RAG, ๋ณด์•ˆ ๊ฐ์‚ฌ, ์—์ด์ „ํŠธ ๋ฉ”๋ชจ๋ฆฌ์— ์”๋‹ˆ๋‹ค. ์Šคํ‚ค๋งˆ๋„ ํŒŒ์ดํ”„๋ผ์ธ๋„ ์ž‘์„ฑํ•  ํ•„์š”๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค.

xerj --insecure --data-dir ~/xerj-data &      # ์‹œ์ž‘
xerj autoindex ~/my-project              # ์•„๋ฌด๊ฑฐ๋‚˜ ๊ฐ€๋ฆฌํ‚ค๊ธฐ

--insecure๋Š” ๋‹ค์‹œ ๋งํ•˜์ง€๋งŒ TLS ์—†์Œ, ์ธ์ฆ ์—†์Œ โ€” ๋ชจ๋“  ํ˜ธ์ถœ์ž๊ฐ€ ์Šˆํผ์œ ์ € โ€” ๋ฅผ ๋œปํ•˜๋ฏ€๋กœ, ์œ„์™€ ๊ฐ™์€ ๊ฐœ๋ฐœ ๋จธ์‹  ๋‹จ์ผ ์‚ฌ์šฉ์ž ๊ฒฝ๊ณ„์ž…๋‹ˆ๋‹ค(๋ณด์•ˆ ๋ชจ๋ธ).

XERJ๋Š” ๋ชจ๋“  ํŒŒ์ผ์„ ์Šค๋‹ˆํ•‘ํ•ด ๋ฌด์—‡์ธ์ง€ ํŒŒ์•…ํ•˜๊ณ , ๋ฐœ๊ฒฌํ•œ ๋ฐ์ดํ„ฐ์…‹๋งˆ๋‹ค ์ธ๋ฑ์Šค๋ฅผ ํ•˜๋‚˜์”ฉ ๋งŒ๋“ญ๋‹ˆ๋‹ค. ์ฝ”๋“œ๋Š” tree-sitter๋ฅผ ๊ฑฐ์ณ ์‹ฌ๋ณผ๊ณผ ์ค„ ๋ฒˆํ˜ธ๊ฐ€ ๋ถ™์€ ์ฑ„๋กœ ๋“ค์–ด์˜ต๋‹ˆ๋‹ค. ํ‰๋ฌธ ํ…์ŠคํŠธ๊ฐ€ ์•„๋‹™๋‹ˆ๋‹ค:

phase A: 593 datasets inferred, 1955 junk/skipped files
phase B: indexing 25329 files with 8 workers
done in 158.1s, 593 datasets, 83103 records live, 790 junk records

์‚ฌ๋žŒ๋“ค์ด ๋ฌด์—‡์— ์“ฐ๋Š”๊ฐ€

  • ๋ ˆํผ๋Ÿฐ์Šค ์ฝ”๋”ฉ: ๋ฌธ์ œ์™€ ๊ฐ€์žฅ ๊ฐ€๊นŒ์šด OSS ํ”„๋กœ์ ํŠธ๋“ค์„ ์ƒ‰์ธํ•ด, ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•˜๊ธฐ ์ „์— ๊ทธ ํ•ด๋ฒ•์„ ๊ฒ€์ƒ‰ (์œ„์˜ ์ธก์ •๋œ ์‚ฌ์šฉ ์‚ฌ๋ก€).
  • ์ฝ”๋“œ๋ฒ ์ด์Šค Q&A์™€ RAG: ์ €์žฅ์†Œ๋ฅผ ์ƒ‰์ธํ•˜๊ณ  ๋ฉ”์ปค๋‹ˆ์ฆ˜์„ ๋ฌผ์œผ๋ฉด, ๋””๋ ‰ํ„ฐ๋ฆฌ ๋ชฉ๋ก ๋Œ€์‹  file:line์ด ๋ถ™์€ ๊ตฌ์ ˆ์„ ๋ฐ›์Šต๋‹ˆ๋‹ค.
  • ๋ณด์•ˆ ๊ฐ์‚ฌ: ๋Œ€์ƒ ํŠธ๋ฆฌ๋ฅผ ์ƒ‰์ธํ•˜๊ณ  ๋ชจ๋“  ํŒŒ์ผ ํƒ€์ž…์—์„œ ํ•œ ๋ฒˆ์— ์‹ฑํฌ ํŒจํ„ด, ์‹œํฌ๋ฆฟ, ์œ„ํ—˜ํ•œ ํ˜ธ์ถœ์„ ์งˆ์˜ํ•ฉ๋‹ˆ๋‹ค.
  • ๋กœ๊ทธยท์žฅ์•  ๋ถ„์„: ๋’ค์„ž์ธ ํฌ๋งท์ด Elasticsearch์—์„œ ๊ธฐ๋Œ€ํ•˜๋Š” ์ง‘๊ณ„๊ฐ€ ๊ฐ€๋Šฅํ•œ ํƒ€์ž… ์ธ๋ฑ์Šค๊ฐ€ ๋ฉ๋‹ˆ๋‹ค.
  • ์—์ด์ „ํŠธ ์žฅ๊ธฐ ๊ธฐ์–ต: /_memory/{namespace}๊ฐ€ ์—์ด์ „ํŠธ๊ฐ€ ๋ฐฐ์šด ๊ฒƒ์„ ์ €์žฅํ•˜๊ณ  ๋‹ค์Œ ์„ธ์…˜์— ์˜๋ฏธ๋กœ ์žฌ์†Œํ™˜ํ•ฉ๋‹ˆ๋‹ค.

ํ”„๋กฌํ”„ํŠธ๋Š” ์–ด๋–ป๊ฒŒ ๋™์ž‘ํ•˜๋Š”๊ฐ€

llms.txt๊ฐ€ ์—์ด์ „ํŠธ์—๊ฒŒ ์ˆœ์„œ๋Œ€๋กœ ๋œ ๋‹จ๊ณ„๋ฅผ ์ค๋‹ˆ๋‹ค: ์„ค์น˜, ์„œ๋ฒ„ ์‹œ์ž‘, xerj autoindex ., ์ž„์˜์˜ Elasticsearch ํด๋ผ์ด์–ธํŠธ๋กœ ์งˆ์˜, ๊ทธ๋ฆฌ๊ณ  ๋ ˆํผ๋Ÿฐ์Šค ์ฝ”๋”ฉ ๋ฃจํ”„ (๋น„์Šทํ•œ OSS ํด๋ก , ์ƒ‰์ธ, ์ž‘์„ฑ ์ „์— ๋ฉ”์ปค๋‹ˆ์ฆ˜ ๊ฒ€์ƒ‰, ์‚ฌ์šฉํ•œ ๊ฒƒ ์ธ์šฉ, ๋ผ์ด์„ ์Šค ์กด์ค‘).

๋„์›€์ด ๋˜๋Š” ์ด์œ : ๊ธฐ์–ต์œผ๋กœ ์ž‘์—…ํ•˜๋Š” ์—์ด์ „ํŠธ๋Š” ์•”๊ธฐํ•˜์ง€ ๋ชปํ•œ API์—์„œ ์žฌ์‹œ๋„ ๋ฃจํ”„์— ๋น ์ง€๊ณ , grep์€ ์–ด๋””๋ฅผ ๋ด์•ผ ํ•˜๋Š”์ง€๋งŒ ์•Œ๋ ค์ค๋‹ˆ๋‹ค. ๊ฒฐ๊ตญ ํšŒ๋ณต ๋ฐฉ๋ฒ•์€ ์†Œ์Šค๋ฅผ ์ปจํ…์ŠคํŠธ๋กœ ์ฝ๋Š” ๊ฒƒ์ด๊ณ , ์šฐ๋ฆฌ ์ธก์ •์—์„œ ํ•œ ์ฝ”ํผ์Šค์—์„œ ์ž…๋ ฅ ํ† ํฐ์ด ์ตœ๋Œ€ 1.06M์ด์—ˆ์Šต๋‹ˆ๋‹ค. XERJ์— ์งˆ์˜ํ•˜๋Š” ์—์ด์ „ํŠธ๋Š” ์ •ํ™•ํ•œ ๊ตฌ์ ˆ์„ ๋Œ€์‹  ์ฝ์Šต๋‹ˆ๋‹ค. ๋™์ผํ•œ 16/16 ํ•ด๊ฒฐ๋ฅ ์—์„œ grep ๋Œ€๋น„ 2.7๋ฐฐ(๊ธฐ์–ต๋งŒ ๋Œ€๋น„ 26๋ฐฐ, 2.1๋ฐฐ ์ €๋ ด) ์ ˆ๊ฐ์€ ์œ„ ์ธก์ •๋œ ์ด์œ ์— ์žˆ์œผ๋ฉฐ, ๋ชจ๋ธ์ด ๋ณธ ์  ์—†๋Š” Rust ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์—์„œ ๊ฒ€์ƒ‰ ์‚ฌ์šฉ ์‹œ 9/9, ๊ธฐ์–ต๋งŒ ์‚ฌ์šฉ ์‹œ 0/9๋ฅผ ๊ธฐ๋กํ•œ ๋™๋ฐ˜ ์‹คํ—˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค.

์ƒˆ ์„ค์น˜์—์„œ ๋ฐ”๋กœ ๋™์ž‘ํ•˜๋Š” ํ”„๋กฌํ”„ํŠธ ๋” ๋ณด๊ธฐ:

  • "https://xerj.org/llms.txt ๋ฅผ ์ฝ๊ณ , XERJ๋ฅผ ๊ฒ€์ƒ‰ ๋ฐฑ์—”๋“œ๋กœ ์„ค์ •ํ•˜๊ณ , ./docs๋ฅผ ์ƒ‰์ธํ•œ ๋’ค, ๋งŒ๋“ค์–ด์ง„ ์ธ๋ฑ์Šค๋งˆ๋‹ค ์˜ˆ์‹œ ์งˆ์˜๋ฅผ ํ•˜๋‚˜์”ฉ ๋ณด์—ฌ์ค˜."
  • "xerj autoindex map์„ ์‹คํ–‰ํ•˜๊ณ  ์ด ๋ฐ์ดํ„ฐ์— ๋ฌด์—‡์ด ์žˆ๋Š”์ง€ ์•Œ๋ ค์ค˜ (ํƒ€์ž…, ๊ฐœ์ˆ˜, ๊ธฐ๋ก๋œ ์ฃผ์˜์ ). ๊ทธ๋‹ค์Œ๋ถ€ํ„ฐ๋Š” ํŒŒ์ผ์„ ์ฝ๋Š” ๋Œ€์‹  ๊ฒ€์ƒ‰์œผ๋กœ ๋‚ด ์งˆ๋ฌธ์— ๋‹ตํ•ด์ค˜."
  • "XERJ์˜ /_memory/notes API๋ฅผ ์ด ํ”„๋กœ์ ํŠธ์˜ ์žฅ๊ธฐ ๊ธฐ์–ต์œผ๋กœ ์จ์ค˜: ์ž‘์—…ํ•˜๋ฉฐ ๋ฐฐ์šด ๊ฒƒ์„ ์ €์žฅํ•˜๊ณ , ๋‹ค์Œ ์„ธ์…˜์—์„œ ์˜๋ฏธ๋กœ ์žฌ์†Œํ™˜ํ•ด์ค˜."

๊ฐ ๊ธฐ๋Šฅ๋ณ„๋กœ ๊ฒ€์ฆ๋œ ์‹ค์ œ ์˜ˆ์ œ: xerj.org/docs/recipes.

๋ถ€ํŒ…, ๋ฒŒํฌ ์ˆ˜์ง‘, ๊ฒ€์ƒ‰, ๋ฒกํ„ฐ kNN, ๋ผ์ด๋ธŒ ๋Œ€์‹œ๋ณด๋“œ, ํŽธ์ง‘ ์—†์Œ. xerj.org์—์„œ ๋ณด๊ธฐ ๋˜๋Š” ๋ผ์ด๋ธŒ ํ”Œ๋ ˆ์ด๊ทธ๋ผ์šด๋“œ ์ฒดํ—˜.

์ˆ˜๋™ ์„ค์น˜

curl -fsSL https://xerj.org/get | sh

Windows PowerShell:

irm https://xerj.org/get.ps1 | iex

์ •์  ๋ฐ”์ด๋„ˆ๋ฆฌ ํ•˜๋‚˜, JVM ์—†์Œ, ์˜์กด์„ฑ ์—†์Œ. Linux, macOS, Windows์˜ x86-64์™€ arm64์šฉ์œผ๋กœ ๋ฏธ๋ฆฌ ๋นŒ๋“œ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค. ์†Œ์Šค์—์„œ ๋นŒ๋“œํ•  ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค. Elasticsearch API๋ฅผ ๋งํ•˜๋ฏ€๋กœ ๊ธฐ์กด ํด๋ผ์ด์–ธํŠธ, ๋Œ€์‹œ๋ณด๋“œ, ๋„๊ตฌ๊ฐ€ ๊ทธ๋Œ€๋กœ ๋™์ž‘ํ•ฉ๋‹ˆ๋‹ค.

์„ค์น˜ ํ›„ ์ฒซ ๋ช…๋ น๋“ค (์„ค์น˜ ์Šคํฌ๋ฆฝํŠธ๊ฐ€ xerj์˜ ์œ„์น˜๋ฅผ ์ถœ๋ ฅํ•ฉ๋‹ˆ๋‹ค; ํ•„์š”ํ•˜๋ฉด PATH์— ์ถ”๊ฐ€ํ•˜์„ธ์š”): xerj --insecure --data-dir ~/xerj-data &, http://localhost:9200์ด ์‘๋‹ตํ•  ๋•Œ๊นŒ์ง€ ๊ธฐ๋‹ค๋ฆฐ ๋’ค xerj autoindex ~/my-project. ํด๋” ์ƒ‰์ธ์„ ์ฐธ๊ณ ํ•˜์„ธ์š”.

๋Ÿฐํƒ€์ž„ ์ธํ„ฐ๋„ท ์ ‘๊ทผ์ด ์—†๋Š” ํ˜ธ์ŠคํŠธ๋Š” ์—์–ด๊ฐญ ๋ฐฐํฌ ๋ ˆ์‹œํ”ผ๋ฅผ ๋”ฐ๋ฅด์„ธ์š”. ๊ธฐ๋ณธ ์–ดํœ˜(lexical) ์ž„๋ฒ ๋”๋Š” ์˜คํ”„๋ผ์ธ์ž…๋‹ˆ๋‹ค; ๋‰ด๋Ÿฐ(neural) ๋ชจ๋“œ๋Š” ์ฒซ ์‹œ๋งจํ‹ฑ ์—ฐ์‚ฐ ์ „์— ๋ชจ๋ธ ํŒŒ์ผ ์„ธ ๊ฐœ๋ฅผ ๋กœ์ปฌ์— ์ค€๋น„ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

ํด๋” ์ƒ‰์ธ

์„œ๋ฒ„๋ฅผ ์‹œ์ž‘ํ•œ ๋’ค autoindex๋ฅผ ์•„๋ฌด๊ฑฐ๋‚˜ ๊ฐ€๋ฆฌํ‚ค์„ธ์š”:

xerj --insecure --data-dir ~/xerj-data &     # ๋กœ์ปฌ ๊ฐœ๋ฐœ: TLS ์—†์Œ, ์ธ์ฆ ์—†์Œ
xerj autoindex ~/my-project

์ด๊ฒƒ์ด ์ด README ์ƒ๋‹จ์˜ ๊ฐœ๋ฐœ ๋จธ์‹  ์‹ ๋ขฐ ๊ฒฝ๊ณ„์ž…๋‹ˆ๋‹ค โ€” TLS ์—†์Œ, ์ธ์ฆ ์—†์Œ, ๋ชจ๋“  ํ˜ธ์ถœ์ž๊ฐ€ ์Šˆํผ์œ ์ €. ์ƒˆ ๋…ธ๋“œ๋Š” 127.0.0.1์—๋งŒ ๋ฐ”์ธ๋”ฉํ•˜๋ฏ€๋กœ ๋…ธํŠธ๋ถ์—์„œ๋Š” ๊ดœ์ฐฎ์Šต๋‹ˆ๋‹ค; ๊ณต์œ  ํ˜ธ์ŠคํŠธ๋Š” ๋ฐ”๋กœ ์•„๋ž˜์˜ ์ธ์ฆ ์ผœ์ง„ ์‹œ์ž‘์„ ์“ฐ์„ธ์š”.

์„œ๋ฒ„๊ฐ€ ์ธ์ฆ ์ผœ์ง(--insecure ์—†๋Š” ๋ชจ๋“  ์‹œ์ž‘, ์„ค์ • ํŒŒ์ผ๋กœ ์‹œ์ž‘ํ•˜๋Š” ๊ฒฝ์šฐ๋„ ํฌํ•จ)์ด๋ฉด autoindex์— ๊ฐ™์€ ํ‚ค๋ฅผ ๋„˜๊ฒจ์•ผ ํ•ฉ๋‹ˆ๋‹ค. ํ‚ค๋ฅผ xerj.toml์—์„œ ์ฝ์ง€๋Š” ์•Š์œผ๋ฏ€๋กœ --api-key๋ฅผ ๋„˜๊ธฐ๊ฑฐ๋‚˜ XERJ_API_KEY๋ฅผ ์„ค์ •ํ•˜์„ธ์š”. ๊ทธ๋ ‡์ง€ ์•Š์œผ๋ฉด ๋ชจ๋“  ์š”์ฒญ์ด 401 Unauthorized๋กœ ๋Œ์•„์˜ต๋‹ˆ๋‹ค:

xerj --data-dir ~/xerj-data &                          # ์ธ์ฆ ์ผœ์ง: ์ฒซ ๋ถ€ํŒ… ์‹œ ํ‚ค ๋ฐœ๊ธ‰
export XERJ_API_KEY="$(cat ~/xerj-data/admin.key)" # <data_dir>/admin.key
xerj autoindex ~/my-project

์„ค์ •์€ ์ด๊ฒŒ ์ „๋ถ€์ž…๋‹ˆ๋‹ค. ์Šคํ‚ค๋งˆ๋„ ํŒŒ์ดํ”„๋ผ์ธ๋„ ์—†์Šต๋‹ˆ๋‹ค. XERJ๊ฐ€ ๊ฐ ํŒŒ์ผ์„ ์Šค๋‹ˆํ•‘ํ•ด ๋ฌด์—‡์ธ์ง€ ํŒŒ์•…ํ•˜๊ณ , ๋ฐœ๊ฒฌํ•œ ๋ฐ์ดํ„ฐ์…‹๋งˆ๋‹ค ์ธ๋ฑ์Šค๋ฅผ ๋งŒ๋“ญ๋‹ˆ๋‹ค:

phase A: 593 datasets inferred, 1955 junk/skipped files
phase B: indexing 25329 files with 8 workers
done in 158.1s, 593 datasets, 83103 records live, 790 junk records

์†Œ์Šค ํŒŒ์ผ์€ tree-sitter๋ฅผ ๊ฑฐ์น˜๋ฏ€๋กœ ์ฝ”๋“œ๊ฐ€ ํ‰๋ฌธ ํ…์ŠคํŠธ๊ฐ€ ์•„๋‹ˆ๋ผ ์‹ฌ๋ณผ๊ณผ ์ค„ ๋ฒˆํ˜ธ์™€ ํ•จ๊ป˜ ๋“ค์–ด์˜ต๋‹ˆ๋‹ค. CSV, JSON, JSONL, XML, YAML, SQLite, PDF, DOCX, PowerPoint(.pptx, ์Šฌ๋ผ์ด๋“œ๋‹น ๋ ˆ์ฝ”๋“œ ํ•˜๋‚˜), Excel(.xlsx, ์‹œํŠธ๋‹น ๋ฐ์ดํ„ฐ์…‹ ํ•˜๋‚˜), EPUB ์ฑ…(์ฑ•ํ„ฐ๋‹น ๋ ˆ์ฝ”๋“œ ํ•˜๋‚˜), Jupyter ๋…ธํŠธ๋ถ (ํ—ค๋”ฉ ์„น์…˜๋‹น ๋ ˆ์ฝ”๋“œ ํ•˜๋‚˜, ์ปค๋„ ๋ฌด๊ด€), ๋งจ ํŽ˜์ด์ง€(roff, ์„น์…˜๋‹น ๋ ˆ์ฝ”๋“œ ํ•˜๋‚˜), HTML, ๋ฉ”์ผ(.eml ๋ฐ mbox ๋ฉ”์ผํ•จ, Google Takeout ๋‚ด๋ณด๋‚ด๊ธฐ ํฌํ•จ), ์ผ๋ฐ˜์ ์ธ ๋กœ๊ทธ ํฌ๋งท์ด ๋ชจ๋‘ ์ฒ˜๋ฆฌ๋ฉ๋‹ˆ๋‹ค. Unity ํ”„๋กœ์ ํŠธ๋Š” ์ผ๊ธ‰ ์‹œ๋ฏผ ๋Œ€์šฐ๋ฅผ ๋ฐ›์Šต๋‹ˆ๋‹ค: ํ…์ŠคํŠธ ์ง๋ ฌํ™”๋œ ์”ฌ, ํ”„๋ฆฌํŒน, ์—์…‹์ด GameObject/Component๋‹น ๋ ˆ์ฝ”๋“œ ํ•˜๋‚˜๊ฐ€ ๋˜๊ณ , .meta ํŒŒ์ผ์ด GUID-๊ฒฝ๋กœ ํ…Œ์ด๋ธ”์ด ๋˜๋ฉฐ, MonoBehaviour ๋ ˆ์ฝ”๋“œ์— script_class/script_path๊ฐ€ ๋ถ™์–ด "์ด ์Šคํฌ๋ฆฝํŠธ๋ฅผ ์“ฐ๋Š” ์”ฌ์€?"์ด ์งˆ์˜ ํ•˜๋‚˜๊ฐ€ ๋ฉ๋‹ˆ๋‹ค (๋ฐ”์ด๋„ˆ๋ฆฌ ์ง๋ ฌํ™” ์—์…‹์€ Force Text์—ฌ์•ผ ์ฝ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค; Library/ ๊ฐ™์€ ์ƒ์„ฑ ๋””๋ ‰ํ„ฐ๋ฆฌ๋Š” ์ž๋™ ๊ฑด๋„ˆ๋›ฐ๊ณ  ๊ธฐ๋ก๋ฉ๋‹ˆ๋‹ค).

๊ฒ€์ƒ‰

Elasticsearch API์ด๋ฏ€๋กœ ์ด ๋ถ€๋ถ„์€ ์ด๋ฏธ ์•Œ๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค:

# ๋ญ˜ ์ฐพ์•˜๋Š”์ง€?
curl localhost:9200/_cat/indices

# ์ „๋ฌธ ๊ฒ€์ƒ‰
curl "localhost:9200/ax-*/_search?q=checkout+error"

# ๊ตฌ์กฐํ™”๋œ ์งˆ์˜
curl localhost:9200/ax-orders/_search -H 'content-type: application/json' -d '{
  "query": { "range": { "total": { "gte": 100 } } },
  "aggs":  { "by_status": { "terms": { "field": "status" } } }
}'

๋ฒกํ„ฐยทํ•˜์ด๋ธŒ๋ฆฌ๋“œ ๊ฒ€์ƒ‰๋„ Elasticsearch์— ๋ณด๋‚ด๋Š” ๊ฒƒ๊ณผ ๊ฐ™์€ knn๊ณผ semantic ๋ฌธ๋ฒ•์„ ์”๋‹ˆ๋‹ค. ์–ด๋–ค Elasticsearch ํด๋ผ์ด์–ธํŠธ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋“  localhost:9200์„ ๊ฐ€๋ฆฌํ‚ค๋ฉด ๋™์ž‘ํ•ฉ๋‹ˆ๋‹ค.

Jev๋กœ ๊ฒฐ๊ณผ ์ ์ˆ˜ ๋งค๊ธฐ๊ธฐ

๊ฒ€์ƒ‰ ์ ์ˆ˜๋Š” ์–ด๋–ค ๊ฒฐ๊ณผ๊ฐ€ ์–ด๋–ค ๊ฒฐ๊ณผ๋ณด๋‹ค ์œ„์ธ์ง€๋Š” ์•Œ๋ ค์ฃผ์ง€๋งŒ, ๊ทธ ๊ฒฐ๊ณผ๊ฐ€ ์ •๋ง ์งˆ๋ฌธ์— ๋‹ตํ•˜๋Š”์ง€๋Š” ์•Œ๋ ค์ฃผ์ง€ ์•Š์Šต๋‹ˆ๋‹ค. TypeSafe AI์˜ ์„œ๋น„์Šค Jev๊ฐ€ ๊ทธ๊ฒƒ์„ ํ•ฉ๋‹ˆ๋‹ค: ์งˆ๋ฌธ๊ณผ ๋ฌธ์„œ๋ฅผ ์ฃผ๋ฉด ๋ฌธ์„œ๊ฐ€ ์–ผ๋งˆ๋‚˜ ์ž˜ ๋‹ตํ•˜๋Š”์ง€ 0์—์„œ 1 ์‚ฌ์ด์˜ ์ˆซ์ž๋ฅผ ๋Œ๋ ค์ค๋‹ˆ๋‹ค. XERJ๋Š” ๋‘ ๊ฐ€์ง€ ๋ฐฉ์‹์œผ๋กœ ํ•จ๊ป˜ ๋™์ž‘ํ•ฉ๋‹ˆ๋‹ค.

1. Jev๋กœ ๊ฒฐ๊ณผ ์žฌ์ •๋ ฌ(์„ ํƒ). _search์— "rerank": {}๋ฅผ ์ถ”๊ฐ€ํ•˜๋ฉด XERJ๊ฐ€ ์ƒ์œ„ ๊ฒฐ๊ณผ๋ฅผ Jev๋กœ ๋ณด๋‚ด๊ณ , ๋Œ์•„์˜จ ์ˆซ์ž๋กœ ์ •๋ ฌํ•ฉ๋‹ˆ๋‹ค. ๊ณต๊ฐœ FiQA ํ…Œ์ŠคํŠธ์—์„œ ๊ฒฐ๊ณผ ํ’ˆ์งˆ์ด 0.24์—์„œ 0.36(nDCG@10)์œผ๋กœ ์˜ฌ๋ผ๊ฐ”๊ณ , ๊ฒ€์ƒ‰ 648ํšŒ์— ์ด ์•ฝ $0.64๊ฐ€ ๋“ค์—ˆ์Šต๋‹ˆ๋‹ค. ์ด ์ˆซ์ž๋Š” ์ •๋ ฌ ์ˆ˜๋‹จ์œผ๋กœ ์“ฐ๋˜ ์ •ํ™•ํ•œ ๋ฐฑ๋ถ„์œจ๋กœ ๋ณด์ง€ ๋งˆ์„ธ์š”: ์ž˜ ๋ณด์ •๋˜์–ด ์žˆ์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์ด ๊ธฐ๋Šฅ์€ ํ•ด๋‹น ๊ฒฐ๊ณผ๋“ค์˜ ํ…์ŠคํŠธ๋ฅผ TypeSafe ์„œ๋ฒ„๋กœ ๋ณด๋ƒ…๋‹ˆ๋‹ค. ํ‚ค๋ฅผ ์„ค์ •ํ•˜๊ธฐ ์ „๊นŒ์ง€๋Š” ๊บผ์ ธ ์žˆ์œผ๋ฉฐ, [rerank] enabled = false๋กœ ์™„์ „ํžˆ ๊ธˆ์ง€ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ผœ๊ธฐ ์ „์— docs/RERANK.md๋ฅผ ์ฝ์œผ์„ธ์š”.

2. ๊ฐ™์€ ์ข…๋ฅ˜์˜ ๋‹ต์„ ๋กœ์ปฌ์—์„œ ์–ป๊ธฐ. POST /v1/systemone๊ณผ POST /_decide๋Š” ๊ฐ™์€ ์งˆ๋ฌธ์„ ๊ฐ™์€ ํ˜•์‹์œผ๋กœ ๋ฐ›์ง€๋งŒ, XERJ๊ฐ€ ์ด๋ฏธ ๋ ˆ์ด๋ธ”์„ ๋ถ™์ธ ๋ฌธ์„œ๋“ค(์˜ˆ: ์ŠคํŒธ/๋น„์ŠคํŒธ์œผ๋กœ ํ‘œ์‹œ๋œ ๋ฉ”์ผ) ์ค‘ ๊ฐ€์žฅ ๋น„์Šทํ•œ ๊ฒƒ์„ ์ฐพ์•„ ์Šค์Šค๋กœ ๋‹ตํ•ฉ๋‹ˆ๋‹ค. ์•„๋ฌด๊ฒƒ๋„ ๋จธ์‹ ์„ ๋– ๋‚˜์ง€ ์•Š๊ณ  ํ‚ค๋„ ํ•„์š” ์—†์Šต๋‹ˆ๋‹ค. ๋ ˆ์ด๋ธ”๋œ ์˜ˆ์ œ๊ฐ€ ์žˆ์„ ๋•Œ๋งŒ ๋™์ž‘ํ•ฉ๋‹ˆ๋‹ค; AG News(๋ ˆ์ด๋ธ”๋œ ์˜ˆ์ œ 12๋งŒ ๊ฐœ)์—์„œ 92%์˜ ์ •ํ™•๋„๋กœ ์˜ฌ๋ฐ”๋ฅธ ๋ ˆ์ด๋ธ”์„ ๊ณจ๋ž์Šต๋‹ˆ๋‹ค. ๊ณต์‹ jev-reranker Python ํด๋ผ์ด์–ธํŠธ๊ฐ€ ์ˆ˜์ • ์—†์ด XERJ ๋…ธ๋“œ์— ๋™์ž‘ํ•ฉ๋‹ˆ๋‹ค(ํ…Œ์ŠคํŠธ). XERJ๋Š” ์ž๊ธฐ ์ด๋ฆ„ xerj-history-vote-1๋กœ ๋‹ตํ•ฉ๋‹ˆ๋‹ค; Jev๊ฐ€ ์•„๋‹™๋‹ˆ๋‹ค.

์ธก์ •๊ฐ’๊ณผ ์žฌํ˜„ ๋ฐฉ๋ฒ•: benchmarks/beir-hybrid์™€ benchmarks/decisions-as-retrieval.

MCP๋กœ ์—์ด์ „ํŠธ ์—ฐ๊ฒฐ

๋ชจ๋“  ์—์ด์ „ํŠธ๊ฐ€ ์…ธ ๋ช…๋ น์„ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ๋Š” ๊ฑด ์•„๋‹™๋‹ˆ๋‹ค. ๋ฐ์Šคํฌํ†ฑ ์–ด์‹œ์Šคํ„ดํŠธ์™€ ํ•จ์ˆ˜ ํ˜ธ์ถœ ํ˜ธ์ŠคํŠธ๋Š” Model Context Protocol๋กœ ๋„๊ตฌ์— ์ ‘๊ทผํ•˜๋ฉฐ, ๋ฐฉ๊ธˆ ์„ค์น˜ํ•œ ๊ทธ ๋ฐ”์ด๋„ˆ๋ฆฌ๊ฐ€ MCP ์„œ๋ฒ„์ž…๋‹ˆ๋‹ค. ๋‚ด๋ ค๋ฐ›์„ ๊ฒƒ๋„ ์ปดํŒŒ์ผํ•  ๊ฒƒ๋„ ์—†์Šต๋‹ˆ๋‹ค:

xerj --insecure --data-dir ~/xerj-data &     # 1. ๋„๊ตฌ๋“ค์ด ์งˆ์˜ํ•  ๋…ธ๋“œ
xerj mcp                                # 2. MCP stdio ์„œ๋ฒ„ (ํด๋ผ์ด์–ธํŠธ๊ฐ€ ์‹คํ–‰)

xerj mcp๋Š” stdio๋กœ MCP๋ฅผ ๋งํ•˜๊ณ  XERJ_URL(๊ธฐ๋ณธ http://localhost:9200)์ด ๊ฐ€๋ฆฌํ‚ค๋Š” ๋…ธ๋“œ๋กœ ํ”„๋ก์‹œํ•ฉ๋‹ˆ๋‹ค. ๋…ธ๋“œ๋ฅผ ์‹œ์ž‘ํ•˜์ง€๋Š” ์•Š์Šต๋‹ˆ๋‹ค; 1๋‹จ๊ณ„๊ฐ€ ์„ ํ–‰ ์กฐ๊ฑด์ž…๋‹ˆ๋‹ค. MCP ์„œ๋ฒ„๋Š” ์ž์ฒด ์‹ ๋ขฐ๋ฅผ ์ถ”๊ฐ€ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค โ€” ํด๋ผ์ด์–ธํŠธ์—๋Š” stdio, ๋…ธ๋“œ์—๋Š” ํ‰๋ฌธ HTTP๋กœ ๋งํ•˜๋Š” ๊ฐ™์€ ๋ฐ”์ด๋„ˆ๋ฆฌ์ด๋ฏ€๋กœ ๋…ธ๋“œ์˜ ๊ฒฝ๊ณ„๊ฐ€ ์ค‘์š”ํ•˜๊ณ , ์œ„์˜ 1๋‹จ๊ณ„๋Š” ๊ฐ™์€ --insecure ๊ฐœ๋ฐœ ๋…ธ๋“œ๋ฅผ ๋„์›๋‹ˆ๋‹ค. MCP ํด๋ผ์ด์–ธํŠธ ์„ค์ •์— ๋„ฃ์œผ์„ธ์š”:

{
  "mcpServers": {
    "xerj": {
      "command": "/home/you/.local/bin/xerj",
      "args": ["mcp"],
      "env": { "XERJ_URL": "http://localhost:9200" }
    }
  }
}

์ ˆ๋Œ€ ๊ฒฝ๋กœ๋ฅผ ์“ฐ์„ธ์š”. ์„ค์น˜ ์Šคํฌ๋ฆฝํŠธ๋Š” ๊ธฐ๋ณธ์ ์œผ๋กœ xerj๋ฅผ ~/.local/bin์— ๋†“์Šต๋‹ˆ๋‹ค (command -v xerj๋กœ ํ™•์ธ), ๋ฐ์Šคํฌํ†ฑ ์•„์ด์ฝ˜์œผ๋กœ ์‹คํ–‰๋œ MCP ํ˜ธ์ŠคํŠธ๋Š” ์…ธ์˜ PATH๋ฅผ ์ƒ์†ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๋…ธ๋“œ๊ฐ€ ์ธ์ฆ ์ผœ์ง(--insecure ์™ธ์˜ ๋ชจ๋“  ์‹œ์ž‘)์ด๋ฉด XERJ_URL ์˜†์— "XERJ_AUTH": "ApiKey <key>"๋ฅผ ์ถ”๊ฐ€ํ•˜์„ธ์š”; ํ‚ค๋Š” <data-dir>/admin.key์— ์žˆ์Šต๋‹ˆ๋‹ค.

์ง€์›๋˜๋Š” ์—์ด์ „ํŠธ

26๊ฐœ ํด๋ผ์ด์–ธํŠธ๊ฐ€ xerj mcp๋ฅผ ๋กœ์ปฌ stdio ์„œ๋ฒ„๋กœ ๋“ฑ๋กํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ํ•ญ๋ชฉ์€ ํ•ญ์ƒ ๊ฐ™์€ ๋‘ ํ•„๋“œ โ€” ๋ฐ”์ด๋„ˆ๋ฆฌ์˜ ์ ˆ๋Œ€ ๊ฒฝ๋กœ์™€ ์œ ์ผํ•œ ์ธ์ž mcp โ€” ์ง€๋งŒ, ๊ทธ ํ•ญ๋ชฉ์ด ์–ด๋””์— ์‚ฌ๋Š”์ง€, ์–ด๋–ค ํ‚ค๋กœ ๊ฐ์‹ธ์ง€๋Š”์ง€๋Š” ํด๋ผ์ด์–ธํŠธ๋งˆ๋‹ค ๋‹ค๋ฆ…๋‹ˆ๋‹ค. tested๋Š” ํ•ด๋‹น ํด๋ผ์ด์–ธํŠธ์—์„œ ์„œ๋ฒ„๋ฅผ ๋“ฑ๋กํ–ˆ๊ณ  xerj_search๊ฐ€ ๋„๊ตฌ ๋ชฉ๋ก์— ๋‚˜ํƒ€๋‚œ ๊ฒƒ; untested๋Š” ๊ฒฝ๋กœ์™€ ํ˜•ํƒœ๋ฅผ ํ•ด๋‹น ํด๋ผ์ด์–ธํŠธ์˜ ๊ณต์‹ ๋ฌธ์„œ์—์„œ ์˜ฎ๊ฒจ ์ ์—ˆ๊ณ  ์•„์ง ์•„๋ฌด๋„ ์‹คํ–‰ํ•˜์ง€ ์•Š์•˜๋‹ค๋Š” ๋œป์ž…๋‹ˆ๋‹ค. ์‹คํ–‰ํ•ด ๋ณธ ํ–‰์€ ๋‘˜์ž…๋‹ˆ๋‹ค. OpenCode v2.1.2(Windows)๋ฅผ xerj v1.0.0-rc.97์— ๋Œ€ํ•ด ์‹คํ–‰ํ–ˆ๊ณ , initialize์™€ tools/list์— ์ „์ฒด ๋„๊ตฌ ๋ชฉ๋ก์œผ๋กœ ์‘๋‹ตํ–ˆ์Šต๋‹ˆ๋‹ค. Cline CLI 3.0.73(Linux)์„ xerj v1.0.0-rc.98์— ๋Œ€ํ•ด ์‹คํ–‰ํ–ˆ์Šต๋‹ˆ๋‹ค. ์ด ์ ˆ์˜ mcpServers ๋ธ”๋ก์„ ~/.cline/data/settings/cline_mcp_settings.json์— ๋„ฃ์ž xerj_search (Cline์ด ๋ชจ๋ธ์— ๋„˜๊ธธ ๋•Œ ์ด๋ฆ„์€ xerj__xerj_search)๊ฐ€ ๊ทธ ๋ฐ”์ด๋„ˆ๋ฆฌ์˜ ๋„๊ตฌ 20๊ฐœ ๋ชฉ๋ก์— ๋‚˜ํƒ€๋‚ฌ๊ณ , Cline์ด xerj_search ํ˜ธ์ถœ ํ•œ ๋ฒˆ์„ ์‹คํ–‰ํ–ˆ์Šต๋‹ˆ๋‹ค. ๊ณต๊ธ‰์ž ํ‚ค๊ฐ€ ์—†์–ด ๋ชจ๋ธ ํ„ด์€ ๋กœ์ปฌ OpenAI ํ˜ธํ™˜ ์Šคํ…์ด์—ˆ๊ณ , MCP ์„œ๋ฒ„๋Š” ์‹ค์ œ xerj mcp ํ”„๋กœ์„ธ์Šค์˜€์Šต๋‹ˆ๋‹ค. IDE์˜ MCP Servers > Configure ๋ฒ„ํŠผ์€ ๊ทธ ์‹คํ–‰์— ํฌํ•จ๋˜์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค. untested ํ–‰์„ ๊ณ ์น˜๋Š” ๊ฒƒ์€ ํ™˜์˜๋ฐ›๋Š” ์ฒซ PR์ž…๋‹ˆ๋‹ค.

ํด๋ผ์ด์–ธํŠธ ์„ค์ • ํŒŒ์ผ ํ‚ค ๋น„๊ณ  ํ…Œ์ŠคํŠธ
OpenCode ํ”„๋กœ์ ํŠธ์˜ opencode.json ๋˜๋Š” ~/.config/opencode/opencode.json mcp.servers ์ปค๋งจ๋“œ ๋ฐฐ์—ด ํ•˜๋‚˜, env๊ฐ€ ์•„๋‹Œ environment, ํ”„๋กœ์ ํŠธ ๋ฃจํŠธ ํ•„์š” tested
Claude Code .mcp.json(ํ”„๋กœ์ ํŠธ) ๋˜๋Š” ~/.claude.json(์‚ฌ์šฉ์ž); claude mcp add๊ฐ€ ๋‘˜ ๋‹ค ์ž‘์„ฑ mcpServers ์ปค๋งจ๋“œ ์•ž์— -- ํ•„์ˆ˜ untested
Cursor ํ”„๋กœ์ ํŠธ์˜ .cursor/mcp.json ๋˜๋Š” ~/.cursor/mcp.json mcpServers stdio์—๋Š” type ๋ถˆํ•„์š” untested
Codex ~/.codex/config.toml ๋˜๋Š” ์‹ ๋ขฐ๋œ ํ”„๋กœ์ ํŠธ์˜ .codex/config.toml [mcp_servers.xerj] JSON์ด ์•„๋‹Œ TOML untested
Gemini CLI .gemini/settings.json ๋˜๋Š” ~/.gemini/settings.json mcpServers ํด๋”๋ฅผ gemini trustํ•ด์•ผ ํ•จ, ์•ˆ ๊ทธ๋Ÿฌ๋ฉด Disconnected ํ‘œ์‹œ untested
GitHub Copilot in VS Code .vscode/mcp.json servers "type": "stdio" ํ•„์š”; ํฌํ„ฐ๋ธ” .mcp.json์€ mcpServers ์‚ฌ์šฉ untested
Windsurf %APPDATA%\devin\mcp_config.json, ~/.config/devin/mcp_config.json mcpServers ๊ฒฝ๋กœ๋Š” ์ด์ œ ~/.codeium/windsurf๊ฐ€ ์•„๋‹Œ Devin ๊ฒƒ untested
Claude Desktop %APPDATA%\Claude\claude_desktop_config.json, ~/Library/Application Support/Claude/claude_desktop_config.json, ~/.config/Claude/claude_desktop_config.json mcpServers ์ฐฝ๋งŒ ๋‹ซ์ง€ ๋ง๊ณ  ์•ฑ์„ ์™„์ „ํžˆ ์ข…๋ฃŒ untested
Cline ~/.cline/data/settings/cline_mcp_settings.json (CLI); IDE๋Š” MCP Servers > Configure์—์„œ ์—ด๊ธฐ mcpServers disabled์™€ autoApprove๋Š” Cline ์ „์šฉ; ์ด๋ฒˆ CLI ์‹คํ–‰์—๋Š” ํ•„์š” ์—†์—ˆ์Œ tested
Roo Code ํ”„๋กœ์ ํŠธ์˜ .roo/mcp.json ๋˜๋Š” <VS Code User>/globalStorage/rooveterinaryinc.roo-cline/settings/mcp_settings.json mcpServers ์ด๋ฆ„ ์ถฉ๋Œ ์‹œ ํ”„๋กœ์ ํŠธ ํ•ญ๋ชฉ์ด ์šฐ์„  untested
Kilo Code ํ”„๋กœ์ ํŠธ์˜ kilo.jsonc ๋˜๋Š” .kilo/kilo.jsonc, ์ „์—ญ์€ ~/.config/kilo/kilo.jsonc mcp OpenCode์ฒ˜๋Ÿผ ์ปค๋งจ๋“œ ๋ฐฐ์—ด ํ•˜๋‚˜ untested
Continue ~/.continue/config.yaml ๋˜๋Š” .continue/mcpServers/์˜ ์•„๋ฌด ํŒŒ์ผ mcpServers ๋งต์ด ์•„๋‹Œ YAML ๋ฆฌ์ŠคํŠธ; Agent ๋ชจ๋“œ๋งŒ untested
Zed ~/.config/zed/settings.json (Windows์—์„œ๋Š” zed: open settings file ์‹คํ–‰) context_servers ํ‚ค๊ฐ€ mcpServers๊ฐ€ ์•„๋‹˜ untested
JetBrains AI Assistant ์„ค์ • UI๋งŒ: Settings > Tools > AI Assistant > Model Context Protocol mcpServers Junie์™€ ๋ณ„๊ฐœ ์ €์žฅ์†Œ untested
Junie ํ”„๋กœ์ ํŠธ์˜ .junie/mcp/mcp.json, ์‚ฌ์šฉ์ž๋Š” ~/.junie/mcp/mcp.json mcpServers ์˜ค๋ž˜๋œ ๊ธ€์€ mcp/ ํด๋”๊ฐ€ ๋น ์ ธ ์žˆ์Œ untested
Amp ~/.config/amp/settings.json, ์›Œํฌ์ŠคํŽ˜์ด์Šค์˜ .amp/settings.json ๋˜๋Š” amp mcp add amp.mcpServers ํ‚ค๊ฐ€ amp. ์ ‘๋‘์‚ฌ๋ฅผ ์œ ์ง€ untested
Goose ~/.config/goose/config.yaml, %APPDATA%\Block\goose\config\config.yaml extensions command๊ฐ€ ์•„๋‹Œ cmd, YAML untested
Kiro ์›Œํฌ์ŠคํŽ˜์ด์Šค์˜ .kiro/settings/mcp.json, ์‚ฌ์šฉ์ž๋Š” ~/.kiro/settings/mcp.json mcpServers ${VAR} ํ™•์žฅ์€ ์Šน์ธ ํ•„์š” untested
Antigravity ~/.gemini/config/mcp_config.json ๋˜๋Š” ์›Œํฌ์ŠคํŽ˜์ด์Šค์˜ .agents/mcp_config.json mcpServers ์›๊ฒฉ ์„œ๋ฒ„๋Š” serverUrl ์‚ฌ์šฉ untested
OpenClaw ~/.openclaw/openclaw.json (JSON5) mcp.servers transport: "stdio" untested
DeepSeek Harness (dsh) $DSH_HOME/cordis.patch.yml ๋˜๋Š” ํ”„๋กœํ•„ ํŒจ์น˜ @deepseek-ai/dsh-mcp-client๊ฐ€ ์žˆ๋Š” - insert: ์„œ๋ฒ„๋‹น ํ”Œ๋Ÿฌ๊ทธ์ธ ์ธ์Šคํ„ด์Šค ํ•˜๋‚˜ untested
Warp Settings > Agents > MCP servers ๋˜๋Š” ~/.warp/.mcp.json๊ณผ ํ”„๋กœ์ ํŠธ์˜ .warp/.mcp.json mcpServers cwd๊ฐ€ ์•„๋‹Œ working_directory untested
Augment Code Auggie CLI๋Š” ~/.augment/settings.json; IDE๋Š” ์ž์ฒด ํŒจ๋„ ์‚ฌ์šฉ mcpServers ๊ทธ ํŒŒ์ผ์€ IDE๋ฅผ ๊ตฌ๋™ํ•˜์ง€ ์•Š์Œ untested
Qwen Code ~/.qwen/settings.json ๋˜๋Š” ํ”„๋กœ์ ํŠธ์˜ .qwen/settings.json mcpServers mcp.allowed๊ฐ€ ์กฐ์šฉํžˆ ์ˆจ๊ธธ ์ˆ˜ ์žˆ์Œ untested
Kimi CLI ~/.kimi-code/mcp.json ๋˜๋Š” ํ”„๋กœ์ ํŠธ์˜ .kimi-code/mcp.json mcpServers ๋ณด๊ด€๋œ ~/.kimi/mcp.json์ด ์•„๋‹Œ ํ˜„์žฌ Kimi Code CLI untested
Grok CLI ~/.grok/config.toml ๋˜๋Š” ํ”„๋กœ์ ํŠธ์˜ .grok/config.toml [mcp_servers.xerj] Grok Bot์—๋Š” ๋กœ์ปฌ stdio ๋“ฑ๋ก ์—†์Œ untested

Codex์™€ Grok CLI๋Š” TOML์„ ์ฝ์œผ๋ฏ€๋กœ ํ•ญ๋ชฉ์ด ํ…Œ์ด๋ธ”์ž…๋‹ˆ๋‹ค:

[mcp_servers.xerj]
command = "/abs/path/to/xerj"
args = ["mcp"]

OpenCode์™€ Kilo Code๋Š” command ๋ฐฐ์—ด ํ•˜๋‚˜๋ฅผ ๋ฐ›์œผ๋ฉฐ, Kilo๋Š” ํ•œ ๋‹จ๊ณ„ ์–•์€ ๊ฐ™์€ ํ˜•ํƒœ๋ฅผ ์”๋‹ˆ๋‹ค:

{"mcp": {"servers": {"xerj": {"type": "local", "command": ["/abs/path/to/xerj", "mcp"], "environment": {"XERJ_URL": "http://localhost:9200"}}}}}
{"mcp": {"xerj": {"type": "local", "command": ["/abs/path/to/xerj", "mcp"]}}}

Continue์™€ Goose๋Š” YAML์„ ์ฝ์Šต๋‹ˆ๋‹ค:

# ~/.continue/config.yaml
mcpServers:
  - name: xerj
    command: /abs/path/to/xerj
    args:
      - mcp
# ~/.config/goose/config.yaml
extensions:
  xerj:
    type: stdio
    cmd: /abs/path/to/xerj
    args:
      - mcp
    enabled: true

Amp๋Š” ํ‚ค์— ๋„ค์ž„์ŠคํŽ˜์ด์Šค๋ฅผ ์œ ์ง€ํ•˜๊ณ , VS Code์™€ Copilot์€ servers์— ํŠธ๋žœ์ŠคํฌํŠธ๊ฐ€ ํ•„์š”ํ•˜๋ฉฐ, Zed๋Š” ์ด๋“ค์„ ์ปจํ…์ŠคํŠธ ์„œ๋ฒ„๋ผ ๋ถ€๋ฅด๊ณ , OpenClaw๋Š” mcp ์•„๋ž˜์— ์ค‘์ฒฉํ•ฉ๋‹ˆ๋‹ค:

{"amp.mcpServers": {"xerj": {"command": "/abs/path/to/xerj", "args": ["mcp"]}}}
{"servers": {"xerj": {"type": "stdio", "command": "/abs/path/to/xerj", "args": ["mcp"]}}}
{"context_servers": {"xerj": {"command": "/abs/path/to/xerj", "args": ["mcp"], "env": {}}}}
{mcp: {servers: {xerj: {command: "/abs/path/to/xerj", args: ["mcp"], transport: "stdio"}}}}

DeepSeek Harness๋Š” $DSH_HOME/cordis.patch.yml ๋˜๋Š” ํ”„๋กœํ•„ ํŒจ์น˜ $DSH_HOME/profiles/<profile>/cordis.patch.yml์—์„œ MCP ์„œ๋ฒ„ ํ•˜๋‚˜๋ฅผ ํ”Œ๋Ÿฌ๊ทธ์ธ ํ•˜๋‚˜๋กœ ๋ถˆ๋Ÿฌ์˜ต๋‹ˆ๋‹ค. ๊ทธ ํŒŒ์ผ์ด []๋ฟ์ด๋ฉด ๋ฐฐ์—ด ์•„๋ž˜์— ๋ถ™์ด์ง€ ๋ง๊ณ  ์•„๋ž˜ ๋ธ”๋ก์œผ๋กœ ๋ฐ”๊ฟ‰๋‹ˆ๋‹ค. [] ์•„๋ž˜์— ๋ถ™์ด๋ฉด ์˜ฌ๋ฐ”๋ฅธ YAML์ด ์•„๋‹™๋‹ˆ๋‹ค. env์™€ cwd๋Š” stdio์˜ ์„ ํƒ ํ•„๋“œ์ž…๋‹ˆ๋‹ค(args ๊ธฐ๋ณธ๊ฐ’ [], env ๊ธฐ๋ณธ๊ฐ’ {}, cwd ๊ธฐ๋ณธ๊ฐ’ ""). ๋…ธ๋“œ๊ฐ€ --insecure๋กœ ๋Œ์ง€ ์•Š์œผ๋ฉด env ์•„๋ž˜์— XERJ_AUTH: "ApiKey <key>"๋ฅผ ๋„ฃ์Šต๋‹ˆ๋‹ค:

# $DSH_HOME/cordis.patch.yml
- insert:
    - id: mcp-xerj
      name: '@deepseek-ai/dsh-mcp-client'
      config:
        serverName: xerj
        transport: stdio
        command: xerj
        args:
          - mcp
        env:
          XERJ_URL: "http://localhost:9200"
        cwd: ""

์›๋ž˜ ๋ชฉ๋ก์˜ ํ›„๋ณด ์„ธ ๊ฐœ๋Š” ์˜๋„์ ์œผ๋กœ ๋น ์ ธ ์žˆ์Šต๋‹ˆ๋‹ค. Aider๋Š” MCP ํด๋ผ์ด์–ธํŠธ ์ง€์›์ด ์•„์˜ˆ ์—†์Šต๋‹ˆ๋‹ค(Aider-AI/aider#3314์ด ์—ฌ์ „ํžˆ ์—ด๋ ค ์žˆ์Œ). T3 Code๋Š” ๋ฐ˜๋Œ€ ๋ฐฉํ–ฅ์ž…๋‹ˆ๋‹ค: ๋‹ค๋ฅธ ์—์ด์ „ํŠธ๊ฐ€ ์ ‘์†ํ•˜๋Š” MCP ์—”๋“œํฌ์ธํŠธ๋ฅผ ํ˜ธ์ŠคํŒ…ํ•˜๋ฉฐ, ์„ธ์…˜์€ ๊ทธ ์•„๋ž˜ ํ•˜๋„ค์Šค์—์„œ ์„œ๋ฒ„๋ฅผ ์ƒ์†๋ฐ›์Šต๋‹ˆ๋‹ค. Grok Bot์—๋Š” ๋ฌธ์„œํ™”๋œ ๋กœ์ปฌ stdio ๋“ฑ๋ก์ด ์—†์Šต๋‹ˆ๋‹ค; Grok CLI์—๋Š” ์žˆ์œผ๋ฉฐ, ๊ทธ๊ฒƒ์ด ์œ„์˜ grok ํ–‰์ž…๋‹ˆ๋‹ค.

์Šค๋ฌผ ๊ฐœ์˜ ๋„๊ตฌ๊ฐ€ ๋…ธ์ถœ๋ฉ๋‹ˆ๋‹ค. ์—ดํ•œ ๊ฐœ๋Š” XERJ๊ฐ€ ์ด๋ฏธ ์„œ๋น™ํ•˜๋Š” ์—”๋“œํฌ์ธํŠธ์˜ ์–‡์€ ํ”„๋ก์‹œ์ž…๋‹ˆ๋‹ค:

๋„๊ตฌ ํ•˜๋Š” ์ผ
xerj_search ์ธ๋ฑ์Šค์— ๋Œ€ํ•œ ES query-DSL ๊ฒ€์ƒ‰
xerj_semantic_search semantic_text ํ•„๋“œ์— ๋Œ€ํ•œ ์˜๋ฏธ ๊ฒ€์ƒ‰, ์งˆ์˜๋Š” ์„œ๋ฒ„ ์ชฝ์—์„œ ์ž„๋ฒ ๋”ฉ (๋…ธ๋“œ๊ฐ€ --embed-mode neural๋กœ ์‹คํ–‰ํ•˜์ง€ ์•Š๋Š” ํ•œ ๊ธฐ๋ณธ ์ž„๋ฒ ๋”๋Š” ๋‰ด๋Ÿฐ์ด ์•„๋‹Œ ์–ดํœ˜ feature-hashing)
xerj_vector_search dense_vector ํ•„๋“œ์— ๋Œ€ํ•œ kNN
xerj_hybrid_search ํ•˜์œ„ ์งˆ์˜๋“ค์˜ RRF ๋˜๋Š” ์„ ํ˜• ์œตํ•ฉ
xerj_memory_store / xerj_memory_recall ๋„ค์ž„์ŠคํŽ˜์ด์Šค์˜ ์˜์†์  ์—์ด์ „ํŠธ ๋ฉ”๋ชจ๋ฆฌ, ํ…์ŠคํŠธยท์˜๋ฏธยท๋ฒกํ„ฐ๋กœ ์žฌ์†Œํ™˜
xerj_brain_overview / xerj_brain_ego / xerj_brain_link / xerj_brain_unlink ์„ธ์ปจ๋“œ ๋ธŒ๋ ˆ์ธ ๋งํฌ ์ธ๋ฑ์Šค: ๋ฐฉํ–ฅ ์žก๊ธฐ, ํ•œ ๋…ธ๋“œ์˜ ๊ทผ๊ฑฐ ๊ธฐ๋ฐ˜ ์ด์›ƒ ํ™•์žฅ, ๋งํฌ ์ถ”๊ฐ€ยท์ œ๊ฑฐ
xerj_plan ์ผ์ƒ ์–ธ์–ด ํ•„ํ„ฐ๋ฅผ ๋ฐ›์•„ ๊ฒ€์ฆ๋œ query DSL ์ถœ๋ ฅ (POST /_ask; ๊ฒฐ์ •์ ์ด๊ณ  ๊ทœ์น™ ๊ธฐ๋ฐ˜, LLM ์•„๋‹˜)

xerj_search์—์„œ {"prefix":"project","query":"retry policy"}๋ฅผ ๋„˜๊ธฐ๋ฉด project-*๋ฅผ ๊ฒ€์ƒ‰ํ•˜๋ฉฐ, xerj search --prefix project์™€ ์ผ์น˜ํ•ฉ๋‹ˆ๋‹ค. ๋ช…์‹œ์  ์ธ๋ฑ์Šค ์ด๋ฆ„์ด๋‚˜ ํŒจํ„ด์€ index๋กœ ๋„˜๊ธฐ์„ธ์š”; ๋น„์–ด ์žˆ์ง€ ์•Š์€ index์™€ prefix๋Š” ํ•จ๊ป˜ ์“ธ ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. prefix๋Š” ๋‹ค๋“ฌ์–ด์ง€๊ณ (trim) ๋น„์–ด ์žˆ์œผ๋ฉด ์•ˆ ๋ฉ๋‹ˆ๋‹ค. ๋‘˜ ๋‹ค ์—†์œผ๋ฉด ๋„๊ตฌ๋Š” ax-*๋ฅผ ๊ฒ€์ƒ‰ํ•ฉ๋‹ˆ๋‹ค.

๋‘ ๊ฐœ๋Š” ๋‹จ์ˆœ ํ”„๋ก์‹œ๊ฐ€ ์•„๋‹™๋‹ˆ๋‹ค: xerj_map์€ autoindex ์นดํƒˆ๋กœ๊ทธ์—์„œ ์ธ๋ฑ์Šค๋ณ„ ํ•„๋“œ ๋งต์„ ๋Œ๋ ค์ฃผ๊ณ (๋ฐ”์ดํŠธ ์ƒํ•œ์œผ๋กœ ์ž˜๋ฆฐ ๊ฒƒ ์™ธ์—๋Š” ๊ทธ๋Œ€๋กœ), xerj_code_search๋Š” xerj code ๋ ˆํผ๋Ÿฐ์Šค ์ฝ”๋”ฉ ํŒŒ์ดํ”„๋ผ์ธ(tools/xerj-code/)์„ ์‹คํ–‰ํ•ด ๋ Œ๋”๋ง๋œ ํ…์ŠคํŠธ๋ฅผ ๋Œ๋ ค์ค๋‹ˆ๋‹ค. xerj_index_budget์€ xerj autoindex๊ฐ€ ํ•ด์‹ฑํ•˜๊ธฐ ์ „์— ํด๋”๋ฅผ ์„ธ๊ณ  ๋…ธ๋“œ์˜ ๋””์Šคํฌ ์˜ˆ์‚ฐ ๋Œ€๋น„ ์ƒ‰์ธ ํฌ๊ธฐ๋ฅผ ์ถ”์ •ํ•ฉ๋‹ˆ๋‹ค(์ƒ‰์ธ์€ ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค). xerj_autoindex_remove๋Š” ๋ชฉ๋ก ํ™•์ธ ํ›„ autoindex๋œ ํด๋” ํ•˜๋‚˜๋ฅผ ์ œ๊ฑฐํ•˜๋ฉฐ, confirm์ด true๊ฐ€ ์•„๋‹ˆ๋ฉด ์•„๋ฌด๊ฒƒ๋„ ์‚ญ์ œํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. xerj_corpus_feedback์€ ํ—ˆ๋ธŒ ์ฝ”ํผ์Šค๋ฅผ ํ‰๊ฐ€ํ•ฉ๋‹ˆ๋‹ค. xerj_field_report๋Š” ์‚ฌ์šฉ ํ›„๊ธฐ๋ฅผ ์ œ์ถœํ•˜๊ณ , xerj_hub_find, xerj_hub_def, xerj_hub_ask๋Š” ๋จธ์‹ ์— ์ด๋ฏธ ์žˆ๋Š” Corpus Hub ํŒฉ์—์„œ ๋‹ตํ•ฉ๋‹ˆ๋‹ค(xerj ask ํ๋ฆ„).

xerj mcp --help๋Š” ๊ฐ™์€ ์„ค์ • ๋ธ”๋ก๊ณผ ์ „์ฒด ์˜ต์…˜ ๋ชฉ๋ก์„ ์ถœ๋ ฅํ•ฉ๋‹ˆ๋‹ค. ๊ธฐ๊ณ„ ํŒ๋… ๊ฐ€๋Šฅํ•œ ๋„๊ตฌ ์Šคํ‚ค๋งˆ๋Š” xerj.org/docs/agents/schemas/mcp-tools.json์— ๊ณต๊ฐœ๋˜์–ด ์žˆ์œผ๋ฉฐ, ์‚ด์•„ ์žˆ๋Š” tools/list์—์„œ ์ƒ์„ฑ๋˜๊ณ (์ˆ˜์ž‘์—… ์ž‘์„ฑ ์•„๋‹˜) CI (scripts/mcp-schema-check.sh)์™€ ๋‹จ์œ„ ํ…Œ์ŠคํŠธ๋กœ ๋ณดํ˜ธ๋˜๋ฏ€๋กœ ๊ณต๊ฐœ ๋ชฉ๋ก์ด ์„œ๋น™๋˜๋Š” ๋ชฉ๋ก์—์„œ ์–ด๊ธ‹๋‚  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.

์™œ ์กด์žฌํ•˜๋Š”๊ฐ€

์—์ด์ „ํŠธ๋Š” ํŒŒ์ผ์„ ์ฝ์œผ๋ฉฐ ์ปจํ…์ŠคํŠธ ์ฐฝ์„ ํƒœ์›๋‹ˆ๋‹ค. WordPress ์ฝ”์–ด์˜ PHP๋Š” ์•ฝ 520๋งŒ ํ† ํฐ, ์ฆ‰ ์ปจํ…์ŠคํŠธ ์ฐฝ 26๊ฐœ ๋ถ„๋Ÿ‰์ด๋ผ ์—์ด์ „ํŠธ๊ฐ€ ํ†ต์งธ๋กœ ์ฝ์„ ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. grep๋„ ํ•ด๊ฒฐ์ฑ…์ด ์•„๋‹™๋‹ˆ๋‹ค. grep ํžˆํŠธ๋Š” ํ•œ ์ค„์ด๊ณ , ๊ทธ ์ค„์„ ํŒ๋‹จํ•˜๋ ค๋ฉด ํŒŒ์ผ ์ „์ฒด๋ฅผ ์—ด์–ด์•ผ ํ•˜๋‹ˆ๊นŒ์š”.

์ธ๋ฑ์Šค์— ์งˆ์˜ํ•˜๋ฉด ์งˆ๋ฌธ๋‹น ํ‚ฌ๋กœ๋ฐ”์ดํŠธ ์ˆ˜์ค€์œผ๋กœ ๋“ญ๋‹ˆ๋‹ค. WordPress ์ฝ”์–ด AI ๋ณด์•ˆ ๊ฐ์‚ฌ์—์„œ ์—์ด์ „ํŠธ๊ฐ€ PHP ํŒŒ์ผ 1,492๊ฐœ์— ๊ฑธ์ณ ์ž‘์—…ํ•˜๋ฉฐ ์•ฝ 26,000 ํ† ํฐ์„ ์ผ์Šต๋‹ˆ๋‹ค. ํŠธ๋ฆฌ์˜ ์•ฝ 0.5%๋ฅผ ๋ถˆ๋Ÿฌ์˜ค๋Š” ๋ฐ ๋“œ๋Š” ์–‘์ž…๋‹ˆ๋‹ค.

์‚ฌ์šฉ ์‚ฌ๋ก€

  • ๋ ˆํผ๋Ÿฐ์Šค ์ฝ”๋”ฉ: ์ 6D74 ฝ”๋”ฉ ์—์ด์ „ํŠธ๊ฐ€ ๋‹ค์‹œ ์œ ๋„ํ•˜๋Š” ๋Œ€์‹  ๋™๋ฅ˜ ํ”„๋กœ์ ํŠธ์˜ ๊ธฐ์กด ํ•ด๋ฒ•์„ ๊ฒ€์ƒ‰. grep ๊ธฐ๋ฐ˜ ์ฝ”๋”ฉ ๋Œ€๋น„ ์ถœ๋ ฅ ํ† ํฐ 2.7๋ฐฐ ์ ˆ๊ฐ ์ธก์ •(๊ธฐ์–ต๋งŒ ๋Œ€๋น„ 26๋ฐฐ); ์‹ค๋ฌด์—์„œ ์‚ฌ์šฉ์ž ๋ณด๊ณ  ์•ฝ 5๋ฐฐ.
  • ์ฝ”๋“œ ๊ฒ€์ƒ‰๊ณผ ๋ณด์•ˆ ๊ฐ์‚ฌ: AST ์ธ์‹ ์ƒ‰์ธ์œผ๋กœ ์—์ด์ „ํŠธ๊ฐ€ ์ค„์ด ์•„๋‹Œ ํ•จ์ˆ˜๋ฅผ ์ฐพ์Šต๋‹ˆ๋‹ค.
  • AI ๊ฒ€์ƒ‰๊ณผ RAG: ์ „๋ฌธ, ๋ฒกํ„ฐ, ํ•˜์ด๋ธŒ๋ฆฌ๋“œ ๊ฒ€์ƒ‰์„ ํ•œ ์งˆ์˜๋กœ, ๋ณ„๋„ ๋ฒกํ„ฐ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์—†์ด.
  • ์—์ด์ „ํŠธ ๋ฉ”๋ชจ๋ฆฌ: ์ž๊ธฐ ๋ฌธ์„œ ์œ„ ์ง€์‹ ๊ทธ๋ž˜ํ”„๋กœ ์˜์†์  ์žฌ์†Œํ™˜.
  • ๋กœ๊ทธ ๋ถ„์„๊ณผ ๊ด€์ธก์„ฑ: ๋กœ๊ทธ, ๋ฉ”ํŠธ๋ฆญ, ํŠธ๋ ˆ์ด์Šค๋ฅผ ํ•œ ์—”์ง„์—์„œ.
  • Elasticsearch ๋Œ€์ฒด: ๊ฐ™์€ ํ†ต์‹  ํ”„๋กœํ† ์ฝœ, ๋ฐ”์ด๋„ˆ๋ฆฌ ํ•˜๋‚˜.

์‹คํ–‰ ๊ฐ€๋Šฅํ•œ ์˜ˆ์ œ๋Š” recipes/์™€ docs/examples/์— ์žˆ์Šต๋‹ˆ๋‹ค.

Elasticsearch ํ˜ธํ™˜์„ฑ

XERJ๋Š” Elasticsearch REST API๋ฅผ ๊ตฌํ˜„ํ•ฉ๋‹ˆ๋‹ค: ์ธ๋ฑ์Šค, ๋ฌธ์„œ, bulk, ๊ฒ€์ƒ‰, ์ง‘๊ณ„, ๋งคํ•‘, kNN, scroll, reindex, _cat ์—”๋“œํฌ์ธํŠธ. Kibana์™€ ๊ณต์‹ ํด๋ผ์ด์–ธํŠธ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๊ฐ€ ์ง์ ‘ ์—ฐ๊ฒฐ๋ฉ๋‹ˆ๋‹ค. ๋‚ด๋ณด๋‚ด๊ธฐ ๋„๊ตฌ๋ฅผ ์—ฐ๊ฒฐํ•˜๊ธฐ ์ „์— ์•Œ์•„๋‘˜ ๊ฒฝ๊ณ„ ํ•˜๋‚˜: scroll์€ ์„ธ๊ทธ๋จผํŠธ๋ฅผ ์ˆœํšŒํ•˜๋Š” ์ปค์„œ๊ฐ€ ์•„๋‹ˆ๋ผ ๋ฏธ๋ฆฌ ์ •ํ•ด์ง„ ํฌ๊ธฐ์˜ ์Šค๋ƒ…์ƒท์ด๋ผ, ์ •ํ™•ํ•œ ์ด๋Ÿ‰์ด ์Šค๋ƒ…์ƒท ์ฐฝ์„ ๋„˜๋Š” ์งˆ์˜๋Š” ์กฐ์šฉํžˆ ์ž˜๋ฆฌ๋Š” ๋Œ€์‹  400์œผ๋กœ ๊ฑฐ๋ถ€๋ฉ๋‹ˆ๋‹ค. ์–ด๋–ค ํฌ๊ธฐ์˜ ๊ฒฐ๊ณผ๋“  search_after๋ฅผ ์“ฐ์„ธ์š” (์ƒํ•œ).

์ ํ•ฉ์„ฑ ์Šค์œ„ํŠธ๊ฐ€ ๋งค ์ปค๋ฐ‹๋งˆ๋‹ค ์‹คํ–‰๋˜๋ฉฐ ํ˜„์žฌ 1454๊ฑด ์ค‘ 1444๊ฑด์„ ํ†ต๊ณผํ•ฉ๋‹ˆ๋‹ค. ์Šค์œ„ํŠธ๋Š” engine/tests/es-compat-yaml์— ์žˆ๊ณ , ๋‚จ์€ ๊ฐ„๊ทน์€ ์ˆจ๊ธฐ์ง€ ์•Š๊ณ  ๊ฑฐ๊ธฐ์— ๋‚˜์—ด๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค. XERJ๋Š” API์™€ ํ˜ธํ™˜๋ฉ๋‹ˆ๋‹ค. Elasticsearch ๋‚ด๋ถ€์˜ ์žฌ๊ตฌํ˜„์ด ์•„๋‹ˆ๋ฉฐ ํฌํฌ๋„ ์•„๋‹™๋‹ˆ๋‹ค.

๋ฒค์น˜๋งˆํฌ

XERJ๋Š” Elasticsearch 8.13.4์™€ ์ˆ˜์ง‘, ์ „๋ฌธ ๊ฒ€์ƒ‰, ์ง‘๊ณ„, ๋ฒกํ„ฐ ๊ฒ€์ƒ‰, ๋™์‹œ ์“ฐ๊ธฐ ํ™์ˆ˜ ์† ์ฝ๊ธฐ๋ฅผ ๋งž๋Œ€๊ณ  ๋ฒค์น˜๋งˆํฌ๋ฉ๋‹ˆ๋‹ค. ์ตœ๊ทผ ํ์‡„ ๋ฃจํ”„ ์‹คํ–‰์€ 55์Šน 26๋ฌด 4ํŒจ์ด๋ฉฐ, ์ˆ˜์ง‘ ์ฒ˜๋ฆฌ๋Ÿ‰ 1.72๋ฐฐ, ์˜จ๋””์Šคํฌ ํฌ๊ธฐ 1.61๋ฐฐ ์ถ•์†Œ๋ฅผ ํฌํ•จํ•ฉ๋‹ˆ๋‹ค.

4ํŒจ๋Š” ๋ชจ๋‘ ๊ฐ™์€ ๊ฐ„๊ทน์ž…๋‹ˆ๋‹ค: ๊ณ ์† ์“ฐ๊ธฐ๊ฐ€ ๋Œ ๋•Œ์˜ ์ฝ๊ธฐ p99. ๋น ๋œจ๋ฆฌ์ง€ ์•Š๊ณ  ์ „์ฒด ๊ธฐ๋ก์œผ๋กœ ๋‚จ๊ฒจ๋’€์Šต๋‹ˆ๋‹ค. ๊ฒฐ๊ณผ, ๋ฐฉ๋ฒ•๋ก , ํ•˜๋‹ˆ์Šค๋Š” xerj.org/benchmarks์™€ demo/playbooks์— ์žˆ์œผ๋ฏ€๋กœ ์ง์ ‘ ๋‹ค์‹œ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์žฌํ˜„ํ•  ์ˆ˜ ์—†๋Š” ์ˆซ์ž๋Š” โ€” ์šฐ๋ฆฌ ๊ฒƒ ํฌํ•จ โ€” ํšŒ์˜์ ์œผ๋กœ ๋ณด์„ธ์š”.

์ฝ”๋“œ ์ƒ‰์ธ

์†Œ์Šค ํŒŒ์ผ์€ tree-sitter๋กœ ํŒŒ์‹ฑ๋˜์–ด AST ์ธ์‹์œผ๋กœ ์ƒ‰์ธ๋ฉ๋‹ˆ๋‹ค โ€” ์‹ฌ๋ณผ + ์ „๋ฌธ โ€” ๊ทธ๋ž˜์„œ ์—์ด์ „ํŠธ๊ฐ€ ์ค„์ด ์•„๋‹Œ ํ•จ์ˆ˜๋ฅผ ๊ฒ€์ƒ‰ํ•ฉ๋‹ˆ๋‹ค. Apache Lucene ์ฒดํฌ์•„์›ƒ(์†Œ์Šค ํŒŒ์ผ 6,113๊ฐœ, 51 MB)์—์„œ ๋‹จ์ผ ์Šค๋ ˆ๋“œ ์ธํ”„๋กœ์„ธ์Šค ์ถ”์ถœ์ด **์ดˆ๋‹น ์•ฝ 1,500ํŒŒ์ผ(13 MB/s)**๋กœ ์‹คํ–‰๋ฉ๋‹ˆ๋‹ค; tree-sitter ํŒŒ์‹ฑ์ด ๊ทธ์ค‘ ์•ฝ 72%๋กœ ํŒŒ์ผ๋‹น ํ•˜ํ•œ์ž…๋‹ˆ๋‹ค. ์žฌํ˜„:

XERJ_EXTRACT_BENCH=/path/to/repo cargo test -p xerj-autoindex --release \
  extract_bench -- --nocapture --ignored

์žฌ์ƒ‰์ธ์€ ์ฆ๋ถ„์ž…๋‹ˆ๋‹ค: ๋งˆ์ง€๋ง‰ ์ƒ‰์ธ ์„ธ๋Œ€์™€ ๋ฐ”์ดํŠธ๊ฐ€ ๋™์ผํ•œ ํŒŒ์ผ์€ ํŒŒ์‹ฑ์„ ์™„์ „ํžˆ ๊ฑด๋„ˆ๋›ฐ๊ณ  ์ปค๋ฐ‹๋œ ๊ฒฐ๊ณผ๋ฅผ ๊ทธ๋Œ€๋กœ ๊ฐ€์ ธ๊ฐ€๋ฏ€๋กœ, ๋ช‡ ๊ฐœ ํŒŒ์ผ์„ ๊ณ ์นœ ๋’ค ์žฌ์‹คํ–‰ํ•˜๋ฉด ์ €์žฅ์†Œ ์ „์ฒด๊ฐ€ ์•„๋‹ˆ๋ผ ๋ฐ”๋€ ๋ถ€๋ถ„์— ๋น„๋ก€ํ•œ ์ž‘์—…์„ ํ•ฉ๋‹ˆ๋‹ค โ€” ํ”ํ•œ ์ˆ˜์ •-์žฌ์‹คํ–‰ / CI ์ผ€์ด์Šค๋กœ ๋ณดํ†ต 95% ์ด์ƒ์ด ๋ณ€ํ™” ์—†์Œ. ๋ณ€๊ฒฝ ๊ฒ€์ง€๋ฅผ ์œ„ํ•ด ์ „์ฒด ์ฝ˜ํ…์ธ  ํ•ด์‹œ๋Š” ์—ฌ์ „ํžˆ ๋Œ์•„๊ฐ€๋ฏ€๋กœ, ์ด ์žฌ์ƒ‰์ธ ์‹œ๊ฐ„์˜ ํ•˜ํ•œ์€ ํŒŒ์‹ฑ์ด ์•„๋‹ˆ๋ผ ํ•ด์‹ฑ์ž…๋‹ˆ๋‹ค.

์†Œ์Šค์—์„œ ๋นŒ๋“œ

์•ˆ์ • ๋ฒ„์ „ Rust ํˆด์ฒด์ธ์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.

git clone https://github.com/xerj-org/xerj
cd xerj/engine
cargo build --release -p xerj-server
./target/release/xerj --insecure --data-dir ~/xerj-data

์‹คํ–‰ ์ค‘์ธ ์„œ๋ฒ„์— ์ ํ•ฉ์„ฑ ์Šค์œ„ํŠธ๋ฅผ ๋Œ๋ฆฌ๋ ค๋ฉด:

cargo run --release -p es-yaml-runner -- --dir tests/es-compat-yaml/yaml

๋ฌธ์„œ

๊ฐœ๋ณ„ ํ•˜์œ„ ์‹œ์Šคํ…œ์˜ ๋ ˆํผ๋Ÿฐ์Šค ํŽ˜์ด์ง€. ์†Œ์Šค๋ฅผ ๊ธฐ์ค€์œผ๋กœ ์ž‘์„ฑ๋˜์—ˆ๊ณ  ๊ฐ๊ฐ์ด ํ’€์ง€ ์•Š๋Š” ํ•œ๊ณ„๋ฅผ ํฌํ•จํ•ฉ๋‹ˆ๋‹ค:

  • ์„ธ์ปจ๋“œ ๋ธŒ๋ ˆ์ธ: ์ƒ‰์ธ๋œ ๋ฌธ์„œ ์œ„์˜ ๊ด€๊ณ„ ๋ ˆ์ด์–ด โ€” /_graph ๋ผ์šฐํŠธ, ๋งํฌ์˜ ๊ทผ๊ฑฐ, ์—ฌ๋Ÿ ๊ฐœ ๋””ํ…ํ„ฐ, ํˆฌํ™‰(two-hop) ์ƒํ•œ.
  • ์ฝ˜์†” ๋ฆฌ๋”: ์ฝ˜์†”์˜ ์ฝ”ํผ์Šค ํ™ˆ, ๋ชจ๋“  ๋ ˆ์ฝ”๋“œ(์ฒจ๋ถ€ ํŒŒ์ผ์ด ์žˆ๋Š” ๋ฉ”์ผ, PDF ํŽ˜์ด์ง€)๋ฅผ ์œ„ํ•œ ๋ฆฌ๋”, ์ฝ๊ธฐ ์ „์šฉ ๊ฒŒ์ŠคํŠธ ๋ชจ๋“œ, ์ ๋Œ€์  ๋ฌธ์„œ๋ฅผ ๋ฌด๋ ฅํ•˜๊ฒŒ ์œ ์ง€ํ•˜๋Š” ๋ Œ๋”๋ง ๊ทœ์น™๊ณผ ๋ Œ๋”๋งํ•˜์ง€ ์•Š๋Š” ๊ฒƒ๋“ค.
  • ์Šคํฌ๋ฆฝํŒ…: Painless ํ•˜์œ„ ์ง‘ํ•ฉ, ์Šคํฌ๋ฆฝํŠธ๊ฐ€ ์‹คํ–‰๋˜๋Š” ๊ณณ, ์ด๋ฅผ ์ œํ•œํ•˜๋Š” ๋ฆฌ์†Œ์Šค ํ•œ๊ณ„.
  • ์Šค๋ƒ…์ƒท๊ณผ ๋ณต์›: ์ง€์›๋˜๋Š” ์Šค๋ƒ…์ƒท API ํ•˜์œ„ ์ง‘ํ•ฉ๊ณผ ๋ณต์›์ด ๋Œ€์ฒดํ•˜๋Š” ๊ฒƒ.
  • ๊ณต์œ : xerj share โ€” ๋งํฌ์™€ ํŒจ์Šค์ฝ”๋“œ๋กœ ์ƒ‰์ธ๋œ ํด๋” ํ•˜๋‚˜์— ๋Œ€ํ•œ ์ฝ๊ธฐ ์ „์šฉ ๊ฒŒ์ŠคํŠธ ์ ‘๊ทผ, ๊ฒŒ์ŠคํŠธ๊ฐ€ ๋‹ฟ์„ ์ˆ˜ ์žˆ๋Š” ๊ฒƒ๊ณผ ์—†๋Š” ๊ฒƒ, ์œ„ํ˜‘ ๋ชจ๋ธ.
  • ๋ณด์•ˆ ๋ชจ๋ธ: ์ธ์ฆ, ์˜ˆ์•ฝ๋œ .xerj-memory-* ๋„ค์ž„์ŠคํŽ˜์ด์Šค, API ํ‚ค, ๊ฐ•์ œ๋˜์ง€ ์•Š๋Š” ๊ฒƒ๋“ค.
  • ๋ฆฌ๋žญํ‚น: ์„ ํƒ์  rerank ๊ฒ€์ƒ‰ ๋‹จ๊ณ„ โ€” ์™ธ๋ถ€ ์‹ฌํŒ์ด ๋ณด์ •๋œ ํ™•๋ฅ ๋กœ ์ƒ์œ„ ํžˆํŠธ๋ฅผ ์žฌ์ •๋ ฌํ•ฉ๋‹ˆ๋‹ค. ๋ฌธ์„œ ํ…์ŠคํŠธ๋ฅผ ๋…ธ๋“œ ๋ฐ–์œผ๋กœ ๋ณด๋‚ด๋Š” ์œ ์ผํ•œ ๊ฒ€์ƒ‰ ์‹œ์  ๊ธฐ๋Šฅ์ž…๋‹ˆ๋‹ค(ํ”„๋ก์‹œ ์ž„๋ฒ ๋”ฉ๊ณผ WAL ํƒญ๋„ ์šด์˜์ž๊ฐ€ ์„ค์ •ํ•˜๋ฉด ํ…์ŠคํŠธ๋ฅผ ๋ณด๋ƒ„; ํ•ด๋‹น ํŽ˜์ด์ง€๋Š” ๋…ธ๋“œ๊ฐ€ ์—ด ์ˆ˜ ์žˆ๋Š” ๋ชจ๋“  ์•„์›ƒ๋ฐ”์šด๋“œ ์—ฐ๊ฒฐ์„ ๋‚˜์—ด), ์šด์˜์ž๊ฐ€ ์„ค์ •ํ•œ ์ œ๊ณต์ž ํ‚ค๊ฐ€ ํ•„์š”ํ•˜๋ฉฐ, ์‹ค์ œ ๋ชจ๋ธ์—์„œ์˜ ๋žญํ‚น ํ’ˆ์งˆ์€ ๊ฒ€์ฆ๋˜์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค.
  • XERJ vs Lucene 10.3.1: ์ €์žฅ์†Œ์™€ ๊ฒ€์ƒ‰ ์„ค๊ณ„์˜ ์—ฌ์„ฏ ์ถ• ๋น„๊ต, ์†Œ์Šค๋ฅผ ๊ณ ์ •ํ•˜์—ฌ ์ž‘์„ฑ.

๊ธฐ์—ฌํ•˜๊ธฐ

์‚ฌ๋žŒ๊ณผ AI ์—์ด์ „ํŠธ ๋ชจ๋‘์˜ ํ’€ ๋ฆฌํ€˜์ŠคํŠธ๋ฅผ ํ™˜์˜ํ•ฉ๋‹ˆ๋‹ค; ์œ„์˜ ์ปค๋ฎค๋‹ˆํ‹ฐ ์ฐธ์—ฌ๋ฅผ ๋ณด์„ธ์š”. ๊ธฐ๋ณธ ๊ธฐ์—ฌ๋Š” ์งง์€ ์‚ฌ์šฉ ํ›„๊ธฐ ํ•˜๋‚˜์ž…๋‹ˆ๋‹ค: user-feedback/16-agent-field-reports/์— ๋งˆํฌ๋‹ค์šด ํŒŒ์ผ ํ•˜๋‚˜๋ฅผ ์ถ”๊ฐ€ํ•˜๋Š” ์ผ๋ฐ˜ gh pr create. ์‚ฌ์šฉ ํ›„๊ธฐ๋งŒ ๋‹ด์€ PR์€ CLA ๋ฉด์ œ๋ผ ์„œ๋ช… ์—†์ด ๋ณ‘ํ•ฉ๋ฉ๋‹ˆ๋‹ค.

์ฝ”๋“œ ๋ณ€๊ฒฝ์€ ์›Œํฌํ”Œ๋กœ์šฐ๋ฅผ CONTRIBUTING.md์—์„œ, ๊ธฐ์—ฌ์ž ๋ผ์ด์„ ์Šค ๊ณ„์•ฝ์„ CLA.md์—์„œ ๋ณด์„ธ์š”. ๊ณ„์•ฝ์€ PR๋‹น์ด ์•„๋‹ˆ๋ผ ๊ธฐ์—ฌ์ž๋‹น ์„œ๋ช… ํ•˜๋‚˜์ž…๋‹ˆ๋‹ค. PR์„ ์—ฌ๋Š” ์—์ด์ „ํŠธ๋Š” ์—์ด์ „ํŠธ๊ฐ€ ์ž‘์„ฑํ–ˆ์Œ์„ ๋ฐํžˆ๊ณ  AGENTS.md / .github/AI_CONTRIBUTIONS.md๋ฅผ ๋”ฐ๋ผ์•ผ ํ•ฉ๋‹ˆ๋‹ค.

๋ฒ„๊ทธ์™€ ๊ธฐ๋Šฅ ์š”์ฒญ์€ GitHub ์ด์Šˆ๋กœ ๋ณด๋‚ด์„ธ์š”.

๋ผ์ด์„ ์Šค

Apache 2.0.

0