Claude
Add complete Financial RAG system with Metacognitive Agent
f6b05db unverified
"""
API ์š”์ฒญ/์‘๋‹ต ๋ชจ๋ธ ์ •์˜ (Pydantic)
"""
from pydantic import BaseModel, Field
from typing import List, Dict, Optional, Any
class QueryRequest(BaseModel):
"""์งˆ๋ฌธ ์š”์ฒญ ๋ชจ๋ธ"""
question: str = Field(..., description="์‚ฌ์šฉ์ž ์งˆ๋ฌธ")
top_k: int = Field(default=5, ge=1, le=20, description="๊ฒ€์ƒ‰ํ•  ๋ฌธ์„œ ๊ฐœ์ˆ˜")
enable_metacognition: bool = Field(default=True, description="๋ฉ”ํƒ€์ธ์ง€ ๊ณผ์ • ํ™œ์„ฑํ™” ์—ฌ๋ถ€")
filter_metadata: Optional[Dict[str, str]] = Field(default=None, description="๋ฉ”ํƒ€๋ฐ์ดํ„ฐ ํ•„ํ„ฐ")
class Config:
json_schema_extra = {
"example": {
"question": "๊ธˆ์œต์œ„๊ธฐ์˜ ์ฃผ์š” ์›์ธ์€ ๋ฌด์—‡์ธ๊ฐ€์š”?",
"top_k": 5,
"enable_metacognition": True
}
}
class SourceDocument(BaseModel):
"""์ถœ์ฒ˜ ๋ฌธ์„œ ๋ชจ๋ธ"""
text: str = Field(..., description="๋ฌธ์„œ ํ…์ŠคํŠธ")
source_filename: str = Field(..., description="์ถœ์ฒ˜ ํŒŒ์ผ๋ช…")
similarity: float = Field(..., description="์œ ์‚ฌ๋„ ์ ์ˆ˜")
metadata: Dict[str, Any] = Field(default_factory=dict, description="๋ฌธ์„œ ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ")
class MetaCognitionInfo(BaseModel):
"""๋ฉ”ํƒ€์ธ์ง€ ์ •๋ณด ๋ชจ๋ธ"""
thinking_history: List[Dict[str, Any]] = Field(..., description="์‚ฌ๊ณ  ๊ณผ์ • ํžˆ์Šคํ† ๋ฆฌ")
iterations: int = Field(..., description="๊ฐœ์„  ๋ฐ˜๋ณต ํšŸ์ˆ˜")
class SearchStats(BaseModel):
"""๊ฒ€์ƒ‰ ํ†ต๊ณ„ ๋ชจ๋ธ"""
documents_found: int = Field(..., description="๋ฐœ๊ฒฌ๋œ ๋ฌธ์„œ ์ˆ˜")
top_similarity: float = Field(..., description="์ตœ๊ณ  ์œ ์‚ฌ๋„ ์ ์ˆ˜")
class QueryResponse(BaseModel):
"""์งˆ๋ฌธ ์‘๋‹ต ๋ชจ๋ธ"""
question: str = Field(..., description="์›๋ณธ ์งˆ๋ฌธ")
answer: str = Field(..., description="์ƒ์„ฑ๋œ ๋‹ต๋ณ€")
sources: List[SourceDocument] = Field(..., description="์ฐธ๊ณ ํ•œ ์ถœ์ฒ˜ ๋ฌธ์„œ๋“ค")
metacognition: Optional[MetaCognitionInfo] = Field(default=None, description="๋ฉ”ํƒ€์ธ์ง€ ์ •๋ณด")
search_stats: SearchStats = Field(..., description="๊ฒ€์ƒ‰ ํ†ต๊ณ„")
class Config:
json_schema_extra = {
"example": {
"question": "๊ธˆ์œต์œ„๊ธฐ์˜ ์ฃผ์š” ์›์ธ์€ ๋ฌด์—‡์ธ๊ฐ€์š”?",
"answer": "2008๋…„ ๊ธˆ์œต์œ„๊ธฐ์˜ ์ฃผ์š” ์›์ธ์€...",
"sources": [
{
"text": "๋…ผ๋ฌธ ๋‚ด์šฉ...",
"source_filename": "financial_crisis_2008.pdf",
"similarity": 0.89,
"metadata": {"author": "John Doe"}
}
],
"search_stats": {
"documents_found": 5,
"top_similarity": 0.89
}
}
}
class HealthResponse(BaseModel):
"""ํ—ฌ์Šค ์ฒดํฌ ์‘๋‹ต"""
status: str = Field(..., description="์„œ๋ฒ„ ์ƒํƒœ")
vector_store: Dict[str, Any] = Field(..., description="๋ฒกํ„ฐ ์Šคํ† ์–ด ์ •๋ณด")
embedding_model: Dict[str, Any] = Field(..., description="์ž„๋ฒ ๋”ฉ ๋ชจ๋ธ ์ •๋ณด")
class ErrorResponse(BaseModel):
"""์—๋Ÿฌ ์‘๋‹ต"""
error: str = Field(..., description="์—๋Ÿฌ ๋ฉ”์‹œ์ง€")
detail: Optional[str] = Field(default=None, description="์ƒ์„ธ ์ •๋ณด")