بنقرة واحدة
rag-agent
새 RAG 에이전트 클래스를 생성합니다. BaseAgent를 상속하고 벡터 컬렉션을 연결합니다.
التثبيت باستخدام Codex أو Claude انسخ هذا Prompt والصقه في Codex أو Claude أو مساعد آخر ليراجع صفحة Skill ويثبّتها لك.
القائمة
새 RAG 에이전트 클래스를 생성합니다. BaseAgent를 상속하고 벡터 컬렉션을 연결합니다.
التثبيت باستخدام Codex أو Claude انسخ هذا Prompt والصقه في Codex أو Claude أو مساعد آخر ليراجع صفحة Skill ويثبّتها لك.
استنادا إلى تصنيف SOC المهني
SQLAlchemy 2.0 쿼리, FastAPI 라우터/서비스 분리, Zustand 스토어, LangChain 에이전트 구현 패턴을 안내합니다. 백엔드 API 코드, 프론트엔드 상태관리, RAG 에이전트 작성 시 사용합니다.
pytest/Vitest 파일 구조, 커버리지 목표(75%+), fixture 패턴, RAGAS 평가 테스트를 안내합니다. 테스트 작성, 테스트 구조 설계, 커버리지 개선 시 사용합니다.
계획 파일을 읽고 즉시 코드를 구현합니다. 계획 모드 없이 파일별로 변경사항을 적용합니다.
FastAPI 엔드포인트 보일러플레이트를 생성합니다. 라우터, 서비스, 스키마를 포함합니다.
Python 모듈의 pytest 테스트 스위트를 생성합니다. TDD 패턴을 따르는 테스트 코드를 작성합니다.
React 컴포넌트와 테스트 코드를 생성합니다. TypeScript, TailwindCSS, Vitest를 사용합니다.
| name | rag-agent |
| description | 새 RAG 에이전트 클래스를 생성합니다. BaseAgent를 상속하고 벡터 컬렉션을 연결합니다. |
새로운 RAG 도메인 에이전트를 생성하는 스킬입니다.
스킬 실행 시 다음 정보를 제공받아야 합니다:
rag/
├── agents/
│ └── {name}_agent.py # 에이전트 클래스
├── prompts/
│ └── {name}_prompt.py # 프롬프트 템플릿
└── tests/
└── unit/
└── test_{name}_agent.py # 테스트 코드
AskUserQuestion으로 필요한 정보 수집:
# rag/agents/{name}_agent.py
from typing import Any
from langchain_core.messages import HumanMessage
from agents.base import BaseAgent
from prompts.{name}_prompt import {NAME}_PROMPT
class {Name}Agent(BaseAgent):
"""{도메인} 전문 상담 에이전트"""
def __init__(self):
super().__init__(
name="{name}",
description="{도메인 설명}",
collection_name="{컬렉션명}"
)
def can_handle(self, query: str) -> bool:
"""질문 처리 가능 여부 판단"""
keywords = {키워드 목록}
query_lower = query.lower()
return any(kw in query_lower for kw in keywords)
async def process(self, query: str, context: dict[str, Any]) -> str:
"""질문 처리 및 답변 생성"""
# 벡터 검색
docs = await self.retrieve(query, k=5)
# 프롬프트 구성
formatted_context = self.format_documents(docs)
prompt = {NAME}_PROMPT.format(
context=formatted_context,
query=query
)
# LLM 호출
response = await self.llm.ainvoke(prompt)
return response.content
def format_documents(self, docs: list) -> str:
"""검색된 문서 포맷팅"""
return "\n\n---\n\n".join([
f"[출처: {doc.metadata.get('source', 'unknown')}]\n{doc.page_content}"
for doc in docs
])
# rag/prompts/{name}_prompt.py
from langchain_core.prompts import ChatPromptTemplate
{NAME}_PROMPT = ChatPromptTemplate.from_messages([
("system", """당신은 Bizi의 {도메인} 전문 상담사입니다.
## 역할
- {도메인} 관련 질문에 정확하고 실용적인 답변 제공
- 최신 법률/제도 정보 반영
- 기업 상황에 맞는 맞춤형 조언
## 답변 원칙
1. 정확한 정보 제공 (출처 명시)
2. 실용적인 조언 포함
3. 주의사항 안내
4. 추가 질문 유도
## 참고 자료
{context}
"""),
("human", "{query}")
])
# rag/tests/unit/test_{name}_agent.py
import pytest
from unittest.mock import Mock, AsyncMock, patch
from agents.{name}_agent import {Name}Agent
class Test{Name}Agent:
"""Test{Name}Agent 단위 테스트"""
@pytest.fixture
def agent(self):
return {Name}Agent()
def test_can_handle_relevant_question(self, agent):
"""관련 질문 처리 가능"""
question = "{관련 샘플 질문}"
result = agent.can_handle(question)
assert result is True
def test_cannot_handle_irrelevant_question(self, agent):
"""관련 없는 질문 처리 불가"""
question = "완전히 다른 주제의 질문"
result = agent.can_handle(question)
assert result is False
@pytest.mark.asyncio
@patch.object({Name}Agent, 'retrieve')
@patch.object({Name}Agent, 'llm')
async def test_process_returns_response(
self, mock_llm, mock_retrieve, agent
):
"""질문 처리 후 응답 반환"""
# Arrange
mock_retrieve.return_value = [
Mock(page_content="테스트 내용", metadata={"source": "test"})
]
mock_llm.ainvoke = AsyncMock(
return_value=Mock(content="테스트 응답")
)
# Act
result = await agent.process("테스트 질문", {})
# Assert
assert result == "테스트 응답"
mock_retrieve.assert_called_once()
rag/agents/router_agent.py에 새 에이전트 등록:
from agents.{name}_agent import {Name}Agent
class RouterAgent:
def __init__(self):
self.agents = [
# ... 기존 에이전트들
{Name}Agent(), # 새 에이전트 추가
]
pytest rag/tests/unit/test_{name}_agent.py)