이번에 llm관련 프로젝트를 맡아서 하게된 이후로..
langchain에서 gpt토큰수를 받기위해 고군분투를 했던 경험기이다..
그동안 새로운거 공부하고 적용하고 일하느라 고생기가 많이 적을것이 많았는데..
생각나는것 먼저 작성해본다..
무슨이유에서인지 나는 예제대로 해도 리턴받은 토큰소모량이 전부 0으로 나왔다.
그래서 이리저리 막 검색하고 해봤는데 결국.. 실패했었다..
더욱이 이때는 이제 막 langchain에 입문했던 시기였기에 다음단계로 넘어가게 되었다.
해당 라이브러리는 openai에서 제공해주는 토큰세기 라이브러리여서
이걸사용하면 되겠다~ 하고 사용하게 되었다.
정말 편하고 좋았는데, 문제가있다면.. 아무리 최신을 해도 o1시리즈같은건 없는 모델이라고.. 떠서
내가 임의지정한 default모델의 토큰으로 세진다는 거였다.. 정확성이 떨어졌지만 이때는 우선 이방식을 사용했다.
프로젝트가 어느정도 진행되고, langchain에 익숙해지고 langgraph도 사용해봤을 때,
1번을 다시 시도하였으나.. 실패를 했다.. 공식문서랑 검색이랑 진짜 다해봤는데 나한테 왜그래 ㅠㅠ
무튼 그래서 2번상태 유지중일때 의외에 곳에서 해결이 되었는데..
langchain을 주로 사용하다보니, gpt에 endpoint를 나는 잘 살펴볼 일이 없었다.
근데, 잘 만들어서 이것저것 테스트하다가 보니, o1-pro모델, o1-mini등등
o시리즈에서 에러가 나는 것이었다...
첫번째로는, 라이브러리랑 하나하나 뜯어 보니까 langchain자체 모듈에서 o시리즈일때, role을
developer라고 변경하는 부분이 있었는데.. o1에서는 또 자긴 그런 role없다고 에러가 났고..
두번째로는, langchain에서 기본적으로 invoke혹은 stream할때 사용하는 endpoint
v1/chat/completions o1-pro 나 o1-mini에서는 제공이 안된다는 것이였다..
그래서 이리저리 테스트와 검색을하다가
chat_model = ChatOpenAI(
model= 모델명,
...
use_responses_api=True //이거
)
모델정의부분에서 use_responses_api = True를 설정하면, endpoint가 v1/responses
로 변경되어 나갈 수 있게 된다는 사실을 알았고, 이 방법을 사용했더니 글쎄..
.
.
return값으로.. 사용토큰값이 전달되었다..
이렇게.. 사용한 토큰값 리턴받기 성공...
진짜 하면 할수록 느끼는건데 정말 엄청빨리 새로운게 나오고 또 변하는구나 싶다..
langgraph에서 openai시에 중간 agent응답에 대한 토큰값이 안오기 시작했다.
그래서 이것저것 해보다가 혹시나 하고 확인을 했더니..
구분 | 토큰 수 |
---|---|
return값 | 4541 |
langsmith | 4957 |
openai 확인 | 4541 |
로.. langsmith의 토큰값이 안맞는다는 사실을 알았다..
혹시나 싶어서 다른 모델들도 각 홈페이지에서 실 토큰 사용량과 langsmith값 그리고 return값의 토큰 사용량을 비교해봤는데 미묘하게 살짝씩 다르다는걸 발견했다..