오늘은 FastAPI, Chrome Extension 코드 실행과 Structed Output, Groundness Check를 도입했다.
FastAPI 서버 실행과 Chrom Extension을 담당한 팀원이 거의 3~4시간 동안 세팅 및 실행 방법을 알려줬다. 대부분 팀원이 웹 쪽 배경지식이 거의 없었기 때문에, 필요한 툴을 다운 받는데 많은 시간이 소요됐다. 그리고 OAuth 관련 모듈을 뜯어서 직접 토큰 값을 다뤄 로직이 복잡했다. 나는 백엔드를 배우긴 했지만, 회원 관리 기능은 복잡해 건드리지 못했다.
나름 정리했는데도 잘 이해가 되지 않는다.
Structed Output은 Self-refine의 feedback과 refine 과정에서 도입했다. 이전 코드는 Langchain 기반으로 동작했기 때문에 OpenAI 모듈로 좀 더 low level에서 생각해야 했다. 이 과정에서 JsonOutputParser와 response_format의 차이점을 고민해야 했다. 결국 동작이 같다면 더 편리한 JsonOutputParser를 사용하면 되기 때문에 굳이 OpenAI 모듈로 바꿀 이유가 없었다. 두 라이브러리 소스 코드를 간단하게 살펴보면 다음과 같은 차이를 보였다.
JsonOutputParser | response_format | |
---|---|---|
난이도 | 비교적 쉽다. | pydantic을 사용하지 않고 JSON으로 파싱하는 경우, 어렵다. |
구조 정확도 | 낮다. KeyError 발생 가능성 있음. | "strict": True 인 경우, 높다. |
작동 방식 | 프롬프트 문자열 뒤에 concat하는 방식. | HTTPX 요청에서부터 다르다. 정확히는 더 뜯어봐야 함. |
현재는 분류 카테고라이징과 포맷팅 모두 하드 코딩으로 구성했다. 추후에 프롬프트를 동적으로 로드하도록 만들 예정이다.