משימה: חילוץ נתונים ממסמך והעברתם ל-LLM
משתמש פותח אפליקציה ניידת, מצרף חוזה PDF, ושואל: "מהי תקופת ההודעה המוקדמת בהסכם?" במבט ראשון, תרחיש טיפוסי. אבל בין file_picker לתגובה משמעותית של המודל, יש תריסר החלטות לא טריוויאליות: החל מעיבוד כל עמוד של סריקה ועד פיצול קובץ בן 100 עמודים שלא נכנס להקשר. יישמנו פונקציונליות כזו עבור מספר פרויקטים—פיננסיים, משפטיים, רפואיים—ואנחנו מכירים כל מלכודת. טעות בחוליה אחת ותגובת המודל הופכת לחסרת משמעות, או שאתם מסתכנים בדחייה בגין אי-עמידה בהנחיות סקירת ה-App Store בנוגע לתוכן משתמשים. כדי להימנע מכך, בואו נפרק את השלבים המרכזיים: בחירת שיטת ההעברה, טיפול בסריקות, וארגון RAG לנפחים גדולים.
איך מעבירים מסמך ל-LLM?
רוב מודלי ה-LLM מקבלים טקסט, לא PDF. נדרשת המרה. אנו שוקלים שתי גישות עיקריות.
העלאה ישירה דרך Files API
OpenAI Assistants API ו-Gemini Files API מקבלים PDF, DOCX, TXT ישירות. עבור אפליקציה ניידת, זו הדרך הנקייה ביותר: העלאת קובץ, קבלת file_id, הכנסה ל-messages[]. עם זאת, יש מגבלות—ל-OpenAI יש מגבלה של 512 MB לקובץ ו-100 קבצים לכל assistant, ו-Files API קשור ל-Assistants/Batch, לא ל-Chat Completions.
חילוץ טקסט בצד הלקוח
עבור PDF באנדרואיד—PdfRenderer (מובנה מאז API 21) לעיבוד עמודים ל-Bitmap + OCR דרך ML Kit TextRecognizer, או פורט של Apache PDFBox. ב-iOS—PDFKit + PDFPage.string עבור PDF מודפס; עבור סריקות—מסגרת Vision עם VNRecognizeTextRequest. הטקסט נכנס ל-content[] כמחרוזת. תיעוד PDFKit
בעיה עם מסמכים סרוקים
PDFKit.string מחזיר מחרוזת ריקה עבור PDF המורכב מעמודים סרוקים—אין שכבת טקסט. ML Kit TextRecognizer מתמודד עם זה, אבל צריך לעבד כל עמוד ל-Bitmap/CGImage ולהריץ OCR. עבור מסמך בן 50 עמודים, זה לוקח 2–5 שניות במכשיר.
מה עושים עם סריקות וקבצים גדולים?
חילוץ טקסט: מלכודות
באנדרואיד, PdfRenderer דורש ParcelFileDescriptor עם הדגל MODE_READ_ONLY. אם הקובץ מגיע דרך URI מסוג content:// מ-FileProvider, צריך contentResolver.openFileDescriptor(). File() ישיר מ-content:// זורק FileNotFoundException—טעות נפוצה למי שלא מכיר את SAF (Storage Access Framework).
מסמכים מרובי עמודים חייבים להיות מעובדים עמוד אחר עמוד מבלי לטעון הכל לזיכרון בבת אחת. יש לסגור את PdfRenderer.Page אחרי כל עמוד—page.close() הוא חובה, אחרת מתרחשת IllegalStateException באיטרציה הבאה.
ב-iOS, PDFDocument(url:) יכול להחזיר nil עבור PDF מוצפן. טפלו ב-isEncrypted ובקשו את הסיסמה דרך ממשק המשתמש במקום לקרוס בשקט.
פתרון ארכיטקטוני למסמכים גדולים
הטקסט המלא של חוזה בן 100 עמודים לא נכנס לחלון ההקשר של רוב המודלים—או שנכנס, אבל בעלות גבוהה. הדרך הנכונה למסמכים גדולים היא RAG: פיצול למקטעים של 500–1000 טוקנים עם חפיפה של 50–100 טוקנים, אינדוקס במסד וקטורי, שליפת 5 המקטעים הרלוונטיים ביותר בשאילתה, והעברתם בלבד ל-context. חיסכון של עד 40% בטוקנים בהשוואה להעברת הטקסט המלא ישירות. עבור מסמכים עד 10 עמודים, חילוץ בצד הלקוח עובד פי 3 מהר יותר מהעלאה דרך Files API עם המתנה לתגובה.
עבור אפליקציה ניידת, זה בדרך כלל אומר עיבוד בצד השרת: הלקוח מעלה את הקובץ לשרת האחורי, שמטפל בפיצול וב-embeddings. רק ממשק השאילתה והצגת התגובה נשארים אצל הלקוח. יישום חיפוש וקטורי ישירות בטלפון הגיוני רק בתרחישים לא מקוונים.
השוואת גישות
| גישה | מהירות | עלות טוקנים | תמיכה בסריקות |
|---|---|---|---|
| Files API ישיר | מהיר (שרת) | גבוהה (טקסט מלא) | כן (אם קיימת שכבת טקסט) |
| חילוץ לקוח + טקסט | בינוני (תלוי בנפח) | בינוני (רק טקסט) | כן (OCR בלקוח) |
| RAG עם פיצול בשרת | איטי (אינדוקס), מהיר (שאילתה) | נמוכה (רק מקטעים רלוונטיים) | כן (אם קיים OCR) |
פורמטים ומגבלות
| פורמט | אנדרואיד | iOS | מגבלת API (OpenAI) |
|---|---|---|---|
| PDF (טקסט) | PdfRenderer + PDFBox | PDFKit | 512 MB |
| PDF (סרוק) | ML Kit OCR | Vision VNRecognizeTextRequest | — (נדרש עיבוד מקדים) |
| DOCX | Apache POI (Java) | — | 512 MB (דרך Files API) |
| TXT / MD | Native | Native | ללא מגבלות |
| XLSX | Apache POI | — | 512 MB |
DOCX ב-iOS ללא ספריות צד שלישי הוא כואב. או המרה בצד השרת (LibreOffice headless) או הגבלת תמיכת הפורמטים ל-PDF + TXT עבור הלקוח הנייד.
מה כלול בעבודה סוהר
- ביקורת פורמטי מסמכים במוצר שלכם
- בחירת אסטרטגיה אופטימלית (Files API לעומת חילוץ לקוח לעומת RAG)
- יישום העלאת קבצים (
file_picker, SAF,UIDocumentPickerViewController) - המרת טקסט וניקוי (OCR לסריקות)
- אינטגרציה עם LLM (OpenAI / Gemini / Anthropic)
- אינדיקטורי התקדמות לפעולות ארוכות
- בדיקות על מסמכים אמיתיים באיכויות שונות
- תיעוד והדרכת צוות
למה לבחור בנו
אנחנו צוות של מפתחי מובייל עם ניסיון של 5+ שנים ביצירת פתרונות AI ל-iOS ואנדרואיד. יישמנו מעל 20 אינטגרציות של קלט מולטימודלי עבור פרויקטים פיננסיים, משפטיים ורפואיים. אנו מבטיחים איכות קוד ועמידה בלוחות זמנים. צרו קשר להערכת הפרויקט שלכם—נבחר את הפתרון האופטימלי לתקציב שלכם.
לוחות זמנים: תמיכה בסיסית ב-PDF + TXT עם העברה ישירה—1–2 שבועות. צינור מלא עם OCR, פורמטים מרובים ו-RAG למסמכים גדולים—4–6 שבועות. נבצע הערכה של הפרויקט שלכם—פנו אלינו.







