본 글은 제가 4월에 직접 만든 AI Agent를 개발하는 과정을 공유하는 글입니다. 비전공자, 비개발자여도 누구나 직접 개발할 수 있도록 도움을 드리고자 씁니다.
세 파트로 나뉘어져 있습니다.
Part 1: 전체 프로그램 셋업, OpenAI API 연결, Vector Store 연결
Part 2: 커스텀 LLM 체인 직접 만들고나서 실행하기
Part 3: Agent가 나 대신 실제 구글 검색하는 기능 만들기
파트 3까지 모두하면 달성할 수 있는 것:
자동으로 기본 업무 처리를 해주는 AI 에이전트 직접 만들기
구글 검색 기능
step-by-step 개발 과정 알아가기
앞으로 추후 AI 관련 프로젝트 개발 아티클 들은 10X AI Club에서 지속적으로 올라올 예정이니 클럽 가입 부탁드리겠습니다! 정기적 오프라인 모임 및 세미나도 열 계획이니 많은 관심 부탁드리겠습니다 :)
이 프로젝트는 Langchain BbyAGI User Gide docs를 참고하며 만든 에이전트입니다. https://python.langchain.com/docs/use_cases/agents/baby_agi
코드부터 프로젝트가 웹사이트에서 실제 작동되는 것까지 모든 단계들을 이 글에서 확인할 수 있습니다.
제 노트북이 맥이다보니 맥북 화면 구성으로 설명드리는 점 참고 부탁드립니다!
VSCode 다운로드 및 코드 셋업
코딩 프로젝트를 만들기 위해서는 VSCode라는 코딩 에디터 프로그램을 사용합니다.
https://code.visualstudio.com/ 사이트에 들아가신 후 다운로드합니다.
프로그램을 다운로드 후 실행하면 첫 화면이 보입니다.
여기서 “Open”이라는 버튼을 누른 후 프로젝트를 저장할 새로운 파일을 만듭니다. “New Folder” > “ai-agent”라는 폴더를 만듭니다 (파일 이름은 상관없습니다!).
폴더 “Open”을 누르면 다음과 같은 화면이 됩니다.
그 다음 agent.py라는 새로운 파일을 만듭니다. AI-AGENT라는 탭 위에 허버하시면 New File + 버튼 보이시죠? 그걸 누른후 파일 이름을 agent.py라고 하시면 됩니다.
agent.py 파일은 파이썬 코드 파일입니다. 파이썬 코드를 돌리기 위해서는 가상의 환경을 셋업해줘야합니다. 전혀 어렵지 않고 코드 몇줄만 실행하면 됩니다!
먼저 맥북 상단 탭에서 “Terminal”을 누른 후 “New Terminal”을 누릅니다. 기본 명령어들을 이 터미널이라는 곳에서 입력할 수 있어요.
그럼 이런 화면이 뜨게 될겁니다. 터미널에 cailynyongyong@MacBook-Pro-2 ai-agent라고 보이시죠? 내가 만든 ai-agent라는 폴더 안에 들어가 있다는 뜻입니다.
여기서 이제 파이썬 코드를 실행하기 위해 가상의 환경을 만들어줄거에요. 터미널에 python -m venv venv라는 명령어를 입력 후 엔터를 눌러주세요. 생성이 되면 왼쪽에 “venv”라는 폴더가 만들어진걸 확인할 수 있습니다.
이 가상의 환경을 만들었으니, 이제 이 환경을 실행시켜줄거에요. 이 환경을 실행해야만 파이썬 코드를 돌릴 수 있습니다.
터미널에 source venv/bin/activate라는 명령어를 입력해주세요.
그럼 성공적으로 터미널에 (venv) cailynyongyong@MacBook-Pro-2 ai-agent 라는게 뜹니다. 가상 환경에 들어왔다는 뜻입니다.
다음으로 터미널에 다음의 명령들을 순서대로 실행합니다.
pip install langchain
pip install openai
pip install faiss-cpu > /dev/null
pip install tiktoken
예를 들어 pip install langchain을 실행하면 다음과 같이 다운로드가 진행되는게 보일겁니다.
이제 코드를 작성해봅시다!
OpenAI API key 연결, Vector Store 연결
이제 본격적으로 에이전트를 코딩하기 위한 모든 셋업을 할겁니다. 한번에 다 이해 못해셔도 괜찮으니, 코드를 그대로 복붙하시면서 일단 해보는걸 추천드립니다! 저도 그렇게 배웠거든요 ㅎㅎ
처음에는 에이전트를 만들기 위해 필요한 툴들을 불러와야 해요. 이걸 module, 혹은 library라고 푸릅니다. 항상 개발을 할때에는 프로젝트에 필요한 적절한 모듈들을 불러옵니다. 레고처럼 필요한 부품들만 갖고와서 맞추는 것 처럼요.
저희는 OpenAI의 모듈들을 쓸거여서 OpenAI API Key라는 것을 써야합니다. OpenAI 웹사이트에서 계정을 만든 후 https://platform.openai.com/overview 이 곳에 들어갑니다. 상단 오른쪽에서 Personal 버튼 위에 허버하고 View API Keys를 눌러주세요.
이 페이지에 들어오면 “Create new secret key”를 누르세요.
ai-agent라는 이름으로 만들고 초록색 버튼을 누르세요. 버튼을 누르면 새로운 secret key가 생성되는데, 바로 복사해서 다른 곳에 저장해두세요. 다시 열어서 볼 수 없거든요. 이 키는 꼭 다른 사람과 공유하지 마세요! 일종의 OpenAI 비밀번호입니다.
이 키를 이제 어디다가 쓸거냐, 밑에 코드 두번째 줄에 os.environ[”OPENAI_API_KEY”] = “ “ 보이시죠? “ “ 안에 방금 복사한 secret key를 넣습니다.
import os
os.environ["OPENAI_API_KEY"] = " "
from collections import deque
from typing import Dict, List, Optional, Any
from langchain.llms import OpenAI
from langchain.chains import LLMChain
from langchain.prompts import PromptTemplate
from langchain.embeddings import OpenAIEmbeddings
from langchain.llms import BaseLLM
from langchain.vectorstores.base import VectorStore
from pydantic import BaseModel, Field
from langchain.chains.base import Chain
이 코드를 그대로 복사해서 agent.py에 붙입니다.
각 줄별로 어떤 것을 뜻하는지 이해하기보다는, ‘아 이 에이전트를 만들기 위해서는 이런 모듈들을 불러와야하는구나’라고 알기만 하면 됩니다. 기본적으로 우리는 랭체인을 써서 LLM 체인을 직접 커스터마이징해서 쓸거기 때문에 from langchain import LLMChain, OpenAI 라는 코드가 있습니다. 이 말은 langchain이라는 곳에서 LLMChain, OpenAI 모듈들을 불러와서 쓸거다 라는 뜻이죠.
Vector Store 셋업
다음 스텝은 Vector Store라는 것을 쓰기 위해 추가적으로 불러와야할 모듈들이 있습니다. Vector Store라는 것은 커스텀 LLM을 쓸 때 효율적으로 데이터를 저장하고 불러올 수 있는 공간을 마련해주는 것입니다.
저희는 FAISS라는 Vector Store를 쓸거에요.
from langchain.vectorstores import FAISS
from langchain.docstore import InMemoryDocstore
필요한 모듈들을 불러옵니다. 복사해서 agent.py에 붙여넣으세요.
다음 이 vector store를 내 코드와 연결시키기 위해 이 코드를 작성합니다.
# Define your embedding model
embeddings_model = OpenAIEmbeddings()
# Initialize the vectorstore as empty
import faiss
embedding_size = 1536
index = faiss.IndexFlatL2(embedding_size)
vectorstore = FAISS(embeddings_model.embed_query, index, InMemoryDocstore({}), {})
Vector embedding은 텍스트, 이미지, 오디오와 같은 숫자가 아닌 데이터들을 컴퓨터가 알아듣기 쉽게 숫자화한 형태입니다. 이 embedding들이 vector store에 저장되는거구요.
저희는 embedding model을 OpenAIEmbeddings()라는 모델을 쓸겁니다.
그 다음 vector store를 초기 셋업합니다.
import faiss: faiss 벡터 스토어 불러오기
embedding_size = 1536: embedding size를 1536으로 합니다.
index = faiss.IndexFlatL2(embedding_size): faiss에 이 사이즈로 셋업을 할거라고 알려줍니다.
vectorstore = FAISS(embeddings_model.embed_query, index, InMemoryDocstore({}), {}): 이런 기초 작업들을 거친 후 맨 마지막 줄에서 vectorstore를 성공적으로 셋업합니다.
다 복붙하면 코드는 이렇습니다.
Part 1 마무리
이로써 Part 1은 끝났습니다! 전체적인 셋업을 했으니 이제 다음 파트에서는 직접 커스텀 LLM 체인들을 만들어줄거에요.
하면서 어려움 을 겪었거나 질문이 있으시면 포스트에 댓글 남겨주세요!
10X AI Club의 첫번째 글 읽어주셔서 감사합니다.