Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Важно
Элементы, помеченные (предварительная версия) в этой статье, в настоящее время находятся в общедоступной предварительной версии. Эта предварительная версия предоставляется без соглашения об уровне обслуживания, и мы не рекомендуем ее для рабочих нагрузок. Некоторые функции могут не поддерживаться или могут иметь ограниченные возможности. Дополнительные сведения см. в разделе Supplemental Terms of Use for Microsoft Azure Previews.
Примечание
- В этой статье описывается средство Microsoft SharePoint для службы агента Foundry. Сведения об использовании и развертывании сайтов SharePoint см. в документации SharePoint.
- Ознакомьтесь с рекомендациями по оптимизации использования инструментов.
Используйте средство SharePoint (предварительная версия) для интеграции SharePoint в службе агентства Microsoft Foundry, получая содержимое из сайта или папки SharePoint (например, contoso.sharepoint.com/sites/policies). Когда пользователь задает вопрос, агент может вызвать средство SharePoint, чтобы получить соответствующий текст из документов, к которые пользователь может получить доступ. Затем агент создает ответ на основе полученного содержимого.
Эта интеграция использует сквозную передачу удостоверений (от имени), чтобы разрешения SharePoint продолжали применяться к каждому запросу. Дополнительные сведения об интеграции API извлечения Microsoft 365 Copilot смотрите в разделе Как это работает.
Важно
Перед началом работы: для средства SharePoint требуется проверка подлинности пользователя (без использования только приложения/служебного принципала), сайт SharePoint и агент Foundry должны находиться в одном клиенте, и каждый агент поддерживает только одно средство SharePoint. Средство не работает, когда агент публикуется в Microsoft Teams. См. ограничения для полного списка.
Поддержка использования
В следующей таблице показана поддержка пакета SDK и настройки.
| поддержка Microsoft Foundry | пакет SDK Python | C# SDK | JavaScript SDK | пакет SDK Java | REST API | Базовая настройка агента | Настройка стандартного агента |
|---|---|---|---|---|---|---|---|
| ✔️ | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ |
Необходимые условия
- Допустимая лицензия или модель оплаты по мере использования:
- Разработчики и конечные пользователи имеют лицензию Microsoft 365 Copilot, как это требуется API извлечения Microsoft 365 Copilot.
- Если у разработчиков и конечных пользователей нет лицензии Microsoft 365 Copilot, можно включить модель pay-as-you-go.
- Разработчики и конечные пользователи имеют по крайней мере
Azure AI Userроль RBAC, назначенную проекту Foundry. Дополнительные сведения о Azure управлении доступом на основе ролей см. в статье Azure управление доступом на основе ролей в Foundry. - Разработчики и конечные пользователи имеют по меньшей мере
READдоступ к сайту SharePoint. - Убедитесь, что ваш SharePoint клиент и проект Foundry находятся в одном Microsoft Entra клиенте. Обмен маркерами между клиентами не поддерживается.
- Необходимый установленный пакет SDK:
-
Python:
pip install "azure-ai-projects>=2.0.0" -
C#: установите пакет NuGet
Azure.AI.Projects -
TypeScript/JavaScript:
npm install @azure/ai-projects -
Java: добавьте
com.azure:azure-ai-agents:2.0.0вpom.xml
-
Python:
- Настроенные переменные среды:
-
FOUNDRY_PROJECT_ENDPOINT: URL-адрес конечной точки проекта Foundry -
FOUNDRY_MODEL_DEPLOYMENT_NAME: имя развертывания модели (например,gpt-4) -
SHAREPOINT_PROJECT_CONNECTION_ID: идентификатор подключения SharePoint в формате/subscriptions/{{subscriptionID}}/resourceGroups/{{resourceGroupName}}/providers/Microsoft.CognitiveServices/accounts/{{foundryAccountName}}/projects/{{foundryProjectName}}/connections/{{foundryConnectionName}} - Для примеров REST:
AGENT_TOKEN
-
- Дополнительные сведения о настройке проверки подлинности см. в кратком руководстве .
Параметры
Средство SharePoint использует подключение проекта для определения того, с какого сайта или в какой папке SharePoint оно может получить данные.
| Параметр | Обязательно | Заметки |
|---|---|---|
type |
Да | Используйте sharepoint_grounding_preview. |
sharepoint_grounding_preview.project_connections[].project_connection_id |
Да | Используйте значение SHAREPOINT_PROJECT_CONNECTION_ID. |
Если необходимо создать подключение SharePoint для проекта, см. раздел Добавление нового подключения к проекту.
Пример кода
В следующем примере показано, как создать агент, использующий инструмент SharePoint для формирования ответов на основе содержимого сайта SharePoint.
from azure.identity import DefaultAzureCredential
from azure.ai.projects import AIProjectClient
from azure.ai.projects.models import (
PromptAgentDefinition,
SharepointPreviewTool,
SharepointGroundingToolParameters,
ToolProjectConnection,
)
# Format: "https://resource_name.ai.azure.com/api/projects/project_name"
PROJECT_ENDPOINT = "your_project_endpoint"
SHAREPOINT_CONNECTION_NAME = "my-sharepoint-connection"
# Create clients to call Foundry API
project = AIProjectClient(
endpoint=PROJECT_ENDPOINT,
credential=DefaultAzureCredential(),
)
openai = project.get_openai_client()
# Get connection ID from connection name
sharepoint_connection = project.connections.get(
SHAREPOINT_CONNECTION_NAME,
)
# Configure SharePoint tool with the project connection
sharepoint_tool= SharepointPreviewTool(
sharepoint_grounding_preview=SharepointGroundingToolParameters(
project_connections=[
ToolProjectConnection(project_connection_id=sharepoint_connection.id)
]
)
)
agent = project.agents.create_version(
agent_name="MyAgent",
definition=PromptAgentDefinition(
model="gpt-4.1-mini",
instructions="""You are a helpful agent that can use SharePoint tools to assist users.
Use the available SharePoint tools to answer questions and perform tasks.""",
tools=[sharepoint_tool],
),
)
print(f"Agent created (id: {agent.id}, name: {agent.name}, version: {agent.version})")
# Send initial request that will trigger the SharePoint tool
stream_response = openai.responses.create(
stream=True,
tool_choice="required",
input="Please summarize the last meeting notes stored in SharePoint.",
extra_body={"agent_reference": {"name": agent.name, "type": "agent_reference"}},
)
for event in stream_response:
if event.type == "response.created":
print(f"Follow-up response created with ID: {event.response.id}")
elif event.type == "response.output_text.delta":
print(f"Delta: {event.delta}")
elif event.type == "response.text.done":
print(f"\nFollow-up response done!")
elif event.type == "response.output_item.done":
if event.item.type == "message":
item = event.item
if item.content[-1].type == "output_text":
text_content = item.content[-1]
for annotation in text_content.annotations:
if annotation.type == "url_citation":
print(
f"URL Citation: {annotation.url}, "
f"Start index: {annotation.start_index}, "
f"End index: {annotation.end_index}"
)
elif event.type == "response.completed":
print(f"\nFollow-up completed!")
print(f"Full response: {event.response.output_text}")
Ожидаемые выходные данные
При запуске этого кода вы увидите следующие выходные данные:
Agent created (id: asst_abc123, name: MyAgent, version: 1)
Sending request to SharePoint agent with streaming...
Follow-up response created with ID: resp_xyz789
Delta: Based
Delta: on
Delta: the
Delta: meeting
Delta: notes
...
URL Citation: https://contoso.sharepoint.com/sites/policies/Documents/meeting-notes.docx, Start index: 0, End index: 245
Follow-up response done!
Follow-up completed!
Full response: Based on the meeting notes from your SharePoint site, the last meeting covered the following topics: project timeline updates, budget review, and next quarter planning.
В следующем примере показано, как создать агент, использующий инструмент SharePoint для формирования ответов на основе содержимого сайта SharePoint. В этом примере используются синхронные методы для простоты. Для получения сведений об асинхронной версии обратитесь к образцу документации агента SharePoint в репозитории Azure SDK для .NET на GitHub.
Чтобы разрешить агенту доступ к SharePoint, используйте SharepointPreviewTool.
using System;
using Azure.AI.Projects;
using Azure.AI.Extensions.OpenAI;
using Azure.Identity;
// Format: "https://resource_name.ai.azure.com/api/projects/project_name"
var projectEndpoint = "your_project_endpoint";
var sharepointConnectionName = "my-sharepoint-connection";
// Create project client to call Foundry API
AIProjectClient projectClient = new(endpoint: new Uri(projectEndpoint), tokenProvider: new DefaultAzureCredential());
// Get connection ID from connection name
AIProjectConnection sharepointConnection = projectClient.Connections.GetConnection(connectionName: sharepointConnectionName);
// Use the SharePoint connection ID to initialize the SharePointGroundingToolOptions,
// which will be used to create SharepointPreviewTool. Use this tool to create an Agent.
SharePointGroundingToolOptions sharepointToolOption = new()
{
ProjectConnections = { new ToolProjectConnection(projectConnectionId: sharepointConnection.Id) }
};
DeclarativeAgentDefinition agentDefinition = new(model: "gpt-4.1-mini")
{
Instructions = "You are a helpful assistant.",
Tools = { new SharepointPreviewTool(sharepointToolOption), }
};
AgentVersion agentVersion = projectClient.AgentAdministrationClient.CreateAgentVersion(
agentName: "myAgent",
options: new(agentDefinition));
// Create the response and make sure we are always using tool.
ProjectResponsesClient responseClient = projectClient.ProjectOpenAIClient.GetProjectResponsesClientForAgent(agentVersion.Name);
CreateResponseOptions responseOptions = new()
{
ToolChoice = ResponseToolChoice.CreateRequiredChoice(),
InputItems = { ResponseItem.CreateUserMessageItem("What is Contoso whistleblower policy") }
};
ResponseResult response = responseClient.CreateResponse(options: responseOptions);
// SharePoint tool can create the reference to the page, grounding the data.
// Create the GetFormattedAnnotation method to get the URI annotation.
string annotation = "";
foreach (ResponseItem item in response.OutputItems)
{
if (item is MessageResponseItem messageItem)
{
foreach (ResponseContentPart content in messageItem.Content)
{
foreach (ResponseMessageAnnotation messageAnnotation in content.OutputTextAnnotations)
{
if (messageAnnotation is UriCitationMessageAnnotation uriAnnotation)
{
annotation = $" [{uriAnnotation.Title}]({uriAnnotation.Uri})";
}
}
}
}
}
// Print the Agent output and add the annotation at the end.
Console.WriteLine($"Response status: {response.Status}");
Console.WriteLine($"{response.GetOutputText()}{annotation}");
// After the sample is completed, delete the Agent we have created.
projectClient.AgentAdministrationClient.DeleteAgentVersion(agentName: agentVersion.Name, agentVersion: agentVersion.Version);
Ожидаемые выходные данные
При запуске этого кода вы увидите следующие выходные данные:
The Contoso whistleblower policy outlines procedures for reporting unethical behavior confidentially. Employees can submit concerns through the ethics hotline or online portal. [Whistleblower Policy](https://contoso.sharepoint.com/sites/policies/Documents/whistleblower-policy.pdf)
Выходные данные включают ответ агента на основе содержимого SharePoint, с сноской на исходный документ.
Пример использования агента с SharePoint
Получение токена доступа:
export AGENT_TOKEN=$(az account get-access-token --scope "https://ai.azure.com/.default" --query accessToken -o tsv)
В следующем примере показано, как создать агент, который использует инструмент SharePoint для обоснования ответов с использованием содержимого из сайта SharePoint.
curl --request POST \
--url "$FOUNDRY_PROJECT_ENDPOINT/openai/v1/responses" \
-H "Authorization: Bearer $AGENT_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"model": "'$FOUNDRY_MODEL_DEPLOYMENT_NAME'",
"input": "Please summarize the last meeting notes stored in SharePoint.",
"tool_choice": "required",
"tools": [
{
"type": "sharepoint_grounding_preview",
"sharepoint_grounding_preview": {
"project_connections": [
{
"project_connection_id": "'$SHAREPOINT_PROJECT_CONNECTION_ID'"
}
]
}
}
]
}'
Ожидаемые выходные данные
API возвращает ответ JSON с информацией об ответе агента и ссылке:
{
"id": "resp_abc123xyz",
"object": "response",
"created_at": 1702345678,
"status": "completed",
"output_text": "Based on the meeting notes from your SharePoint site, the last meeting covered project timeline updates, budget review, and next quarter planning.",
"output_items": [
{
"type": "message",
"content": [
{
"type": "output_text",
"text": "Based on the meeting notes...",
"annotations": [
{
"type": "url_citation",
"url": "https://contoso.sharepoint.com/sites/policies/Documents/meeting-notes.docx",
"start_index": 0,
"end_index": 245
}
]
}
]
}
]
}
В этом примере показано, как создать ИИ агента с возможностями SharePoint. Агент может выполнять поиск SharePoint содержимого и предоставлять ответы с соответствующими сведениями на сайтах SharePoint. Для версии JavaScript см. пример документации по агенту SharePoint в репозитории Azure SDK для JavaScript GitHub.
import { DefaultAzureCredential } from "@azure/identity";
import { AIProjectClient } from "@azure/ai-projects";
// Format: "https://resource_name.ai.azure.com/api/projects/project_name"
const PROJECT_ENDPOINT = "your_project_endpoint";
const SHAREPOINT_CONNECTION_NAME = "my-sharepoint-connection";
export async function main(): Promise<void> {
// Create clients to call Foundry API
const project = new AIProjectClient(PROJECT_ENDPOINT, new DefaultAzureCredential());
const openai = project.getOpenAIClient();
// Get connection ID from connection name
const sharepointConnection = await project.connections.get(SHAREPOINT_CONNECTION_NAME);
// Create agent with SharePoint tool
const agent = await project.agents.createVersion("MyAgent", {
kind: "prompt",
model: "gpt-4.1-mini",
instructions:
"You are a helpful agent that can use SharePoint tools to assist users. Use the available SharePoint tools to answer questions and perform tasks.",
// Define SharePoint tool that searches SharePoint content
tools: [
{
type: "sharepoint_grounding_preview",
sharepoint_grounding_preview: {
project_connections: [
{
project_connection_id: sharepointConnection.id,
},
],
},
},
],
});
console.log(`Agent created (id: ${agent.id}, name: ${agent.name}, version: ${agent.version})`);
// Send initial request that will trigger the SharePoint tool
const streamResponse = await openai.responses.create(
{
input: "Please summarize the last meeting notes stored in SharePoint.",
stream: true,
},
{
body: {
agent: { name: agent.name, type: "agent_reference" },
tool_choice: "required",
},
},
);
// Process the streaming response
for await (const event of streamResponse) {
if (event.type === "response.created") {
console.log(`Follow-up response created with ID: ${event.response.id}`);
} else if (event.type === "response.output_text.delta") {
process.stdout.write(event.delta);
} else if (event.type === "response.output_text.done") {
console.log("\n\nFollow-up response done!");
} else if (event.type === "response.output_item.done") {
if (event.item.type === "message") {
const item = event.item;
if (item.content && item.content.length > 0) {
const lastContent = item.content[item.content.length - 1];
if (lastContent.type === "output_text" && lastContent.annotations) {
for (const annotation of lastContent.annotations) {
if (annotation.type === "url_citation") {
console.log(
`URL Citation: ${annotation.url}, Start index: ${annotation.start_index}, End index: ${annotation.end_index}`,
);
}
}
}
}
}
} else if (event.type === "response.completed") {
console.log("\nFollow-up completed!");
}
}
// Clean up resources
await project.agents.deleteVersion(agent.name, agent.version);
}
main().catch((err) => {
console.error("The sample encountered an error:", err);
});
Ожидаемые выходные данные
При запуске этого кода вы увидите следующие выходные данные:
Creating agent with SharePoint tool...
Agent created (id: asst_abc123, name: MyAgent, version: 1)
Sending request to SharePoint agent with streaming...
Follow-up response created with ID: resp_xyz789
Based on the meeting notes from your SharePoint site, the last meeting covered the following topics: project timeline updates, budget review, and next quarter planning.
Follow-up response done!
URL Citation: https://contoso.sharepoint.com/sites/policies/Documents/meeting-notes.docx, Start index: 0, End index: 245
Follow-up completed!
Cleaning up resources...
Agent deleted
SharePoint agent sample completed!
Использование интеграции SharePoint в агенте Java
Добавьте зависимость в вашу pom.xml:
<dependency>
<groupId>com.azure</groupId>
<artifactId>azure-ai-agents</artifactId>
<version>2.0.0</version>
</dependency>
Создание агента с базированием на SharePoint
import com.azure.ai.agents.AgentsClient;
import com.azure.ai.agents.AgentsClientBuilder;
import com.azure.ai.agents.ResponsesClient;
import com.azure.ai.agents.models.*;
import com.azure.identity.DefaultAzureCredentialBuilder;
import com.openai.models.responses.Response;
import com.openai.models.responses.ResponseCreateParams;
import java.util.Arrays;
import java.util.Collections;
public class SharePointGroundingExample {
public static void main(String[] args) {
// Format: "https://resource_name.ai.azure.com/api/projects/project_name"
String projectEndpoint = "your_project_endpoint";
String sharepointConnectionId = "your_sharepoint_connection_id";
AgentsClientBuilder builder = new AgentsClientBuilder()
.credential(new DefaultAzureCredentialBuilder().build())
.endpoint(projectEndpoint);
AgentsClient agentsClient = builder.buildAgentsClient();
ResponsesClient responsesClient = builder.buildResponsesClient();
// Create SharePoint grounding tool with connection configuration
SharepointPreviewTool sharepointTool = new SharepointPreviewTool(
new SharepointGroundingToolParameters()
.setProjectConnections(Arrays.asList(
new ToolProjectConnection(sharepointConnectionId)
))
);
// Create agent with SharePoint tool
PromptAgentDefinition agentDefinition = new PromptAgentDefinition("gpt-4.1-mini")
.setInstructions("You are a helpful assistant that can search through SharePoint documents.")
.setTools(Collections.singletonList(sharepointTool));
AgentVersionDetails agent = agentsClient.createAgentVersion("sharepoint-agent", agentDefinition);
System.out.printf("Agent created: %s (version %s)%n", agent.getName(), agent.getVersion());
// Create a response
AgentReference agentReference = new AgentReference(agent.getName())
.setVersion(agent.getVersion());
Response response = responsesClient.createAzureResponse(
new AzureCreateResponseOptions().setAgentReference(agentReference),
ResponseCreateParams.builder()
.input("Find the latest project documentation in SharePoint"));
System.out.println("Response: " + response.output());
// Clean up
agentsClient.deleteAgentVersion(agent.getName(), agent.getVersion());
}
}
Ограничения
- Средство SharePoint поддерживает проверку подлинности только пользователей. Проверка подлинности только для приложений (субъекта-службы) не поддерживается.
- Ваш сайт SharePoint и агент Microsoft Foundry должны находиться в одном клиенте.
- Для каждого агента можно добавить только одно средство SharePoint.
- Основополагающий API извлечения Microsoft 365 Copilot возвращает текстовые извлечения. Извлечение из нетекстового содержимого, включая изображения и диаграммы, не поддерживается.
- Для семантического и гибридного извлечения API Microsoft 365 Copilot Retrieval поддерживает типы файлов
.doc,.docx,.pptx,.pdf,.aspxи.one. Дополнительные сведения см. в api Microsoft 365 Copilot.
Установка
Примечание
Начните с SharePoint сайтов с простой структурой папок и небольшим количеством коротких документов.
Выберите SharePoint и следуйте инструкциям, чтобы добавить это средство. Можно добавить только один объект на каждого агента.
Добавьте подключение SharePoint.
Пошаговые инструкции см. в разделе "Добавление нового подключения к проекту".
В конфигурации подключения SharePoint введите URL-адрес сайта или URL-адрес папки.
- Пример URL-адреса сайта:
https://<company>.sharepoint.com/sites/<site_name> - Пример URL-адреса папки:
https://<company>.sharepoint.com/sites/<site_name>/Shared%20documents/<folder_name>
Примечание
Ваш
site_urlдолжен соответствовать приведенному выше формату. При копировании всего содержимого адресной строки SharePoint это не работает.- Пример URL-адреса сайта:
Сохраните подключение и скопируйте его идентификатор подключения.
Задайте идентификатор подключения как
SHAREPOINT_PROJECT_CONNECTION_ID.
Принцип работы
Средство SharePoint позволяет обеспечить удобную интеграцию между агентами ИИ и бизнес-документами, хранящимися в SharePoint. Эта возможность предоставляется API Microsoft 365 Copilot. Чтобы заземлить документы SharePoint, введите сайты или папки для подключения. Средство SharePoint использует встроенные возможности индексирования для улучшения процесса поиска и извлечения, включая интеллектуальную индексацию, обработку запросов и разбиение содержимого на сегменты.
Дополнительные сведения о делегированном доступе и сквозной аутентификации в Foundry см. в разделе Концепции управления удостоверениями агента в Microsoft Foundry.
Вместо того, чтобы разработчики требовали экспортировать содержимое SharePoint, создавать настраиваемый семантический индекс, управлять элементами управления и настраивать логику обновления, эта возможность автоматизирует весь конвейер извлечения. Он динамически индексирует документы, разбивает содержимое на значимые блоки и применяет расширенную обработку запросов для получения наиболее важных сведений. Используя тот же стек извлечения корпоративного уровня, который обеспечивает Microsoft 365 Copilot, эта функция гарантирует, что ответы ИИ-агента основаны на наиболее актуальном и контекстно релевантном содержимом.
Клиенты полагаются на безопасность данных в SharePoint для доступа, создания и совместного использования документов с гибким контролем доступа на уровне документов. Корпоративные функции, такие как передача удостоверений (On-Behalf-Of) и аутентификация, обеспечивают надлежащий контроль доступа. Конечные пользователи получают ответы, созданные из документов SharePoint, к которым у них есть разрешение на доступ. С помощью проверки подлинности OBO служба агента Foundry использует удостоверение конечного пользователя для авторизации и получения соответствующих SharePoint документов, создавая ответы, адаптированные для конкретных конечных пользователей.
Устранение неполадок
| Проблема | Причина | Разрешение |
|---|---|---|
AuthenticationError: AppOnly OBO tokens not supported by target service |
Использование удостоверения приложения вместо удостоверения пользователя | Средство SharePoint требует идентификации пользователя (сквозная аутентификация). Не используйте проверку подлинности только для приложений. |
Forbidden: Authorization Failed - User does not have valid license |
Отсутствует Microsoft 365 Copilot лицензия или модель оплаты по мере использования | Назначьте пользователю лицензию Microsoft 365 Copilot или включите оплату по мере использования. См. предварительные требования. |
| 401 или сбои проверки подлинности | Попытка кросс-клиентского доступа | Убедитесь, что пользователь в Foundry и Microsoft 365 находится в одном клиенте. |
| Средство не возвращает результаты | Пользователь не имеет доступа к содержимому SharePoint | Убедитесь, что пользователь имеет доступ на чтение к запрашиваемым сайтам и документам SharePoint. |
| Время медленного отклика | Область поиска по большим документам | Сузите область поиска, указав определенные сайты или библиотеки. Рекомендуется использовать более конкретные поисковые запросы. |
| Неполное извлечение документа | Содержимое не индексировано | Убедитесь, что содержимое SharePoint индексируется Поиск (Майкрософт). Недавно добавленному содержимому может потребоваться время для индексирования. |
Resource not found Ошибки |
Недопустимый путь к сайту или библиотеке | Убедитесь, что URL-адрес сайта и пути библиотеки SharePoint правильны и доступны пользователю. |
| Несогласованные результаты поиска | Задержка синхронизации семантического индекса | Дождитесь синхронизации семантического индекса. Для распространения больших изменений содержимого может потребоваться время. См. Семантическая индексация для Microsoft 365 Copilot. |
Дальнейшие действия
- Дополнительные сведения см. в статьях о получении содержимого, используемом средством: