当前位置: 首页 > news >正文

使用 Azure OpenAI 服务对数据进行联合 SharePoint 搜索

作者:来自 Elastic  Gustavo Llermaly

使用 Azure OpenAI 服务处理你的数据,并使用 Elastic 作为向量数据库。

在本文中,我们将探索 Azure OpenAI 服务 “On Your Data”,使用 Elasticsearch 作为数据源。我们将使用 Elastic Sharepoint Online Native 连接器来索引我们的 Sharepoint 文档并使其保持同步。

假设我们有一个 Sharepoint 网站,其中包含有关公司和员工的信息,我们想使用自定义应用程序与其聊天。设计和开发该架构通常需要一些时间。你必须负责提取,然后设置搜索引擎,然后配置 RAG 系统,该系统从数据源读取并将信息传递给 LLM 以回答问题。幸运的是,我们可以使用 Elastic 和 Azure 来加快这一速度!

步骤

  • 设置 Sharepoint 连接器
  • 设置 Azure OpenAI 服务
  • 高级用法
  • 文档级安全性 (DLS)

设置 Sharepoint 连接器

我们将创建一个包含以下文档的 Sharepoint 站点:

PE_Payslip.docx

该文件包含有关 Planet Express 公司的公开信息。

PE_Payslip.docx

这份文件包含 Planet Express 的工资单,具体来说是 CEO 的工资。我们不想让每个人都知道这些信息。

为了将我们的站点文档导入 Elastic,然后在添加或修改文件时保持它们同步,我们将使用 Elastic Sharepoint Online 连接器。第一步是准备好你的 Sharepoint 环境。你可以在此处找到有关如何设置的详细说明。

创建和配置 Sharepoint Online 应用程序后,你可以继续在 Elastic 中创建连接器索引:

创建 SharePoint Online 连接器

下一步是使用 Kibana Content UI 对文档主体进行向量化,以便我们可以对它们运行向量搜索:

创建向量字段

我们将使用 Elastic 的开箱即用的 e5-multilingual 模型,但你可以加入任何你想要的兼容嵌入模型,或者通过 Open Inference Service 使用 OpenAI 等外部提供商。你也可以重复此过程,并根据需要添加更多字段。

配置连接器索引后,我们可以运行同步以开始索引文档:

如果一切顺利,你应该会在 “Documents” 选项卡中看到你的文档:

默认情况下,连接器将提取不同类型的文档,如列表、列表项和网站。在本文中,我们只对文档感兴趣,因此让我们在连接器中应用过滤器来实现此目的。

此过滤器将排除列表和与集合相关的文档。你必须运行完整内容同步才能应用此过滤器。

设置 Azure OpenAI 服务

最简单的设置是转到 Azure AI Studio,并添加 Elasticsearch 作为聊天数据源:

选中自定义映射复选框以与连接器设置保持一致

我们可以在 keyword 或 vector 之间进行选择,让我们从 keyword 开始。

现在我们可以将连接器的映射与 Azure 将用于查询的字段对齐。

我们可以开始对我们的文档提问了!让我们开始询问有关 Planet Express 的问题:

我们可以开始对我们的文件提出问题了!让我们开始询问 Planet Express:

如果我们询问 CEO 的薪水怎么办?

我们可能不想公开这些信息。

让我们解决这个问题!

高级用法

Azure AI Studio 聊天并不是使用此服务的唯一方式。Azure OpenAI On Your Data 可以部署到 Copilot、Teams 或使用 API/SDK。我们将采用后者。

先决条件

  • 配置从用户到 Azure OpenAI 资源的角色分配。所需角色:Cognitive Services OpenAI User。
  • 安装 Az CLI 并运行 az login。选择你的订阅后,将打开一个网页以对你进行身份验证。
  • 定义以下变量:AzureOpenAIEndpoint、ChatCompletionsDeploymentName、SearchEndpoint、IndexName、Key。

要查找 AzureOpenAIEndpoint、ChatCompletionsDeploymentName,你可以单击聊天中的 “View Code” 选项卡:

从这里复制 endpoint 和 deployment 值。

SearchEndpoint、IndexName、Key 是 Elasticsearch URL、索引名称和 API 密钥。

我们将使用 python。首先安装所需的依赖项:

pip install openai azure-identity

现在添加你收集的值。你也可以将它们存储为环境变量:

import os
from openai import AzureOpenAI
from azure.identity import DefaultAzureCredential, get_bearer_token_providerendpoint = os.getenv("ENDPOINT_URL", "<Endpoint_value>")
deployment = os.getenv("DEPLOYMENT_NAME", "<Deployment_value")
index_name = os.environ.get("IndexName", "sharepoint-labs")
search_endpoint = os.environ.get("SearchEndpoint", "<Elasticsearch_endpoint")
key = os.environ.get("Key", "<Elasticsearch_ApiKey>")

现在让我们继续将 API 调用添加到文件中:

token_provider = get_bearer_token_provider(DefaultAzureCredential(), "https://cognitiveservices.azure.com/.default")client = AzureOpenAI(azure_endpoint=endpoint,azure_ad_token_provider=token_provider,api_version="2024-02-15-preview",
)completion = client.chat.completions.create(model=deployment,messages=[{"role": "user","content": "What is the CEO salary?",},],extra_body={"data_sources": [{"type": "elasticsearch","parameters": {"endpoint": search_endpoint,"index_name": index_name,"authentication": {"type": "encoded_api_key","encoded_api_key": key}},"query_type": "simple","fields_mapping": {"content_fields_separator": "\n","content_fields": ["body"],"filepath_field": "name","title_field": "Title","url_field": "webUrl","vector_fields": ["ml.inference.body.predicted_value"]},}]}
)print(completion.model_dump_json(indent=2))

运行脚本:

python myscript.py

我们得到了相同的答案。

{"id": "01b421b9-212c-4a95-b4b8-072bbd2972dc","choices": [{"finish_reason": "stop","index": 0,"logprobs": null,"message": {"content": "The CEO's salary is 1 jillion per month .","refusal": null,"role": "assistant","function_call": null,"tool_calls": null,"end_turn": true,"context": {"citations": [{"content": "https://1fbkbs.sharepoint.com/_layouts/15/download.aspx?UniqueId=51621a8b-cede-4396-b42c-7f4bd54607b6&amp;Translate=false&amp;tempauth=v1.eyJzaXRlaWQiOiJiN2Q3NzBjMC03ZTgwLTQ5OTMtOTZjZC1hOGY3YjMxZWUyYmQiLCJhcHBfZGlzcGxheW5hbWUiOiJzcC1sYWJzIiwiYXVkIjoiMDAwMDAwMDMtMDAwMC0wZmYxLWNlMDAtMDAwMDAwMDAwMDAwLzFmYmticy5zaGFyZXBvaW50LmNvbUA5MTVkYzNkOS04NTI2LTRhODYtYTc4My02MDc1OTVkMzMxZjUiLCJleHAiOiIxNzI3OTY1MTczIn0.CgoKBHNuaWQSAjQ4EgsI-Jr32YHusT0QBRoNMjAuMTkwLjEzMi40MCosdW02Ym9VYzVMdTZGRXNuc1hrL2UwenA3QW1iWFRlM1BkQUovd2RTakNHbz0wdTgBQhChVktf74AAYI8XRwPrhkUMShBoYXNoZWRwcm9vZnRva2VuegExugE3Z3JvdXAucmVhZCBhbGxzaXRlcy5yZWFkIGFsbGZpbGVzLnJlYWQgYWxscHJvZmlsZXMucmVhZMIBSTIyNjk4YTdkLTRhZmQtNGJhNS1iMzMyLTNiMzA2NGRkYjFiNkA5MTVkYzNkOS04NTI2LTRhODYtYTc4My02MDc1OTVkMzMxZjXIAQE.kCyzpMNSnJKjdCpubfkQ_L7XvMZBFMseOjZQwHl_EEk\n#microsoft.graph.driveItem\nPlanet Express Interplanetary Payslip Employee name: Philip J. Fry Position: CEO Pay period: July 2024 Currency: Jillions PAYMENTS DEDUCTIONS YEAR TO DATE Basic Salary 1 jillion Taxes 0 Total pay to date: 1 jillion Taxable pay to date: 0 Tax paid to date: 0 THIS MONTH Gross pay: 1 jillion Income tax: 0 Total gross payments: 1 jillion Total deductions: 0 Net pay: 1 jillion\n01BV67HZ4LDJRFDXWOSZB3ILD7JPKUMB5W\nPE_payslip.docx\ndrive_item\nhttps://1fbkbs.sharepoint.com/_layouts/15/Doc.aspx?sourcedoc=%7B51621A8B-CEDE-4396-B42C-7F4BD54607B6%7D&amp;file=PE_payslip.docx&amp;action=default&amp;mobileredirect=true","title": null,"url": null,"filepath": null,"chunk_id": "0"},{"content": "https://1fbkbs.sharepoint.com/_layouts/15/download.aspx?UniqueId=d771ceaa-e47f-4fc1-bda1-64a1c55d6e48&amp;Translate=false&amp;tempauth=v1.eyJzaXRlaWQiOiJiN2Q3NzBjMC03ZTgwLTQ5OTMtOTZjZC1hOGY3YjMxZWUyYmQiLCJhcHBfZGlzcGxheW5hbWUiOiJzcC1sYWJzIiwiYXVkIjoiMDAwMDAwMDMtMDAwMC0wZmYxLWNlMDAtMDAwMDAwMDAwMDAwLzFmYmticy5zaGFyZXBvaW50LmNvbUA5MTVkYzNkOS04NTI2LTRhODYtYTc4My02MDc1OTVkMzMxZjUiLCJleHAiOiIxNzI3OTY1MTczIn0.CgoKBHNuaWQSAjQ4EgsI-Jr32YHusT0QBRoNMjAuMTkwLjEzMi40MCosc1NiQlBlQU9sZEVMWUUxMmVodnNTK3NSMmx4blJsOGoybGR0N1Zxeko5Zz0wdTgBQhChVktf74AAYI8XRwPrhkUMShBoYXNoZWRwcm9vZnRva2VuegExugE3Z3JvdXAucmVhZCBhbGxzaXRlcy5yZWFkIGFsbGZpbGVzLnJlYWQgYWxscHJvZmlsZXMucmVhZMIBSTIyNjk4YTdkLTRhZmQtNGJhNS1iMzMyLTNiMzA2NGRkYjFiNkA5MTVkYzNkOS04NTI2LTRhODYtYTc4My02MDc1OTVkMzMxZjXIAQE.eN2threRzN2AZvYmPTCsNsKy1x-MLV_RbDq_yzSexG8\n#microsoft.graph.driveItem\nPlanet Express Interplanetary Our Company Planet Express, Inc. is an intergalactic delivery company owned and operated by Professor Farnsworth to fund his research. Founded in 2961, its headquarters is located in New New York, and its crew includes many important characters of the series. The current crew reached their 100th delivery in September 3010, and to celebrate, Bender threw a 100th-delivery party. The inaugural delivery crew, which disappeared on its first interplanetary mission, was found alive in June 3011. The company scrapes by, in spite of fierce competition from the leader in package delivery, Mom's Friendly Delivery Company. They stay in business thanks to their complete disregard for safety and minimum wage laws, and the Professor's unscrupulous acceptance of the occasional bribe.\n01BV67HZ5KZZY5O77EYFH33ILEUHCV23SI\nPlanet_Express.docx\ndrive_item\nhttps://1fbkbs.sharepoint.com/_layouts/15/Doc.aspx?sourcedoc=%7BD771CEAA-E47F-4FC1-BDA1-64A1C55D6E48%7D&amp;file=Planet_Express.docx&amp;action=default&amp;mobileredirect=true","title": null,"url": null,"filepath": null,"chunk_id": "0"}],"intent": "[\"CEO salary\", \"current CEO salary\", \"CEO compensation\"]"}}}],"created": 1727985189,"model": "gpt-4o","object": "extensions.chat.completion","service_tier": null,"system_fingerprint": "fp_67802d9a6d","usage": {"completion_tokens": 28,"prompt_tokens": 3658,"total_tokens": 3686,"completion_tokens_details": null,"prompt_tokens_details": null}
}

不同之处在于,现在我们可以根据每个请求覆盖 ​​Elasticsearch 设置。

文档级安全性 (Document Level Security - DLS)

我们如何保护文档?Elastic 提供了镜像 Sharepoint 安全权限的工具,因此,根据提问者的身份,我们可以根据他们在 Sharepoint 上拥有的权限来检索或不检索文档,以回答问题。我们将为此使用文档级安全性 (DLS)。

事实上,工资单信息不会与网站成员共享,只有网站所有者和管理员才能使用:

让我们首先在连接器中运行访问控制同步来填充安全索引:

现在我们可以预期安全索引会收集每个文档/用户的权限。

让我们获取一个用户。转到 Kibana DevTools 并运行以下命令:

GET .search-acl-filter-sharepoint-labs/_search

响应:

{"_index": ".search-acl-filter-sharepoint-labs","_id": "LeeG@1fbkbs.onmicrosoft.com","_score": 1,"_source": {"created_at": "2024-07-16T07:28:22","id": "LeeG@1fbkbs.onmicrosoft.com","_timestamp": "2024-08-05T00:42:48.058411+00:00","identity": {"user_id": "user_id:2f7a1527-da11-4738-ad9d-0f6be1acb6a7","email": "email:LeeG@1fbkbs.onmicrosoft.com","username": "user:LeeG@1fbkbs.onmicrosoft.com"},"query": {"template": {"source": """{"bool": {"should": [{"bool": {"must_not": {"exists": {"field": "_allow_access_control"}}}},{"terms": {"_allow_access_control.enum": {{#toJson}}access_control{{/toJson}}}}]}}""","params": {"access_control": ["group:038fae1d-6ea3-485a-83b9-4362b54a14f5","user_id:2f7a1527-da11-4738-ad9d-0f6be1acb6a7","group:d11975c2-4fe8-45fd-9789-cbf37d4f115d","group:c0c350fa-37b0-476a-829d-733800cfbeea","group:70ddf71e-c04e-4202-b0ab-d4fd78921b72","group:829ee542-eb93-40f5-9790-688457a2b0f5","email:LeeG@1fbkbs.onmicrosoft.com","user:LeeG@1fbkbs.onmicrosoft.com","group:62ab5abe-bac2-4fc7-9b5f-92985b8ae69c"]}}}}}

该用户是网站成员,因此非常适合测试权限。

从这里我们可以从前面的响应中获取 query.template 部分,并为用户 LeeG 创建一个 API 密钥,执行以下操作:

POST /_security/api_key
{"name": "LeeG-api-key","expiration": "30d","role_descriptors": {"sharepoint-online-role": {"index": [{"names": ["sharepoint-labs"],"privileges": ["read","view_index_metadata"],"query": {"template": {"params": {"access_control": ["group:038fae1d-6ea3-485a-83b9-4362b54a14f5","user_id:2f7a1527-da11-4738-ad9d-0f6be1acb6a7","group:d11975c2-4fe8-45fd-9789-cbf37d4f115d","group:c0c350fa-37b0-476a-829d-733800cfbeea","group:70ddf71e-c04e-4202-b0ab-d4fd78921b72","group:829ee542-eb93-40f5-9790-688457a2b0f5","email:LeeG@1fbkbs.onmicrosoft.com","user:LeeG@1fbkbs.onmicrosoft.com","group:62ab5abe-bac2-4fc7-9b5f-92985b8ae69c"]},"source":"""{"bool": {"should": [{"bool": {"must_not": {"exists": {"field": "_allow_access_control"}}}},{"terms": {"_allow_access_control.enum": {{#toJson}}access_control{{/toJson}}}}]}}"""}}}]}}
}

响应将是具有 LeeG 组权限的 ApiKey:

{"id": "rpgMIJEBvlvLsU6BeL5O","name": "LeeG-api-key","expiration": 1725411573838,"api_key": "S3Q4XCNuTeu9fPITZNmLfA","encoded": "cnBnTUlKRUJ2bHZMc1U2QmVMNU86UzNRNFhDTnVUZXU5ZlBJVFpObUxmQQ=="
}

从这里获取 encoded 的值,以便在将来使用 Azure OpenAI On Your Data 进行调用时使用。如果你使用此 ApiKey,你将只能在 sharepoint-labs 连接器索引中看到 LeeG 的用户具有权限的文档。

让我们再试一次,现在使用 LeeG-api-key API 密钥:

completion = client.chat.completions.create(model=deployment,messages=[{"role": "user","content": "What is the CEO Salary?",},],extra_body={"data_sources": [{"type": "elasticsearch","parameters": {"endpoint": search_endpoint,"index_name": index_name,"authentication": {"type": "encoded_api_key","encoded_api_key": key # Our new API Key goes here}},"query_type": "simple","fields_mapping": {"content_fields_separator": "\n","content_fields": ["body"],"filepath_field": "name","title_field": "Title","url_field": "webUrl","vector_fields": ["ml.inference.body.predicted_value"]},}]}
)
print(completion.model_dump_json(indent=2))

响应:

{"id": "564eb9d5-5321-41d9-97c5-5abd9323b2d2","choices": [{"finish_reason": "stop","index": 0,"logprobs": null,"message": {"content": "The requested information is not available in the retrieved data. Please try another query or topic.","refusal": null,"role": "assistant","function_call": null,"tool_calls": null,"end_turn": true,"context": {"citations": [{"content": "https://1fbkbs.sharepoint.com/_layouts/15/download.aspx?UniqueId=d771ceaa-e47f-4fc1-bda1-64a1c55d6e48&amp;Translate=false&amp;tempauth=v1.eyJzaXRlaWQiOiJiN2Q3NzBjMC03ZTgwLTQ5OTMtOTZjZC1hOGY3YjMxZWUyYmQiLCJhcHBfZGlzcGxheW5hbWUiOiJzcC1sYWJzIiwiYXVkIjoiMDAwMDAwMDMtMDAwMC0wZmYxLWNlMDAtMDAwMDAwMDAwMDAwLzFmYmticy5zaGFyZXBvaW50LmNvbUA5MTVkYzNkOS04NTI2LTRhODYtYTc4My02MDc1OTVkMzMxZjUiLCJleHAiOiIxNzI3OTY1MTczIn0.CgoKBHNuaWQSAjQ4EgsI-Jr32YHusT0QBRoNMjAuMTkwLjEzMi40MCosc1NiQlBlQU9sZEVMWUUxMmVodnNTK3NSMmx4blJsOGoybGR0N1Zxeko5Zz0wdTgBQhChVktf74AAYI8XRwPrhkUMShBoYXNoZWRwcm9vZnRva2VuegExugE3Z3JvdXAucmVhZCBhbGxzaXRlcy5yZWFkIGFsbGZpbGVzLnJlYWQgYWxscHJvZmlsZXMucmVhZMIBSTIyNjk4YTdkLTRhZmQtNGJhNS1iMzMyLTNiMzA2NGRkYjFiNkA5MTVkYzNkOS04NTI2LTRhODYtYTc4My02MDc1OTVkMzMxZjXIAQE.eN2threRzN2AZvYmPTCsNsKy1x-MLV_RbDq_yzSexG8\n#microsoft.graph.driveItem\nPlanet Express Interplanetary Our Company Planet Express, Inc. is an intergalactic delivery company owned and operated by Professor Farnsworth to fund his research. Founded in 2961, its headquarters is located in New New York, and its crew includes many important characters of the series. The current crew reached their 100th delivery in September 3010, and to celebrate, Bender threw a 100th-delivery party. The inaugural delivery crew, which disappeared on its first interplanetary mission, was found alive in June 3011. The company scrapes by, in spite of fierce competition from the leader in package delivery, Mom's Friendly Delivery Company. They stay in business thanks to their complete disregard for safety and minimum wage laws, and the Professor's unscrupulous acceptance of the occasional bribe.\n01BV67HZ5KZZY5O77EYFH33ILEUHCV23SI\nPlanet_Express.docx\ndrive_item\nhttps://1fbkbs.sharepoint.com/_layouts/15/Doc.aspx?sourcedoc=%7BD771CEAA-E47F-4FC1-BDA1-64A1C55D6E48%7D&amp;file=Planet_Express.docx&amp;action=default&amp;mobileredirect=true","title": null,"url": null,"filepath": null,"chunk_id": "0"}],"intent": "[\"CEO salary\", \"current CEO salary\", \"CEO compensation\"]"}}}],"created": 1727985521,"model": "gpt-4o","object": "extensions.chat.completion","service_tier": null,"system_fingerprint": "fp_67802d9a6d","usage": {"completion_tokens": 31,"prompt_tokens": 2952,"total_tokens": 2983,"completion_tokens_details": null,"prompt_tokens_details": null}
}

太棒了!现在 CEO 的私人文件受到保护了。

我们可以尝试另一个问题,现在与 Lee 可以看到的文档相关,例如 Planet Express 信息文档。

尝试再次运行 python 文件,但现在将消息切换为:

{"role": "user","content": "What is Planet Express?"
}

回答:

"Planet Express, Inc. is an intergalactic delivery company owned and operated by Professor Farnsworth to fund his research. Founded in 2961, its headquarters is located in New New York. The company has a crew that includes many important characters from the series it is featured in. Despite fierce competition from the leading package delivery company, Mom's Friendly Delivery Company, Planet Express manages to stay in business by disregarding safety and minimum wage laws and occasionally accepting bribes..."

奖励:向量搜索

我们也将文档存储为向量,因此我们可以利用 Azure 向量查询类型。你可以在 UI 中选择查询类型为 vector:

如你所见,它将自动从 Elasticsearch 中检测模型。

它还将自动检测向量字段。你必须填写其余字段以进行引用。

或者通过以下方式使用 SDK:

token_provider = get_bearer_token_provider(DefaultAzureCredential(), "https://cognitiveservices.azure.com/.default")client = AzureOpenAI(azure_endpoint=endpoint,azure_ad_token_provider=token_provider,api_version="2024-02-15-preview",
)completion = client.chat.completions.create(model=deployment,messages=[{"role": "user","content": "What is Planet Express?",},],extra_body={"data_sources": [{"type": "elasticsearch","parameters": {"endpoint": search_endpoint,"index_name": index_name,"authentication": {"type": "encoded_api_key","encoded_api_key": key}},"query_type": "vector","embedding_dependency": {"type": "model_id","model_id": ".multilingual-e5-small_linux-x86_64"},"fields_mapping": {"content_fields_separator": "\n","content_fields": ["body"],"filepath_field": "name","title_field": "Title","url_field": "webUrl","vector_fields": ["ml.inference.body.predicted_value"]},}]}
)print(completion.model_dump_json(indent=2))

结论

Azure OpenAI “On Your Data” 服务是一种工具,可让你快速与数据进行聊天,而无需训练或微调模型。与 Elastic SharePoint 连接器结合使用,它允许你控制谁有权访问你的数据,以防止任何安全漏洞,使它们成为扎实的聊天问题的绝佳组合。

Elasticsearch 与行业领先的 Gen AI 工具和提供商进行了原生集成。查看我们的网络研讨会,了解如何超越 RAG 基础知识,或构建可用于生产环境的应用程序 Elastic Vector Database。

要为你的用例构建最佳搜索解决方案,请立即开始免费云试用或在你的本地机器上试用 Elastic。

原文:Federated SharePoint searches with Azure OpenAI Service On your data - Search Labs

相关文章:

使用 Azure OpenAI 服务对数据进行联合 SharePoint 搜索

作者&#xff1a;来自 Elastic Gustavo Llermaly 使用 Azure OpenAI 服务处理你的数据&#xff0c;并使用 Elastic 作为向量数据库。 在本文中&#xff0c;我们将探索 Azure OpenAI 服务 “On Your Data”&#xff0c;使用 Elasticsearch 作为数据源。我们将使用 Elastic Shar…...

JavaScript学习笔记 1】初识JS

目录 一、JS是什么&#xff1f; 二、JS的作用&#xff1f; 三、JS的组成 四、JS的书写位置 1. 内部JS 2. 外部JS(外部导入) 3. 内联JS 4. 练习 五、JS的注释与结束符 1. 注释 2. 结束符 3. JS该不该加分号&#xff1f; 六、JS的输入和输出语法 1. 输出语法 a. 输出在页面中 b. …...

Linux-Samba

文章目录 Samba配置服务配置 &#x1f3e1;作者主页&#xff1a;点击&#xff01; &#x1f916;Linux专栏&#xff1a;点击&#xff01; ⏰️创作时间&#xff1a;2024年11月18日13点20分 Samba配置 Samba是一个能让 Linux 系统应用与 Microsoft 网络通讯协议的软件&#x…...

【Java Web】JSON 以及 JSON 转换

JSON&#xff08;JavaScript Object Notation&#xff09;一种灵活、高效、轻量级的数据交换格式&#xff0c;广泛应用于各种数据交换和存储场景。 基本特点 1、简单易用&#xff1a;JSON格式非常简单&#xff0c;易于理解和使用。 2、轻量级&#xff1a;相比XML等其他数据格…...

Qt 元对象系统

Qt 元对象系统 Qt 元对象系统1. 元对象的概念2. 元对象系统的核心组件2.1 QObject2.2 Q_OBJECT 宏2.3 Meta-Object Compiler (MOC) 3. 信号与槽3.1 基本概念信号与槽的本质信号和槽的关键特征 3.2 绑定信号与槽参数解析断开连接 3.3 标准信号与槽查找标准信号与槽使用示例规则与…...

鸿蒙实战:使用隐式Want启动Ability

文章目录 1. 实战概述2. 实现步骤2.1 创建鸿蒙应用项目2.2 修改Index.ets代码2.3 创建LuzhouAbility2.4 创建Luzhou页面2.5 设置模块配置文件 3. 测试效果4. 实战总结 1. 实战概述 本次鸿蒙应用实战&#xff0c;先创建项目“ImplicitWantStartAbility”&#xff0c;接着修改In…...

go-zero(二) api语法和goctl应用

go-zero api语法和goctl应用 在实际开发中&#xff0c;我们更倾向于使用 goctl 来快速生成代码。 goctl 可以根据 api快速生成代码模板&#xff0c;包括模型、逻辑、处理器、路由等&#xff0c;大幅提高开发效率。 一、构建api demo 现在我们通过 goctl 创建一个最小化的 HT…...

java 操作Mongodb

CRUD基础操作 Springboot 操作 MongoDB 有两种方式。 第一种方式是采用 Springboot 官方推荐的 JPA 方式&#xff0c;这种操作方式&#xff0c;使用简单但是灵活性比较差。第二种方式是采用 Spring Data MongoDB 封装的 MongoDB 官方 Java 驱动 MongoTemplate 对 MongoDB 进行…...

以Java为例,实现一个简单的命令行图书管理系统,包括添加图书、删除图书、查找图书等功能。

江河湖海中的代码之旅&#xff1a;打造你的命令行图书管理系统 一、系统简介 1. Java简介 Java&#xff0c;这个编程语言界的“瑞士军刀”&#xff0c;自1995年诞生以来就以其跨平台的特性和强大的生态系统征服了无数开发者的心。想象一下&#xff0c;Java就像是一条蜿蜒曲折…...

[JavaWeb]微头条项目

完整笔记和项目代码&#xff1a; https://pan.baidu.com/s/1PZBO0mfpwDPic4Ezsk8orA?pwdwwp5 提取码: wwp5 JavaWeb-微头条项目开发 1 项目简介 1.1 业务介绍 微头条新闻发布和浏览平台,主要包含业务如下 用户功能 注册功能登录功能 头条新闻 新闻的分页浏览通过标题关键字搜…...

Linux(CentOS)安装达梦数据库 dm8

CentOS版本&#xff1a;CentOS 7&#xff0c;查看操作系统版本信息&#xff0c;请查阅 查看Linux内核版本信息 达梦数据库版本&#xff1a;dm8 一、获取 dm8 安装文件 1、下载安装文件 打开达梦官网&#xff1a;https://www.dameng.com/ 下载的文件 解压后的文件 2、上传安…...

【专题】中国企业出海洞察报告暨解码全球制胜之道报告汇总PDF洞察(附原数据表)

原文链接&#xff1a;https://tecdat.cn/?p38314 在当今全球化的浪潮中&#xff0c;中国企业的出海行动正以前所未有的规模和速度展开&#xff0c;成为全球经济舞台上的重要力量。本报告旨在对 2024 年中国企业出海情况进行深度洞察&#xff0c;涵盖多个领域和视角。 从对外投…...

[ 跨域问题 ] 前后端以及服务端 解决跨域的各种方法

这篇文章主要介绍了跨域问题&#xff0c;包括其定义、产生原因及各种解决方法。原因是浏览器安全策略限制&#xff0c;方法有 JSONP、CORS、Domain、 postMessage、Nginx配置、.NetCore配置。 前言 什么是跨域问题? 在Web应用中&#xff0c;当一个网页的脚本试图去请求另一个域…...

网络安全之信息收集-实战-2

请注意&#xff0c;本文仅供合法和授权的渗透测试使用&#xff0c;任何未经授权的活动都是违法的。 目录 7、网络空间引擎搜索 8、github源码泄露 9、端口信息 10、框架指纹识别 11、WAF识别 12、后台查找 7、网络空间引擎搜索 FOFA&#xff1a;https://fofa.info/ 360 …...

利用飞书多维表格自动发布版本

文章目录 背景尝试1&#xff0c;轮询尝试2&#xff0c;长连接 背景 博主所在的部门比较奇特&#xff0c;每个车型每周都需要发版&#xff0c;所以实际上一周会发布好几个版本。经过之前使用流水线自动发版改造之后&#xff0c;发版的成本已经大大降低了&#xff0c;具体参考&a…...

深入内核讲明白Android Binder【一】

深入内核讲明白Android Binder【一】 前言一、Android Binder应用编写概述二、基于C语言编写Android Binder跨进程通信Demo0. Demo简介1. 服务的管理者server_manager.c2. Binder服务端代码实现 test_service.c2.1 实现思路2.2 完整实现代码 3. Binder客户端代码实现 test_clie…...

Photoshop(PS)——人像磨皮

1.新建一个文件&#xff0c;背景为白色&#xff0c;将图片素材放入文件中 2.利用CtrlJ 复制两个图层出来&#xff0c;选择第一个拷贝图层&#xff0c;选择滤镜---杂色---蒙尘与划痕 3.调整一下数值&#xff0c;大概能够模糊痘印痘坑&#xff0c;点击确定。 4.然后选择拷贝2图层…...

如何用Excel批量提取文件夹内所有文件名?两种简单方法推荐

在日常办公中&#xff0c;我们有时需要将文件夹中的所有文件名整理在Excel表格中&#xff0c;方便管理和查阅。手动复制文件名既费时又易出错&#xff0c;因此本文将介绍两种利用Excel自动提取文件夹中所有文件名的方法&#xff0c;帮助你快速整理文件信息。 方法一&#xff1…...

YOLOv8改进,YOLOv8通过RFAConv卷积创新空间注意力和标准卷积,包括RFCAConv, RFCBAMConv,二次创新C2f结构,助力涨点

摘要 空间注意力已广泛应用于提升卷积神经网络(CNN)的性能,但它存在一定的局限性。作者提出了一个新的视角,认为空间注意力机制本质上解决了卷积核参数共享的问题。然而,空间注意力生成的注意力图信息对于大尺寸卷积核来说是不足够的。因此,提出了一种新型的注意力机制—…...

【实验11】卷积神经网络(2)-基于LeNet实现手写体数字识别

&#x1f449;&#x1f3fc;目录&#x1f448;&#x1f3fc; &#x1f352;1. 数据 1.1 准备数据 1.2 数据预处理 &#x1f352;2. 模型构建 2.1 模型测试 2.2 测试网络运算速度 2.3 输出模型参数量 2.4 输出模型计算量 &#x1f352;3. 模型训练 &#x1f352;4.模…...

未来机器人的大脑:如何用神经网络模拟器实现更智能的决策?

编辑&#xff1a;陈萍萍的公主一点人工一点智能 未来机器人的大脑&#xff1a;如何用神经网络模拟器实现更智能的决策&#xff1f;RWM通过双自回归机制有效解决了复合误差、部分可观测性和随机动力学等关键挑战&#xff0c;在不依赖领域特定归纳偏见的条件下实现了卓越的预测准…...

GC1808高性能24位立体声音频ADC芯片解析

1. 芯片概述 GC1808是一款24位立体声音频模数转换器&#xff08;ADC&#xff09;&#xff0c;支持8kHz~96kHz采样率&#xff0c;集成Δ-Σ调制器、数字抗混叠滤波器和高通滤波器&#xff0c;适用于高保真音频采集场景。 2. 核心特性 高精度&#xff1a;24位分辨率&#xff0c…...

排序算法总结(C++)

目录 一、稳定性二、排序算法选择、冒泡、插入排序归并排序随机快速排序堆排序基数排序计数排序 三、总结 一、稳定性 排序算法的稳定性是指&#xff1a;同样大小的样本 **&#xff08;同样大小的数据&#xff09;**在排序之后不会改变原始的相对次序。 稳定性对基础类型对象…...

【网络安全】开源系统getshell漏洞挖掘

审计过程&#xff1a; 在入口文件admin/index.php中&#xff1a; 用户可以通过m,c,a等参数控制加载的文件和方法&#xff0c;在app/system/entrance.php中存在重点代码&#xff1a; 当M_TYPE system并且M_MODULE include时&#xff0c;会设置常量PATH_OWN_FILE为PATH_APP.M_T…...

C# 表达式和运算符(求值顺序)

求值顺序 表达式可以由许多嵌套的子表达式构成。子表达式的求值顺序可以使表达式的最终值发生 变化。 例如&#xff0c;已知表达式3*52&#xff0c;依照子表达式的求值顺序&#xff0c;有两种可能的结果&#xff0c;如图9-3所示。 如果乘法先执行&#xff0c;结果是17。如果5…...

解析奥地利 XARION激光超声检测系统:无膜光学麦克风 + 无耦合剂的技术协同优势及多元应用

在工业制造领域&#xff0c;无损检测&#xff08;NDT)的精度与效率直接影响产品质量与生产安全。奥地利 XARION开发的激光超声精密检测系统&#xff0c;以非接触式光学麦克风技术为核心&#xff0c;打破传统检测瓶颈&#xff0c;为半导体、航空航天、汽车制造等行业提供了高灵敏…...

协议转换利器,profinet转ethercat网关的两大派系,各有千秋

随着工业以太网的发展&#xff0c;其高效、便捷、协议开放、易于冗余等诸多优点&#xff0c;被越来越多的工业现场所采用。西门子SIMATIC S7-1200/1500系列PLC集成有Profinet接口&#xff0c;具有实时性、开放性&#xff0c;使用TCP/IP和IT标准&#xff0c;符合基于工业以太网的…...

0x-3-Oracle 23 ai-sqlcl 25.1 集成安装-配置和优化

是不是受够了安装了oracle database之后sqlplus的简陋&#xff0c;无法删除无法上下翻页的苦恼。 可以安装readline和rlwrap插件的话&#xff0c;配置.bahs_profile后也能解决上下翻页这些&#xff0c;但是很多生产环境无法安装rpm包。 oracle提供了sqlcl免费许可&#xff0c…...

实战设计模式之模板方法模式

概述 模板方法模式定义了一个操作中的算法骨架&#xff0c;并将某些步骤延迟到子类中实现。模板方法使得子类可以在不改变算法结构的前提下&#xff0c;重新定义算法中的某些步骤。简单来说&#xff0c;就是在一个方法中定义了要执行的步骤顺序或算法框架&#xff0c;但允许子类…...

Spring Boot + MyBatis 集成支付宝支付流程

Spring Boot MyBatis 集成支付宝支付流程 核心流程 商户系统生成订单调用支付宝创建预支付订单用户跳转支付宝完成支付支付宝异步通知支付结果商户处理支付结果更新订单状态支付宝同步跳转回商户页面 代码实现示例&#xff08;电脑网站支付&#xff09; 1. 添加依赖 <!…...