নথি বোঝার

জেমিনি API দীর্ঘ নথি (3600 পৃষ্ঠা পর্যন্ত) সহ PDF ইনপুট সমর্থন করে। জেমিনি মডেলগুলি নেটিভ ভিশন সহ পিডিএফগুলি প্রক্রিয়া করে, এবং তাই নথির ভিতরের পাঠ্য এবং চিত্র উভয় বিষয়বস্তু বুঝতে সক্ষম। নেটিভ পিডিএফ ভিশন সমর্থন সহ, মিথুন মডেলগুলি সক্ষম:

  • নথির ভিতরে ডায়াগ্রাম, চার্ট এবং টেবিল বিশ্লেষণ করুন
  • কাঠামোগত আউটপুট ফরম্যাটে তথ্য বের করুন
  • নথিতে ভিজ্যুয়াল এবং পাঠ্য বিষয়বস্তু সম্পর্কে প্রশ্নের উত্তর দিন
  • নথিগুলি সংক্ষিপ্ত করুন
  • ডাউনস্ট্রিম অ্যাপ্লিকেশনগুলিতে ব্যবহারের জন্য বিন্যাস এবং বিন্যাস সংরক্ষণ করে ডকুমেন্ট সামগ্রী (যেমন HTML-এ) প্রতিলিপি করুন

এই টিউটোরিয়ালটি পিডিএফ ডকুমেন্ট প্রসেস করতে Gemini API ব্যবহার করার কিছু সম্ভাব্য উপায় দেখায়।

পিডিএফ ইনপুট

20MB এর কম পিডিএফ পেলোডের জন্য, আপনি বেস64 এনকোডেড নথি আপলোড করা বা স্থানীয়ভাবে সঞ্চিত ফাইলগুলি সরাসরি আপলোড করার মধ্যে বেছে নিতে পারেন।

ইনলাইন_ডেটা হিসাবে

আপনি সরাসরি URL থেকে PDF নথি প্রক্রিয়া করতে পারেন। এখানে একটি কোড স্নিপেট দেখানো হয়েছে কিভাবে এটি করতে হয়:

DOC_URL="https://discovery.ucl.ac.uk/id/eprint/10089234/1/343019_3_art_0_py4t4l_convrt.pdf"
PROMPT="Summarize this document"
DISPLAY_NAME="base64_pdf"

# Download the PDF
wget -O "${DISPLAY_NAME}.pdf" "${DOC_URL}"

# Check for FreeBSD base64 and set flags accordingly
if [[ "$(base64 --version 2>&1)" = *"FreeBSD"* ]]; then
  B64FLAGS="--input"
else
  B64FLAGS="-w0"
fi

# Base64 encode the PDF
ENCODED_PDF=$(base64 $B64FLAGS "${DISPLAY_NAME}.pdf")

# Generate content using the base64 encoded PDF
curl "https://generativelanguage.googleapis.com/v1beta/models/gemini-2.0-flash:generateContent?key=$GOOGLE_API_KEY" \
    -H 'Content-Type: application/json' \
    -X POST \
    -d '{
      "contents": [{
        "parts":[
          {"inline_data": {"mime_type": "application/pdf", "data": "'"$ENCODED_PDF"'"}},
          {"text": "'$PROMPT'"}
        ]
      }]
    }' 2> /dev/null > response.json

cat response.json
echo

jq ".candidates[].content.parts[].text" response.json

# Clean up the downloaded PDF
rm "${DISPLAY_NAME}.pdf"

প্রযুক্তিগত বিবরণ

জেমিনি 1.5 প্রো এবং 1.5 ফ্ল্যাশ সর্বাধিক 3,600 নথি পৃষ্ঠা সমর্থন করে। নথির পৃষ্ঠাগুলি অবশ্যই নিম্নলিখিত টেক্সট ডেটা MIME প্রকারগুলির মধ্যে একটিতে থাকতে হবে:

  • পিডিএফ - application/pdf
  • জাভাস্ক্রিপ্ট - application/x-javascript , text/javascript
  • পাইথন - application/x-python , text/x-python
  • TXT - text/plain
  • এইচটিএমএল - text/html
  • CSS - text/css
  • মার্কডাউন - text/md
  • CSV - text/csv
  • XML - text/xml
  • RTF - text/rtf

প্রতিটি নথি পৃষ্ঠা 258 টোকেনের সমতুল্য।

মডেলের প্রসঙ্গ উইন্ডো ছাড়াও একটি নথিতে পিক্সেলের সংখ্যার কোনো নির্দিষ্ট সীমা না থাকলেও, বড় পৃষ্ঠাগুলিকে তাদের আসল আকৃতির অনুপাত সংরক্ষণ করার সময় 3072x3072 এর সর্বোচ্চ রেজোলিউশনে স্কেল করা হয়, যখন ছোট পৃষ্ঠাগুলি 768x768 পিক্সেল পর্যন্ত স্কেল করা হয়। ব্যান্ডউইথ ব্যতীত নিম্ন আকারের পৃষ্ঠাগুলির জন্য কোনও খরচ হ্রাস বা উচ্চ রেজোলিউশনে পৃষ্ঠাগুলির জন্য কার্যক্ষমতার উন্নতি নেই৷

সেরা ফলাফলের জন্য:

  • আপলোড করার আগে সঠিক অভিযোজনে পৃষ্ঠাগুলি ঘোরান৷
  • ঝাপসা পেজ এড়িয়ে চলুন।
  • একটি একক পৃষ্ঠা ব্যবহার করলে, পৃষ্ঠার পরে পাঠ্য প্রম্পট রাখুন।

বড় পিডিএফ

আপনি যে কোনো আকারের একটি নথি আপলোড করতে ফাইল API ব্যবহার করতে পারেন। সর্বদা ফাইল API ব্যবহার করুন যখন মোট অনুরোধের আকার (ফাইল, পাঠ্য প্রম্পট, সিস্টেম নির্দেশাবলী, ইত্যাদি সহ) 20 MB এর থেকে বড় হয়৷

ফাইল API ব্যবহার করে একটি ফাইল আপলোড করতে media.upload কল করুন। নিম্নলিখিত কোডটি একটি নথি ফাইল আপলোড করে এবং তারপরে models.generateContent এ একটি কলে ফাইলটি ব্যবহার করে।

ইউআরএল থেকে বড় পিডিএফ

ইউআরএল থেকে পাওয়া বৃহৎ পিডিএফ ফাইলের জন্য ফাইল এপিআই ব্যবহার করুন, এই ডকুমেন্টগুলিকে সরাসরি তাদের ইউআরএলগুলির মাধ্যমে আপলোড এবং প্রক্রিয়াকরণের প্রক্রিয়া সহজ করে:

PDF_PATH="https://www.nasa.gov/wp-content/uploads/static/history/alsj/a17/A17_FlightPlan.pdf"
DISPLAY_NAME="A17_FlightPlan"
PROMPT="Summarize this document"

# Download the PDF from the provided URL
wget -O "${DISPLAY_NAME}.pdf" "${PDF_PATH}"

MIME_TYPE=$(file -b --mime-type "${DISPLAY_NAME}.pdf")
NUM_BYTES=$(wc -c < "${DISPLAY_NAME}.pdf")

echo "MIME_TYPE: ${MIME_TYPE}"
echo "NUM_BYTES: ${NUM_BYTES}"

tmp_header_file=upload-header.tmp

# Initial resumable request defining metadata.
# The upload url is in the response headers dump them to a file.
curl "${BASE_URL}/upload/v1beta/files?key=${GOOGLE_API_KEY}" \
  -D upload-header.tmp \
  -H "X-Goog-Upload-Protocol: resumable" \
  -H "X-Goog-Upload-Command: start" \
  -H "X-Goog-Upload-Header-Content-Length: ${NUM_BYTES}" \
  -H "X-Goog-Upload-Header-Content-Type: ${MIME_TYPE}" \
  -H "Content-Type: application/json" \
  -d "{'file': {'display_name': '${DISPLAY_NAME}'}}" 2> /dev/null

upload_url=$(grep -i "x-goog-upload-url: " "${tmp_header_file}" | cut -d" " -f2 | tr -d "\r")
rm "${tmp_header_file}"

# Upload the actual bytes.
curl "${upload_url}" \
  -H "Content-Length: ${NUM_BYTES}" \
  -H "X-Goog-Upload-Offset: 0" \
  -H "X-Goog-Upload-Command: upload, finalize" \
  --data-binary "@${DISPLAY_NAME}.pdf" 2> /dev/null > file_info.json

file_uri=$(jq ".file.uri" file_info.json)
echo "file_uri: ${file_uri}"

# Now generate content using that file
curl "https://generativelanguage.googleapis.com/v1beta/models/gemini-2.0-flash:generateContent?key=$GOOGLE_API_KEY" \
    -H 'Content-Type: application/json' \
    -X POST \
    -d '{
      "contents": [{
        "parts":[
          {"text": "'$PROMPT'"},
          {"file_data":{"mime_type": "application/pdf", "file_uri": '$file_uri'}}]
        }]
       }' 2> /dev/null > response.json

cat response.json
echo

jq ".candidates[].content.parts[].text" response.json

# Clean up the downloaded PDF
rm "${DISPLAY_NAME}.pdf"

স্থানীয়ভাবে সংরক্ষিত বড় পিডিএফ

NUM_BYTES=$(wc -c < "${PDF_PATH}")
DISPLAY_NAME=TEXT
tmp_header_file=upload-header.tmp

# Initial resumable request defining metadata.
# The upload url is in the response headers dump them to a file.
curl "${BASE_URL}/upload/v1beta/files?key=${GEMINI_API_KEY}" \
  -D upload-header.tmp \
  -H "X-Goog-Upload-Protocol: resumable" \
  -H "X-Goog-Upload-Command: start" \
  -H "X-Goog-Upload-Header-Content-Length: ${NUM_BYTES}" \
  -H "X-Goog-Upload-Header-Content-Type: application/pdf" \
  -H "Content-Type: application/json" \
  -d "{'file': {'display_name': '${DISPLAY_NAME}'}}" 2> /dev/null

upload_url=$(grep -i "x-goog-upload-url: " "${tmp_header_file}" | cut -d" " -f2 | tr -d "\r")
rm "${tmp_header_file}"

# Upload the actual bytes.
curl "${upload_url}" \
  -H "Content-Length: ${NUM_BYTES}" \
  -H "X-Goog-Upload-Offset: 0" \
  -H "X-Goog-Upload-Command: upload, finalize" \
  --data-binary "@${PDF_PATH}" 2> /dev/null > file_info.json

file_uri=$(jq ".file.uri" file_info.json)
echo file_uri=$file_uri

# Now generate content using that file
curl "https://generativelanguage.googleapis.com/v1beta/models/gemini-1.5-flash:generateContent?key=$GOOGLE_API_KEY" \
    -H 'Content-Type: application/json' \
    -X POST \
    -d '{
      "contents": [{
        "parts":[
          {"text": "Can you add a few more lines to this poem?"},
          {"file_data":{"mime_type": "application/pdf", "file_uri": '$file_uri'}}]
        }]
       }' 2> /dev/null > response.json

cat response.json
echo

jq ".candidates[].content.parts[].text" response.json

আপলোড করা ফাইলটি সফলভাবে সংরক্ষণ করা API যাচাই করতে পারেন এবং files.get এ কল করে এর মেটাডেটা পেতে পারেন। শুধুমাত্র name (এবং এক্সটেনশন দ্বারা, uri ) অনন্য।

name=$(jq ".file.name" file_info.json)
# Get the file of interest to check state
curl https://generativelanguage.googleapis.com/v1beta/files/$name > file_info.json
# Print some information about the file you got
name=$(jq ".file.name" file_info.json)
echo name=$name
file_uri=$(jq ".file.uri" file_info.json)
echo file_uri=$file_uri

একাধিক পিডিএফ

জেমিনি API একটি একক অনুরোধে একাধিক PDF নথি প্রক্রিয়া করতে সক্ষম, যতক্ষণ পর্যন্ত নথির সম্মিলিত আকার এবং পাঠ্য প্রম্পট মডেলের প্রসঙ্গ উইন্ডোর মধ্যে থাকে৷

DOC_URL_1="https://arxiv.org/pdf/2312.11805"
DOC_URL_2="https://arxiv.org/pdf/2403.05530"
DISPLAY_NAME_1="Gemini_paper"
DISPLAY_NAME_2="Gemini_1.5_paper"
PROMPT="What is the difference between each of the main benchmarks between these two papers? Output these in a table."

# Function to download and upload a PDF
upload_pdf() {
  local doc_url="$1"
  local display_name="$2"

  # Download the PDF
  wget -O "${display_name}.pdf" "${doc_url}"

  local MIME_TYPE=$(file -b --mime-type "${display_name}.pdf")
  local NUM_BYTES=$(wc -c < "${display_name}.pdf")

  echo "MIME_TYPE: ${MIME_TYPE}"
  echo "NUM_BYTES: ${NUM_BYTES}"

  local tmp_header_file=upload-header.tmp

  # Initial resumable request
  curl "${BASE_URL}/upload/v1beta/files?key=${GOOGLE_API_KEY}" \
    -D "${tmp_header_file}" \
    -H "X-Goog-Upload-Protocol: resumable" \
    -H "X-Goog-Upload-Command: start" \
    -H "X-Goog-Upload-Header-Content-Length: ${NUM_BYTES}" \
    -H "X-Goog-Upload-Header-Content-Type: ${MIME_TYPE}" \
    -H "Content-Type: application/json" \
    -d "{'file': {'display_name': '${display_name}'}}" 2> /dev/null

  local upload_url=$(grep -i "x-goog-upload-url: " "${tmp_header_file}" | cut -d" " -f2 | tr -d "\r")
  rm "${tmp_header_file}"

  # Upload the PDF
  curl "${upload_url}" \
    -H "Content-Length: ${NUM_BYTES}" \
    -H "X-Goog-Upload-Offset: 0" \
    -H "X-Goog-Upload-Command: upload, finalize" \
    --data-binary "@${display_name}.pdf" 2> /dev/null > "file_info_${display_name}.json"

  local file_uri=$(jq ".file.uri" "file_info_${display_name}.json")
  echo "file_uri for ${display_name}: ${file_uri}"

  # Clean up the downloaded PDF
  rm "${display_name}.pdf"

  echo "${file_uri}"
}

# Upload the first PDF
file_uri_1=$(upload_pdf "${DOC_URL_1}" "${DISPLAY_NAME_1}")

# Upload the second PDF
file_uri_2=$(upload_pdf "${DOC_URL_2}" "${DISPLAY_NAME_2}")

# Now generate content using both files
curl "https://generativelanguage.googleapis.com/v1beta/models/gemini-2.0-flash:generateContent?key=$GOOGLE_API_KEY" \
    -H 'Content-Type: application/json' \
    -X POST \
    -d '{
      "contents": [{
        "parts":[
          {"file_data": {"mime_type": "application/pdf", "file_uri": '$file_uri_1'}},
          {"file_data": {"mime_type": "application/pdf", "file_uri": '$file_uri_2'}},
          {"text": "'$PROMPT'"}
        ]
      }]
    }' 2> /dev/null > response.json

cat response.json
echo

jq ".candidates[].content.parts[].text" response.json

এরপর কি

আরও জানতে, নিম্নলিখিত সংস্থানগুলি দেখুন:

  • ফাইল প্রম্পটিং কৌশল : জেমিনি এপিআই টেক্সট, ইমেজ, অডিও এবং ভিডিও ডেটা সহ প্রম্পটিং সমর্থন করে, যা মাল্টিমডাল প্রম্পটিং নামেও পরিচিত।
  • সিস্টেম নির্দেশাবলী : সিস্টেম নির্দেশাবলী আপনাকে আপনার নির্দিষ্ট প্রয়োজন এবং ব্যবহারের ক্ষেত্রের উপর ভিত্তি করে মডেলের আচরণ পরিচালনা করতে দেয়।