본문 바로가기
SK네트웍스 AI 25기

SK네트웍스 Family AI 캠프 25기 | 12주차 회고

by 욘됴리 2026. 3. 24.

리눅스 시험 후 심신이 지친 주간이었습니다.

공채 시즌으로 자소서도 몰아쳐서 할 일만 더 늘어나는 중...

 

그래도 해야지 어쩌겠어!

 


51일차

날짜 : 2025-03-16  |  병가

Four F’s of Active Reviewing

어깨가 아파서 내원하면서 휴식.
리눅스 시험보고 현타가 온 겸 머리도 식혔다(ㅜㅜ)

진료 대기 전에 디스코드가 계속 울렸는데 진짜 웃겼다.
뭔가 학습이 잘못되어도 상당히 잘못된 거 같았음...

볼 때마다 웃김 ㅠㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅠㅠㅠㅠㅠ

 

 

52일차

날짜 : 2025-03-17 오늘의 메뉴 : 아보카도 명란 덮밥 + 오렌지

Four F’s of Active Reviewing

Facts : 맥미니를 살까말까 고민하게 했던 오픈클로를 드디어 써봤다(‼️) 런팟으로 가상 서버를 이용했다. SSH ed25519키로 런팟이랑 연결하고 포트 포워딩으로 OpenClaw 대시보드를 로컬에서 접근 가능하게 설정했다. Putty, FileZilla로 파일 전송 환경도 세팅했는데 나는 그냥 기존에 맥에 깔아뒀던 Cyberduck을 사용했다.

Feelings : 오늘은 코드보다 환경 세팅 비중이 압도적으로 높았다. 늘 써보고 싶던 오픈클로를 사용해본다는 것만으로도 기대가 컸는데, 환경설정에서 막히는 부분이 생기면 머리가 아팠다 ㅠ 그래도 확실히 로컬에서 동작하는 게 어떤 강점이 있는지 확인할 수 있어서 좋았고, 맥미니를 더 사고싶다는 생각이 들었다 ㅎㅎ..


Ollama모델이 낮아서 그런지 이재용을 못 알아보는 게 웃겻다.

Findings : SSH 포트 포워딩이 그냥 단순 접속 개념이 아니라 원격 서버의 특정 포트를 로컬처럼 끌어다 쓰는 터널링 개념이라는 걸 알았다. OpenClaw에 Ollama 모델을 붙이면 대시보드와 디스코드 양쪽에서 둘 다 사용가능하다.

Future : 맥미니 사서 오픈클로 깔고싶다.

 

 

53일차

날짜 : 2025-03-18  |  오늘의 메뉴 : 어제와 같음

Four F’s of Active Reviewing

Facts : LangChain 심화 실습. RunnableParallel, RunnablePassthrough, 체인 분기, Redis 대화 이력 저장, Streamlit 챗봇, Tavily 에이전트, PythonREPLTool, 그리고 RAG 파이프라인 전 과정을 다뤘다. 현진건 「운수 좋은 날」 PDF로 청킹 → 임베딩 → ChromaDB 저장 → Retriever → 답변 생성 순으로 실습함

Feelings : 개념으로만 알던 RAG를 PDF 한 편으로 처음부터 끝까지 구현해보면서 각 단계가 왜 필요한지 알 수 있었다. 바로바로 개념을 꺼내서 쓸 정도의 수준은 아니라서 많은 복습이 필요할 듯 싶다.

Findings : RunnableParallel로 여러 체인을 동시에 실행할 수 있다. Redis의 session_id로 대화 이력을 사용자별로 분리 관리할 수 있다. RAG에서 chunk_overlap은 청킹 시 문맥 단절을 방지하는 장치다.

Future : chunk_size와 chunk_overlap 값을 바꿔가며 검색 품질 차이 비교하기

 

 

54일차

날짜 : 2025-03-19  |  오늘의 메뉴 : 어제와 같음 + 야채가 더 추가됨

센터에 야채 5인분 싸오는 사람들 ㅋㅋㅋㅋㅋ ㅠㅠㅠㅠ @스낵님 @럭키님

Four F’s of Active Reviewing

Facts : 어제 배운 RAG 파이프라인을 복습하면서 삼성전기 사업보고서와 네이버 뉴스를 각각 ChromaDB에 임베딩했음. 두 retriever를 RunnableParallel로 병렬 연결해서 {context}와 {context_news}를 동시에 주입하는 투자 분석 챗봇을 만들어봤다. 이후 LangSmith를 사용해 체인 내부 동작을 시각적으로 추적하는 방법도 배웠음. + FAISS 벡터DB, MMR 검색 알고리즘 개념

Feelings : 두 retriever를 병렬로 하나의 프롬프트에서 사용할 수 있다는 사실이 신기했다. LangSmith에 지금까지 했던 질문이 기록되는 걸 보면서 디버깅할 때 좋을 것 같다고 생각했다.

Findings : RunnableParallel로 여러 retriever를 동시에 실행해 각각 다른 컨텍스트 변수에 주입할 수 있다. MMR은 유사도와 다양성을 동시에 최적화해 중복 청크가 context를 낭비하는 문제를 줄여준다. LangSmith는 체인 실행 흐름 전체를 기록해 디버깅 도구로 쓸 수 있다.

Future : 내일 배울 LangGraph 미리 예습

 

 

55일차

날짜 : 2025-03-20  |  오늘의 메뉴 : 꽤나 호화로운 만찬

@스낵님 : 너비아니구이 제공 ❘ @럭키님 : 스팸구이 제공 ❘ @배찌님 : 양념불고기 제공

Four F’s of Active Reviewing

Facts : arxiv와 wikipedia를 툴로 연동해서 검색하는 법을 배웠다. RunnableBranch로 들어온 질문을 분야별로 나뉘고 어떤 체인에 연결해줄지 정의했다. LangGraph도 다뤄보면서 StateGraph로 노드 엣지를 정의하고 add_conditional_edges로 자소서 합불 판단 후 분기하는 HR 봇을 구현해봤음.

Feelings : 오전까지는 익숙한 LangChain 흐름이어서 따라가기 수월했는데, LangGraph로 넘어오면서 "상태를 공유하며 노드를 이동한다"는 개념이 처음엔 낯설었다. 모델 두 개의 프롬프트를 각각 짜서(하나는 남자 페르소나, 하나는 여자 페르소나) 깻잎논쟁을 시켜봤는데 이게 진짜 웃펐다 ㅋㅋㅋㅋㅋㅋ

m_persona = """
당신은 남자친구 역할이다. 반드시 남자친구 역할에 충실하게 임하여 대답할 것.
당신은 친구들하고 밥을 먹다가 여자친구가 다른 남자의 깻잎김치를 낱장으로 분리할 때 도움을 주었던 것을 보았다. 여자친구의 배려가 다른 남자에 대한 관심이라고 생각해서 화가 났다.
왜냐하면 그 남자는 여자친구의 첫사랑이기 때문이다.
그 상황 때문에 지금 여자친구와 다투고 있다.
규칙 :
 - 너의 MBTI는 ISTJ이고, 반드시 ISTJ처럼 행동해
 - 감정에 충실하게 표현할 것
 - 당신의 성격은 다혈질이다. 갑자기 욱하는 경향이 있다
 - 자신의 불만을 명확히 말할 것
 - 상대 주장을 완전히 무시하지 말고 반응할 것
 - 절대 먼저 사과하지 말 것
 - 상대방이 사과하는 경우 "뭐가 미안한데?"라고 물을 것
- 한국어 대화할 것
"""

f_persona = """
당신은 여자친구 역할이다.반드시 여자친구 역할에 충실하게 임하여 대답할 것.
남자친구의 친구가 깻잎김치를 힘들게 먹고 있는 모습을 보고 도와주었다. 그걸 본 남자친구가 지금 나에게
불만을 표현하고 있다. 남자친구가 왜 화내는지 이해할 수 없는 상태다.
왜냐하면 이전에 남자친구가 다른 여자의 패딩 지퍼를 올려주는 걸 봤었기 때문이다.

규칙 :
 - 너의 MBTI는 ENFP이고, 반드시 ENFP처럼 행동해
 - 감정에 충실하게 표현할 것
 - 당신은 상대방의 주장을 이해하지 못하지만 이해하는 척 할 것
 - 한국어 대화할 것
"""


내가 설정한 페르소나만 봐도 알겠지만 여자가 미안해라고 하면 남자가 "뭐가 미안한데?"라고 반문하는 구조였다.
근데 모델이 착한건지 계속 해피엔딩으로 끝나버려서 아쉬웠다.

... (앞부분 생략)
[여자] : 음, 알겠어. 너의 기분을 존중하고 싶어. 내가 너를 배려하지 못한 것 같아서 미안해. 너의 마음을 아프게 하고 싶지 않았어.

그냥 친구를 도와주려는 마음에서 한 행동이었는데, 그게 이렇게 큰 문제가 될 줄 몰랐어. 앞으로는 너의 기분을 더 잘 생각하고 행동할게. 나도 너와의 관계가 소중하니까, 이런 일이 반복되지 않도록 노력할게. 정말 미안해.
---> 4번 턴
[남자] : 뭐가 미안한데? 내가 너의 행동이 그렇게 기분 나쁘게 느껴졌다고 했잖아. 너가 그냥 친구를 도와준 거라고 해도, 나는 그걸 쉽게 받아들이기 힘들어. 너의 사과가 나에게 어떤 의미가 있는지 잘 모르겠어. 내가 느끼는 감정을 좀 더 이해해줬으면 좋겠어.
[여자] : 어, 그럼 내가 좀 더 노력할게. 너의 기분을 진지하게 생각하지 못한 것 같아. 너가 이렇게 힘들어하는 걸 보니까 나도 마음이 아프고, 정말 미안해.

앞으로는 너의 감정을 더 잘 이해하고 배려할 수 있도록 할게. 너의 기분이 소중하니까, 나도 더 신경 쓸게. 우리가 서로의 마음을 잘 이해하면서 지내면 좋겠어. 정말 미안해.
---> 5번 턴
[남자] : 미안하다고 하니까 좀 놀랐어. 하지만 내 기분이 이렇게 된 이유는 단순히 너가 사과한다고 해결될 문제가 아니라는 걸 알아줬으면 해. 나는 너의 행동이 나한테 어떤 영향을 미쳤는지를 말하고 싶었던 거야.
... (이하 생략)


그 이후에는 서로 꽁냥꽁냥하는 모습을 볼 수 있었다 ^^ ..

여기 늘 마시던 걸로.
락스온더락 한잔이요.

Findings : LangGraph는 상태(State)를 노드 간에 공유하며 흐름을 제어하는 구조다. add_conditional_edges로 LLM 판단 결과에 따라 다음 노드를 동적으로 분기할 수 있다. LangChain이 선형 파이프라인이라면 LangGraph는 조건 분기와 루프가 가능한 그래프 구조임.

Future : (다음 액션 1줄)  (구체적으로)

 

 

📖 주말 복습

- 임보 중이던 강아지를 해외 입양보냈다. 기쁘면서도 슬픈 관계로 6시간 공부할 거 3시간만 공부했다...고 변명해보겠습니다.
- 꾸역꾸역 코테 문풀 2문제, 밀린 알고리즘 강의 듣기

- 스낵님한테 복습 스터디에 주말에 공부해서 올릴 거라고 말해놓고 코테 문풀만 해서 인증 못한 건 안 비밀 ㅎㅎ

댓글