티스토리 뷰
반응형

비전공자를 위한 AI Agent 7편
“폴더 하나로 RAG Agent 만들기 – 문서를 읽고, 찾고, 판단하는 AI”
솔직히 여기까지 왔다면
이런 생각 한 번쯤 했을 거예요.
“개념은 이제 알겠는데…
이걸 내 문서 폴더 기준으로 바로 써먹고 싶다.”
맞습니다.
오늘 글은 완전 실전입니다.
- PDF 몇 개
- TXT, MD 섞여 있는 폴더
- 그걸 AI 에이전트가 직접 읽고
- 질문에 맞는 내용만 찾아서
- 근거 기반으로 답변
👉 진짜 RAG Agent를 만듭니다.
0️⃣ 오늘 우리가 만들 것 (명확한 목표)
🎯 목표
- docs/ 폴더 안의 문서들을 전부 읽는다
- 문서를 자동으로 쪼갠다
- 임베딩(벡터)로 변환해 저장한다
- 질문이 들어오면 관련 문서만 검색
- 그 근거를 바탕으로 AI가 답변한다
❌ 안 하는 것
- 웹 서버
- 복잡한 DB
- 대규모 분산 구조
👉 로컬에서 바로 실행 가능한 RAG Agent
1️⃣ 준비물 (이거 그대로 맞추면 됨)
Python 3.10+
python --version
필수 라이브러리 설치
pip install openai chromadb tiktoken
ChromaDB는 로컬에서 쓰기 제일 편한 벡터 DB라서 선택했어요.
나중에 Pinecone, Weaviate로 바꿔도 구조는 동일합니다.
2️⃣ 프로젝트 구조
rag-agent/
├─ agent.py
└─ docs/
├─ guide.txt
├─ meeting.md
└─ memo.txt
docs/ 예시 (guide.txt)
AI Agent는 목표 중심으로 동작한다.
단순 챗봇과 달리 도구를 사용해 실제 행동을 수행한다.
3️⃣ RAG Agent 전체 흐름 (이게 전부다)
문서 폴더 읽기
→ 텍스트 추출
→ chunk로 분리
→ 임베딩 생성
→ 벡터 DB 저장
질문 입력
→ 벡터 검색
→ 관련 chunk 추출
→ AI에게 전달
→ 답변 생성
복잡해 보이지만
코드로 보면 진짜 단순합니다.
4️⃣ 실행 가능한 전체 코드 (검증 완료)
반응형
agent.py
import os
from openai import OpenAI
import chromadb
from chromadb.config import Settings
client = OpenAI()
# 1️⃣ 벡터 DB 초기화
chroma_client = chromadb.Client(
Settings(persist_directory="./chroma", anonymized_telemetry=False)
)
collection = chroma_client.get_or_create_collection(name="docs")
# 2️⃣ 문서 로딩
def load_documents(folder_path: str):
docs = []
for file in os.listdir(folder_path):
if file.endswith((".txt", ".md")):
with open(os.path.join(folder_path, file), "r", encoding="utf-8") as f:
docs.append(f.read())
return docs
# 3️⃣ 문서 쪼개기 (아주 단순하게)
def split_text(text: str, chunk_size=500):
return [text[i:i+chunk_size] for i in range(0, len(text), chunk_size)]
# 4️⃣ 문서 임베딩 후 저장
def index_documents():
docs = load_documents("docs")
chunk_id = 0
for doc in docs:
chunks = split_text(doc)
for chunk in chunks:
embedding = client.embeddings.create(
model="text-embedding-3-small",
input=chunk
).data[0].embedding
collection.add(
documents=[chunk],
embeddings=[embedding],
ids=[str(chunk_id)]
)
chunk_id += 1
print("✅ 문서 인덱싱 완료")
# 5️⃣ 질문 → 검색 → 답변
def ask_agent(question: str):
query_embedding = client.embeddings.create(
model="text-embedding-3-small",
input=question
).data[0].embedding
results = collection.query(
query_embeddings=[query_embedding],
n_results=3
)
context = "\n".join(results["documents"][0])
prompt = f"""
너는 문서 기반 AI 에이전트다.
아래 문서 내용을 근거로 질문에 답변해라.
문서:
{context}
질문:
{question}
근거에 없는 내용은 추측하지 마라.
"""
response = client.chat.completions.create(
model="gpt-4.1-mini",
messages=[
{"role": "system", "content": "너는 신뢰 가능한 RAG Agent다."},
{"role": "user", "content": prompt}
],
temperature=0.2
)
print("\n🤖 에이전트 답변:")
print(response.choices[0].message.content)
if __name__ == "__main__":
index_documents()
ask_agent("AI Agent와 챗봇의 가장 큰 차이는?")
5️⃣ 실행 방법
python agent.py
실행 결과 예시 👇
✅ 문서 인덱싱 완료
🤖 에이전트 답변:
AI Agent는 단순히 질문에 답변하는 챗봇과 달리,
명확한 목표를 가지고 도구를 활용해 실제 행동을 수행한다는 점이 가장 큰 차이입니다.
👉 이 답변은
docs 폴더 안 문서에 근거해서만 나온 겁니다.
6️⃣ 이게 왜 “Agent”냐면
보통 RAG 예제는 여기서 끝나요.
질문 → 검색 → 답변
근데 우리는 이미 다음 확장이 가능합니다.
- 답변이 부족하면?
→ 다시 검색 - 근거가 약하면?
→ 다른 chunk 탐색 - 질문이 모호하면?
→ 질문 재정의
👉 검색 자체를 판단 대상으로 삼을 수 있음
이게 바로
RAG + Agent 구조입니다.
7️⃣ 비전공자 기준 실무 팁 (진짜 중요)
✅ 문서 품질 > 모델 성능
- 정리 안 된 문서 100개 ❌
- 잘 쓴 문서 10개 ⭕
✅ chunk는 크지 않게
- 너무 크면 검색이 흐림
- 너무 작으면 문맥 붕괴
✅ “근거 없으면 말하지 마라” 꼭 넣기
- 이 한 줄이 환각을 크게 줄입니다
8️⃣ 여기까지 오면 이제 이런 생각 든다
“이제 문서도 보고,
판단도 하는데…
이걸 업무 흐름에 엮을 수는 없을까?”
정확합니다.
다음 단계는 실제 서비스 구조입니다.
다음 글 예고
8편 – 실무형 AI Agent 설계: 실패, 로그, 통제의 세계
- 왜 에이전트는 반드시 실패하는지
- 로그 없으면 왜 운영이 불가능한지
- 어디까지 AI에게 맡기고, 어디서 사람 개입이 필요한지
👉 여기부터는
‘사이드 프로젝트’가 아니라 ‘제품’ 이야기입니다.
오늘 요약 (이 문장 하나면 충분)
RAG Agent는
문서를 기억하는 AI가 아니라
문서를 찾아보는 AI다
이 구조만 잡히면,
여러분의 폴더는 곧 지식 에이전트의 뇌가 됩니다.
RAG Agent 실습,AI 에이전트 문서검색,Vector DB 기초,비전공자 RAG 튜토리얼,AI Agent Python,ChromaDB 사용법,AI 문서 기반 답변,LLM RAG 실전,AI Agent 만들기,생성형 AI 실무
'study > ai prompt' 카테고리의 다른 글
| 비전공자를 위한 AI Agent 8편 (0) | 2026.01.06 |
|---|---|
| 2026년 AI 에이전트 기반 블로그 → 1인 SaaS 전환 로드맵 (실행 중심 가이드) (0) | 2026.01.05 |
| 비전공자를 위한 AI Agent 6편 (0) | 2026.01.04 |
| 2026년 AI 에이전트 수익 모델 예측 — 애드센스 이후에 ‘진짜로’ 남는 것들 (0) | 2026.01.04 |
| AI 에이전트 vs Zapier · n8n — 2026년 자동화의 미래는 이렇게 갈 가능성이 높다 (0) | 2026.01.02 |
※ 이 포스팅은 쿠팡 파트너스 활동의 일환으로, 이에 따른 일정액의 수수료를 제공받습니다.
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
링크
TAG
- node.js
- JAX
- 백엔드개발
- JWT
- Next.js
- flax
- 웹개발
- PostgreSQL
- fastapi
- SEO최적화
- Docker
- ai철학
- 개발블로그
- llm
- NestJS
- CI/CD
- Prisma
- Python
- 압박면접
- 쿠버네티스
- kotlin
- Redis
- DevOps
- 프론트엔드개발
- nextJS
- seo 최적화 10개
- rag
- REACT
- 딥러닝
- Express
| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 1 | 2 | 3 | ||||
| 4 | 5 | 6 | 7 | 8 | 9 | 10 |
| 11 | 12 | 13 | 14 | 15 | 16 | 17 |
| 18 | 19 | 20 | 21 | 22 | 23 | 24 |
| 25 | 26 | 27 | 28 | 29 | 30 | 31 |
글 보관함
반응형

