From 4d6434817d7bb1354da5c64c11a4ad06f23f07f4 Mon Sep 17 00:00:00 2001 From: happybell80 Date: Sun, 14 Sep 2025 18:16:54 +0900 Subject: [PATCH] =?UTF-8?q?docs:=20=EA=B9=A1=ED=94=84=EB=A1=9C=20=EB=89=B4?= =?UTF-8?q?=EC=8A=A4=20=EC=9A=A9=EC=96=B4=20=EC=B6=94=EC=B6=9C=20=EA=B8=B0?= =?UTF-8?q?=EB=8A=A5=20=EC=B6=94=EA=B0=80=20=EC=84=A4=EA=B3=84=20=EB=AC=B8?= =?UTF-8?q?=EC=84=9C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...กํ”„๋กœ๋‰ด์Šค_์šฉ์–ด์ถ”์ถœ_๊ธฐ๋Šฅ์ถ”๊ฐ€.md | 122 ++++++++++++++++++ 1 file changed, 122 insertions(+) create mode 100644 troubleshooting/250114_happybell80_๊นกํ”„๋กœ๋‰ด์Šค_์šฉ์–ด์ถ”์ถœ_๊ธฐ๋Šฅ์ถ”๊ฐ€.md diff --git a/troubleshooting/250114_happybell80_๊นกํ”„๋กœ๋‰ด์Šค_์šฉ์–ด์ถ”์ถœ_๊ธฐ๋Šฅ์ถ”๊ฐ€.md b/troubleshooting/250114_happybell80_๊นกํ”„๋กœ๋‰ด์Šค_์šฉ์–ด์ถ”์ถœ_๊ธฐ๋Šฅ์ถ”๊ฐ€.md new file mode 100644 index 0000000..a27bd04 --- /dev/null +++ b/troubleshooting/250114_happybell80_๊นกํ”„๋กœ๋‰ด์Šค_์šฉ์–ด์ถ”์ถœ_๊ธฐ๋Šฅ์ถ”๊ฐ€.md @@ -0,0 +1,122 @@ +# ๊นกํ”„๋กœ ๋‰ด์Šค ์šฉ์–ด ์ถ”์ถœ ๊ธฐ๋Šฅ ์ถ”๊ฐ€ (2025-01-14) + +## ์š”๊ตฌ์‚ฌํ•ญ +๋งค์ผ 9์‹œ 10๋ถ„ ๊นกํ”„๋กœ ๋‰ด์Šค(๋„ค์ด๋ฒ„ ์Šคํƒ€ํŠธ์—… ํ—ค๋“œ๋ผ์ธ)์— "์˜ค๋Š˜ ์•Œ์•„๋‘˜ ์šฉ์–ด" ์„น์…˜ ์ถ”๊ฐ€ + +### ๋ชฉํ‘œ ๊ตฌ์กฐ +``` +์˜คํ”„๋‹ ๋ฉ”์‹œ์ง€ +โ†“ +์ถœ์ฒ˜ ๋งํฌ +โ†“ +ํ—ค๋“œ๋ผ์ธ ๋ชฉ๋ก (01-50๋ฒˆ) +โ†“ +์˜ค๋Š˜ ์•Œ์•„๋‘˜ ์šฉ์–ด (NEW) +โ†“ +๋กœ๋น™์—๊ฒŒ ๋ฌผ์–ด๋ณด๊ธฐ CTA (NEW) +โ†“ +ํด๋กœ์ง• ๋ฉ”์‹œ์ง€ +โ†“ +๋ช…์–ธ +``` + +## ํ˜„์žฌ ์ƒํƒœ ๋ถ„์„ + +### 1. ํ—ค๋“œ๋ผ์ธ ์ฒ˜๋ฆฌ ํ๋ฆ„ +- **์Šค์ผ€์ค„ ๋“ฑ๋ก**: rb8001 `main.py:206` - ๋งค์ผ 09:10 ์‹คํ–‰ +- **์‹คํ–‰ ํ•จ์ˆ˜**: `_run_headlines_job(channel_id)` at `main.py:394` +- **์ˆ˜์ง‘ ๊ฒฝ๋กœ**: + - rb8001 โ†’ skill-news POST `/api/news/naver/startup-headlines` + - skill-news๊ฐ€ Slack ํฌ๋งท ํ…์ŠคํŠธ ๋ฐ˜ํ™˜ (`format=slack`) + - rb8001์ด ๋ฐ›์€ ํ…์ŠคํŠธ ๊ทธ๋Œ€๋กœ Slack ์ „์†ก + +### 2. ๋ฌธ์ œ์  +- rb8001์€ skill-news๊ฐ€ ์ค€ ํฌ๋งท ๊ทธ๋Œ€๋กœ ์ „์†ก๋งŒ ํ•จ +- ํ—ค๋“œ๋ผ์ธ ์•„์ดํ…œ ๋ชฉ๋ก(`items[]`)์„ rb8001์ด ์ง์ ‘ ์ ‘๊ทผ ๋ถˆ๊ฐ€ +- ์šฉ์–ด ์ถ”์ถœ์„ ์œ„ํ•œ LLM ํ˜ธ์ถœ ๋กœ์ง ์—†์Œ + +## ๊ตฌํ˜„ ๋ฐฉ์•ˆ + +### ๋ฐฉ์•ˆ 1: rb8001์—์„œ ์ฒ˜๋ฆฌ (์„ ํƒ) +```python +# main.py:_run_headlines_job() ์ˆ˜์ • +async def _run_headlines_job(channel_id: str): + # 1. JSON ํฌ๋งท์œผ๋กœ ํ—ค๋“œ๋ผ์ธ ์ˆ˜์ง‘ + result = await sc.fetch_naver_headlines(fmt="json") # slack โ†’ json + items = result.get("items", []) + + # 2. ์šฉ์–ด ์ถ”์ถœ (ํ™˜๊ฒฝ๋ณ€์ˆ˜ ์ฒดํฌ) + extract_terms = os.getenv("HEADLINES_EXTRACT_TERMS", "true").lower() == "true" + if extract_terms and items: + # ํ—ค๋“œ๋ผ์ธ ์ œ๋ชฉ๋“ค ์ถ”์ถœ + titles = [item["title"] for item in items] + + # LLM์œผ๋กœ ์šฉ์–ด ์ถ”์ถœ + terms_prompt = f""" + ๋‹ค์Œ ์Šคํƒ€ํŠธ์—… ๋‰ด์Šค ํ—ค๋“œ๋ผ์ธ์—์„œ ๋น„์ฆˆ๋‹ˆ์Šค๋งจ์ด ์•Œ์•„๋‘ฌ์•ผ ํ•  ํ•ต์‹ฌ ์šฉ์–ด {os.getenv("HEADLINES_TERMS_COUNT", "5")}๊ฐœ๋ฅผ ์ถ”์ถœํ•ด์ค˜. + ์ „๋ฌธ์šฉ์–ด, ์‹ ์กฐ์–ด, ํŠธ๋ Œ๋“œ ํ‚ค์›Œ๋“œ ์œ„์ฃผ๋กœ. + + ํ—ค๋“œ๋ผ์ธ: + {chr(10).join(titles[:20])} # ์ƒ์œ„ 20๊ฐœ๋งŒ + + ์‘๋‹ต ํ˜•์‹: ์šฉ์–ด1, ์šฉ์–ด2, ์šฉ์–ด3 + """ + + llm_result = await router._call_internal_llm( + message=terms_prompt, + user_id="system", + task_type="extract", + context={}, + channel="internal" + ) + + terms = llm_result.get("content", "").strip() + + # 3. skill-news์—์„œ slack ํฌ๋งท ๊ฐ€์ ธ์˜ค๊ธฐ + slack_result = await sc.fetch_naver_headlines(fmt="slack") + text = slack_result.get("text", "") + + # 4. ์šฉ์–ด ์„น์…˜ ์‚ฝ์ž… (ํด๋กœ์ง• ์ „์—) + if extract_terms and terms: + lines = text.split("\n") + # ํด๋กœ์ง• ์ฐพ๊ธฐ (๋นˆ ์ค„ 2๊ฐœ ๋‹ค์Œ) + insert_idx = -1 + for i in range(len(lines)-2, 0, -1): + if lines[i] == "" and lines[i-1] == "": + insert_idx = i + break + + if insert_idx > 0: + terms_section = [ + "", + f"*์˜ค๋Š˜ ์•Œ์•„๋‘˜ ์šฉ์–ด*: {terms}", + "", + "๊ถ๊ธˆํ•œ ์šฉ์–ด๊ฐ€ ์žˆ์œผ์‹ ๊ฐ€์š”? *๋กœ๋น™์—๊ฒŒ ๋ฌผ์–ด๋ณด์„ธ์š”!*", + "" + ] + lines[insert_idx:insert_idx] = terms_section + text = "\n".join(lines) + + # 5. Slack ์ „์†ก + client.chat_postMessage(channel=channel_id, text=text) +``` + +### ํ™˜๊ฒฝ๋ณ€์ˆ˜ ์ถ”๊ฐ€ +```bash +# rb8001/.env +HEADLINES_EXTRACT_TERMS=true # ์šฉ์–ด ์ถ”์ถœ ๊ธฐ๋Šฅ ํ™œ์„ฑํ™” +HEADLINES_TERMS_COUNT=5 # ์ถ”์ถœํ•  ์šฉ์–ด ๊ฐœ์ˆ˜ +HEADLINES_TERMS_SAMPLE_SIZE=20 # ๋ถ„์„ํ•  ํ—ค๋“œ๋ผ์ธ ๊ฐœ์ˆ˜ +``` + +## ๊ตฌํ˜„ ์ฒดํฌ๋ฆฌ์ŠคํŠธ +- [ ] `_run_headlines_job()` ํ•จ์ˆ˜ ์ˆ˜์ • +- [ ] JSON ํฌ๋งท ๋จผ์ € ๋ฐ›์•„ items ํ™•๋ณด +- [ ] LLM ํ˜ธ์ถœ๋กœ ์šฉ์–ด ์ถ”์ถœ +- [ ] Slack ํ…์ŠคํŠธ์— ์šฉ์–ด ์„น์…˜ ์‚ฝ์ž… +- [ ] ํ™˜๊ฒฝ๋ณ€์ˆ˜ ์ถ”๊ฐ€ ๋ฐ ํ…Œ์ŠคํŠธ + +## ๊ตํ›ˆ +- skill-news์˜ slack ํฌ๋งท์€ ์™„์„ฑ๋œ ํ…์ŠคํŠธ๋ผ ์ˆ˜์ • ์–ด๋ ค์›€ +- rb8001์—์„œ JSON ๋ฐ›์•„ ์ž์ฒด ํฌ๋งทํŒ…์ด ๋” ์œ ์—ฐํ•จ +- ํ–ฅํ›„ ๋ชจ๋“  ํฌ๋งทํŒ…์€ rb8001์—์„œ ์ฒ˜๋ฆฌํ•˜๋Š” ๊ฒƒ์ด ๋ฐ”๋žŒ์ง \ No newline at end of file