카테고리 없음

스파르타 AI-8기 TIL(11/22) -> 처음부터 계속하기

kimjunki-8 2024. 11. 22. 21:44
LangChain의 "Runnable" 프로토콜
LangChain의 "Runnable" 프로토콜은 체인을 쉽게 생성하고 관리할 수 있도록 설계된 핵심적인 개념입니다. 이 프로토콜을 통해, 개발자는 일관된 인터페이스를 사용하여 다양한 타입의 컴포넌트를 조합하고, 복잡한 데이터 처리 파이프라인을 구성할 수 있습니다. "Runnable" 프로토콜은 다음과 같은 주요 메소드를 제공합니다:
invoke: 주어진 입력에 대해 체인을 호출하고, 결과를 반환합니다. 이 메소드는 단일 입력에 대해 동기적으로 작동합니다.
batch: 입력 리스트에 체인을 호출 및 입력에 대한 결과를 리스트로 반환 이 메소드는 여러 입력에 대해 동기적으로 작동하며, 효율적인 배치 처리를 가능하게 합니다.
stream: 입력에 대해 체인을 호출하고, 결과의 조각들을 스트리밍합니다. 이는 대용량 데이터 처리나 실시간 데이터 처리에 유용합니다.
비동기 버전: ainvoke, abatch, astream 등의 메소드는 각각의 동기 버전에 대한 비동기 실행을 지원합니다. 이를 통해 비동기 프로그래밍 패러다임을 사용하여 더 높은 처리 성능과 효율을 달성할 수 있습니다.






LangChain을 사용하여 커스텀 체인을 생성하는 과정은 다음과 같습니다:
1. 필요한 컴포넌트를 정의하고, 각각 "Runnable" 인터페이스를 구현합니다.
2. 컴포넌트들을 조합하여 사용자 정의 체인을 생성합니다.
3. 생성된 체인을 사용하여 데이터 처리 작업을 수행합니다. 이때, invoke, batch, stream 메소드를 사용하여 원하는 방식으로 데이터를 처리할 수 있습니다.

 

 


 

추가로 오늘 배운 코드들 중 배운것들
#클래스는 비슷한 기능을 하는 함수들을 묶어준다
class datapreprocessing:
    def __init__(self, result):
        self.result = result
        
    def stopwords(self):
        stop_words = set(stopwords.words('korean'))
        clean_text = [word for word in self.result if word not in stop_words]
        return ' '.join(clean_text)
    def clean_text(self, stopwords_result): #만약 이렇게 값을 따로 혼자 받겠다고 하면 그 안에
        #보통 data_instance.stopwords()이렇게 호출하는 것인데, 
        stopwords_result이렇게 값을 하나 더 넣으면 ()안에 그 값을 넣으면 된다.
        return re.sub(r'[^가-힣\s]', '', stopwords_result)
    
data_instance = datapreprocessing(result) #클래스에 값을 넣은 후
return_stopwords = data_instance.stopwords() #이렇게 먼저 계산된 값을 return_stopwords에 넣고
return_instance = data_instance.clean_text(return_stopwords) 
#clean_text에 그 return_stopwords에 다시 넣는다​


클래스는 왜 만드는건지 이해가 잘 안갔는데, 비슷한 원리나 기능을 가진 함수들을 가지고 그 안에서 함께 쓰일 수 있게 만들 때 쓰는 것이며,

굳이 클래스 옆에 ()을 만들고 안에 값을 넣지 않아도, 그 클래스 안에 __init__함수가 호출 될 때 값을 초기화 해주기 때문에 __init__옆 ()에 값을 넣어도 괜찮다. 그러면 더 깔끔해진다.

예: class datapreprocessing: 처럼 바로 :로 끝남

그런데 클래스 안 함수들마다 self를 넣는것은 self.result = result 같이 초기화 된 값들을 다같이 공유하기 위함이고,
따른 함수 옆에 ()에 self말고 다른 것을 받을려고(예:def clean_text(self, stopwords_result):이렇게 넣을 때는 호출을 할 때 ()안에 그 값을 넣어주면 완벽합니다.

일단.....여기까지.....팀과제 때문에 뭘 배울 시간이 읍다...