[인공지능사관학교: 자연어분석A반] 기업연계 프로젝트 21일차

Suhyeon Lee·2025년 11월 6일

프로젝트 관련 공부

ORM(Object Relational Mapping)

  • ‘객체로 연결을 해준다’는 의미
  • 어플리케이션과 데이터베이스 연결 시 SQL언어가 아닌 어플리케이션 개발언어로 데이터베이스를 접근할 수 있게 해주는 툴
    • 객체 지향 프로그래밍(OOP)에서 사용하는 객체(클래스)와 관계형 데이터베이스(RDB)의 테이블을 자동으로 연결(mapping)해 주는 기술
    • 데이터베이스와 어플리케이션의 연결을 ‘객체지향’적으로 도와줌
  • SQL문법 대신 어플리케이션의 개발언어를 그대로 사용할 수 있게 함으로써, 개발 언어의 일관성과 가독성을 높여준다
    • SQL 쿼리를 직접 작성하지 않고도 프로그래머가 객체를 다루듯이 데이터베이스를 조작할 수 있게 만듦
  • 파이썬 Flask SQLAlchemy 문서 참고
    • 객체(클래스)와 테이블(관계형 DB) 간의 자동 매핑
    • SQL 쿼리 작성 대신 객체 메서드 호출로 데이터 조작
    • 객체 지향 언어 환경과 DB 간 불일치 해소
    • 개발 생산성 및 유지보수성 향상

https://jalynne-kim.medium.com/%EB%8D%B0%EC%9D%B4%ED%84%B0%EB%B2%A0%EC%9D%B4%EC%8A%A4-%EB%B0%B1%EC%97%94%EB%93%9C-orm-object-relational-mapping-%EC%9D%98-%EA%B0%9C%EB%85%90%EA%B3%BC-%EC%A2%85%EB%A5%98-%ED%99%9C%EC%9A%A9%EB%B0%A9%EC%95%88-c43b69028957

객체 지향 언어에서는 데이터를 클래스와 객체로 표현하는 반면, 관계형 데이터베이스는 데이터를 테이블과 행(row)으로 관리합니다. 이 둘은 구조나 개념이 다르기 때문에 직접 연결하기가 어려운데, ORM은 이 불일치를 해결하고 객체와 데이터베이스를 매끄럽게 이어줍니다.

Pydantic 스키마 변환

  • FastAPI에서 SQLAlchemy ORM 모델과 API 요청/응답 간 데이터 구조를 명확히 분리하고 안전하게 처리하기 위해 사용하는 방법
    • SQLAlchemy ORM 모델: 데이터베이스 테이블과 직접 연결되어 DB 조작에 사용
    • Pydantic 모델(스키마): API로 입출력되는 데이터의 검증(validation)과 직렬화(serialization), 타입 보장을 위해 사용
    • Pydantic 모델을 통해 클라이언트로부터 받은 입력 데이터를 검증하고, DB에 저장하거나, DB에서 꺼낸 ORM 객체를 안전하게 API 응답용 JSON으로 변환할 수 있음
  • 연동 방법
    • Pydantic 모델 정의 시 model_config = {"from_attributes": True} (또는 Pydantic 1.x 버전에서는 Config.orm_mode = True)를 설정해서 SQLAlchemy ORM 객체를 바로 Pydantic 객체로 변환할 수 있도록 만듦

Pydantic 모델을 API 함수의 response_model 파라미터로 지정하여 자동 검증 및 문서화에 활용
ORM 객체를 FAQSchema.from_orm() 메서드로 변환해 응답 데이터를 표준화 → 클라이언트에 일관된 데이터 형식으로 안전하게 전달할 수 있음

네이버 클라우드 특강

https://brunch.co.kr/@topasvga/5245

네이버 클라우드 CLOVA Studio 이론

8. 검색증강생성(RAG)

  • Retrieval
    • 요청된 정보를 가져온다
  • Argumentation
    • 원래 정보에 덧붙이거나 보탠다
  • Generation
    • 응답을 텍스트로 생성한다

  • RAG 도입 이유
    • DB 최신 정보 반영
    • Context 기반 정확도, 연관성 높은 답변 품질 확보
      • Hallucination 예방
    • Personal/Enterprise DB 검색 (활용)
    • Context 유사 케이스 (양적) 검색
    • 복합적인 조건의 DB 검색
    • 변동된 정보에 맞게 DB 비교 및 업데이트가 필요한 영역
  • 도메인별 활용 예시
    • 고객 지원
      • 고객센터
      • 고객 대응 답변 품질 재고
      • 복잡한 쿼리 대응
    • 컨텐츠 제작
      • 정확한 최신의 데이터를 기반으로 한 컨텐츠 작업
      • 리서치 등
    • 교육
      • 커스텀 자료 제작
      • 최신 정보를 기반으로 한 교육 자료 계산
    • 의료
      • 최신 연구
      • 희귀 케이스
      • 최신 의료 시술/수술 방법 검색
      • 환자용 교육 자료(커스텀)
    • 법률
      • 유사 케이스 검색
      • 법 개정으로 인한 법 위반 케이스 단속

결국 외부에 있는 LLM에게 보내는 건 똑같기 때문에 보안 문제 동일하게 있음
다만 컨텐츠 저장소(DB)에 있는 답변을 좀 더 많이 참조해 정확한 답변을 준다는 것
→ SLM을 고객사에 직접 넣어서 그 안에서 서비스하면 대응 가능

  • RAG 구조
순서주요 내용
문서 로드(Load)문서(PDF, word), RAW DATA, 웹페이지 등 데이터 읽기
분할(Split)불러온 문서를 chunk 단위로 분할
임베딩(Embedding)문서를 벡터 표현으로 변환
벡터DB(VectorStore)변환된 벡터를 DB에 저장
검색(Retrieval)유사도 검색(similarity, Multi-Query, Multi-Retriever)
프롬프트(Prompt)검색된 결과를 바탕으로 원하는 결과를 도출하기 위한 프롬프트
모델(LLM)언어 모델 선택
결과(Output)텍스트, JSON, 마크다운

벡터DB는 관계형 DB와는 좀 다름
→ 기존의 관계형 DB가 행과 열의 2차원 형식으로 데이터를 표현하는 반면, 벡터 DB는 다차원 공간으로 그 개념을 확장시킨 것
→ 본격적인 고차원 데이터 저장 기술의 시작
벡터 DB는 기존의 데이터베이스와 어떻게 다를까?

  • 비교

  • RAG 장점

    • Fine Tuning에 비해 시간과 비용이 적게 소요됨

9. LangChain

  • 대규모 언어 모델(LLM)을 기반으로 애플리케이션을 구축하기 위한 오픈 소스 프레임워크
  • LLM과 애플리케이션을 간소화할 수 있도록 설계된 SDK

구성 요소

  • Chat Models
  • Prompt Template
  • Vector Stores
  • Tools
  • Document Loaders
  • Text Splitters
  • Output parsers

Document Loaders

  1. URL Document Loaders
    • WebBaseLoader
    • MyPDFLoader

10. 네이버 스킬 트레이너

  • 챗봇 vs. 스킬

    • 챗봇의 단점
      • 시나리오를 한땀 한땀 모두 만들어야 함
      • 데이터 양이 너무 많이 필요함
      • 말귀를 전혀 못 알아들음
      • 할 줄 아는 게 별로 없음
    • HyperCLOVA X SkillSet
      • 초거대 모델인 HyperCLOVA X의 한국어 능력을 활용해 최소한의 데이터로 사용자의 자연스러운 발화에 대응 가능
      • DB에 있는 지식을 활용해 답변
      • API를 이해하고 대신 수행
      • 멀티턴 대화 가능
      • 기존 챗봇이 수행하지 못하는 '스킬' 구현 가능
  • 스킬 == 외부 API 연결

  • 튜닝 vs 스킬

    • 스킬은 api를 통해 외부 데이터와 실시간 소통
      • Foundation Model이 기존에 학습한 내용보다 외부 연동 데이터 가져온 내용을 더 우선시
    • 튜닝은 데이터를 넣어 추가 학습
  • 활용 예시

  • 스킬 트레이너 사용 단계

    • 스킬셋은 그냥 이름임
      • 여행
      • 금융
      • 교육 등
    • API Spec
      • 네이버 지역 정보
      • 유튜브 등
    • Manifest?
  • 요약

    • Fine-Tuning
      • 특정 구조, 스타일, 판단 방식을 따라야 할 때
    • RAG
      • 질문에 답하기 위해 특정 정보가 필요할 때
      • 내부 정보를 주로 사용
    • Skill
      • 특정 조건에 맞는 정보 조회가 필요할 때
      • 외부 api를 주로 사용

CLOVA Studio 실습 1차

https://brunch.co.kr/@topasvga/5246

  • 프롬프트 엔지니어링으로 80% 원하는 답변 얻을 수 있음
    • 나머지 20%를 채우기 위해 RAG 등을 이용

클로바 스튜디오 메뉴 보기

  • Services > AI Services > CLOVA Studio

    • 상품 이용 신청해야 이용 가능
  • 화면

  • 플레이그라운드

    • 프롬프트
    • 튜닝
      • 기존 모델에 add해서 새로운 모델 생성 → 모델명이 바뀐다!
    • 익스플로러
      • 다양한 도구 모음
      • 예: 데이터 생성(내 데이터 샘플을 원하는 양만큼 늘려줌)
    • 라우터
      • 분류 & 필터링
    • 스킬 트레이너
      • 외부 API 연결

플레이그라운드 사용

  1. 목록화 가능
    • 토큰 == 돈
  2. 키워드 추출 가능
    • skill로 유튜브 가지고 와서 동영상 요약하게 시킬 수도 있음
  3. 어휘 치환 가능
  4. 역할, 형태 등 지시 사항을 최대한 최대한 구체적이고 명확하게 전달
    • 시스템 설정 없음
    • 시스템 설정
      • 친절하게 답변하는 과학 선생님입니다.
      • 설명은 8살 초등학생이 이해하기 쉽게 명료하고 간단하게 합니다.


5. 프롬프트 예제(형식 등)를 다양하게 구성


메모리 기능 때문에 잘 안 됨
초기화하고 다시 하면 잘 됨

6. 계절감 있는 출력결과가 나오게 하고 싶으면, 예제에 날짜나 시즌 어휘를 추가



7. 대상자를 지정함으로써 대상자를 정확히 인식하면서 문장의 목적을 구체화할 수도 있음


8. 단계별로 사고하기 CoT : (Chain of thought)



마케팅 문구 생성하기

https://brunch.co.kr/@topasvga/5268




  • Temperature, Repetition penalty 조정
    • Repetition penalty
      • 결과 문구 생성 시 동일 토큰에 감점 요소를 부여하는 값
      • 값이 낮으면 같은 결과를 반복 생성할 확률 높아짐

여행계획 수립하기

제목

여행계획 수립하기

시스템

  • 지역, 기간, 여행 대상을 입력하면 여행 일정을 작성해줘
  • 여행 일정은 표 형태로 구조화해서 보여줘
  • 여행 계획을 작성할 때 각 일정별 예상 소요시간도 명시해줘
  • 마지막 여행 일정은 마지막 여행 일정이라고 명시해줘

사용자

지역: 속초
기간: 2박3일
여행 대상: 3인 가족(엄마, 아빠, 자녀)

속초로의 행복한 2박 3일 가족 여행

날짜일정내용예상 소요 시간
첫째 날오전 출발 및 이동서울에서 속초로 이동 (차량으로 약 2~3시간 소요)2~3시간
점심 식사속초 도착 후 현지 맛집에서 해산물 요리 즐기기1시간 30분
속초 중앙시장 방문다양한 먹거리와 기념품 구경하기1시간 30분
숙소 체크인 및 휴식호텔 또는 리조트에 짐을 풀고 잠시 휴식 취하기1시간
저녁식사 및 야경 감상해변가 근처 식당에서 저녁 식사 후 속초의 아름다운 야경 관람2시간 30분
둘째 날아침 산책 및 조식영랑호수지 둘레길 걷기 & 호텔에서 조식 즐기기2시간 30분
설악산 국립공원 탐방케이블카 탑승하여 권금성까지 올라가기, 자연 경관 감상하며 트레킹 하기4시간
점심 식사산채비빔밥 등 현지 음식 맛보기1시간 30분
아바이마을 순대골목 탐방드라마 촬영지로 유명한 곳에서 벽화와 예술 작품 감상하고, 순대와 전통주 체험하기2시간
속초해변에서의 여유로운 시간모래사장 산책과 바다 수영, 그리고 가족과 함께 사진 찍기2시간 30분
셋째 날아침 일출 감상속초해변에서 멋진 일출 보기1시간
체크아웃 및 마지막 쇼핑숙소 체크아웃 후 속초 관광 시장에서 마지막 쇼핑1시간 30분
귀가서울로 돌아오기 (차량으로 약 2~3시간 소요)2~3시간

마지막 여행 일정입니다. 이 일정이 여러분의 소중한 추억이 되기를 바랍니다! 안전 운전하시고 즐거운 여행 되세요. 🚗🌊🏞️

수학 문제

3차원 좌표공간에서 식 4z2=x2+y214z^{2} = x^{2} + y^{2} − 1로 주어진 곡면을 S라 하자. 곡면 S가 점 P(1, 2, 1)을 지나는
직선을 정확히 두 개 포함하고 있음을 보이고, 두 직선이 이루는 예각을 θ라 할 때 cos θ의 값을 구하여라

  • HCX-005

먼저, 구하고자 하는 두 직선의 방정식을 각각 l과 m이라 하겠습니다.
점 P(1, 2, 1)이 곡면 S 위에 있으므로, 이 점을 지나는 법선 벡터는 다음과 같이 구할 수 있습니다.
[ \nabla f(1, 2, 1) = (2x, 2y, -8z) |_{(1,2,1)} = (2, 4, -8) ]
따라서, 두 직선은 다음과 같은 매개변수 방정식으로 나타낼 수 있습니다.
l: ( x=1+2t, \quad y=2+4t, \quad z=1-4t )
m: ( x=1-2s, \quad y=2-4s, \quad z=1+4s )
이제 두 직선 사이의 각도 θ를 구하기 위해 다음 공식을 사용합니다.
[
\cos{\theta} = \frac{|a \cdot b|}{||a|| \cdot ||b||}
]
여기서 a와 b는 두 직선의 방향벡터입니다.
두 직선의 방향벡터는 다음과 같습니다.
( a=(2, 4, -4) ), ( b=(-2, -4, 4) )
따라서,
[
\cos{\theta} = \frac{|2(-2)+4(-4)-8(4)|}{\sqrt{2^2+4^2+(-8)^2}\sqrt{(-2)^2+(-4)^2+4^2}}
]
이를 계산하면,
[
\cos{\theta} = \frac{96}{28 \times 6} = \frac{16}{7}
]
따라서 정답은 167\frac{16}{7} 입니다.

  • HCX-007

주어진 곡면 ( S: 4z^2 = x^2 + y^2 - 1 )이 점 ( P(1, 2, 1) )에서 두 개의 접선을 가짐을 확인하고, 이들 접선이 이루는 예각 (\theta)의 (\cos\theta) 값을 구합니다.


단계별 풀이:

  1. 점 ( P )가 곡면 위에 있음 확인:
    ( 4(1)^2 = 1^2 + 2^2 - 1 \Rightarrow 4 = 4 ). 성립하므로 ( P \in S ).

  2. 접선의 방향 벡터 도출:
    곡면의 편미분으로부터 법선 벡터 ( \mathbf{n} = (2x, 2y, -8z) )를 얻습니다.
    ( P(1, 2, 1) )에서 법선 벡터는 ( \mathbf{n}_P = (2, 4, -8) ).

    접선은 법선 벡터와 수직이어야 하므로, 접선의 방향 벡터 ( \mathbf{v} = (a, b, c) )는
    ( 2a + 4b - 8c = 0 )을 만족합니다.

  3. 방향 벡터의 일반형:
    ( \mathbf{v} )는 스칼라 배수를 제외하면 ( (1, 2, k) ) 형태로 가정 가능합니다.
    ( 2(1) + 4(2) - 8k = 0 \Rightarrow k = \frac{10}{8} = \frac{5}{4} ).
    따라서 두 접선의 방향 벡터는
    ( \mathbf{u} = (1, 2, \frac{5}{4}) ), ( \mathbf{w} = (-1, -2, -\frac{5}{4}) ) (스칼라 배수 고려).

  4. 코사인 계산:
    [
    \cos\theta = \frac{|\mathbf{u} \cdot \mathbf{w}|}{|\mathbf{u}| |\mathbf{w}|}
    ]
    계산 결과:
    [
    \cos\theta = \frac{|-\frac{25}{4}|}{\sqrt{1^2 + 2^2 + (\frac{5}{4})^2} \cdot \sqrt{1^2 + 2^2 + (\frac{5}{4})^2}} = \frac{25/4}{(9/4 + 25/16)} = \frac{25}{21}.
    ]

최종 답: (\boxed{\dfrac{25}{21}})

실제 풀이

profile
2 B R 0 2 B

0개의 댓글