BDI 정신 상태 모델링
외부 RDF 컨텍스트를 공식 BDI 온톨로지 패턴을 사용하여 에이전트 정신 상태(신념, 욕구, 의도)로 변환합니다. 이 스킬을 통해 에이전트는 인지 아키텍처를 통해 컨텍스트를 추론할 수 있으며, 숙고적 추론, 설명 가능성, 다중 에이전트 시스템 내 의미적 상호 운용성을 지원합니다.
활성화 시기
다음과 같은 경우 이 스킬을 활성화하세요:
- 외부 RDF 컨텍스트를 세계 상태에 대한 에이전트 신념으로 처리할 때
- 지각, 숙고, 행동 주기를 통한 합리적 에이전시를 모델링할 때
- 추적 가능한 추론 체인을 통해 설명 가능성을 활성화할 때
- BDI 프레임워크(SEMAS, JADE, JADEX)를 구현할 때
- 논리 증강 생성을 통해 LLM에 공식 인지 구조를 추가할 때
- 다중 에이전트 플랫폼 간 정신 상태를 조정할 때
- 신념, 욕구, 의도의 시간적 진화를 추적할 때
- 동기 부여 상태를 행동 계획에 연결할 때
다른 스킬이 담당하는 인접 작업에는 이 스킬을 활성화하지 마세요:
- 일반적인 컨텍스트 창 설명 또는 주의 메커니즘:
context-fundamentals. - 공식 BDI 상태가 없는 지속적 사용자, 엔터티 또는 대화 메모리:
memory-systems. - 감독자, 스웜 또는 핸드오프 토폴로지 결정:
multi-agent-patterns. - 일반 에이전트 평가 기준 또는 품질 게이트:
evaluation.
핵심 개념
정신 현실 아키텍처
BDI 추론은 지속되는 것과 발생하는 것을 구분해야 하므로 정신 상태를 두 가지 존재론적 범주로 분리하세요:
정신 상태(지속자) -- 시간 간격에 걸쳐 유지되는 지속적 인지 속성으로 모델링합니다:
Belief: 에이전트가 세계에 대해 참이라고 생각하는 것을 나타냅니다. 모든 신념을 세계 상태 참조에 근거하세요.Desire: 에이전트가 실현하고자 하는 것을 나타냅니다. 각 욕구를 그것을 동기 부여하는 신념에 연결하세요.Intention: 에이전트가 달성하기 위해 헌신하는 것을 나타냅니다. 의도는 욕구를 충족시키고 계획을 명시해야 합니다.
정신 프로세스(지속자) -- 정신 상태를 생성하거나 수정하는 이벤트로 모델링합니다. 인과적 전환을 추적하면 설명 가능성이 향상되기 때문입니다:
BeliefProcess: 지각으로부터 신념 형성/업데이트를 트리거합니다. 항상 생성하는 세계 상태에 연결하세요.DesireProcess: 기존 신념에서 욕구를 생성합니다. 동기 부여 체인을 보존합니다.IntentionProcess: 선택된 욕구를 실행 가능한 의도로 전환합니다.
인지 체인 패턴
양방향 속성(motivates/isMotivatedBy, fulfils/isFulfilledBy)을 사용하여 신념, 욕구, 의도를 지시된 체인으로 연결하세요. 이를 통해 정방향 추론(에이전트는 무엇을 해야 하는가?)과 역방향 추적(에이전트는 왜 행동했는가?)이 모두 가능해집니다:
:Belief_store_open a bdi:Belief ;
rdfs:comment "Store is open" ;
bdi:motivates :Desire_buy_groceries .
:Desire_buy_groceries a bdi:Desire ;
rdfs:comment "I desire to buy groceries" ;
bdi:isMotivatedBy :Belief_store_open .
:Intention_go_shopping a bdi:Intention ;
rdfs:comment "I will buy groceries" ;
bdi:fulfils :Desire_buy_groceries ;
bdi:isSupportedBy :Belief_store_open ;
bdi:specifies :Plan_shopping .
세계 상태 근거
정신 상태를 자유 텍스트 설명이 아닌 세계 상태 참조에 항상 근거하세요. 근거가 없는 신념은 의미적 질의와 에이전트 간 상호 운용성을 저해합니다:
:Agent_A a bdi:Agent ;
bdi:perceives :WorldState_WS1 ;
bdi:hasMentalState :Belief_B1 .
:WorldState_WS1 a bdi:WorldState ;
rdfs:comment "Meeting scheduled at 10am in Room 5" ;
bdi:atTime :TimeInstant_10am .
:Belief_B1 a bdi:Belief ;
bdi:refersTo :WorldState_WS1 .
목표 지향 계획
bdi:specifies를 사용하여 의도를 계획에 연결하고, bdi:precedes를 사용하여 계획을 순서가 있는 작업 시퀀스로 분해하세요. 이렇게 분리하면 실행 순서를 명시적으로 유지하면서 다양한 의도에서 계획을 재사용할 수 있습니다:
:Intention_I1 bdi:specifies :Plan_P1 .
:Plan_P1 a bdi:Plan ;
bdi:addresses :Goal_G1 ;
bdi:beginsWith :Task_T1 ;
bdi:endsWith :Task_T3 .
:Task_T1 bdi:precedes :Task_T2 .
:Task_T2 bdi:precedes :Task_T3 .
T2B2T 패러다임
Triples-to-Beliefs-to-Triples를 양방향 파이프라인으로 구현하세요. 에이전트는 외부 RDF 컨텍스트를 소비하고 새로운 RDF 어설션을 생성해야 하기 때문입니다. 모든 T2B2T 구현을 두 가지 명시적 단계로 구성하세요:
1단계: Triples-to-Beliefs -- 들어오는 RDF 트리플을 신념 인스턴스로 변환합니다. bdi:triggers를 사용하여 외부 세계 상태를 BeliefProcess에 연결하고, bdi:generates를 사용하여 결과 신념을 생성합니다. 이는 소스 데이터에서 내부 인지까지의 출처를 보존합니다:
:WorldState_notification a bdi:WorldState ;
rdfs:comment "Push notification: Payment request $250" ;
bdi:triggers :BeliefProcess_BP1 .
:BeliefProcess_BP1 a bdi:BeliefProcess ;
bdi:generates :Belief_payment_request .
2단계: Beliefs-to-Triples -- BDI 숙고가 의도를 선택하고 계획을 실행한 후, bdi:bringsAbout을 사용하여 결과를 RDF로 다시 투영합니다. 이는 루프를 닫아 다운스트림 시스템이 에이전트 출력을 표준 연결 데이터로 소비할 수 있게 합니다:
:Intention_pay a bdi:Intention ;
bdi:specifies :Plan_payment .
:PlanExecution_PE1 a bdi:PlanExecution ;
bdi:satisfies :Plan_payment ;
bdi:bringsAbout :WorldState_payment_complete .
수준별 표기법 선택
모델링 중인 C4 추상화 수준에 따라 표기법을 선택하세요. 잘못된 수준에서 표기법을 혼합하면 인지 아키텍처를 명확하게 하기보다 모호하게 만듭니다:
| C4 수준 | 표기법 | 정신 상태 표현 |
|---|---|---|
| L1 컨텍스트 | ArchiMate | 에이전트 경계, 외부 지각 소스 |
| L2 컨테이너 | ArchiMate | BDI 추론 엔진, 신념 저장소, 계획 실행기 |
| L3 컴포넌트 | UML | 정신 상태 관리자, 프로세스 핸들러 |
| L4 코드 | UML/RDF | 신념/욕구/의도 클래스, 온톨로지 인스턴스 |
정당화 및 설명 가능성
모든 정신 엔터티에 bdi:isJustifiedBy를 사용하여 bdi:Justification 인스턴스를 연결하세요. 정당화되지 않은 정신 상태는 에이전트 추론을 불투명하고 추적 불가능하게 만들기 때문입니다. 각 정당화는 정신 상태를 생성한 증거나 규칙을 캡처해야 합니다:
:Belief_B1 a bdi:Belief ;
bdi:isJustifiedBy :Justification_J1 .
:Justification_J1 a bdi:Justification ;
rdfs:comment "Official announcement received via email" .
:Intention_I1 a bdi:Intention ;
bdi:isJustifiedBy :Justification_J2 .
:Justification_J2 a bdi:Justification ;
rdfs:comment "Location precondition satisfied" .
시간적 차원
TimeInterval 인스턴스와 함께 bdi:hasValidity를 사용하여 모든 정신 상태에 유효성 간격을 할당하세요. 시간 범위가 없는 신념은 통시적 추론 중에 가비지 수집되거나 충돌 검사될 수 없기 때문입니다:
:Belief_B1 a bdi:Belief ;
bdi:hasValidity :TimeInterval_TI1 .
:TimeInterval_TI1 a bdi:TimeInterval ;
bdi:hasStartTime :TimeInstant_9am ;
bdi:hasEndTime :TimeInstant_11am .
SPARQL 시간 필터를 사용하여 특정 순간에 활성화된 정신 상태를 질의하세요. 동일한 세계 상태에 대한 여러 신념이 시간적으로 겹칠 때 충돌을 해결하려면 이 패턴을 사용하세요:
SELECT ?mentalState WHERE {
?mentalState bdi:hasValidity ?interval .
?interval bdi:hasStartTime ?start ;
bdi:hasEndTime ?end .
FILTER(?start <= "2025-01-04T10:00:00"^^xsd:dateTime &&
?end >= "2025-01-04T10:00:00"^^xsd:dateTime)
}
구성적 정신 엔터티
bdi:hasPart 관계를 사용하여 복잡한 신념을 구성 부분으로 분해하세요. 모놀리식 신념은 부분 업데이트 시 전체 교체를 강제하기 때문입니다. 각 하위 신념이 독립적으로 업데이트, 질의 또는 무효화될 수 있도록 구성적 신념을 구조화하세요:
:Belief_meeting a bdi:Belief ;
rdfs:comment "Meeting at 10am in Room 5" ;
bdi:hasPart :Belief_meeting_time , :Belief_meeting_location .
# 시간을 건드리지 않고 위치 구성 요소만 업데이트
:BeliefProcess_update a bdi:BeliefProcess ;
bdi:modifies :Belief_meeting_location .
실용적 안내
여섯 단계로 BDI 모델 구축
외부 의미 컨텍스트를 BDI 표현으로 변환할 때 이 워크플로우를 사용하세요:
- 세계 상태 기반 정의: 에이전트가 지각할 수 있는 외부 사실이나 이벤트를 식별합니다. 신념을 만들기 전에 이를 세계 상태로 모델링하세요.
- 신념 인스턴스 생성: 각 관련 세계 상태를 출처, 시간적 유효성 및 정당화 참조와 함께 신념으로 변환합니다.
- 신념에서 욕구 도출: 신념이 목표 관련 동기를 생성할 때만 욕구를 추가합니다. 각 욕구를 동기를 부여하는 신념에 연결하세요.
- 의도적으로 의도 전환: 에이전트가 계획에 헌신할 때만 욕구를 의도로 승격시킵니다. 선택된 계획과 사전 조건을 기록하세요.
- 행동 결과를 트리플로 다시 투영: 실행 후, 결과 세계 상태를 RDF로 내보내 다운스트림 시스템이 새 상태를 소비할 수 있게 합니다.
- 역량 질문으로 검증: 모델을 신뢰하기 전에 출처, 동기, 계획 순서 및 활성 유효성 창을 질의하세요.
온톨로지를 작게 유지
Agent, WorldState, Belief, Desire, Intention, Plan, Task, Justification 및 TimeInterval로 시작하세요. 역량 질문이 핵심 모델이 필요한 질문에 답할 수 없음을 증명한 후에만 특수 클래스를 추가하세요. 간결한 온톨로지는 프롬프트로 직렬화하기 쉽고, 검증하기 쉬우며, 취약한 추론 체인을 만들 가능성이 적습니다.
정신 상태 의미가 중요할 때만 BDI 사용
BDI 모델링은 시스템이 설명 가능한 에이전시(에이전트가 무언가를 믿은 이유, 그 신념이 만든 욕구, 선택된 의도, 실행된 계획)가 필요할 때 정당화됩니다. 시스템이 세션 간에 사실을 기억하기만 하면 되는 경우 memory-systems를 사용하세요. 작업을 에이전트 간에 분할하기만 하면 되는 경우 multi-agent-patterns를 사용하세요.
상세 주제
통합 패턴
논리 증강 생성(LAG)
LAG를 사용하여 온톨로지 구조로 LLM 출력을 제약하세요. 제약되지 않은 생성은 BDI 클래스 제한을 위반하는 트리플을 생성하기 때문입니다. 온톨로지를 프롬프트 컨텍스트로 직렬화한 다음, 생성된 트리플을 수락하기 전에 검증하세요:
def augment_llm_with_bdi_ontology(prompt, ontology_graph):
ontology_context = serialize_ontology(ontology_graph, format='turtle')
augmented_prompt = f"{ontology_context}\n\n{prompt}"
response = llm.generate(augmented_prompt)
triples = extract_rdf_triples(response)
is_consistent = validate_triples(triples, ontology_graph)
return triples if is_consistent else retry_with_feedback()
SEMAS 규칙 변환
규칙 기반 에이전트 플랫폼에 배포할 때 BDI 온톨로지 패턴을 실행 가능한 프로덕션 규칙으로 변환하세요. 각 인지 체인 링크(신념-욕구, 욕구-의도)를 HEAD/CONDITIONALS/TAIL 규칙에 매핑하세요. 이는 숙고적 의미를 보존하면서 런타임 실행을 가능하게 합니다:
% 신념이 욕구 형성을 트리거함
[HEAD: belief(agent_a, store_open)] /
[CONDITIONALS: time(weekday_afternoon)] »
[TAIL: generate_desire(agent_a, buy_groceries)].
% 욕구가 의도 전환을 트리거함
[HEAD: desire(agent_a, buy_groceries)] /
[CONDITIONALS: belief(agent_a, has_shopping_list)] »
[TAIL: commit_intention(agent_a, buy_groceries)].
지침
-
세계 상태를 에이전트 관점과 무관한 구성으로 모델링하여 정신 상태를 위한 참조 기반을 제공하세요.
-
지속자(지속적 정신 상태)와 지속자(시간적 정신 프로세스)를 구분하고, DOLCE 온톨로지와 정렬하세요.
-
목표를 정신 상태가 아닌 설명으로 취급하여 인지 계층과 계획 계층을 분리하세요.
-
hasPart관계를 사용하여 선택적 신념 업데이트를 가능하게 하는 부분-전체 구조를 만드세요. -
atTime또는hasValidity를 통해 모든 정신 엔터티를 시간적 구조와 연결하세요. -
유연한 질의를 위해 양방향 속성 쌍(
motivates/isMotivatedBy,generates/isGeneratedBy)을 사용하세요. -
설명 가능성과 신뢰를 위해 정신 엔터티를
Justification인스턴스에 연결하세요. -
T2B2T를 다음과 같이 구현하세요: (1) RDF를 신념으로 변환, (2) BDI 추론 실행, (3) 정신 상태를 RDF로 다시 투영.
-
정신 프로세스에 대한 존재 제한을 정의하세요(예:
BeliefProcess ⊑ ∃generates.Belief). -
상호 운용성을 위해 기존 ODP(EventCore, Situation, TimeIndexedSituation, BasicPlan, Provenance)를 재사용하세요.
역량 질문
다음 SPARQL 질의에 대해 구현을 검증하세요:
# CQ1: 주어진 욕구의 형성을 동기 부여한 신념은 무엇인가?
SELECT ?belief WHERE {
:Desire_D1 bdi:isMotivatedBy ?belief .
}
# CQ2: 특정 의도는 어떤 욕구를 충족시키는가?
SELECT ?desire WHERE {
:Intention_I1 bdi:fulfils ?desire .
}
# CQ3: 어떤 정신 프로세스가 신념을 생성했는가?
SELECT ?process WHERE {
?process bdi:generates :Belief_B1 .
}
# CQ4: 계획 내 작업의 순서 있는 시퀀스는 무엇인가?
SELECT ?task ?nextTask WHERE {
:Plan_P1 bdi:hasComponent ?task .
OPTIONAL { ?task bdi:precedes ?nextTask }
} ORDER BY ?task
예시
예시 1: RDF 알림에서 BDI 체인으로
입력 세계 상태:
:WorldState_invoice_due a bdi:WorldState ;
rdfs:comment "Invoice INV-42 is due tomorrow" ;
bdi:atTime :Time_2026_05_15 .
BDI 투영:
:Belief_invoice_due a bdi:Belief ;
bdi:refersTo :WorldState_invoice_due ;
bdi:isJustifiedBy :Justification_billing_system ;
bdi:motivates :Desire_avoid_late_fee .
:Desire_avoid_late_fee a bdi:Desire ;
bdi:isMotivatedBy :Belief_invoice_due .
:Intention_pay_invoice a bdi:Intention ;
bdi:fulfils :Desire_avoid_late_fee ;
bdi:specifies :Plan_pay_invoice .
예시 2: 경계 결정
작업이 "Alice가 간결한 요약을 선호한다는 것을 기억하는 것"이라면 memory-systems를 사용하세요. 작업이 "Alice가 간결한 요약을 선호하는 이유를 나타내고, 그 선호도가 생성된 욕구, 선택된 의도 및 실행된 계획을 추적하는 것"이라면 이 BDI 스킬을 사용하세요.