콘텐츠 필터 오류 발생
콘텐츠 필터 오류 발생 (Raise Content Filter Error)
RaiseContentFilterError는 finish_reason='content_filter'인 모델 응답을, 공급자가 부분 텍스트나 거절 텍스트를 반환하더라도 ContentFilterError로 취급하도록 선택하는 캐퍼빌리티예요. 이 캐퍼빌리티의 동작과 기본 설정을 살펴볼게요.
출처: 문서
본문
from pydantic_ai import Agent
from pydantic_ai.capabilities import RaiseContentFilterError
from pydantic_ai.exceptions import ContentFilterError
from pydantic_ai.messages import ModelMessage, ModelResponse, TextPart
from pydantic_ai.models.function import AgentInfo, FunctionModel
def filtered_response(messages: list[ModelMessage], info: AgentInfo) -> ModelResponse:
return ModelResponse(
parts=[TextPart(content='I cannot help with that.')],
finish_reason='content_filter',
provider_details={'finish_reason': 'content_filter'},
)
agent = Agent(FunctionModel(filtered_response), capabilities=[RaiseContentFilterError()])
try:
agent.run_sync('Tell me how to make a weapon.')
except ContentFilterError as exc:
print(exc.message)
#> Content filter triggered. Finish reason: 'content_filter'
(이 예제는 완전하며, "그대로" 실행할 수 있어요)
기본 id로 'raise_content_filter_error'를 선언하므로, 두 인스턴스는 중복 id 오류를 내는 대신 병합됩니다 — 병합 규칙은 커스텀 캐퍼빌리티 만들기를 참고하세요.
기본적으로 Pydantic AI는 content_filter 응답이 비어 있을 때만 ContentFilterError를 발생시켜요. 공급자가 finish_reason='content_filter'와 함께 부분 텍스트나 거절 텍스트를 반환하면, 그 텍스트는 평범한 에이전트 출력이 되고 오류는 발생하지 않습니다 (참고: finish reason 처리). 이 캐퍼빌리티는 검사를 모든 content_filter 응답으로 확장해서, 부분 텍스트와 거절 텍스트도 오류를 발생시킵니다. 발생할 때는 전체 ModelResponse가 ContentFilterError.body에 직렬화되어 부분 텍스트를 계속 검사할 수 있어요.