Добавьте citations.enabled: true в каждый document-блок. Claude вернёт текст несколькими блоками, а у подтверждённых утверждений появится массив citations.
{
"type": "document",
"source": {
"type": "base64",
"media_type": "application/pdf",
"data": "<PDF_BASE64>"
},
"title": "Отчёт.pdf",
"citations": {"enabled": true}
}{
"type": "text",
"text": "Выручка выросла на 18%",
"citations": [{
"type": "page_location",
"document_index": 0,
"document_title": "Отчёт.pdf",
"start_page_number": 5,
"end_page_number": 6,
"cited_text": "..."
}]
}- Если в запросе несколько документов, citations должны быть включены либо у всех, либо ни у одного.
- Для PDF ссылки используют
page_location; для текстовых документов — символьные позиции. - В streaming каждая ссылка приходит отдельным
citations_delta.
Kimi, Composer и Grok не возвращают нативные Anthropic document citations. Поиск может возвращать текст и ссылки, но это другой формат, описанный в Server tools.
- Kimi. У подставленного документа есть якоря разделов вида
file_…#page=3,#slide=2,#sheet=1&part=1и#section=4. Это не цитаты, но по ним можно попросить модель ссылаться на страницы прямо в тексте ответа. Подробности на странице Kimi: Chat Completions. - Composer и Grok. Механизма цитат нет и заменить его нечем.
GLM не публикует единый объект citations для всех трёх API. Встроенный поиск возвращает исходные данные поиска выбранного протокола; текстовые ссылки модели остаются модельным выводом.
| API | Где искать подтверждение поиска |
|---|---|
| Chat | Финальный массив web_search рядом с choices и usage. |
| Messages | Пара server_tool_use (web_search) и web_search_tool_result со строками web_search_result; число оплаченных поисков — usage.server_tool_use.web_search_requests. |
| Responses | Завершённый web_search_call item/event. |
Для загруженного PDF отдельный нативный citation contract не заявлен. Просите модель назвать страницу в тексте и проверяйте её в своём приложении.
Источники поиска Gemini приходят в форме выбранного API: в Messages — блоки web_search_tool_result, а у текста поле citations с элементами web_search_result_location; в Chat Completions — annotations с url_citation; в Responses — url_citation в annotations текста. Когда поиск идёт вместе с клиентскими функциями, поля citations в Messages нет, а позиции url_citation в Chat Completions и Responses Guard находит по вхождению адреса источника в текст.
Цитирование своих документов (citations: {"enabled": true} у PDF) Gemini не поддерживает: допустимо только {"enabled": false}, иначе запрос получает ошибку gemini_parameter_unsupported.
Источники поиска Muse приходят в той форме, в которой их отдаёт Meta для выбранного API.