菜单

Azure Functions 和 Graph API 集成

相关源文件

本文档提供了一个集成 Azure Functions 和 Microsoft Graph API 以访问和搜索 SharePoint 及 Office 365 内容的全面指南。它侧重于实现 OAuth 身份验证、执行 Graph API 查询以及处理响应,从而使 SharePoint 内容可以通过 ChatGPT 动作进行访问。

有关 Azure OpenAI 服务集成的常规信息,请参阅 Azure OpenAI 服务示例

概述

Azure Functions 可以作为 ChatGPT 和 Microsoft Graph API 之间的中间件,使用户能够通过自然语言查询搜索和检索 SharePoint 和 Office 365 中的文档。此集成利用 Azure 的身份验证机制和无服务器计算能力来安全地访问企业内容。

涵盖两种主要的解决方案模式

  1. 文件检索解决方案:将文件作为 base64 编码的内容返回,ChatGPT 可以像直接上传一样进行处理
  2. 文本预处理解决方案:在将文本内容返回给 ChatGPT 之前,先从文档中提取和摘要文本内容

来源:examples/chatgpt/sharepoint_azure_function/Using_Azure_Functions_and_Microsoft_Graph_to_Query_SharePoint.md5-59 examples/chatgpt/sharepoint_azure_function/Using_Azure_Functions_and_Microsoft_Graph_to_Query_SharePoint.md60-83

架构

解决方案 1:文件检索架构

此解决方案通过文件检索模式将文件返回给 ChatGPT。

来源:examples/chatgpt/sharepoint_azure_function/Using_Azure_Functions_and_Microsoft_Graph_to_Query_SharePoint.md19-34

解决方案 2:文本预处理架构

此解决方案在将文件内容返回给 ChatGPT 之前对其进行预处理。

来源:examples/chatgpt/sharepoint_azure_function/Using_Azure_Functions_and_Microsoft_Graph_to_Query_SharePoint.md38-56

实现组件

身份验证流程

身份验证流程使用 Azure 的 Easy Auth 和 On-Behalf-Of (OBO) 令牌交换来维护用户上下文。

来源:examples/chatgpt/sharepoint_azure_function/Using_Azure_Functions_and_Microsoft_Graph_to_Query_SharePoint.md84-108 examples/chatgpt/sharepoint_azure_function/solution_two_preprocessing.js9-46

关键组件

  1. OAuth 身份验证:保护对 Microsoft Graph API 的访问
  2. Microsoft Graph 客户端:与 Graph API 端点交互
  3. 搜索 API 集成:根据搜索词查找相关文档
  4. 文件内容检索:访问和下载文件内容
  5. 内容处理:将文件编码为 base64 或提取和摘要文本
  6. 响应格式化:构建数据以供 ChatGPT 使用

来源:examples/chatgpt/sharepoint_azure_function/Using_Azure_Functions_and_Microsoft_Graph_to_Query_SharePoint.md109-145

实现细节

设置 Azure Function

实现需要

  1. 创建 Azure Function App
  2. 配置 Microsoft Entra ID(以前称为 Azure AD)身份验证
  3. 为 Microsoft Graph API 设置适当的权限
  4. 实现函数代码

来源:examples/chatgpt/sharepoint_azure_function/Using_Azure_Functions_and_Microsoft_Graph_to_Query_SharePoint.md109-145

身份验证实现

身份验证过程涉及初始化 Graph 客户端并获取 On-Behalf-Of 令牌

getOboToken 函数将用户令牌交换为 Graph API 令牌

来源:examples/chatgpt/sharepoint_azure_function/solution_two_preprocessing.js19-46

文件检索实现

对于解决方案 1,getDriveItemContent 函数检索文件内容并将其转换为 base64。

来源:examples/chatgpt/sharepoint_azure_function/Using_Azure_Functions_and_Microsoft_Graph_to_Query_SharePoint.md347-368

文本预处理实现

对于解决方案 2,实现包括

  1. 文件内容检索:处理不同的文件类型并转换为适当的格式
  2. 文本提取:从各种文档格式中提取文本
  3. 内容摘要:使用 GPT-4o-mini 根据查询提取相关内容

来源:examples/chatgpt/sharepoint_azure_function/solution_two_preprocessing.js48-116

解决方案 1:文件检索详情

此解决方案将文件作为 base64 编码内容直接返回给 ChatGPT。

关键函数

功能目的
initGraphClient使用访问令牌初始化 Microsoft Graph 客户端
getOboToken交换用户令牌以获取 Graph API 令牌
getDriveItemContent检索文件内容并转换为 base64
主函数协调搜索和文件检索过程

流程

  1. 从请求中提取搜索词
  2. 身份验证并获取 OBO 令牌
  3. 初始化 Graph 客户端
  4. 使用 Microsoft Graph 搜索 API 搜索相关文件
  5. 对于每个结果,检索文件内容并转换为 base64
  6. 根据 ChatGPT 的文件响应结构格式化响应
  7. 将格式化的响应返回给 ChatGPT

来源:examples/chatgpt/sharepoint_azure_function/Using_Azure_Functions_and_Microsoft_Graph_to_Query_SharePoint.md281-470

响应格式

该函数将响应格式化为符合 ChatGPT 对文件响应的预期结构。

来源:examples/chatgpt/sharepoint_azure_function/Using_Azure_Functions_and_Microsoft_Graph_to_Query_SharePoint.md456-458

解决方案 2:文本预处理详情

此解决方案在返回给 ChatGPT 之前提取和摘要文本内容。

关键函数

功能目的
initGraphClient使用访问令牌初始化 Microsoft Graph 客户端
getOboToken交换用户令牌以获取 Graph API 令牌
getDriveItemContent检索并提取文件中的文本
getRelevantParts使用 GPT-4o-mini 提取相关内容
主函数协调搜索和内容处理

流程

  1. 从请求中提取查询和搜索词
  2. 身份验证并获取 OBO 令牌
  3. 初始化 Graph 客户端
  4. 使用 Microsoft Graph 搜索 API 搜索相关文件
  5. 对于每个结果
    • 检索文件内容
    • 根据文件类型提取文本
    • 分词处理内容并分块
    • 使用 GPT-4o-mini 根据查询提取相关部分
  6. 将处理后的内容格式化并返回给 ChatGPT

来源:examples/chatgpt/sharepoint_azure_function/solution_two_preprocessing.js118-238

文件类型处理

该解决方案支持多种文件类型

文件类型处理方法
PDF直接文本提取
Office 文档转换为 PDF 再提取文本
文本文件直接内容检索
CSV 文件直接内容检索
不支持的类型返回“不支持的文件类型”消息

来源:examples/chatgpt/sharepoint_azure_function/solution_two_preprocessing.js48-89

与 ChatGPT 集成

OpenAPI 规范

要与 ChatGPT 集成,需要 OpenAPI 规范

对于解决方案 1(文件检索)

对于解决方案 2(文本预处理)

来源:examples/chatgpt/sharepoint_azure_function/Using_Azure_Functions_and_Microsoft_Graph_to_Query_SharePoint.md528-581

GPT 指令

GPT 的自定义指令应包括

  1. 如何解读用户问题
  2. 如何制定搜索词
  3. 如何处理“未找到结果”的情况
  4. 如何呈现检索文档中的信息

示例指令模式

You are a Q&A helper that helps answer users questions. You have access to a documents repository through your API action. When a user asks a question, you pass in the "searchTerm" a single keyword or term you think you should use for the search.

If your action returns results, then you take the results from the action and try to answer the users question.

If the response you get from the action is "No results found", let the user know and try a different search term, explaining why.

来源:examples/chatgpt/sharepoint_azure_function/Using_Azure_Functions_and_Microsoft_Graph_to_Query_SharePoint.md492-523

自定义选项

实施方式可以进行多种定制

定制描述
搜索范围将搜索范围限制在特定的 SharePoint 站点或 O365 驱动器
文件类型筛选限制为特定文件类型
结果限制调整处理的搜索结果数量
GPT 模型使用不同的模型进行文本摘要
提示工程为文本提取自定义提示

来源:examples/chatgpt/sharepoint_azure_function/Using_Azure_Functions_and_Microsoft_Graph_to_Query_SharePoint.md471-485 examples/chatgpt/sharepoint_azure_function/Using_Azure_Functions_and_Microsoft_Graph_to_Query_SharePoint.md512-533

注意事项和局限性

在实施此集成时,请考虑

  1. API 限制:ChatGPT 动作有 100K 字符限制和 45 秒超时
  2. 文件支持:解决方案 1 最适合结构化数据,并且对文件数量有限制
  3. 文本处理:解决方案 2 更适合大型非结构化文档
  4. 身份验证:需要正确设置 OAuth 和权限
  5. 性能:大型文档可能需要分块和处理策略

来源:examples/chatgpt/sharepoint_azure_function/Using_Azure_Functions_and_Microsoft_Graph_to_Query_SharePoint.md484-488 examples/chatgpt/gpt_actions_library/gpt_action_sharepoint_text.ipynb527-533

结论

Azure Functions 为连接 ChatGPT 到 Microsoft Graph API 和 SharePoint 内容提供了一个强大的中间件层。通过实施文件检索或文本预处理解决方案中的任何一个,组织可以在保持通过适当身份验证进行安全访问的同时,实现对其文档存储库的自然语言访问。

解决方案之间的选择取决于具体要求

  • 解决方案 1(文件检索)更适合结构化数据,并且在需要直接文件访问时
  • 解决方案 2(文本预处理)更适合大型非结构化文档,并且在摘要有价值时

两种解决方案都利用 Azure 的无服务器功能和 Microsoft 的身份验证机制,提供安全、可扩展的企业内容访问。