실습 코드
```python
import os
from dotenv import load_dotenv
# .env 파일 로드
load_dotenv()
# 환경 변수에서 API 키 가져오기
api_key = os.getenv("OPENAI_API_KEY")
# PromptTemplate
from langchain_core.prompts import PromptTemplate
# template 정의
question = "{location}의 맛집을 10개 이상 추천해주세요. \n ### 응답예시 ### \n 번호. 음식점 - 설명"
# from_template 메소드를 이용하여 PromptTemplate 객체 생성
prompt_template = PromptTemplate.from_template(question)
# prompt 생성
# prompt = prompt_template.format(location="서울")
# LLM모델 생성
from langchain_openai import ChatOpenAI
llm = ChatOpenAI(api_key=api_key)
# 출력파서 설정
from langchain_core.output_parsers import StrOutputParser
output_parser = StrOutputParser()
# Chain을 통한 연결
# | => LCEL. 파이프연산자와 유사하며 구성요소들을 연결하고 , 각 구성요소의 반환값을 다음 구성요소의
# 입력으로 사용된다.
# prompt제거
chain = prompt_template | llm | output_parser
# prompt_template에 전달할 입력값
input = {"location":"강남 역삼"}
# chain 실행함수
# invoke : 체인을 호출하고 결과를 반환하는 함수.(동기적)
#chain.invoke(input)
# stream: 입력에 대해 체인을 호출하고, 결과의 조각들을 스트리밍합니다.
# 이는 대용량 데이터 처리나 실시간 데이터 처리에 유용합니다.
#for token in chain.stream(input):
# 스트림에서 받은 데이터를 출력. 줄바꿈 없이 출력 , 버퍼 즉시 비우기
# print(token, end="", flush=True)
# batch : 입력 리스트에 대해 체인을 호출하고, 각 입력에 대한 결과를 리스트로 반환합니다.
# 이 메소드는 여러 입력에 대해 동기적으로 작동하며, 효율적인 배치 처리를 가능하게 합니다.
input1 = input
input2 = {"location" : "선릉 압구정"}
chain.batch([input1 , input2])
chain.batch([input1 , input2],config={"max_concurrency": 2}) # 동시성 설정 가능
```
Last updated