chat gpt function, langchain
Browsing
Chat GPT(4.0) 한테 서울 날씨에 대해서 물어보자. Chat GPT는 특정 시점의 데이터를 기준으로 학습했기 때문에 현재 서울 날씨에 대한 데이터는 알 수 없다. 그래서 Chat GPT 는 Browsing 기술을 활용해 외부 사이트에서 날씨를 읽어와서 대신 답을 해준다. 사진의 예제에선 네이트 날씨를 참조해서 답변했다.
로직을 다이어그램으로 그려보면 위와 같다. APP 에서 받은 질문으로 외부에 날씨 API 를 조회하고 답변하는 식이다.
오픈되지 않은 데이터에 대한 요청
그런데 요청이 오픈된 데이터가 아니라면 어떨까? 위의 그림처럼 APP 에서 GameDB 에 유저가 몇명 있냐고 물어보자. 그러면 Chat GPT는 GameDB 가 뭔지 모르기 때문에 답변할 수 없다.
함수 정보 전달
Chat GPT 에게 APP 에서 사용중인 함수에 대해서 알려주자. run_gamedb_query 라는 함수가 있고 game db 에 데이터를 조회할 때 사용하는 함수이며 파라미터로는 sql 형태의 스트링을 받는다고 알려줬다.
그러자 Chat GPT 는 조회용 쿼리와 실행할 함수를 답변한다.
Chat GPT Function
몇가지 정보를 전달하면 훌륭하게 답변하는 것을 확인했다. 그런데 매번 이런식으로 사전 정보를 전달하는것이 까다롭긴 하다. 그래서 Open AI 에서는 Chat GPT Function 이라는 라이브러리를 이용해서 함수에 대한 정보를 제공할 수 있도록 만들었다.
Chat completion 라이브러리에서 functions 인자 값을 같이 전달하는 방식이다. name, description, parameter 를 이용해서 APP 에서 사용중인 함수의 정보를 제공한다. 그러면 Chat GPT 는 질의에 해당하는 함수를 찾고 필요한 파라미터값을 자동으로 생성해준다.
LangChain + ChatGPT Function
ChatGPT 가 답변한 함수와 파라미터를 자동으로 실행하도록 할 수 있다면 필요한 정보를 바로 실행할 수 있을 것이다. LangChain 라이브러리에서는 이러너 기능을 제공한다.
LangChain 에 run_gamedb_query 함수를 툴로 추가하고 Chat GPT 로 부터 해당 함수를 실행하라는 답변을 받으면 자동으로 함수를 실행한다.
추가로 함수 결과를 다시 Chat GPT 에 전달해서 최종 답변을 받는다. APP에서 직접 전달하는 방법도 있지만 langchain 을 이용하면 이 과정을 자동화시켜준다.
AgentExecutor 클래스를 이용해서 구현하는데 자세한 내용은 다음 포스트에...