콘텐츠 필터 오류 발생

콘텐츠 필터 오류 발생 (Raise Content Filter Error)

RaiseContentFilterErrorfinish_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 응답으로 확장해서, 부분 텍스트와 거절 텍스트도 오류를 발생시킵니다. 발생할 때는 전체 ModelResponseContentFilterError.body에 직렬화되어 부분 텍스트를 계속 검사할 수 있어요.

더 알아보기 (Learn more)