๐ ๋ฐฐ๊ฒฝ
ํ์ฌ processing-server๋ Instagram caption์์ ์ฅ์ ์ ๋ณด๋ฅผ ๋จ์ผ store_name/address๋ก ์ถ์ถํ๊ณ , Kakao Local ๊ฒ์ ๊ฒฐ๊ณผ๋ ๋จ์ผ selected_place ์ค์ฌ์ผ๋ก ์ ์ฅํ๋ค.
ํ์ง๋ง ํ๋์ caption ์์ ์ฌ๋ฌ ์ฅ์๊ฐ ๋ฆฌ์คํธ ํํ๋ก ํฌํจ๋๋ ๊ฒ์๋ฌผ์ด ์กด์ฌํ๋ค. ์๋ฅผ ๋ค์ด ๋์ ํธ ์นดํ ์ถ์ฒ caption์์ ํ๋ฃจ๋ฐ, ๋ํฌ๋
น, ์์ฑ , ๋ผ๋์
ฉํธ, ์ฝ์ดํฌ, ์นดํํ ์์ฒ๋ผ ์ฌ๋ฌ place_name๊ณผ ์ฃผ์๊ฐ ํจ๊ป ์ ๊ณต๋๋ค.
๋ํ ์ค์ caption์์๋ ์ํธ๋ช
์ด #ํ๋ฃจ๋ฐ์ฒ๋ผ hashtag ํํ๋ก ๋ฑ์ฅํ๋ ๊ฒฝ์ฐ๋ ์์ด, ๊ธฐ์กด ๋จ์ผ ์ถ์ถ prompt๋ง์ผ๋ก๋ ๋ค์ค ์ฅ์์ hashtag ๊ธฐ๋ฐ ์ํธ๋ช
์ ์์ ์ ์ผ๋ก ์ฒ๋ฆฌํ๊ธฐ ์ด๋ ต๋ค.
๐ฏ ๋ชฉํ
ํ๋์ caption์์ ์ฌ๋ฌ ์ฅ์ ํ๋ณด๋ฅผ ์ถ์ถํ๊ณ , ๊ฐ ์ฅ์๋ฅผ Kakao Local API๋ก enrichmentํ ๋ค, ์ ํ ๊ฐ๋ฅํ ๋ชจ๋ Kakao ์ฅ์ ๊ฒฐ๊ณผ๋ฅผ DB/API ์๋ต์ ์ ์ฅํ๋ค.
๊ธฐ์กด ๋จ์ผ ์ฅ์ caption๊ณผ ๊ธฐ์กด ์๋ต ํ๋๋ ๊ฐ๋ฅํ ์ ์งํ๋ฉด์, ์ ๊ท ๋ค์ค ์ฅ์ ํ๋๋ฅผ ์ถ๊ฐํ๋ค.
๐ ๏ธ ๊ตฌํ ๋ด์ฉ
- LLM extraction schema๋ฅผ ๋ค์ค ์ฅ์ ๋ฐฐ์ด ์ค์ฌ์ผ๋ก ํ์ฅํ๋ค.
extraction_result.places์ ์ ์ฒด extracted place ๋ชฉ๋ก์ ์ ์ฅํ๋ค.
- ๊ธฐ์กด
store_name, address, store_name_evidence, address_evidence, certainty๋ ์ฒซ ๋ฒ์งธ extracted place ๊ธฐ์ค legacy ๋ํ๊ฐ์ผ๋ก ์ ์งํ๋ค.
- extraction prompt๋ฅผ ๊ตฌ์ฒดํํ๋ค.
- ๋ฒํธ ๋ชฉ๋ก(
โถ, โท, 1., 2. ๋ฑ), ๋ธ๋๋ ์ ๋ณด, ๋งค์ฅ ์ ๋ณด, ์ฅ์ ์ ๋ณด ์น์
์ ์ธ์ํ๋ค.
- place name line๊ณผ ์ด์ด์ง๋ ์ฃผ์ line์ pair๋ก ๋ฌถ๋๋ค.
๐, ์ฃผ์, ์์น, ์์ธ, ๊ตฌ, ๋, ๋ก, ๊ธธ ๋ฑ ์ฃผ์ ๋จ์๋ฅผ ํ์ฉํ๋ค.
#ํ๋ฃจ๋ฐ์ฒ๋ผ hashtag๊ฐ ์ค์ ์ํธ๋ช
์ธ ๊ฒฝ์ฐ ํ๋ณด๋ก ๊ณ ๋ คํ๋ค.
#์์ธ์นดํ, #์ฐ๋จ์นดํ, #๋ง์ง์ถ์ฒ ๊ฐ์ ์ง์ญ/์นดํ
๊ณ ๋ฆฌ/ํ๋ณด์ฑ hashtag๋ ์ํธ๋ช
์ผ๋ก ์ถ์ถํ์ง ์๋๋ค.
- ๊ฐ extracted place์ ๋ํด ๊ธฐ์กด Kakao Local ๊ฒ์ ์ ์ฑ
์ ๋์ผํ๊ฒ ์ ์ฉํ๋ค.
- LLM address๋ ๊ฒ์ ํํธ๋ก๋ง ์ฌ์ฉํ๋ค.
- ์ ์ฅ ์ฅ์ ์ ๋ณด๋ Kakao Local API ์๋ต ๊ธฐ์ค์ผ๋ก ํ๋ค.
- ์ฃผ์๊ฐ ๋ค๋ฅด๋ค๋ ์ด์ ๋ง์ผ๋ก ํ๋ณด๋ฅผ ๋ฒ๋ฆฌ์ง ์๋๋ค.
kakao_min_place_confidence=0.7 ๊ธฐ์ค์ ์ ์งํ๋ค.
- ์ ํ ๊ฐ๋ฅํ ํ๋ณด๋ง
place_candidates์ ์ ์ฅํ๋ค.
- ๋ค์ค ์ ํ ๊ฒฐ๊ณผ ์ ์ฅ์ ์ํด DB schema migration์ ์ถ๊ฐํ๋ค.
selected_places JSONB NOT NULL DEFAULT '[]'::jsonb
- API ์๋ต schema์
selected_places๋ฅผ ์ถ๊ฐํ๋ค.
- ๊ธฐ์กด
selected_place๋ legacy ๋ํ๊ฐ์ผ๋ก ์ ์งํ๋ค.
- ๋จ์ผ caption์์๋ ๊ธฐ์กด ๋์๊ณผ ๋์ผํ๊ฒ selected ๊ฒฐ๊ณผ 1๊ฐ๋ฅผ ๋ด๋๋ค.
- ๋ค์ค caption์์๋ caption ๋ฑ์ฅ ์์ ๊ธฐ์ค ์ฒซ ๋ฒ์งธ selected place๋ฅผ ๋ด๋๋ค.
- Kakao ๋งค์นญ ์คํจํ extracted place๋
extraction_result.places์๋ ๋จ๊ธฐ๊ณ , selected_places/place_candidates์๋ ์ ์ฅํ์ง ์๋๋ค.
- ๋จ์ผ ์ฅ์ caption ๊ธฐ์กด ํ
์คํธ์ ๋ค์ค ์ฅ์ caption ์ ๊ท ํ
์คํธ๋ฅผ ํจ๊ป ๊ฐฑ์ ํ๋ค.
โ ๏ธ ๊ณ ๋ ค์ฌํญ
- DB schema ๋ณ๊ฒฝ์ ๋ฐ๋์ migration SQL๋ก ์ถ๊ฐํ๋ค.
- ๊ธฐ์กด API ์๋น์๊ฐ
selected_place ๋๋ extraction_result.store_name์ ์ฌ์ฉ ์ค์ผ ์ ์์ผ๋ฏ๋ก ํด๋น ํ๋๋ legacy ๋ํ๊ฐ์ผ๋ก ์ ์งํ๋ค.
- ์ ๊ท ๋ค์ค ์ฅ์ ์๋น์๋
extraction_result.places์ selected_places๋ฅผ ์ฌ์ฉํด์ผ ํ๋ค.
- ๋ค์ค caption์์๋ Kakao Local API ํธ์ถ ์๊ฐ extracted place ์๋งํผ ์ฆ๊ฐํ๋ฏ๋ก
extraction_max_candidates ์ ํ์ ์ ์ฉํ๋ค.
selected_place๋ ๋ค์ค ๊ฒฐ๊ณผ์ ์ ์ฒด ์๋ฏธ๋ฅผ ๋ด์ง ๋ชปํ๋ฏ๋ก, ๋ค์ค ์ฅ์ ์ฒ๋ฆฌ๋ selected_places๋ฅผ authoritative field๋ก ๋ณธ๋ค.
โ
์๋ฃ ์กฐ๊ฑด
- ์์ caption์์
ํ๋ฃจ๋ฐ, ๋ํฌ๋
น, ์์ฑ , ๋ผ๋์
ฉํธ, ์ฝ์ดํฌ, ์นดํํ ์๊ฐ ๋ชจ๋ extraction_result.places์ ์ถ์ถ๋๋ค.
#์ํธ๋ช
ํํ์ hashtag๊ฐ ์ค์ place name์ธ ๊ฒฝ์ฐ ์ถ์ถ ํ๋ณด๋ก ์ฒ๋ฆฌ๋๋ค.
- ์ง์ญ/์นดํ
๊ณ ๋ฆฌ/ํ๋ณด์ฑ hashtag๋ place name์ผ๋ก ์ค์ถ์ถํ์ง ์๋๋ค.
- ๊ฐ extracted place์ ๋ํด Kakao Local enrichment๊ฐ ์ํ๋๋ค.
- confidence ๊ธฐ์ค์ ํต๊ณผํ Kakao ํ๋ณด๋ง
place_candidates์ ์ ์ฅ๋๋ค.
- ๋งค์นญ ์ฑ๊ณตํ ์ฅ์๋ค์ด
selected_places๋ก DB์ ์ ์ฅ๋๊ณ API ์๋ต์์ ํ์ธ๋๋ค.
- ๊ธฐ์กด
selected_place๋ legacy ๋ํ๊ฐ์ผ๋ก ์ ์ง๋๋ค.
- DB schema ๋ณ๊ฒฝ์ด migration SQL์ ํฌํจ๋๋ค.
- ๋จ์ผ ์ฅ์ caption ๊ธฐ์กด ํ
์คํธ์ ๋ค์ค ์ฅ์ caption ์ ๊ท ํ
์คํธ๊ฐ ๋ชจ๋ ํต๊ณผํ๋ค.
๐ ๋ฐฐ๊ฒฝ
ํ์ฌ processing-server๋ Instagram caption์์ ์ฅ์ ์ ๋ณด๋ฅผ ๋จ์ผ
store_name/address๋ก ์ถ์ถํ๊ณ , Kakao Local ๊ฒ์ ๊ฒฐ๊ณผ๋ ๋จ์ผselected_place์ค์ฌ์ผ๋ก ์ ์ฅํ๋ค.ํ์ง๋ง ํ๋์ caption ์์ ์ฌ๋ฌ ์ฅ์๊ฐ ๋ฆฌ์คํธ ํํ๋ก ํฌํจ๋๋ ๊ฒ์๋ฌผ์ด ์กด์ฌํ๋ค. ์๋ฅผ ๋ค์ด ๋์ ํธ ์นดํ ์ถ์ฒ caption์์
ํ๋ฃจ๋ฐ,๋ํฌ๋ น,์์ฑ,๋ผ๋์ ฉํธ,์ฝ์ดํฌ,์นดํํ ์์ฒ๋ผ ์ฌ๋ฌ place_name๊ณผ ์ฃผ์๊ฐ ํจ๊ป ์ ๊ณต๋๋ค.๋ํ ์ค์ caption์์๋ ์ํธ๋ช ์ด
#ํ๋ฃจ๋ฐ์ฒ๋ผ hashtag ํํ๋ก ๋ฑ์ฅํ๋ ๊ฒฝ์ฐ๋ ์์ด, ๊ธฐ์กด ๋จ์ผ ์ถ์ถ prompt๋ง์ผ๋ก๋ ๋ค์ค ์ฅ์์ hashtag ๊ธฐ๋ฐ ์ํธ๋ช ์ ์์ ์ ์ผ๋ก ์ฒ๋ฆฌํ๊ธฐ ์ด๋ ต๋ค.๐ฏ ๋ชฉํ
ํ๋์ caption์์ ์ฌ๋ฌ ์ฅ์ ํ๋ณด๋ฅผ ์ถ์ถํ๊ณ , ๊ฐ ์ฅ์๋ฅผ Kakao Local API๋ก enrichmentํ ๋ค, ์ ํ ๊ฐ๋ฅํ ๋ชจ๋ Kakao ์ฅ์ ๊ฒฐ๊ณผ๋ฅผ DB/API ์๋ต์ ์ ์ฅํ๋ค.
๊ธฐ์กด ๋จ์ผ ์ฅ์ caption๊ณผ ๊ธฐ์กด ์๋ต ํ๋๋ ๊ฐ๋ฅํ ์ ์งํ๋ฉด์, ์ ๊ท ๋ค์ค ์ฅ์ ํ๋๋ฅผ ์ถ๊ฐํ๋ค.
๐ ๏ธ ๊ตฌํ ๋ด์ฉ
extraction_result.places์ ์ ์ฒด extracted place ๋ชฉ๋ก์ ์ ์ฅํ๋ค.store_name,address,store_name_evidence,address_evidence,certainty๋ ์ฒซ ๋ฒ์งธ extracted place ๊ธฐ์ค legacy ๋ํ๊ฐ์ผ๋ก ์ ์งํ๋ค.โถ,โท,1.,2.๋ฑ),๋ธ๋๋ ์ ๋ณด,๋งค์ฅ ์ ๋ณด,์ฅ์ ์ ๋ณด์น์ ์ ์ธ์ํ๋ค.๐,์ฃผ์,์์น,์์ธ,๊ตฌ,๋,๋ก,๊ธธ๋ฑ ์ฃผ์ ๋จ์๋ฅผ ํ์ฉํ๋ค.#ํ๋ฃจ๋ฐ์ฒ๋ผ hashtag๊ฐ ์ค์ ์ํธ๋ช ์ธ ๊ฒฝ์ฐ ํ๋ณด๋ก ๊ณ ๋ คํ๋ค.#์์ธ์นดํ,#์ฐ๋จ์นดํ,#๋ง์ง์ถ์ฒ๊ฐ์ ์ง์ญ/์นดํ ๊ณ ๋ฆฌ/ํ๋ณด์ฑ hashtag๋ ์ํธ๋ช ์ผ๋ก ์ถ์ถํ์ง ์๋๋ค.kakao_min_place_confidence=0.7๊ธฐ์ค์ ์ ์งํ๋ค.place_candidates์ ์ ์ฅํ๋ค.selected_places JSONB NOT NULL DEFAULT '[]'::jsonbselected_places๋ฅผ ์ถ๊ฐํ๋ค.selected_place๋ legacy ๋ํ๊ฐ์ผ๋ก ์ ์งํ๋ค.extraction_result.places์๋ ๋จ๊ธฐ๊ณ ,selected_places/place_candidates์๋ ์ ์ฅํ์ง ์๋๋ค.selected_place๋๋extraction_result.store_name์ ์ฌ์ฉ ์ค์ผ ์ ์์ผ๋ฏ๋ก ํด๋น ํ๋๋ legacy ๋ํ๊ฐ์ผ๋ก ์ ์งํ๋ค.extraction_result.places์selected_places๋ฅผ ์ฌ์ฉํด์ผ ํ๋ค.extraction_max_candidates์ ํ์ ์ ์ฉํ๋ค.selected_place๋ ๋ค์ค ๊ฒฐ๊ณผ์ ์ ์ฒด ์๋ฏธ๋ฅผ ๋ด์ง ๋ชปํ๋ฏ๋ก, ๋ค์ค ์ฅ์ ์ฒ๋ฆฌ๋selected_places๋ฅผ authoritative field๋ก ๋ณธ๋ค.โ ์๋ฃ ์กฐ๊ฑด
ํ๋ฃจ๋ฐ,๋ํฌ๋ น,์์ฑ,๋ผ๋์ ฉํธ,์ฝ์ดํฌ,์นดํํ ์๊ฐ ๋ชจ๋extraction_result.places์ ์ถ์ถ๋๋ค.#์ํธ๋ชํํ์ hashtag๊ฐ ์ค์ place name์ธ ๊ฒฝ์ฐ ์ถ์ถ ํ๋ณด๋ก ์ฒ๋ฆฌ๋๋ค.place_candidates์ ์ ์ฅ๋๋ค.selected_places๋ก DB์ ์ ์ฅ๋๊ณ API ์๋ต์์ ํ์ธ๋๋ค.selected_place๋ legacy ๋ํ๊ฐ์ผ๋ก ์ ์ง๋๋ค.