Możesz pozwolić agentowi AI spojrzeć na stronę dokumentu zamiast czytać jej tekstowy zrzut. Serwer GroupDocs.Viewer.Mcp renderuje dowolną stronę pliku PDF, Word, Excel lub PowerPoint jako PNG i zwraca ją agentowi, robiąc to lokalnie na Twoim komputerze:
Ile stron ma plik report.pdf? Następnie pokaż mi ostatnią.
Wersja krok po kroku z konfiguracją i rozwiązywaniem problemów znajduje się w dokumentacji: Jak pozwolić agentowi AI zobaczyć strony dokumentu.
Dlaczego ekstrakcja tekstu nie działa na rzeczywistych dokumentach?
Ekstraktor tekstu zwraca znaki w kolejności czytania. Nie zwraca wykresu słupkowego pomiędzy dwoma akapitami, pieczęci „APPROVED” w rogu, układu kolumn tabeli cenowej ani strony będącej skanem, która nie zawiera żadnych znaków. Agent pracujący na podstawie takiego wyniku odpowiada pewnie na pytania o dokument, który widział tylko w połowie, a brakująca połowa zazwyczaj jest częścią, o którą pytałeś.
Rozwiązanie nie polega na lepszym poleceniu. To inny rodzaj danych wejściowych: strona jako obraz, przekazana modelowi akceptującemu obrazy.
Nieprawidłowe podejście: przepuszczać wszystko przez ekstraktor tekstu
Typowe domyślne podejście polega na konwersji dokumentu do tekstu, wklejeniu go do okna kontekstu i zadawaniu pytań. Działa dla prozy. Łamie się na cztery sposoby, które możesz zweryfikować na dowolnym posiadanym dokumencie:
- Układ zostaje utracony, więc pytanie „czy suma znajduje się w prawej kolumnie?” nie może być odpowiedziane.
- Liczby w wykresach i diagramach znikają, ponieważ są rysowane, a nie wpisane.
- Pieczęcie, podpisy i odręczne notatki znikają.
- Skanowany PDF nie zawiera tekstu.
Model nie może naprawić informacji, które zostały utracone przed jego zobaczeniem dokumentu.
Prawidłowe podejście: renderowanie strony PDF do obrazu dla LLM
render_page renderuje jedną stronę jako PNG, zwraca obraz w treści do agenta i zapisuje kopię w folderze wyjściowym jako <name>_page<N>.png. Serwer obsługuje ponad 170 formatów, w tym PDF, DOCX, XLSX, PPTX, ODT, RTF, HTML, EML i MSG. Model zdolny do przetwarzania obrazu widzi wtedy stronę tak, jakbyś to zrobił.
Agent nie powinien zgadywać numerów stron, dlatego łączy render_page z get_view_info, które zwraca typ pliku, liczbę stron oraz rozmiar każdej strony bez renderowania czegokolwiek. Trzecie narzędzie, get_license_status, raportuje aktywny tryb licencjonowania.
Jak uruchomić serwer dla Claude, Cursor lub Copilot?
Obraz Docker jest samodzielny:
docker run --rm -i -v $(pwd)/documents:/data \
ghcr.io/groupdocs-viewer/viewer-net-mcp:latest
Po zainstalowaniu SDK .NET 10, dnx GroupDocs.Viewer.Mcp --yes uruchamia ten sam serwer bez Dockera. Zarejestruj go w Claude Desktop, Claude Code, Cursor, VS Code z GitHub Copilot, Windsurf i innych klientach; strona hub wymienia dokładną konfigurację dla każdego. Klient uruchamia serwer jako proces potomny i komunikuje się z nim przez standardowe wejście i wyjście, więc nie ma otwartego portu ani punktu końcowego do zabezpieczenia.
Przykładowa sesja
To ilustracja oparta na udokumentowanym zachowaniu obu narzędzi, a nie przechwycony zrzut ekranu.
You: How many pages does report.pdf have? Then show me the last one.
Agent: [calls get_view_info on report.pdf]
report.pdf is a PDF with 2 pages, both 612 x 792 points (US Letter).
[calls render_page with page = 2]
Page 2 of 'report.pdf' Saved to: <output folder>/report_page2.png
Here is what page 2 shows: ...
Obraz pojawia się w treści w klientach, które go wyświetlają. Odpowiedź tekstowa to opis agenta tego, co widzi na stronie.
Co decyduje agent, a co robi silnik?
Agent decyduje, która strona odpowiada na pytanie i co zapytać model o tę stronę. Silnik wykonuje część, która musi być dokładna: otwieranie pliku, paginację zgodnie z dokumentem oraz generowanie PNG. Model nigdy nie musi zgadywać układu strony, ponieważ otrzymuje wyrenderowaną stronę.
Szczere ograniczenia
- Tryb ewaluacji. Bez licencji wyrenderowane strony zawierają znak wodny ewaluacji, a proces serwera otwiera maksymalnie 15 dokumentów. Znak wodny może zasłonić szczegół, o który pytasz. Zapytaj agenta „Czy serwer viewer jest licencjonowany?”, aby wywołał
get_license_statuszanim polegasz na tym, co odczytuje. - Tylko PNG. Wyjściem jest obraz PNG; nie ma opcji wyboru formatu.
- Brak sprawdzania numeru strony.
render_pagenie odrzuca numeru strony poza ostatnią stroną. Najpierw sprawdź liczbę stron przy pomocyget_view_info. - Model musi akceptować obrazy. Przy modelu obsługującym tylko tekst agent nadal otrzymuje ścieżkę do zapisanego pliku, ale nie może powiedzieć, co znajduje się na stronie.
- Obrazy są duże. Każda strona to wbudowany PNG, często kilka setek kilobajtów. Renderuj tylko te strony, które są potrzebne zadaniu, a nie cały plik.
- Jedna rzecz opuszcza maszynę. Wyrenderowany obraz trafia do agenta, a stamtąd do używanego modelu. Model hostowany lokalnie utrzymuje wszystko na maszynie.
FAQ
Czy Claude może zobaczyć moją stronę PDF i jej układ? Tak, jeśli strona PDF zostanie wyrenderowana jako obraz i używany model Claude akceptuje wejście obrazowe. render_page tworzy ten obraz lokalnie i zwraca go klientowi.
Czy muszę gdzieś przesyłać dokument, aby go wyrenderować? Serwer odczytuje plik z folderu, który zamontujesz, i zapisuje obraz obok niego; dokument nie jest przesyłany przez serwer. Obraz strony trafia do modelu Twojego agenta.
Czy działa to dla Excel i PowerPoint, a nie tylko PDF? Tak. PowerPoint renderuje jeden obraz na slajd, a arkusze Excel są podzielone na strony, przy czym liczba jest widoczna poprzez get_view_info.
Zagłęb się
- Dokumentacja, kanoniczny przewodnik: Jak pozwolić agentowi AI zobaczyć strony dokumentu
- Hub dokumentacji: GroupDocs.Viewer MCP Server
- Następny: 3 pytania, które agent AI powinien zadać dokumentowi przed jego renderowaniem
- Następny: Automatyzuj obrazy stron w jakości zrzutu ekranu dla raportów przy użyciu MCP
- Następny: Kiedy odpowiedź jest w wykresie: agenci AI czytający diagramy i skany za pomocą MCP
- Model on-premise i bezpieczeństwa: 3 architektury przetwarzania dokumentów AI oraz ta, która utrzymuje pliki w Twojej sieci
- Pytania: GroupDocs Viewer forum
- Źródło: GroupDocs.Viewer.Mcp on GitHub