langchain 공부

invoke와 get_relevant_documents의 차이

필만이 2024. 10. 16. 23:10
query='블로그 주인장은 차은우와 비슷하게 생겼는가?'
retriever.get_relevant_documents(query)
retriever.invoke(query)

배경

  1. 뭔가 어느순간 최종단계에서 get_relevant_documents을 쓰고 있었다. 아마도 GPT 때문에 invoke로 쓰던게 대체된것 같다.
  2. 둘다 비슷한 기능으로 동작하는거 같은데 무슨 차이가 있는지 알고 싶었다.

해결과정

  1. get_relevant_documents의 코드확인
    @deprecated(since="0.1.46", alternative="invoke", removal="0.3.0")
    def get_relevant_documents(
        self,
        query: str,
        *,
        callbacks: Callbacks = None,
        tags: Optional[List[str]] = None,
        metadata: Optional[Dict[str, Any]] = None,
        run_name: Optional[str] = None,
        **kwargs: Any,
    ) -> List[Document]:
        """Retrieve documents relevant to a query.

        Users should favor using `.invoke` or `.batch` rather than
        `get_relevant_documents directly`.

        Args:
            query: string to find relevant documents for.
            callbacks: Callback manager or list of callbacks. Defaults to None.
            tags: Optional list of tags associated with the retriever.
                These tags will be associated with each call to this retriever,
                and passed as arguments to the handlers defined in `callbacks`.
                Defaults to None.
            metadata: Optional metadata associated with the retriever.
                This metadata will be associated with each call to this retriever,
                and passed as arguments to the handlers defined in `callbacks`.
                Defaults to None.
            run_name: Optional name for the run. Defaults to None.
            **kwargs: Additional arguments to pass to the retriever.

        Returns:
            List of relevant documents.
        """
        config: RunnableConfig = {}
        if callbacks:
            config["callbacks"] = callbacks
        if tags:
            config["tags"] = tags
        if metadata:
            config["metadata"] = metadata
        if run_name:
            config["run_name"] = run_name
        return self.invoke(query, config, **kwargs)
  1. 해석 : @deprecated(since="0.1.46", alternative="invoke", removal="0.3.0") 를 주목해보면, 사실상 내부적으로 invoke 이미 대체돼 사용되고 있었다.

결론

  • 함수 내부에서 get_relevant_documents 대신 .invoke 또는 .batch 을 사용하라고 권장까지 하고 있다. get_relevant_documents는 더이상 사용하지 않는것이 좋겠다.