>

TIL

LLMChain, urllib와 requests 차이

ekdud 2024. 10. 28. 02:04

Langchain의 Chain 컴포넌트

여러개의 LLM을 연결하여 LLM 애플리케이션을 개발할 수 있는 기능.

물론 직접 chatgpt api등을 사용해서 이런 복잡한 흐름을 개발할 수 있지만 Langchain의 chain은 이를 쉽게 개발 할 수 있도록 추상화된 계층을 제공한다. 

 

LLM Chain은 프롬프트 템플릿을 LLM을 합쳐서 컴포넌트화 한 것으로, 입력값으로 문자열을 넣으면 프롬프트 템플릿에 의해서 프롬프트가 자동으로 완성되고, LLM 모델을 호출하여 텍스트 응답을 주는 기능을 한다.

class AiPlanningAPIView(APIView):
        def post(self, request):
            llm = ChatOpenAI(model="gpt-4o-mini", api_key=settings.API_KEY)
            query_params = request.query_params
            place_name = query_params.get("place_name")
            n = query_params.get("n", 0)
            m = query_params.get("m", 1)
            preference = query_params.get("preference", None)

            if not place_name:
                return Response({"방문하고자 하는 촬영지를 입력해주세요. 해당 촬영지를 방문하는 여행 계획을 추천해드립니다."}, status=status.HTTP_200_OK)
            
            nearby_places = get_nearby_place(place_name)
            if isinstance(nearby_places, Response):
                return nearby_places 

            nearby_places_formatted = [
            f"제목: {place['title']}, 카테고리: {place['category']}, Link: {place['link']}, 도로명 주소: {place['roadaddress']}, 지번 주소: {place['address']}"
            for place in nearby_places
            ]
            nearby_places_str = "\n".join(nearby_places_formatted)

            template = f"""{place_name}에 방문하는 일정을 포함한 여행 계획을 세워줘. 나는 한국에 살고있어. 
                    반드시 {nearby_places_str} 중에서 장소를 추천해줘. 다음의 내용을 담아 계획을 세워줘.
                    매일의 일정: 오전, 오후, 저녁별로 어떤 활동을 할 지. 날짜 예시는 들지 않아도 돼.
                    매일 식사는 아침, 점심, 저녁을 먹을거야.
                    반드시 특정 식당, 장소명을 포함한 답변을 줘. 같은 장소를 두번 방문하지 않도록 해. 그리고 링크가 있다면 포함시켜줘."""
            
            if preference and len(preference)<=50:
                template += f"{preference}한 스타일의 여행을 원해."
                if n and m:  # n, m 입력 받음.
                    template += f"{n}박 {m}일 동안의 여행을 갈거야."
                else:  # n, m을 입력받지 않는 경우. (당일치기 여행계획 버튼을 따로 만들기.)
                    template += "당일치기 여행을 갈거야."
                    m = 1
            elif preference and len(preference)>50:  # 선호하는 여행 스타일은 50자 이내로 입력해야 함.
                return Response({"여행 취향을 50자 이내로 적어주세요."})
            else:
                if n and m: 
                    template += f"{n}박 {m}일 동안의 여행을 갈거야."
                else:
                    template += "당일치기 여행을 갈거야. 숙소는 추천하지 마."

            prompt = PromptTemplate(template=template, input_variables=["place_name", "preference", "nearby_places"])
            llm_chain = LLMChain(prompt=prompt, llm=llm)

            try:
                response = llm_chain.run(place_name=place_name, preference=preference, nearby_places=nearby_places)
                request.session['travel_plan'] = response  # Store the travel plan in the session
                return render(request, 'locations/plan.html', {"travel_plan": response})
            except Exception as e:
                return Response({"message": "죄송합니다. 여행플래닝 서비스 제공에 실패했습니다. 다시 시도해주세요.", "error": str(e)}, status=status.HTTP_500_INTERNAL_SERVER_ERROR)

 

 

urllib와 requests

  urllib requests
개념 파이썬 기본 패키지.
URL handling module.
URL을 가져오기 위한 모듈.
사용자 친화적인 문법을 사용해 다루기 쉽고
안정적.
데이터 전송 인코딩하여 binary 형태로 전송 dict 형태로 전송
요청 메소드 명시 여부 데이터 여부에 따라 GET req, POST req 명시 GET, POST 명시
없는 페이지 요청 시 error을 띄움 error 띄우지 않음