Phase 3 · 시각화 및 대시보드 제작

회계사가 지시하면 AI가 파이썬을 조종한다

"ABC상사의 3월 거래를 검토해서 미수금을 알려줘."
이 한 마디에 AI가 장부를 찾고, 입금내역 함수를 꺼내 실행하고, 차액을 계산하여 스스로 보고서를 작성하는 "자율형 업무 에이전트(Agent)"를 구축해 봅니다.

예상 학습 시간 : 150분
난이도 : ★★★★★
사전 단계 : 다중 데이터 소스 융합 분석 (Step 20)
다음 단계 : 멀티에이전트 시스템 (예정)
01

일반 ChatGPT 방식과의 차이점

보통 ChatGPT에게 "ABC상사의 미수금 현황을 알려줘" 라고 물으면 "저는 그런 정보가 없습니다." 라고 답합니다. 데이터를 제공받지 못했기 때문이죠.

하지만 에이전트(Agent)는 다릅니다. 에이전트는 목표를 달성하기 위해 무기를 꺼내 쓸 줄 아는 AI입니다.

사용자 지시
"ABC상사의 미수금 현황을 알려줘."
AI의 의도 파악 및 도구(Tool) 선택
"아, 미수금을 구하려면 거래장부와 입금내역을 조회하는 함수가 필요하겠군."
파이썬 함수(Function) 자율 실행
1. `search_customer("ABC상사")`
2. `get_transactions(C000001)`
3. `calculate_receivable()`
최종 자연어 답변
"파이썬 실행 결과, ABC상사에는 현재 3,500만원의 미수금이 존재합니다."
02

도구(Tool) 정의하기

AI가 사용할 수 있도록 파이썬 함수를 리스트에 등록해야 합니다. 18~20단계에서 만든 기능들이 모두 훌륭한 '도구'가 됩니다.

# 도구 1: 거래처 ID 검색기
def search_customer(name):
    result = customers[customers["거래처"].str.contains(name, na=False)]
    return result

# 도구 2: 특정 거래처의 장부 조회기
def get_transactions(customer_id, start_date, end_date):
    return transactions[ (transactions["거래처ID"] == customer_id) & ... ]

# AI에게 전달할 도구 명세서 (Registry)
TOOLS = {
    "search_customer": search_customer,
    "get_transactions": get_transactions
}
03

Function Calling의 원리

AI에게 "이런 이런 도구(함수)들이 있어. 이 질문에 답하려면 어떤 도구에 어떤 변수를 넣어서 돌려야 하는지 나한테 알려줘." 라고 물어보는 기술이 바로 Function Calling입니다.

분업의 마술

AI는 "함수를 직접 실행"할 수 없습니다. 단순히 "지금은 search_customer 함수를 ABC상사라는 인자를 넣어서 실행하세요!" 라는 실행 지시서(JSON)만 내려줍니다.
그 지시서를 받아서 실제로 코드를 돌리는 것은 우리 컴퓨터의 Python입니다.

04

Agent의 작업 계획 (Planning)

질문이 복잡해지면 AI는 여러 도구를 엮어서 사용하기 위한 플랜을 세웁니다.

[목표] "ABC상사의 3월 미수금 거래 찾기"

[계획]
1. search_customer 도구를 써서 ABC상사의 ID(C001)를 확보한다.
2. get_transactions 도구를 써서 C001의 3월 장부 금액을 추출한다.
3. get_payments 도구를 써서 C001의 3월 입금 내역을 추출한다.
4. calculate_receivable 도구를 써서 두 금액의 차액을 구한다.
5. 추출된 차액 정보를 바탕으로 사용자에게 자연어로 보고한다.
05

상태(State) 보존과 실행 로그(Log)

위 계획을 수행하려면 1번 작업에서 알아낸 C001이라는 ID를 2번과 3번 작업이 기억하고 있어야 합니다. 이를 위해 Agent에 상태(State) 딕셔너리를 만들어 줍니다.

state = {
    "customer_id": "C000001",
    "transactions": [],
    "payments": []
}

또한, 회계감사에서는 "AI가 도대체 무슨 데이터를 근거로 이런 답을 냈는가?"를 추적하는 것이 생명이므로, 도구를 쓸 때마다 실행 로그(Execution Log)를 남겨야 합니다.

06

최종: AI 회계 비서(Agent) 루프 구축

이제 AI가 스스로 고민하고, 파이썬 도구를 꺼내 쓰고, 결과를 확인하여 답변을 생성하는 무한 루프 뼈대를 완성합니다.

Agent Core Loop
자율형 에이전트 실행 루프 구현
def run_agent(user_request):
    state = {"history": []}
    
    while True:
        # 1. AI에게 무엇을 해야 할지 판단시킴 (Function Calling API)
        decision = ask_ai_what_to_do(user_request, state)
        
        # 2. 작업이 끝났다고 판단하면 결과 반환
        if decision["action"] == "finish":
            return decision["final_answer"]
            
        # 3. 사용할 Tool 꺼내기
        tool_name = decision["tool_name"]
        tool_args = decision["arguments"]
        target_tool = TOOLS[tool_name]
        
        # 4. 파이썬이 실제로 코드 실행 (도구 사용)
        print(f"🤖 [Agent Log] {tool_name} 도구 실행 중...")
        tool_result = target_tool(**tool_args)
        
        # 5. 결과를 상태에 저장하고, 다시 루프를 돌아 AI에게 보고함
        state["history"].append({
            "tool": tool_name,
            "result": tool_result
        })
권한 통제 (Human-in-the-loop)

처음부터 에이전트에게 DB 삭제국세청 세무신고 전송 같은 도구를 주면 대참사가 일어납니다. 조회용 Tool로 시작하여, 중대한 결정 전에는 "사용자님, 진짜로 실행할까요?" 하고 멈춰서서 Y/N을 묻는 프로세스를 반드시 넣어야 합니다.