本高级指南介绍了语义索引如何支持 Retrieval-Augmented Generation (RAG) ,以提供准确的上下文感知 AI 响应。 我们将探讨这些概念如何协同工作,以确保代理从数据中检索相关信息并返回基础答案。
警告
配置
所需的容器类型配置
DiscoverabilityDisabled
属性 discoverabilityDisabled
控制Microsoft 365 是否可以发现特定容器类型中的 驱动器项 。
如果要更新现有容器类型以将此属性设置为 false
,则最多允许 24 小时 ,使配置更改在以下时间之前完全传播:
- 创建新容器,
- 将文件上传到容器,或
- 使用 SPE 代理与文件夹或文件交互。
这可确保代理能够正确访问和显示内容。
下面是如何使用 Set-SPOContainerTypeConfiguration 将 设置为 discoverabilityDisabled
false
的示例
Set-SPOContainerTypeConfiguration -ContainerTypeId 4f0af585-8dcc-0000-223d-661eb2c604e4 -DiscoverabilityDisabled $false
还可以使用 Visual Studio Code SharePoint Embedded 扩展禁用可发现性
CSP 策略
适用于嵌入式聊天主机的内容安全策略 (CSP) 可确保只有指定的主机才能加载聊天组件。 具体而言,设置 CopilotEmbeddedChatHosts
在 Content-Security-Policy 标头中用作 frame-ancestors
值。 这有助于通过限制哪些域可以嵌入聊天组件来保护应用程序。
拥有租户上的 SPE 管理员可以使用 Set-SPOContainerTypeConfiguration
cmdlet 设置此设置:
# Note this MUST be run in Windows PowerShell. It will not work in PowerShell.
Import-Module -Name "Microsoft.Online.SharePoint.PowerShell"
Connect-SPOService "https://<___domain>-admin.sharepoint.com"
# Login with your admin account.
# ...
Set-SPOContainerTypeConfiguration -ContainerTypeId XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX -CopilotEmbeddedChatHosts @("http://localhost:3000", "https://contoso.sharepoint.com", "https://fabrikam.com")
# This will set the container type configuration “CopilotEmbeddedChatHosts” accordingly.
# Replication of this configuration on consuming tenants can take up to 24 hours
# ...
# Confirm setting value
Get-SPOContainerTypeConfiguration -ContainerTypeId XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX
# On a consuming tenant, you may confirm the setting value as follows
Get-SPOApplication -OwningApplicationId <OwningApplicationId> | Select-Object CopilotEmbeddedChatHosts
OwningApplicationId : <OwningApplicationId>
OwningApplicationName : SharePoint Embedded App
Applications : {<OwningApplicationId>}
CopilotEmbeddedChatHosts : {http://localhost:3000, https://contoso.sharepoint.com, https://fabrikam.com}
注意
如果未设置此配置, 则默认情况下,Content-Security-Policy 设置为 frame-祖先:“none”,这意味着没有人可以嵌入代理。
使用租户上的 SharePoint Embedded 管理员可以使用使用租户 cmdlet 替代拥有应用程序指定的值:
-
Set-SPOApplication 以设置
CopilotEmbeddedChatHosts
属性。 -
Get-SPOApplication 以获取
CopilotEmbeddedChatHosts
属性。
注意
使用租户替代必须是拥有租户为 CopilotEmbeddedChatHosts
配置的子集。 使用租户中的管理员无法设置应用程序所有者未为容器类型指定的值。 替代功能旨在使用租户管理员,以便仅在拥有应用程序定义的一部分主机中启用代理。
下面是使用租户如何替代设置的示例:
# Note this MUST be run in Windows PowerShell. It will not work in PowerShell.
Import-Module -Name "Microsoft.Online.SharePoint.PowerShell"
Connect-SPOService "https://<___domain>-admin.sharepoint.com"
# Login with your admin account.
# ...
Set-SPOApplication -OwningApplicationId XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX -CopilotEmbeddedChatHosts @("https://contoso.sharepoint.com", "https://fabrikam.com")
# This will set the container type configuration “CopilotEmbeddedChatHosts” accordingly
# Note that @("https://contoso.sharepoint.com", "https://fabrikam.com") is a subset of what we defined in the owning tenant
# Those values were @("http://localhost:3000", "https://contoso.sharepoint.com", "https://fabrikam.com")
# Confirm the configuration
Get-SPOApplication -OwningApplicationId <OwningApplicationId> | Select-Object CopilotEmbeddedChatHosts
OwningApplicationId : <OwningApplicationId>
OwningApplicationName : SharePoint Embedded App
Applications : {<OwningApplicationId>}
CopilotEmbeddedChatHosts : {https://contoso.sharepoint.com, https://fabrikam.com}
可选配置
身份验证和 3P Cookie
iframe
SharePoint Embedded 代理使用的 使用第三方 Cookie 对用户进行身份验证。 如果在用户的浏览器中禁用了第三方 Cookie,则 iframe 无法自动进行身份验证。 在这种情况下,弹出窗口会提示用户手动登录,确保身份验证仍可以完成。
高级主题
应用程序范围
SharePoint Embedded 代理中的应用程序范围 (SPE 代理) 涉及定义工具运行的边界和上下文,确保其特性和功能经过定制以满足不同应用程序的特定需求。 此过程有助于自定义代理的功能,使其更加有效且与各种用例相关。
当 SPE 代理用户查询 LLM 时,它将仅有权访问 用户+应用程序 有权访问的文件。 代理会话的有效权限将是 SharePoint Embedded 应用程序的权限和用户权限的交集。
信息体系结构
SharePoint Embedded 中的文件自然会 进行语义索引。 此语义索引通过在查询时从存储的内容中提供相关上下文来支撑检索增强生成 (RAG) 工作流。 实质上,它 基于 AI 响应,确保它们直接引用容器中的准确信息,而不是仅依赖一般知识。
使用 SharePoint Embedded 代理,可以进一步将大型语言模型 (LLM) 特定文件或驱动器项的响应。
语义索引
在此处详细了解智能 Microsoft 365 Copilot 副驾驶®的语义索引
语义索引允许根据数据相似性进行快速准确的搜索。 这意味着,它不仅可以通过完全匹配,还可以通过了解上下文和含义来查找最相关的信息。
Retrieval-Augmented 代 (RAG)
RAG 使你能够在运行时引用存储在存储库中的相关源材料。 数据从索引中检索,用于增强发送到大型语言模型的提示 (LLM) 。 RAG 的一些优势:
- 将数据源视为知识,而无需训练模型
- 使用搜索 (检索) 结果作为提示中的其他上下文
- 使用提示和提供的上下文生成输出
LLM 使用数据来通知和构造响应。
基础设置
SPE 代理上下文中的地面是指向与用户提示相关的大型语言模型提供输入源 (LLM) 的过程。 这有助于提高提示的针对性,并确保响应与用户的特定任务相关且可作。 代理所基于的数据将是代理应用程序中容器类型的内容。 在后台,SPE 代理使用智能 Microsoft 365 Copilot 副驾驶®。 详细了解智能 Microsoft 365 Copilot 副驾驶®体系结构。
将代理范围限定为特定内容
SharePoint Embedded (SPE) 代理能够限制其有权访问的数据源。 下面的示例代码显示了可用的数据源类型。 此示例 演示如何配置 SDK。
export type IDataSourcesProps =
| IFileDataSource
| IFolderDataSource
| IDocumentLibraryDataSource
| ISiteDataSource
| IWorkingSetDataSource
| IMeetingDataSource;
export enum DataSourceType {
File = 'File',
Folder = 'Folder',
DocumentLibrary = 'DocumentLibrary',
Site = 'Site',
WorkingSet = 'WorkingSet',
Meeting = 'Meeting'
}
用于确定范围时支持的文档类型
文档:PDF、DOCX、XLSX、PPTX
基于文本的文件:RTF、TXT、CSV、LOG、INI、CONFIG
音频:WAV
编程语言:PY、JS、JSX、JAVA、PHP、CS、CPP、CXX、H、HPP、M、COFFEE、DART、LUA、PL、PM、RB、RS、SWIFT、GO、KT、KTS、R、SCALA、T、T、TS、TSX
Shell 脚本:BASH、SH、ZSH
标记和文档:HTML、CSS、MD、RMD、TEX、LATEX
数据库语言:SQL
数据序列化格式:IPYNB、JSON、TOML、YAML、YML
语言/区域设置
代理 iframe
动态加载本地化设置,以确保聊天界面以适当的语言显示。 这些设置派生自 SharePoint,SharePoint 提供一组全面的本地化选项。
初始化代理 iframe 时,它会从 SharePoint 检索当前本地化设置。 这些设置决定了聊天界面的语言和区域首选项,确保所有 UI 元素、消息和交互都以用户的首选语言呈现。
可以通过在 SharePoint 帐户设置中设置语言选项来本地化此内容:更改个人语言和区域设置 - Microsoft 支持部门。
注意
如果 M365 语言设置与 SharePoint 帐户语言设置不同,则 M365 语言设置优先。 可在此处更改 M365 语言设置: 更改 Microsoft 365 中的显示语言。
可以通过 传入 ChatLaunchConfig
其他区域设置选项,以进一步设置代理响应的语言:
const [chatConfig] = React.useState<ChatLaunchConfig>({
header: ChatController.instance.header,
theme: ChatController.instance.theme,
zeroQueryPrompts: ChatController.instance.zeroQueryPrompts,
suggestedPrompts: ChatController.instance.suggestedPrompts,
instruction: ChatController.instance.pirateMetaPrompt,
locale: "en",
});
区域设置选项
下面是一些可以使用的区域设置选项示例:
区域设置代码 | 公用名 |
---|---|
af | 南非荷兰语 |
en-gb | 英语 (英国) |
he | 希伯来语 |
kok | 孔卡尼语 |
nn-no | 挪威语(尼诺斯克语) |
sr-latn-rs | 塞尔维亚语(拉丁语,塞尔维亚) |
am-et | 阿姆哈拉语 |
es | 西班牙语 |
hi | 印地语 |
lb-lu | 卢森堡语 |
or-in | 奥迪亚 (印度) |
sv | 瑞典语 |
ar | 阿拉伯语 |
es-mx | 西班牙语(墨西哥) |
hr | 克罗地亚语 |
瞧 | 老挝语 |
pa | 旁遮普语 |
ta | 泰米尔语 |
as-in | 阿萨姆语 |
et | 爱沙尼亚语 |
hu | 匈牙利语 |
lt | 立陶宛语 |
pl | 波兰语 |
te | 泰卢固语 |
az-latn-az | 阿塞拜疆语 (拉丁语、阿塞拜疆) |
eu | Basque |
hy | 亚美尼亚语 |
lv | 拉脱维亚语 |
pt-br | 葡萄牙语(巴西) |
th | 泰语 |
bg | 保加利亚语 |
fa | 波斯语 |
id | 印度尼西亚语 |
mi-nz | 毛利语(新西兰) |
pt-pt | 葡萄牙语(葡萄牙) |
tr | 土耳其语 |
bs-latn-ba | 波斯尼亚语(拉丁语,波斯尼亚和黑塞哥维那) |
fi | 芬兰语 |
is | 冰岛语 |
mk | 马其顿语 |
quz-pe | 盖丘亚语(秘鲁) |
tt | 鞑靼语 |
ca-es 瓦伦西亚 | 加泰罗尼亚 (巴伦西亚语) |
fil-ph | 菲律宾语(菲律宾) |
it | 意大利语 |
ml | 马拉雅拉姆语 |
ro | 罗马尼亚语 |
ug | 维吾尔语 |
ca | 加泰罗尼亚语 |
fr-ca | 法语(加拿大) |
ja | 日语 |
mr | 马拉地语 |
ru | 俄语 |
uk | 乌克兰语 |
cs | 捷克语 |
fr | 法语 |
ka | 格鲁吉亚语 |
ms | Malay |
sk | 斯洛伐克语 |
ur | 乌尔都语 |
cy-gb | 威尔士 (英国) |
ga-ie | 爱尔兰语(爱尔兰) |
kk | 哈萨克语 |
mt-mt | 马耳他语(马耳他) |
sl | 斯洛文尼亚语 |
uz-latn-uz | 乌兹别克语 (拉丁语,乌兹别克斯坦) |
da | 丹麦语 |
gd | 苏格兰盖尔语 |
km-kh | 高棉语(柬埔寨) |
nb-no | 挪威语(博克马尔) |
sq | 阿尔巴尼亚语 |
vi | 越南语 |
de | 德语 |
gl | 加利西亚语 |
kn | 卡纳达语 |
ne-np | 尼泊尔语(尼泊尔) |
sr-cyrl-ba | 塞尔维亚语 (西里尔文,波斯尼亚-黑塞哥维那) |
zh-cn | 中文(简体) |
el | 希腊语 |
gu | 古吉拉特语 |
ko | 朝鲜语 |
nl | 荷兰语 |
sr-cyrl-rs | 塞尔维亚语(西里尔文,塞尔维亚) |
zh-tw | 中文(繁体) |