File size: 2,470 Bytes
325b400
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
import os
from google import genai
from google.genai import types

def generate(image_folder, question):
    client = genai.Client(api_key="AIzaSyBoPdVLTJNxfDg9wxWDpY4QJezHiyjKbTE")

    # Lọc các file ảnh
    image_files = [f for f in os.listdir(image_folder) if f.lower().endswith((".png", ".jpg", ".jpeg"))]
    files = []
    for filename in image_files:
        full_path = os.path.join(image_folder, filename)
        uploaded_file = client.files.upload(file=full_path)
        files.append(uploaded_file)

    # Tạo danh sách các Part từ ảnh
    image_parts = [
        types.Part.from_uri(file_uri=f.uri, mime_type=f.mime_type) for f in files
    ]

    # Prompt hướng dẫn rõ ràng hơn
    prompt_text = (
    "Bạn là một chuyên gia phân tích dữ liệu có 5 năm kinh nghiệm và có khả năng quan sát, diễn giải dữ liệu dưới dạng biểu đồ một cách chính xác, sắc sảo và có chiều sâu. "
    "Hãy phân tích kỹ lưỡng **từng biểu đồ** dưới đây như thể đang viết một báo cáo phân tích chuyên nghiệp cho khách hàng/ban lãnh đạo. "
    "Tuyệt đối **không bỏ qua biểu đồ nào**, và **không được viện lý do thiếu dữ liệu** – mỗi hình ảnh đều mang thông tin và cần được khai thác tối đa. "
    "Phân tích phải rõ ràng, mạch lạc, giải thích được **xu hướng chính, điểm bất thường, mối quan hệ giữa các danh mục**, và đưa ra nhận định hoặc giả thuyết hợp lý cho từng hiện tượng được thấy từ dữ liệu. "
    "Nếu có nhiều biểu đồ thể hiện cùng một khía cạnh, hãy so sánh chúng để rút ra kết luận sâu hơn. "
    f"Yêu cầu phân tích: {question}"
    )

    image_parts.append(types.Part.from_text(text=prompt_text))

    contents = [
        types.Content(role="user", parts=image_parts),
        types.Content(role="user", parts=[
            types.Part.from_text(text="Hãy thực hiện phân tích theo yêu cầu trên một cách đầy đủ, rõ ràng và có cấu trúc.")
        ]),
    ]

    config = types.GenerateContentConfig(response_mime_type="text/plain")

    response = client.models.generate_content(
        model="gemini-2.5-flash-lite-preview-06-17",
        contents=contents,
        config=config,
    )

    return response.text