랭체인을 통해서 엑셀의 유사도 판단하기

오늘은 랭체인을 통해서 엑셀의 유사도를 판단하는 프로그램을 작성해보겠습니다.

 

openAI 템플릿을 사용할 예정이구요.

 

랭체인이란?

랭체인은 LLM과 애플리케이션의 통합을 간소화하도록 설계된 SDK로서 앞서 설명한 대부분의 문제를 해결하도록 만들어진 툴입니다. 랭체인은 ODBC, 또는 표준 SQL 문에 집중하게 함으로써 백엔드 데이터베이스의 구현 세부 정보를 요약하는 JDBC 드라이버와 비슷하다고 할 수 있습니다. 랭체인은 간단하고 통합된 API를 노출하여 기본 LLM의 구현 세부 사항을 요약하는데, 이 API를 통해 개발자들은 코드를 크게 변경하지 않고 모델을 쉽게 교체하거나 대체할 수 있습니다.

랭체인은 챗GPT와 거의 같은 시기에 등장했는데요. 개발자인 해리슨 체이스는 2022년 10월 말, LLM 열풍이 일어나기 시작한 시점에 랭체인을 처음 선보였습니다.

 

아래 이미지를 보면 간단히 이해할 수 있는데요.

 

원래 기존에는 openai에서 바로 불러와서 사용하게 되는데요. langchain을 통하면 좀더 편리하게 관릭 ㅏ가능합니다.

 

기본적으로 필요한 패키지는 아래와 같습니다.

 

pip install tabulate langchain-openai openai langchain-experimental langchain

 

랭체인 사용하기

chatgpt에게  openai와 xlsx를 사용하는 방법을 물어보니 아래처럼 알려줍니다. pandas dataframe agent를 사용하는 것을 추천하는데요. 파라미터는 아래와 같습니다.

그럼 실제코드를 작성해보겠습니다.

 

패키지는 아래 정도를 부르면 될거 같구요. 저는 AzureChatOpenAI를 사용했습니다.

 

이게 ChatGPT에게 물어보면 패키지별로 명령어가 일부 달라서 에러가 나는데요.

import openai
import json
import os

from langchain_openai import OpenAIEmbeddings
from langchain_openai import AzureChatOpenAI
from langchain_experimental.agents import create_pandas_dataframe_agent
from langchain_community.chat_models import ChatOpenAI
import pandas as pd

에러코드를 직접 물어보면 해당하는 답변을 알려줍니다.

 

6월 기준으로 패키지 최신버전에 맞는 코드를 작성한것인데요. 이게 버전이 다르면 에러가 뜨더라구요. 

 

전 python 3.9버전의 최신 패키지 기준으로 작성했습니다.

그리고 이제 api키와 endpoint version을 본인에 맞춰서 설정합니다.

os.environ["CURL_CA_BUNDLE"]=""

os.environ['OPENAI_API_KEY'] = apk 키
os.environ['azure_endpoint'] = endpoint
os.environ['OPENAI_API_VERSION'] = api 버전
openai.api_key =os.getenv("OPENAI_API_KEY")
azure_endpoint = os.getenv("azure_endpoint")
openai.api_version =os.getenv("OPENAI_API_VERSION") 
openai.api_type = "azure"


deployment_name = "gpt-4"
num_outputs = 2048

llm = AzureChatOpenAI(temperature=0.8, deployment_name=deployment_name, max_tokens=num_outputs,
                     api_key=openai.api_key,
    azure_endpoint=azure_endpoint,
    api_version=openai.api_version
                        )

 

temperature는 얼마나 창의적으로 할지인데요.

 

정확한 값을 가지기 위해서는 낮은 값을 설정합니다.

 

이후 

df = pd.read_excel('./Naver_2024-06-22.xlsx')
df.sort_values(by='티어', inplace=True)

agent = create_pandas_dataframe_agent(
    llm,                                    # 모델 정의
    df,                                     # 데이터프레임
    verbose=True, # 추론과정 출력
    allow_dangerous_code=True #위험코드 실행

)


agent.invoke('나는 기자인데, 기사의  제목과 내용 열을 보고 약 80%이상 유사한 기사가 있으면 유사에 유사라고 표시해 줘')


# 결과 출력


# 결과를 엑셀 파일로 저장
df.to_excel('./contents_with_similar.xlsx', index=False)

 

실행과정을 보여달라고 했기 때문에 프로그램이 동작하면서 내용을 보여줍니다. 코사인 시밀러리티를 사용해서 유사도를 판단했네요. 해당 코드를 직접 코딩해도 동작합니다.

결과값은 잘 나옵니다.

 

 

그럼 잘 사용하시기 바랍니다.