메인 콘텐츠로 건너뛰기
파일 입력을 통해 문서와 소스 파일을 /chat/completions 요청에 직접 첨부할 수 있습니다. Venice는 선택된 모델로 보내기 전에 파일을 텍스트로 추출하므로 직접 파서를 만들지 않고도 파일 콘텐츠에 대해 질문하거나, 요약하거나, 비교하거나, 변환할 수 있습니다. 프롬프트가 문서, 스프레드시트, markdown 파일, JSON 파일 또는 코드 파일의 콘텐츠에 의존할 때 파일 입력을 사용하세요. 이는 요청 범위 입력이며 영구 파일 저장소가 아니므로 필요한 각 요청에 파일을 포함해야 합니다.
파일 입력은 OpenAI 호환 채팅 콘텐츠 배열을 사용합니다. type: "file"이 있는 콘텐츠 블록을 추가하고 file.file_data에 파일 콘텐츠를 제공하세요.

지원되는 파일 유형

채팅 API는 파일 입력을 base64 데이터 URL 또는 공개적으로 접근 가능한 URL로 허용합니다. 최대 파일 크기는 base64 데이터 URL 디코딩 후 또는 URL 가져오기 후 측정된 파일당 25MB입니다.
카테고리형식
문서PDF, DOCX, PPTX
스프레드시트XLSX, XLS, CSV
텍스트와 데이터TXT, Markdown, JSON
소스 코드.py, .js, .ts, .c, .cpp, .java, .go, .rs, .ps1, .sh, .yaml, .sql을 포함한 대부분의 일반적인 코드 파일
파일은 추론 전에 텍스트로 추출됩니다. 추출된 텍스트는 모델의 입력 컨텍스트에 포함되므로 파일과 지침 및 예상 답변에 충분한 availableContextTokens이 있는 모델을 선택하세요.

기본 사용법

사용자 메시지 content가 텍스트와 파일 블록의 배열인 messages 배열을 보냅니다:
import base64
import os
from pathlib import Path

from openai import OpenAI

client = OpenAI(
    api_key=os.environ["VENICE_API_KEY"],
    base_url="https://api.venice.ai/api/v1",
)

path = Path("q3-report.pdf")
file_data = "data:application/pdf;base64," + base64.b64encode(path.read_bytes()).decode("utf-8")

response = client.chat.completions.create(
    model="openai-gpt-55",
    messages=[
        {
            "role": "user",
            "content": [
                {
                    "type": "text",
                    "text": "Summarize this report in five bullets and list the main risks.",
                },
                {
                    "type": "file",
                    "file": {
                        "file_data": file_data,
                        "filename": "q3-report.pdf",
                    },
                },
            ],
        }
    ],
)

print(response.choices[0].message.content)

파일 URL

파일이 이미 공개 HTTP 또는 HTTPS URL에서 호스팅되는 경우 base64 인코딩 대신 file_data에 URL을 전달하세요:
{
  "model": "openai-gpt-55",
  "messages": [
    {
      "role": "user",
      "content": [
        {
          "type": "text",
          "text": "Identify the governing law, renewal terms, and termination rights in this agreement."
        },
        {
          "type": "file",
          "file": {
            "file_data": "https://example.com/contracts/vendor-agreement.pdf",
            "filename": "vendor-agreement.pdf"
          }
        }
      ]
    }
  ]
}
Venice가 인증 없이 가져올 수 있는 공개 URL만 사용하세요. 비공개 파일의 경우 base64 데이터 URL을 보내세요.

여러 파일

동일한 메시지에 둘 이상의 파일 블록을 포함할 수 있습니다. 모델이 사용 방법을 알 수 있도록 파일 앞에 짧은 텍스트 지침을 넣으세요.
{
  "model": "openai-gpt-55",
  "messages": [
    {
      "role": "user",
      "content": [
        {
          "type": "text",
          "text": "Compare these two policy drafts. Return the material differences and recommend which version is clearer."
        },
        {
          "type": "file",
          "file": {
            "file_data": "data:application/pdf;base64,JVBERi0xLjQK...",
            "filename": "policy-v1.pdf"
          }
        },
        {
          "type": "file",
          "file": {
            "file_data": "data:application/pdf;base64,JVBERi0xLjQK...",
            "filename": "policy-v2.pdf"
          }
        }
      ]
    }
  ]
}
최상의 결과를 얻으려면 각 파일에 명확한 이름을 지정하고 프롬프트에서 해당 이름을 참조하세요.

데이터 URL

로컬 파일의 경우 파일 바이트를 base64로 인코딩하고 올바른 MIME 유형을 접두어로 붙입니다:
파일 유형데이터 URL 접두사
PDFdata:application/pdf;base64,
DOCXdata:application/vnd.openxmlformats-officedocument.wordprocessingml.document;base64,
PPTXdata:application/vnd.openxmlformats-officedocument.presentationml.presentation;base64,
XLSXdata:application/vnd.openxmlformats-officedocument.spreadsheetml.sheet;base64,
CSVdata:text/csv;base64,
Markdowndata:text/markdown;base64,
일반 텍스트data:text/plain;base64,
JSONdata:application/json;base64,
정확한 MIME 유형을 모르는 경우 application/octet-stream을 사용하세요. 정확한 filename을 포함하면 Venice가 파일을 식별하고 표시하는 데 여전히 도움이 됩니다.

큰 파일 작업

파일이 프롬프트 텍스트가 되므로 큰 파일은 지연 시간, 토큰 사용량 및 비용을 증가시킬 수 있습니다. 모델의 컨텍스트 윈도우를 염두에 두세요. 원시 파일은 25MB 이하여야 합니다. Base64 인코딩은 요청 크기를 약 33% 증가시키므로 25MB 제한에 가까운 파일은 더 큰 JSON 요청 본문을 생성합니다. 큰 파일에 대한 좋은 패턴:
  • 광범위한 “모든 것을 분석” 프롬프트 대신 특정 작업을 요청하세요.
  • 현재 답변에 필요한 문서만 포함하세요.
  • 긴 보고서나 코드베이스에 더 큰 availableContextTokens이 있는 모델을 사용하세요.
  • 프롬프트 캐싱도 사용하는 경우 동적 사용자 질문 앞에 안정적이고 반복되는 문서를 두세요.
  • 긴 응답이 예상되는 경우 stream: true를 사용하세요.

파일 입력 vs. 텍스트 파서

모델이 파일에 대해 즉시 추론하길 원할 때 채팅 파일 입력을 사용하세요. 먼저 텍스트를 추출하고, 토큰 수를 검사하고, 추출된 텍스트를 자체 시스템에 저장하거나, 동일한 추출된 텍스트를 여러 요청에 보내려면 Text Parser API를 사용하세요.
필요한 작업사용
한 번의 요청으로 모델에 문서에 대해 질문채팅 파일 입력
모델 추론 없이 텍스트 추출Text Parser API
프롬프트 전에 추출된 토큰 수 확인Text Parser API
여러 요청에서 추출된 텍스트 재사용Text Parser API, 그런 다음 프롬프트에 텍스트 포함

모범 사례

  • 가능하면 항상 filename을 포함하세요. 특히 여러 파일을 보낼 때.
  • 모델이 추출된 콘텐츠를 읽기 전에 작업을 알 수 있도록 파일 블록 앞에 지침을 넣으세요.
  • 쿠키, 헤더 또는 서명된 세션 상태 없이 가져올 수 있는 파일에만 공개 URL을 사용하세요.
  • 비공개 파일이나 애플리케이션 내에서 생성된 파일에는 base64 데이터 URL을 선호하세요.
  • 집중된 질문을 하고 원하는 출력 형식을 지정하세요.
  • 구조화된 추출의 경우 파일 입력을 구조화된 응답과 결합하세요.

문제 해결

메시지 콘텐츠가 배열을 사용하고 type: "file" 블록을 포함하는지 확인하세요. URL을 사용한 경우 인증 없이 공개적으로 접근 가능한지 확인하세요.
파일이 많은 양의 텍스트로 추출될 수 있습니다. 더 큰 컨텍스트 모델을 사용하거나, 작업 범위를 좁히거나, 파일을 적게 보내거나, Text Parser API로 텍스트를 미리 추출하고 다듬으세요.
각 파일에 설명적인 filename을 부여하고 프롬프트에서 파일명을 직접 참조하세요. 예를 들어, “policy-v1.pdfpolicy-v2.pdf와 비교”
파일 입력은 호환되는 채팅 모델에서 사용할 수 있습니다. 현재 모델 기능과 컨텍스트 제한은 모델 페이지를 확인하거나 현재의 큰 컨텍스트 텍스트 모델을 시도하세요.