본문 바로가기
딥러닝 머신러닝 데이터 분석/Langchain & LLM

[LangChain] 맛집 찾아주는 LLM을 만들어 보자.

by SteadyForDeep 2024. 3. 28.
반응형

아래의 글에 선행 내용이 있다.

 

2024.03.24 - [딥러닝 머신러닝 데이터 분석/Langchain & LLM] - [Langchain coding bot] 랭체인을 이용해서 코딩을 해 보자 - 1

 

[Langchain coding bot] 랭체인을 이용해서 코딩을 해 보자 - 1

랭체인을 이용해서 코딩을 해 보자. 독자의 랭체인과 LLM에 대한 기본적인 이해가 있다는 전재를 두고 이 글을 이어가겠다. // 무엇을 코딩할 것인가 우선은 무슨 코딩을 할지 정해야 한다. 사실

davi06000.tistory.com

2024.03.24 - [딥러닝 머신러닝 데이터 분석/Langchain & LLM] - [Langchain coding bot] 랭체인을 이용해서 코딩을 해 보자 - 2

 

[Langchain coding bot] 랭체인을 이용해서 코딩을 해 보자 - 2

이 글은 아래의 의존성을 가진다. https://github.com/hyun06000/langchain-codingbot/blob/main/python_programmer.ipynb langchain-codingbot/python_programmer.ipynb at main · hyun06000/langchain-codingbot Contribute to hyun06000/langchain-codingbot

davi06000.tistory.com

2024.03.26 - [딥러닝 머신러닝 데이터 분석/Langchain & LLM] - [LangCahin Crawler] 랭체인과 LLM으로 크롤링을 해보자

 

[LangChain Crawler] 랭체인과 LLM으로 크롤링을 해보자

이 글은 아래의 의존성을 가진다. 2024.03.24 - [딥러닝 머신러닝 데이터 분석/Langchain & LLM] - [Langchain coding bot] 랭체인을 이용해서 코딩을 해 보자 - 1 [Langchain coding bot] 랭체인을 이용해서 코딩을 해

davi06000.tistory.com

 

코드와 프롬프트를 찾을 수 있는 깃헙이다.

https://github.com/hyun06000/langchain-matzip

 

GitHub - hyun06000/langchain-matzip

Contribute to hyun06000/langchain-matzip development by creating an account on GitHub.

github.com

 

 

맛집 정보 같은 내용은 굉장히 빠르게 변할 수 있는 내용이라 실시간으로 쌓이는 데이터에 언제든 접근하는 것이 가능해야 한다.

LLM을 활용하여 근처의 맛집을 찾아보자.

 

 

먼저 이전 글에서 했듯이 프롬프트와 도구를 만들어 준다.

 

// 프롬프트 (깃헙 참고)

컨텍스트에 해당하는 부분이다.

한국인인 점과 점심시간대, 그리고 잘 다룰 수 있는 툴을 설명하면서 본인의 행동반경과 양식을 어느 정도 포괄적으로 잡았다.

 

 

목적 프롬프트에 해당한다.

언제든지 새로운 장소를 검색할 수 있도록 포맷팅을 이용해서 플레이스홀더를 비워두었다.

최종적으로는 엔드유저가 한글로 읽을 수 있어야하기 때문에 그 부분을 감안하여 위와같이 작성하였다.

두번째 문장에 해당하는 한국어로 번역해줘 같은 부분은 프롬프트의 뒷 부분으로 내려갈 수록

그 중요도가 감소하는 경향을 보였다.

그래서 완벽한 한국어 문장을 최종적으로 얻기 위하여 두번째로 문장을 옮겼다.

 

//도구

가장 먼저 구글플레이스를 검색할 수 있는 API를 먼저 달아주었다.

특히 fieldMask 부분에서 어떤 정보를 얻을지 확실하게 정해주어야 나중에 LLM입장에서 정보의 부족 현상을 격지 않을 것이다.

그리고 이런 API는 LLM을 위해서 설계된 것이 아니므로 굉장히 긴 문장을 결과로 준다.

토큰의 길이는 한정되어 있으니 최대 반환되는 결과 길이를 적절하게 줄여 주자.

 

SerpAPI를 이용한 구글 검색 툴이다.

자세한 내용은 알 수 없고 검색 결과의  URL을 얻을 수 있기 때문에

해당 링크를 타고 들어가 볼 수 있게 request 툴도 만들어 주었다.

한글로 검색되는 정보라서 그런지 영어를 할때보다 같은 문자열 길이여도 토큰의 수가 많이 모자라는 경향을 보였다.

그래서 결과값의 길이를 2000자에서 500자로 줄여서 얻도록 하였다.

 

그런데 그걸로 충분하지 않은 정보를 얻었다면 얼마나 더 많은 정보가 주어져야 할까.

그때그때 알기 힘들기 때문에 요약을 전문으로 하는 LLM을 하나 붙여주었다.

이렇게 서로 다른 객체의 LLM끼리 소통하면서 생각을 이어가는 것도 추충분히 가능하다.

이런 경우 주된 LLM의 토큰 길이를 아낄 수 있고 생각의 흐름을 크게 해치지 않기 때문에 유용하게 사용이 가능하다.

마지막에 한국어도 해야하니까 번역가도 붙여주었다.

번역같은 작업은 3.5도 충분히 잘 하므로 돈을 아끼기 위해 이 부분만 gpt-3.5로 설정하였다.

이렇게 할 일을 분배해서 가격을 낮추는 방법도 가능하다.

 

-> 정정:

3.5가 잘 못해서 다시 4로 바꿔줬다;;

이론상 가능한 부분이었지만 역시 4가 짱이다.

 

//결과

위와 같이 내가 현재 근무하고 있는 근무지 근처의 고기집을 물어봤다.

아까 플레이스홀더로 비워둔 부분에 저 문장이 들어갈 것이고

역할을 정할때 한국인이라고 했으므로 한국어가 문맥을 크게 해치지 않을 것이다.

플랜을 잘 짜고 실행에 옮기고 있다.

위의 결과에서 얻은 링크에 접속해서 네이버 블로그를 검색한 후에

 

해당 장소를 구글 플레이스로 확인하고 있다.

 

결국에는 육갑식당을 추천하고 있는데 (실재로 맛있음)

번역 툴을 이용해서 번역까지 마치는 역할을 수행했다.

 

결과적으로 이런 문장을 얻어냈다.

 

사실 내가 원한건 구글플레이스를 충분히 보고 근처 맛집을 결정하는 것이었다.

하지만 전혀 다른 순서로도 맛집을 잘 찾아내는 것을 볼 수 있다.

내가 원하는 정확한 순서로 생각하게 하려면 프롬프트의 문장 위치를 수정해서 중요도를 옮겨주면 되겠다.

 

굳이 이렇게 도구에 LLM을 넣을 필요는 없고

일의 순서상 번역 LLM은 따로 뽑아내는 것이 프롬프트를 짜거나 로직을 만드는데 더 도움이 될  것 같다.

반응형

댓글