LLM app을 개발하면서 느낀 것

dasd412·2023년 7월 24일
0

SW 마에스트로

목록 보기
8/10

서론

이 글은 3~4주간 소마에서 LLM 어플리케이션을 만들면서 느꼈던 것들이다. 주관적인 내용이 많을 수 있으니 주의바란다. (특히 현업 경험이 없기 때문에 기술적으로 얕을 수 있기 때문에 이상한 소리는 알아서 거르길...)

LLM 개발은 쉬워 보인다.

LLM 개발을 하기 전에 생각했던 것중 가장 첫 번째가 "그냥 Chat gpt에게 보내면 끝 아닌가?"였다. 그래서 기술적으로 배울게 없을거라 느꼈다. 하지만 그건 오산이었다. LLM app 개발은 생각보다 어려움이 많았다.

특히 어려운 것은, toy project 수준이 아니라 production 수준까지 끌어올리는 것이었다.


본론

LLM App 개발이 어려운 점

1. LLM은 생각보다 멍청하다.

Chatgpt 할루시네이션은 유명하다. 이는 LLM app coding 을 할 때도 마찬가지다.

내가 A를 원해도 헛소리를 하는 경우가 많다. 특히 복잡한 작업일 때 더더욱 그렇다.(이러한 문제는 고급 프롬프팅 기법을 참고하면 완화된다.)

그리고 결과에 대한 형식을 지정해도 100% 동일하리란 보장을 하기가 어렵다.

2. 선례가 없다.

Spring security, JPA ,React... 이런 건 Well known 영역이다. 구글링하면 정보를 얻기 쉽다. 심지어 Chatgpt한테 해보라고 하면, 왠만한 주니어 급으로 코딩해준다.

그런데 Prompt engineering, 특히 LLM을 제어해야 할 필요가 있을 때... 선례를 찾을 수 있을까?

구글링해도 잘 안나온다.

이런건 Chatgpt한테 물어봐도 모른다.

왜? gpt는 2021년 이전 데이터만 아니까...

그래서 현재 기준으로 LLM app coding은 unknown area이기 때문에 삽질해가면서 스스로 검증해 나가는 것이다.

LLM app을 개발하기 전엔, 상상으로 추측하기 보다 실제로 작동하는 코드로 검증하자.

만약 web based를 목표로 한다면, 처음엔 text in text out 으로 CLI 프로그램을 짜서 돌아가는지 보는 걸 추천한다.

그리고나서 간단한 플로우와 모듈이 구상된다면, 그다음부터 설계를 해나가자.

즉, well known에서의 설계 -> 구현과 달리 구현->설계->다시 구현으로 해야 한다.

3. 테스트하기 어렵다. (== 성능 측정이 어렵다.)

첫 째, 프롬프트 날리는 걸 테스트 코드로 작성하기 어렵다.
테스트 입력은 fixed되어 있지만, 테스트 출력은 아니다... 심지어 gpt call은 api 이용료까지 든다.

둘 째, gpt의 출력값을 어떤 방식, 어떤 기준으로 측정할지... 가 어렵다.

이는 논문에서도 많이 나오고 있는 문제이다.
논문에서도 사람이 보고 판단해서 라벨링하고 있으니 말 다 했다. (즉, 테스트 자동화는 아직 답이 없다.)

Langchain 프레임워크 사용기

Langchain은 현재 github에서 llm framework로 가장 유명한 것이다. 근데 개인적으론 끔찍하게 꾸지다고 느꼇다.

구글에 "langchain is suck"만 검색해봐도 글로벌적인 반응을 알 수 있다.

참고 링크 : https://www.reddit.com/r/LangChain/comments/13fcw36/langchain_is_pointless/

장점

  1. vector db나 llm 호출에 대한 wrapper를 제공한다.
  2. router chain 은 프로그래밍의 if ~ else를 비슷하게 구현한 것 같다.

단점

  1. 문서화가 쓰레기다. 체계없이 작성되어서, 무엇이 어디에 있는지 모르겠다. (공식 홈피)
  2. 튜토리얼이 너무 수준이 얕다. 튜토리얼만 보고 코딩하면 아무것도 못 만듬.
  3. 쓸데없는 게 너무 많다. LLMChain과 ConversationChain의 구현을 뜯어보면, 프롬프트 2줄 차이 밖에 없다. 별로 차이도 없는 것을 너무도 많이 분리한 결과, 프로그래머가 뭘 써야할 지 판단하기가 어렵다.
  4. 자유도를 떨어뜨린다. SequentialChain 사용법을 익히는 것은 시간낭비다. 왜냐하면 그냥 이전 프롬프트 출력을 다음 프롬프트 입력에 쓰는 것 밖에 없기 때문이다. 차라리 Openai 프롬프팅 방식으로 코딩하면 더 자유롭게 코딩할 수 있다.

결론

그래도 LLM이 주는 장점은 많다.

이유는
1. 기존 ai의 문제점인 데이터 라벨링등의 수작업이 없어진다. (물론 이는 gpt 결과 테스트할 때 라벨링의 숙제로 미뤄지는 것과 같다...)
2. ai 잘모르는 사람도 쉽게 창의적인 앱을 만들 수 있다. (백엔드건 프론트엔드건 ai를 건들 수 있게 됨)

등등이 있겠다.

하지만 재밌는 app을 만들긴 쉽지만, 제품 수준의 app을 만들긴 어렵다. 왜냐면 제품 수준 app은 할루시네이션 나오면 치명적이기 때문이다.이러한 할루시네이션을 어떻게 최소화하면서도, gpt call을 줄여나갈지가 새로운 문제이겠다. 그리고 성능 측정과 테스트 자동화도 새로운 문제일 듯...

마지막으로 langchain 쓰지 말자. 머리만 아프게 한다.

profile
시스템 아키텍쳐 설계에 관심이 많은 백엔드 개발자입니다. (Go/Python/MSA/graphql/Spring)

1개의 댓글

comment-user-thumbnail
2023년 7월 24일

좋은 글이네요. 공유해주셔서 감사합니다.

답글 달기