환경설정
curl -sSL https://install.python-poetry.org | python3 - #Poetry 최신 버전 설치
python3 --version
poetry --version
Python 패키지(예: maturin, jiter)는 Rust 기반으로 작성되어 있으며, 이를 소스에서 빌드하려면 Rust 컴파일러가 필요
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh
source $HOME/.cargo/env #설치 후, 환경 변수를 적용
rustc --version
Poetry 사용을 위해 기존 anaconda 비활성화 필요
안하면 base 가 anaconda로 계속 잡힌다
conda config --set auto_activate_base false
#Restart your terminal
conda deactivate
#Ctrl + O
#Ctrl + X nano 저장 후 닫기
source ~/.zshrc #변경 사항 적용
ARM 아키텍처와 x86_64 아키텍처 간의 호환성 문제로 가상 환경 수동 활성화가 필요하다
(M1 Mac에서 발생하는 주요 문제는 x86_64와 ARM64 아키텍처 간의 충돌 때문이다..Homebrew와 Python 설치가 ARM64로 되어 있는지 확인하는 것이 중요함)
brew install python@3.10 #설치
brew list | grep python #설치확인
brew info python@3.10 #경로확인
프로젝트 디렉터리를 생성하고 이동 또는 원래 있던 프로젝트로 가자
mkdir langchain_project4 && cd langchain_project4
cd /Users/xx/langchain_project3
Poetry 프로젝트 초기화
poetry init #새 프로젝트를 초기화하여 pyproject.toml 파일을 생성
Poetry - Python 버전 설정(출력이 Python 3.10.16)
which python3.10
poetry env use /opt/homebrew/bin/python3.10 #Python 3.10 기반의 가상 환경을 설정
poetry run python --version #Python 버전이 제대로 설정되었는지 확인
Python 버전 지정-ARM64 Python 경로를 사용하도록
poetry env use /opt/homebrew/bin/python3.10
shell 오류가 계속되므로 수동으로 가상환경을 활성화한다
poetry env info --path
source <경로>/bin/activate
poetry config virtualenvs.in-project true
가상 환경이 ARM64로 실행 중인지 확인하면 끝
출력에 arm64가 포함되어 있어야한다
python3 -c "import platform; print(platform.platform())"
.venv 가상환경 파일 현재 경로에 생성 - 터미널에서 실행
python3 -m venv new_venv
source new_venv/bin/activate
설치된 라이브러리가 x86_64 아키텍처용으로 컴파일되어 ARM64 아키텍처와 호환 에러가 난다
가상 환경 내에서 pip를 사용하여 패키지를 소스에서 설치하자
pip install --no-binary :all: openai python-dotenv
pip install --force-reinstall --no-binary :all: openai python-dotenv #이미 설치된 패키지 중 아키텍처 충돌이 있는 경우, 강제로 재설치
pip install langchain
pip install -U langchain-community
readme.md 도 만들어주자
echo "# OpenAI Project" > README.md
cat README.md #파일 생성 확인
env 파일에 open ai key를 넣어주자
touch .env
nano .env
OPENAI_API_KEY=your_openai_api_key
#Save and exit the file. In nano, press CTRL + O, then Enter, and CTRL + X
OPENAI_API_KEY 환경 변수 파일 설정 (프로젝트 디렉토리에서 .env 파일을 생성)
https://platform.openai.com/api-keys
export OPENAI_API_KEY="your_openai_api_key"
echo $OPENAI_API_KEY #환경 변수가 제대로 설정되었는지 확인
프로젝트 디렉터리 내부에 Python 파일 생성
touch main.py
LangChain 스크립트 작성
import os
from langchain.chat_models import ChatOpenAI
from langchain.prompts import PromptTemplate
from dotenv import load_dotenv
# .env 파일에서 환경 변수 로드
load_dotenv(dotenv_path=".env")
# OpenAI API 키 가져오기
api_key = os.getenv("OPENAI_API_KEY")
if not api_key:
raise ValueError("API 키가 설정되지 않았습니다. day3.env 파일을 확인하세요.")
# OpenAI Chat 모델 초기화
chat = ChatOpenAI(
temperature=0.7, # 응답 다양성 조절 (0.0 ~ 1.0)
model_name="gpt-3.5-turbo",
openai_api_key=api_key
)
# 프롬프트 템플릿 생성
prompt = PromptTemplate(
input_variables=["question"],
template="You are a helpful assistant. Answer the following question: {question}"
)
def main():
print("Welcome to the LangChain-based AI Assistant!")
print("Type your question below. Type 'exit' to quit.")
while True:
# 사용자 입력 받기
user_question = input("\nYour Question: ")
# 'exit' 입력 시 종료
if user_question.lower() == 'exit':
print("Goodbye!")
break
# 프롬프트 구성
formatted_prompt = prompt.format(question=user_question)
# ChatGPT 응답 생성
try:
# Chat 모델 호출
response = chat.invoke([{"role": "user", "content": formatted_prompt}])
print("\nAssistant:", response["choices"][0]["message"]["content"])
except Exception as e:
print(f"Error occurred: {e}")
if __name__ == "__main__":
main()
poetry run python main.py
파이썬은 동기식 처리함수와 비동기 함수의 구현이 다른데 동기식은 그 함수가 끝나고 다음 로직을 실행할 수 있고 비동기식은 끝나기 전에 다른 작업의 리퀘스트를 받을 수 있습니다. 순서를 지켜야하는 경우 동기식 순서를 무시하되 빠르게 빠르게 동시에 처리해야할 때 비동기를 사용합니다.