AI Prompt Engineering · Lekcja

Wizualne odpowiadanie na pytania

Zadawaj konkretne pytania dotyczące treści obrazów, liczebności i atrybutów.

Lekcja 2 z 413 kroki

Wizualne odpowiadanie na pytania to bezpłatna lekcja AI Prompt Engineering na CoddyKit. To lekcja 2 z 4. Możesz przeczytać całą lekcję poniżej za darmo — a potem ćwiczyć ją interaktywnie w przeglądarce z wbudowanym edytorem kodu i tutorem AI dostępnym 24/7. To część ścieżki edukacyjnej AI Prompt Engineering, a Twój postęp synchronizuje się między webem a aplikacją CoddyKit. Kurs AI Prompt Engineering zawiera 4 lekcji w sumie.

Wizualne odpowiadanie na pytania

Wizualne odpowiadanie na pytania (VQA) polega na udzielaniu odpowiedzi na pytania w języku naturalnym dotyczące obrazu. W przeciwieństwie do opisu obrazu (który opisuje wszystko) VQA skupia model na udzieleniu odpowiedzi na konkretne pytanie.

Prompty VQA są precyzyjne i bezpośrednie; często wymagają liczenia, identyfikowania, porównywania lub wnioskowania na podstawie treści wizualnych. Jakość promptu decyduje o tym, czy uzyskają Państwo precyzyjną, użyteczną odpowiedź, czy ogólną i niejasną odpowiedź.

Podstawowa struktura promptu VQA

Prompt VQA łączy obraz z konkretnym pytaniem. Kluczowe jest sformułowanie pytania na tyle precyzyjnie, aby uzyskać bezpośrednią i użyteczną odpowiedź:

import anthropic, base64

client = anthropic.Anthropic(api_key='YOUR_API_KEY')

def ask_about_image(image_path, question, answer_format='Direct answer. No extra explanation.'):
    with open(image_path, 'rb') as f:
        img_b64 = base64.standard_b64encode(f.read()).decode('utf-8')

    prompt = f'{question}\n\n{answer_format}'

    r = client.messages.create(
        model='claude-opus-4-5', max_tokens=150,
        messages=[{'role': 'user', 'content': [
            {'type': 'image', 'source': {'type': 'base64', 'media_type': 'image/jpeg', 'data': img_b64}},
            {'type': 'text', 'text': prompt}
        ]}]
    )
    return r.content[0].text

# Example VQA calls (replace image.jpg with actual image)
print('VQA function defined. Ready for image questions.')

Pytania wymagające liczenia

Liczenie jest częstym zadaniem VQA. Precyzyjne prompty dotyczące liczenia dają dokładniejsze wyniki niż prompty ogólne:

# Vague (bad):
vague_prompt = 'How many people are there?'

# Precise (good): specifies what counts and what does not
counting_prompt = '''
How many people are visible in this image?
Count only: people whose faces OR bodies are at least 50% visible.
Do NOT count: people who are heavily cropped, cut off at the edge, or only partially visible.
Return a single number.
'''

# Even more precise: handles partial visibility explicitly
precise_count = '''
Count the number of distinct individuals visible in this image.
If a person is partially obscured, count them if more than half their body is visible.
Return JSON: {"count": integer, "partially_visible": integer, "notes": "string or null"}
'''

print('Counting prompts: vague vs precise.')
print('Precise prompts define edge cases explicitly.')

Identyfikowanie marek i logo

Identyfikowanie logo marek na obrazach jest częstym zadaniem w analizie produktów. Prompt musi określać, czego szukać i w jakim formacie zwrócić wynik:

logo_prompt = '''
Identify all visible brand logos, company names, and product labels in this image.

For each, note:
- Brand/company name
- Where it appears in the image (top-left, center, on a product, etc.)
- Confidence: high (clearly legible) | medium (partially visible) | low (partially obscured)

Return JSON: {"brands": [{"name": str, "location": str, "confidence": str}]}
If no logos are visible, return: {"brands": []}
'''

import anthropic, base64, json
client = anthropic.Anthropic(api_key='YOUR_API_KEY')

def identify_brands(image_path):
    with open(image_path, 'rb') as f:
        img_b64 = base64.standard_b64encode(f.read()).decode('utf-8')
    r = client.messages.create(
        model='claude-opus-4-5', max_tokens=200,
        messages=[{'role': 'user', 'content': [
            {'type': 'image', 'source': {'type': 'base64', 'media_type': 'image/jpeg', 'data': img_b64}},
            {'type': 'text', 'text': logo_prompt}
        ]}]
    )
    return json.loads(r.content[0].text)

print('Brand identification function defined.')

Rozpoznawanie emocji i wyrazu twarzy

Identyfikowanie wyrazu emocjonalnego na obrazach wymaga starannego zaprojektowania promptu, który uwzględnia niepewność:

emotion_prompt = '''
Describe the emotional expression of the person in this image.

Assess:
- Primary emotion: (happy, sad, angry, surprised, fearful, disgusted, neutral, or other)
- Intensity: (low, moderate, high)
- Confidence: (high if expression is clear, medium if subtle, low if face is obscured or turned away)
- Evidence: which specific facial features support your assessment

Return JSON:
{
  "primary_emotion": str,
  "intensity": str,
  "confidence": str,
  "evidence": str,
  "secondary_emotion": str or null
}

If no person or face is clearly visible, return: {"primary_emotion": null, "confidence": "none", "reason": str}
'''

print(emotion_prompt)

Pytania o relacje przestrzenne

Pytania o położenie obiektów względem siebie wymagają użycia w prompcie jednoznacznego słownictwa przestrzennego:

spatial_prompt = '''
Answer questions about the spatial relationships of objects in this image.
Use these spatial terms consistently:
- Position in frame: top-left, top-center, top-right, middle-left, center, middle-right, bottom-left, bottom-center, bottom-right
- Relative position: in front of, behind, to the left of, to the right of, above, below, overlapping
- Distance: in the foreground, in the midground, in the background

Question: {question}

Answer in one or two sentences using the spatial vocabulary above.
'''

# Example questions:
questions = [
    'Where is the red cup relative to the laptop?',
    'Is the plant in the foreground or background?',
    'What object is to the left of the person?'
]

for q in questions:
    print(spatial_prompt.replace('{question}', q)[:200])
    print('---')

Ocena jakości i stanu

Ocena jakości lub stanu obiektów na obrazach — przydatna podczas kontroli produktów, oceny nieruchomości i kontroli jakości:

condition_prompt = '''
Assess the condition of the main subject in this image.

Rate on these dimensions (1-5 scale, 5=excellent):
- Physical condition: (1=heavily damaged, 5=like new)
- Cleanliness: (1=very dirty, 5=spotless)
- Completeness: (1=major parts missing, 5=fully intact)

For each rating, provide one-sentence evidence.

Return JSON:
{
  "physical_condition": {"score": int, "evidence": str},
  "cleanliness": {"score": int, "evidence": str},
  "completeness": {"score": int, "evidence": str},
  "overall_grade": "excellent|good|fair|poor",
  "recommendation": str
}
'''

print('Condition assessment prompt defined.')
print('Useful for: product inspection, real estate, equipment maintenance.')

Pytania VQA typu tak/nie

W przypadku binarnych pytań typu tak/nie prompty powinny zapobiegać udzielaniu przez model wymijającej odpowiedzi opisowej, gdy potrzebna jest prosta wartość typu boolean:

def yes_no_question(image_path, question):
    with open(image_path, 'rb') as f:
        img_b64 = base64.standard_b64encode(f.read()).decode('utf-8')

    prompt = f'''
Answer this yes/no question about the image.
Return JSON: {{"answer": "yes|no", "confidence": "high|medium|low", "reason": str}}
Do NOT answer with maybe, possibly, or a hedged statement.
If you genuinely cannot determine the answer, return {{"answer": "unclear", "confidence": "low", "reason": str}}

Question: {question}
'''

    r = client.messages.create(
        model='claude-opus-4-5', max_tokens=100,
        messages=[{'role': 'user', 'content': [
            {'type': 'image', 'source': {'type': 'base64', 'media_type': 'image/jpeg', 'data': img_b64}},
            {'type': 'text', 'text': prompt}
        ]}]
    )
    return json.loads(r.content[0].text)

# Example: 'Is there a safety helmet visible in the image?'
print('Yes/no VQA function defined.')

Łączenie pytań VQA

Wiele pytań VQA dotyczących tego samego obrazu można połączyć w jednym prompcie, aby ograniczyć liczbę wywołań API:

multi_question_prompt = '''
Answer all of the following questions about this image.
Return a JSON object where each key is the question ID.

Questions:
1. How many people are visible?
2. What is the approximate age range of the youngest person?
3. Is there any food visible in the image?
4. What is the dominant color in the image?
5. Is the setting indoors or outdoors?

Return JSON:
{
  "q1": {"answer": str},
  "q2": {"answer": str},
  "q3": {"answer": "yes|no", "details": str or null},
  "q4": {"answer": str},
  "q5": {"answer": "indoors|outdoors|unclear"}
}
'''

print('Multi-question VQA prompt — answers 5 questions in one API call.')

Obsługa niepewności w VQA

Na pytania VQA czasami nie można odpowiedzieć z pewnością — obraz może być rozmyty, istotny element może być częściowo zasłonięty, a odpowiedź może być rzeczywiście niejednoznaczna. Należy prosić o jawne wskazanie niepewności zamiast wymuszać zgadywanie:

uncertainty_vqa_prompt = '''
Answer this question about the image as precisely as possible.
If the answer is not clearly visible or is ambiguous, say so explicitly.

Question: {question}

Return JSON:
{
  "answer": str,
  "confidence": "high|medium|low|cannot_determine",
  "limitation": str or null
}

For confidence levels:
- high: Answer is clearly visible and unambiguous
- medium: Visible but some uncertainty
- low: Partially visible or requires inference
- cannot_determine: Not enough visual information

Question: What brand is printed on the water bottle?
'''

print(uncertainty_vqa_prompt)

Prompty VQA specyficzne dla domeny

Różne domeny wymagają odmiennego słownictwa VQA i standardów pomiaru. Prompty specyficzne dla domeny zapewniają dokładniejsze i bardziej użyteczne odpowiedzi:

# Manufacturing quality control VQA
qc_prompt = '''
Inspect this product image for quality defects.
Answer each question:
1. Are there any visible scratches or surface damage? (yes/no + location)
2. Is the product alignment within expected tolerance? (yes/no)
3. Are all required labels/markings present? (yes/no + list missing ones)
4. Overall QC result: PASS or FAIL?

Return JSON:
{"scratches": {"present": bool, "location": str or null},
 "alignment_ok": bool,
 "labels_complete": bool, "missing_labels": [str],
 "qc_result": "PASS|FAIL",
 "fail_reasons": [str]}
'''

# Food safety VQA  
food_prompt = '''
Inspect this food preparation image.
1. Are gloves being worn? 2. Is hair covered? 3. Any visible contamination risk?
Return JSON: {"gloves": bool, "hair_covered": bool, "contamination_risk": bool, "details": str}
'''

print("Domain-specific QC and food safety VQA prompts defined.")

Szybki test

W przypadku liczenia obiektów na obrazie, który prompt VQA z największym prawdopodobieństwem wygeneruje precyzyjną i użyteczną odpowiedź?

VQA — najważniejsze wnioski

Skuteczne Visual Question Answering wymaga precyzyjnie opracowanych promptów:

  • Formułuj pytania konkretnie i bezpośrednio — unikaj nieprecyzyjnych określeń, takich jak some lub various
  • Jednoznacznie definiuj przypadki brzegowe w pytaniach dotyczących liczenia (co uznać za częściowo widoczne?)
  • Określaj dokładny format wyniku — JSON, pojedyncza liczba, tak/nie — aby zapobiec asekuracyjnym odpowiedziom opisowym
  • Dołączaj poziomy pewności dla wszystkich odpowiedzi, aby można było oznaczać niepewne wyniki
  • Łącz wiele pytań dotyczących tego samego obrazu w jednym wywołaniu, aby ograniczyć koszty API
  • W przypadku binarnych pytań tak/nie wyraźnie zapobiegaj asekuracyjnym odpowiedziom, dopuszczając wartość awaryjną unclear
  • VQA specyficzne dla danej dziedziny (medycyna, prawo, produkty) wymaga użycia w prompcie słownictwa właściwego dla tej dziedziny
Bezpłatny start

Ucz się AI Prompt Engineering dzięki korepetycjom AI — za darmo

Pisz i uruchamiaj kod w przeglądarce, otrzymuj natychmiastową pomoc od korepetytora AI dostępnego 24/7 i kontynuuj naukę w sieci lub w aplikacji.

Kursy
53
Lekcje
199

Często zadawane pytania

Czy lekcja „Wizualne odpowiadanie na pytania” jest bezpłatna?

Tak — pełny tekst „Wizualne odpowiadanie na pytania” jest dostępny za darmo tutaj w sieci. Aby ćwiczyć ją interaktywnie (wbudowany edytor kodu i tutor AI dostępny 24/7) i odblokować resztę kursu AI Prompt Engineering, przejdź na CoddyKit PRO. Kurs AI Prompt Engineering zawiera 4 lekcji w sumie.

Co nauczysz się w „Wizualne odpowiadanie na pytania”?

Zadawaj konkretne pytania dotyczące treści obrazów, liczebności i atrybutów. Ćwiczysz AI Prompt Engineering z praktycznym kodem, który uruchamiasz bezpośrednio w przeglądarce, a tutor AI dostępny 24/7 odpowiada na Twoje pytania podczas pracy nad lekcją.

Czy potrzebuję doświadczenia, aby zacząć AI Prompt Engineering?

Nie wymagamy żadnego doświadczenia. AI Prompt Engineering w CoddyKit jest strukturyzowany dla początkujących i zaawansowanych użytkowników, więc możesz zacząć tutaj lub od początku i uczyć się w swoim tempie. To lekcja 2 z 4.

Ile czasu zajmuje lekcja „Wizualne odpowiadanie na pytania”?

Większość lekcji CoddyKit trwa około 5–10 minut. Każda lekcja to mały, interaktywny krok, dzięki czemu robisz systematyczne postępy i zawsze wracasz dokładnie do tego samego miejsca — na webie i w aplikacji.

Czy mogę pisać i uruchamiać kod w tej lekcji AI Prompt Engineering?

Tak. Każda lekcja AI Prompt Engineering zawiera wbudowany edytor kodu, więc piszesz i uruchamiasz prawdziwy kod bezpośrednio w przeglądarce i od razu otrzymujesz sprzężenie zwrotne od AI — bez konfiguracji na komputerze.

Wszystkie lekcje w tym kursie

  1. Prompty do opisu obrazów i tworzenia podpisów
  2. Wizualne odpowiadanie na pytania
  3. Prompty do porównywania wielu obrazów
  4. Prompty do OCR i analizy dokumentów
← Powrót do AI Prompt Engineering