챗GPT와 랭체인을 활용한 LLM기반 AI 앱 개발-3/5
코랩 사용
사전 준비
AWS Cloud9 구성 - 파이썬 구성
깃허브 구성
6장
1
AWS에서 Cloud9 생성 (아마존 리눅스 1대)
서울 리전
아마존 리눅스
AWS Systems Manager (SSM)
https://console.aws.amazon.com/console/home
2
내 git 허브에 폴더 만들기
https://github.com/topasvga1/streamlit-langchain-app
3
Cloud9과 깃허브 연동.
Cloud9에서 깃허브에 SSH로 접속 하는 방법?
taeho.seo
ssh-keygen -t ed25519 -C "taeho.seo@gmail.com"
cat ~/.ssh/id_ed25519.pub
공개키 xxxxxxxxxxxxxxxxxxxxxxx
4
깃허브에 공개키 등록 ???
오른쪽위 프로필 > 세팅
SSH and GPG keys > New SSH key
cloud9-langchain-book
공개키 등록
5
ssh -T git@github.com
Hi topasvga1! You've successfully authenticated, but GitHub does not provide shell access.
6
ec2-user:~/environment $ git config --global user.email taeho.seo@gmail.com
ec2-user:~/environment $ git config --global user.email topasvga1
# git clone으로 파일 가져오기
git clone git@github.com:topasvga1/streamlit-langchain-app
1
curl https://pyenv.run | bash
echo 'export PYENV_ROOT="$HOME/.pyenv"' >> ~/.bashrc
echo 'export PATH="$PYENV_ROOT/bin:$PATH"' >> ~/.bashrc
echo -e 'if command -v pyenv 1>/dev/null 2>&1; then\n eval "$(pyenv init -)"\nfi' >> ~/.bashrc
eval "$(pyenv virtualenv-init -)" >> ~/.bashrc
exec "$SHELL"
pyenv --version
2
# pyenv 3.10 설치하자.
sudo yum remove -y openssl-devel
sudo yum install -y openssl-devel bzip2-devel xz-devel
sudo yum install libffi-devel
sudo yum install ncurses-devel
sudo yum install readline-devel
3
pyenv install 3.10
(10여분 걸림)
4
# 가상 환경에서 python 3.10 사용하기 위한 절차 (선택)
# 라이블러리등 충돌 나지 않게 사용하기 위해 가상 환경을 사용한다.
ec2-user:~/environment $ cd streamlit-langchain-app/
ec2-user:~/environment/streamlit-langchain-app (main) $ pyenv local 3.10
ec2-user:~/environment/streamlit-langchain-app (main) $ more .python-version
3.10
# local 명령어는 현재 디렉토리와 디렉토리 아래는 해당 파이썬 버전을 사용하게 된다.
ec2-user:~/environment/streamlit-langchain-app (main) $ python -m venv .venv
ec2-user:~/environment/streamlit-langchain-app (main) $ . .venv/bin/activate
5
비활성화
deactivate
1
6장
Window > New Terminal
2
# 스트림릿 설치
pip install streamlit
app.py
import streamlit as st
st.title("langchain-streamlit-app")
3
streamlit run app.py --server.port 8080
4
# 동작 화면
5
소스
https://github.com/ychoi-kr/langchain-book/blob/main/chapter6/app.py
6
# 사용자 입력 받기 , app.py
import os
import streamlit as st
prompt = st.chat_input("What is up?")
print(prompt)
File > Save
streamlit run app.py --server.port 8080
Preview
7
# 입력 내용과 응답을 화면에 표시하기
import streamlit as st
st.title("langchain-streamlit-app")
prompt = st.chat_input("What is up?")
if prompt:
with st.chat_message("user"):
st.markdown(prompt)
with st.chat_message("assistant"):
response = " 안녕하세요로 응답한다"
st.markdown(response)
streamlit run app.py --server.port 8080
preview
6
# 대화 기록 보기 기능 추가
pip install langchain-community
import streamlit as st
from langchain_community.chat_message_histories import StreamlitChatMessageHistory
st.title("langchain-streamlit-app")
history = StreamlitChatMessageHistory()
for message in history.messages:
st.chat_message(message.type).write(message.content)
prompt = st.chat_input("What is up?")
if prompt:
with st.chat_message("user"):
history.add_user_message(prompt)
st.markdown(prompt)
with st.chat_message("assistant"):
response = " 안녕하세요!!"
history.add_user_message(response)
st.markdown(response)
File > 저장
streamlit run app.py --server.port 8080
7
# 랭체인으로 API 실행하기
.env 파일 생성
OPENAI_API_KEY=
OPENAI_API_MODEL=gpt-3.5-turbo
OPENAI_API_TEMPERATURE=0.5
8
pip install langchain openai langchain-openai python-dotenv streamlit-chat
9
# Agent를 사용하여 필요에 따라 외부 정보 검색하기
pip install langchainhub duckduckgo-search wikipedia
import os
import streamlit as st
from dotenv import load_dotenv
from langchain import hub
from langchain.agents import AgentExecutor, create_openai_tools_agent, load_tools
from langchain.memory import ConversationBufferMemory
from langchain_community.callbacks import StreamlitCallbackHandler
from langchain_community.chat_message_histories import StreamlitChatMessageHistory
from langchain_openai import ChatOpenAI
load_dotenv()
def create_agent_chain(history):
chat = ChatOpenAI(
model_name=os.environ["OPENAI_API_MODEL"],
temperature=os.environ["OPENAI_API_TEMPERATURE"],
)
tools = load_tools(["ddg-search", "wikipedia"])
prompt = hub.pull("hwchase17/openai-tools-agent")
memory = ConversationBufferMemory(
chat_memory=history, memory_key="chat_history", return_messages=True
)
agent = create_openai_tools_agent(chat, tools, prompt)
return AgentExecutor(agent=agent, tools=tools, memory=memory)
st.title("langchain-streamlit-app")
history = StreamlitChatMessageHistory()
for message in history.messages:
st.chat_message(message.type).write(message.content)
prompt = st.chat_input("What is up?")
if prompt:
with st.chat_message("user"):
st.markdown(prompt)
with st.chat_message("assistant"):
callback = StreamlitCallbackHandler(st.container())
agent_chain = create_agent_chain(history)
response = agent_chain.invoke(
{"input": prompt},
{"callbacks": [callback]},
)
st.markdown(response["output"])
streamlit run app.py --server.port 8080
출처
https://github.com/ychoi-kr/langchain-book/blob/main/chapter6/app.py
1
# 클라우드 웹앱에서도 필요한 패키지를 설치래야 한다.
requirements.txt 에 정리한다. require txt를 만든다.
pip freeze > requirements.txt
2
# 깃허브에 소스 업로드 한다.
cd /home/ec2-user/environment/streamlit-langchain-app
git init
git remote add origin https://github.com/topasvga1/streamlit-langchain-app
git config --global user.name "topasvga1"
git config --global user.email "taeho.seo@gmail.com"
git add .python-version app.py requirements.txt
git add .python-version app.py requirements.txt
git commit -m 'add'
git push
# git 사용법 참고 필요시.
git remote -v
git remote rm origin
git remote add origin https://github.com/topasvga1/memo1
git push -u origin main
topasvga1
passwd
ghp_spk
https://brunch.co.kr/@topasvga/3669
3
# 스트림릿 커뮤니티 클라우드에 배포하기
1) 가입
2) app 생성
나는 google 계정
3
배포 안됨?
https://brunch.co.kr/@topasvga/3897