利用大模型实时提取和检索多模态数据探索-利用 Indexify 进行文档分析
概览
传统的文本提取方法常常无法理解非结构化内容,因此提取数据的数据往往是错误的。本文将探讨使用 Indexify,一个用于实时多模态数据提取的开源框架,来更好地分析pdf等非结构化文件。我将介绍如何设置 Indexify,包括服务器设置、提取graph创建、文档导入和数据查询,以及如何创建自定义提取器。通过 Indexify 可以增强文档分析,从而获得更准确的见解、做出更好的决策并简化管理流程。
Indexify 介绍
Indexify 是一个开源的导入和提取引擎,旨在为实时 LLM 应用提供支持。它能够以极低的延迟从非结构化来源进行实时数据提取。它还支持可应用于各种用例的多模态提取工作流程,包括从文档中提取实体和嵌入、音频转录、摘要以及从图像甚至视频中检测对象。
它还支持高效地索引、存储和检索数据,使其成为可扩展实时 RAG 系统的工具。
任何工作流程都可以通过 4 个基本步骤轻松实现:
- 启动 Indexify 服务器和提取器。
- 创建提取graph。
- 导入需要处理的数据(视频、图像、音频、PDF 等)。
- 检索提取的数据。
提取器
提取器模块是 Indexify 的核心功能。提取器可以从任何模态的非结构化数据中提取和返回结构化信息。例如,从 PDF 中以 JSON 格式获取特定信息,将数据转换为嵌入,以及识别视频中的面部或物体。
提取器通常接收非结构化数据作为输入,并生成内容对象列表和特征作为输出。来自非结构化数据的原始字节存储在 Blob 存储中,而提取的特征存储在向量数据库和结构化存储中以供检索。任何用于处理非结构化数据的模型或算法都可以通过扩展提取器 SDK 中提供的抽象类来实现为提取器。
协调器
Indexify中有一个高性能任务调度器。当数据开始被导入时,它们将任务分配给提取器,从而帮助实现卓越的速度和性能。
开始教程
对于本教程,需要有 Python 3.11 或更高版本以获得最佳性能。其他安装说明将在后面给出。
我将使用 Groq 作为 LLM 引擎。要开始,请访问此页面并创建一个 API 密钥。
然后安装sdk
pip install groq
对于数据,我已经准备了一些经典论文作为 PDF 文件。当然你也可以使用自己的文档集。
安装和配置 Indexify
在 Linux 系统上设置 Indexify 很容易。只需要 3 个运行的终端窗口。
- 终端 1:用于下载和运行 Indexify 服务。
- 终端 2:用于运行 Indexify 提取器,这些提取器处理结构化提取、分块和嵌入。
- 终端 3:用于运行 Python 脚本以从 Indexify 服务加载和查询数据。
这里可以使用以下命令启动和运行 Indexify 服务。
终端 1
curl https://getindexify.ai | sh
./indexify server -d
服务将在 http://localhost:8900 上运行。接下来,创建一个 Python 环境并安装所有必要的库和提取器。
终端 2
pip3 install indexify-extractor-sdk indexify wikipedia
indexify-extractor download tensorlake/paddleocr_extractor
indexify-extractor download tensorlake/minilm-l6
indexify-extractor download tensorlake/chunk-extractor
下载完成后,使用以下命令运行提取器服务:
终端 2
indexify-extractor join-server
经过以上两个步骤环境就准备好了。在本教程中,我将保持这两个终端运行。
准备文档集
第一步是整理文档集。在本工作流程中,我将使用 PDF 文档。对于多个文档,你可以像这样构建目录:将所有文档作为 PDF 添加到 data 目录。对于其他文件类型,你必须使用其他提取器或定义自定义提取器,我将在本文中稍后讨论。
└── data├── doc1├── doc2├── doc3├── doc4
├── venv
├── indexify file
├── ingest_document.py
├── query_doc.py
└── setup_extraction_graph.py
使用 Indexify 导入和处理文档
设置提取graph
Indexify 可以使用其核心功能(提取器)处理和存储来自任何模态的数据。这些提取器旨在从大量非结构化数据中提取内容。通过将不同的提取器链接在一起,我们可以创建一个pipeline,简化整个数据提取和存储过程。此过程通过创建提取graph来管理。
在本教程中,我将构建以下提取graph:
- paddle_ocr:用于识别和提取论文中的文本。
- chunk_extract:用于将数据划分为块以进行 RAG。
- minilm-l6:用于将数据转换为嵌入。
配置 Indexify 客户端并以 YAML 格式定义流程,如下所示。
# setup_extraction_graph.pyfrom indexify import ExtractionGraph, IndexifyClient
client = IndexifyClient()
extraction_graph_spec = """name: 'propertyQA'extraction_policies:- extractor: 'tensorlake/paddleocr_extractor'name: 'textextract'- extractor: 'tensorlake/chunk-extractor'name: 'chunker'input_params:chunk_size: 1000overlap: 100content_source: 'textextract'- extractor: 'tensorlake/minilm-l6'name: 'pdfembedding'content_source: 'chunker'
"""
extraction_graph = ExtractionGraph.from_yaml(extraction_graph_spec)
client.create_extraction_graph(extraction_graph)
终端 3
运行命令以创建提取graph。
python3 ./setup_extraction_graph.py
自定义提取器
为了捕获复杂数据,我可以创建自定义提取器并将其添加到我们的提取graph中。你可以使用以下模板定义它们。
from pydantic import BaseModel
from typing import List
from indexify_extractor_sdk import Extractor, Content, Feature
from indexify_extractor_sdk.base_extractor import Content
import jsonclass InputParams(BaseModel):a: int = 0b: str = ""class MyExtractor(Extractor):name = "your-docker-hub-username/MyExtractor"description = "Description of the extractor goes here."# Any python dependencies included in the extractor must be listed here.python_dependencies = ["torch", "transformers"]# Any system dependencies that the python code here depends on needs to be listed here. We use Ubuntu base images, so any ubuntu package can be installed here.system_dependencies = []input_mime_types = ["text/plain"]def __init__(self):super().__init__()def extract(self, content: Content, params: InputParams) -> List[Content]:return [Content.from_text(text="Hello World", feature=Feature.embedding(values=[1, 2, 3])),Content.from_text(text="Pipe Baz", feature=Feature.embedding(values=[1, 2, 3])),Content.from_text(text="Hello World",feature=Feature.metadata(value=json.dumps({"key": "value"})),),]def sample_input(self) -> Content:Content.from_text(text="Hello World")if __name__ == "__main__":MyExtractor().extract_sample_input()`
InputParams 类使用 Pydantic 来定义可用于配置提取器行为的参数。
MyExtractor 是实现提取器的主类。它指定了它可以处理的名称、描述、依赖项和输入类型。导入到 Indexify 的任何与这些 MIME 类型不匹配的内容都不会发送到此提取器。
extract 方法是核心功能。它处理输入内容并返回具有特征(如元数据)的转换后的内容对象列表。sample_input 方法提供了一个示例输入以供测试。
例如,以下是一个自定义提取器,它以 JSON 格式返回论文概要信息。
# custom_extractor.pyfrom pydantic import BaseModel
from typing import List
from indexify_extractor_sdk import Extractor, Content, Feature
from indexify_extractor_sdk.base_extractor import Content
import json
import reclass InputParams(BaseModel):author_regex: str = r"^([\w\s]+)"team_regex: str = r"(Google Brain)"email_regex: str = r"([\w.-]+@[\w.-]+\.[\w]+)"class PropertyExtractor(Extractor):name = "your-docker-hub-username/PropertyExtractor"description = "Extract author,team and email from this article."python_dependencies = ["re"]system_dependencies = []input_mime_types = ["text/plain"]def __init__(self):super().__init__()def extract(self, content: Content, params: InputParams) -> List[Content]:text = content.text()author_match = re.search(params.author_regex, text)team_match= re.search(params.team_regex, text)email_match = re.search(params.email_regex, text)property_info = {"author": author_match.group(1) if author_match else "","team": team_match.group(1) if team_match else "","team": email_match.group(1) if email_match else "",}return [Content.from_text(text=json.dumps(property_info),feature=Feature.metadata(value=json.dumps(property_info)))]def sample_input(self) -> Content:return Content.from_text(text="Ashish Vaswani Google Brain avaswani@google.com")if __name__ == "__main__":PropertyExtractor().extract_sample_input()
你可以将提取器打包到容器中以用于生产,或者使用以下命令在本地安装提取器,并在提取graph中使用它。
indexify-extractor install-local custom_extractor:PropertyExtractor
上传文档
设置提取graph后,data 目录中的每个文档都应该通过pipeline并作为嵌入存储在向量数据库中。Indexify 具有一个内置的向量数据库,你可以使用它来存储、查询和检索数据。
# ingest_document.pyimport os
import requests
from indexify import IndexifyClient# Initialize IndexifyClient
client = IndexifyClient()
folder_path = "data"for filename in os.listdir(folder_path):if filename.endswith(".pdf"):# Construct the full file pathfile_path = os.path.join(folder_path, filename)# Upload the PDF to Indexifyclient.upload_file("propertyQA", file_path)print(f"Uploaded: {filename}")
可以使用 Indexify UI 在 http://localhost:8900/ui 上查看向量数据库和索引。
你也可以使用客户端访问索引:
from indexify import IndexifyClient
client = IndexifyClient()content_ids = [content.id for content in client.list_content("propertyQA")]extract = client.get_extracted_content(content_ids[1], "propertyQA", "textextract")
embedding = client.get_extracted_content(content_ids[1], "propertyQA", "pdfembedding")
在 Indexify 中,导入的数据也存储在 SQL 表中,允许你使用内置 API 和 SQL 查询来查询数据。
result = client.sql_query("select * from propertyQA;")
输出:
`SqlQueryResult(result=[{'content_id': 'd6e584685d74a21d', 'type': 'text'}, {'content_id': 'e32fd65fc2bbebf3', 'type': 'text'}])`
使用 Indexify 提出复杂问题
语义搜索和查询公式
Indexify 的高级提取引擎使用户能够制定和执行超出基本数据提取的复杂查询。Indexify 可以解释文档的上下文和语义,从而允许更复杂的查询。
Indexify 从创建的索引中检索相关上下文并返回一个 Content 对象。来自此对象的信息可用于构建复杂提示,这些提示可以传递给 LLM 以生成适当的响应。让我们看看它是如何工作的。
results = client.search_index(name=index, query=question, top_k=3)
context = ""
for result in results:context = context + f"content id: {result['content_id']} \n \npassage: {result['text']}\n"
在这里,Indexify 通过索引执行简单的语义搜索,并返回最相关的段落以及元数据(如内容 ID),使你能够理解结果的上下文和重要性。来自 text 参数的数据可用于构建上下文。
检索和分析结果
语义搜索和复杂查询使你能够更深入地挖掘文档集,提取更加深入的答案。
复杂问题的示例:
- “与传统的基于 RNN 的模型相比,Transformer 模型如何利用自注意力机制来提高序列到序列任务的效率和有效性?”
LLM 可以帮助描述性且准确地回答此类查询。从上一步检索到的上下文可用于构建复杂提示。
"You are an expert in paper interpretation,You must help me interpret the core content of the paper. Answer the question, based on the context. Answer \"Information not found\" if there is no context. Do not hallucinate. \nquestion: {question} \ncontext: {context}"
构建的提示然后用于查询 LLM。在本教程中,我使用了来自 Groq 的 gemma-7b 模型。以下是工作流程的完整代码。
`#query_doc.pyfrom indexify import IndexifyClient
from groq import Groqclient = IndexifyClient()
groq_client = Groq(api_key="API_KEY",
)
def get_context(question: str, index: str, top_k=3):results = client.search_index(name=index, query=question, top_k=3)context = ""for result in results:context = context + f"content id: {result['content_id']} \n \npassage: {result['text']}\n"return contextdef create_prompt(question, context):return f"You are an expert in paper interpretation,You must help me interpret the core content of the paper. Answer the question, based on the context. Answer \"Information not found\" if there is no context. Do not hallucinate. \nquestion: {question} \ncontext: {context}"def generate_response(prompt):chat_completion = groq_client.chat.completions.create(messages=[{"role": "user","content": prompt,}],model="gemma-7b-it",)return chat_completion.choices[0].message.contentquestion = "How does the Transformer model use self-attention mechanisms to improve the efficiency and effectiveness of sequence-to-sequence tasks compared to traditional RNN-based models?"
context = get_context(question, "propertyQA.pdfembedding.embedding")
prompt = create_prompt(question, context)response = generate_response(prompt)
print(response)`
运行此文件以获取响应。
终端 3
python3 ./query_doc.py
The Transformer model replaces recurrent layers with self-attention mechanisms, allowing for parallelization and capturing dependencies between words regardless of their distance in the sequence. This improves efficiency by reducing the training time and enhances effectiveness by better handling long-range dependencies.
大规模存储和查询数据
使用 LangChain 进行扩展
优化你的系统以实现高效的索引和检索,以管理大量的论文数据和论文分析数据。这涉及配置向量数据库以有效地管理大量嵌入。在生产环境中,Indexify 可以水平扩展到多个服务器实例和协调器,以并行简化实时数据提取和存储。你还可以微调提取graph中的参数(如 chunk_size 和 overlap),以在粒度和性能之间取得平衡。
extractor: 'tensorlake/chunk-extractor'name: 'chunker'input_params:chunk_size: 1000overlap: 100content_source: 'textextract'
Indexify 与流行的 LangChain 框架很好地集成,LangChain 框架是一个高度可扩展的框架,用于构建 AI 应用。
终端 3
pip install indexify-langchain langchain-groq
我正在使用来自 LangChain 的基于 Indexify 的检索器。我将传递我准备好的索引和 top_k 参数。
from indexify import IndexifyClient
client = IndexifyClient()
from indexify_langchain import IndexifyRetriever
params = {"name": "propertyQA.pdfembedding.embedding", "top_k": 2}
retriever = IndexifyRetriever(client=client, params=params)
以下是完整代码:
# langchain_query_doc.pyimport requests
import dotenv# Setup retriever
from indexify import IndexifyClient
from indexify_langchain import IndexifyRetriever
client = IndexifyClient()
params = {"name": "propertyQA.pdfembedding.embedding", "top_k": 2}
retriever = IndexifyRetriever(client=client, params=params)from langchain_groq import ChatGroq
llm = ChatGroq(model="gemma-7b-it",temperature=0,max_tokens=None,timeout=None,max_retries=2,api_key="API_KEY",
)# Setup Chat Prompt Template
from langchain.prompts import ChatPromptTemplatetemplate = """
You are an expert in paper interpretation,You must help me interpret the core content of the paper. Answer the question, based on the context. Answer \"Information not found\" if there is no context. Do not hallucinate. \nquestion: {question} \ncontext: {context}
"""
prompt = ChatPromptTemplate.from_template(template)from langchain.schema.runnable import RunnablePassthrough
from langchain.schema.output_parser import StrOutputParser
rag_chain = ({"context": retriever, "question": RunnablePassthrough()}| prompt| llm| StrOutputParser()
)# Queryquery = "How does the Transformer model use self-attention mechanisms to improve the efficiency and effectiveness of sequence-to-sequence tasks compared to traditional RNN-based models?"
print(rag_chain.invoke(query))
这使用 IndexifyRetriever 根据查询检索最相关的段落。然后,它使用 ChatPromptTemplate 创建一个针对上下文的提示。该提示传递给 LLM,模型在其中处理信息并生成响应。
将查询结果存储在数据库中
执行查询并检索结果后,将这些数据存储在结构化数据库中可以确保你可以参考它并执行进一步的分析。
首先,要将查询结果存储在数据库中,请设置一个关系数据库并定义一个模式,该模式可以容纳 Indexify 返回的复杂数据结构。以下是如何将查询结果存储在 PostgreSQL 数据库中的示例:
import psycopg2
# Connect to your PostgreSQL database
conn = psycopg2.connect(dbname="indexify_results",user="your_username",password="your_password",host="localhost",port="5432"
)
cursor = conn.cursor()# Create a table to store query results
cursor.execute("""CREATE TABLE IF NOT EXISTS query_results (id SERIAL PRIMARY KEY,query TEXT,content_id VARCHAR(255),passage TEXT);
""")
conn.commit()# Example function to store results
def store_results(question: str, results: list):for result in results:cursor.execute("""INSERT INTO query_results (query, content_id, passage)VALUES (%s, %s, %s);""", (question, result['content_id'], result['text']))conn.commit()# Retrieve and store query results
question = "How does the Transformer model use self-attention mechanisms to improve the efficiency and effectiveness of sequence-to-sequence tasks compared to traditional RNN-based models?"
results = client.search_index(name="propertyQA.pdfembedding.embedding", query=question, top_k=5)
store_results(question, results)
# Close the database connection
cursor.close()
conn.close()
在定义数据库模式时,请考虑数据的关联关系和复杂性。该模式应该容纳内容 ID 和段落文本以及元数据,例如时间戳、文档来源以及任何相关的标签或类别。
以下是一个你可以考虑的示例模式。
CREATE TABLE query_results (id SERIAL PRIMARY KEY,query TEXT,content_id VARCHAR(255),passage TEXT,timestamp TIMESTAMP DEFAULT CURRENT_TIMESTAMP,document_source VARCHAR(255),tags TEXT[]
);
总结
我们已经介绍了 Indexify 如何通过解读论文的示例,为需要更深入的实时分析的应用提供高效的数据提取和检索。我们详细介绍了 Indexify 的工作原理,包括如何构建用于数据检索的知识库。此外,我们还考察了如何扩展系统以处理更大的数据集和更高的吞吐量。最后,我们讨论了将结果存储在结构化数据库中以供将来参考和深入分析的方法。
相关文章:

利用大模型实时提取和检索多模态数据探索-利用 Indexify 进行文档分析
概览 传统的文本提取方法常常无法理解非结构化内容,因此提取数据的数据往往是错误的。本文将探讨使用 Indexify,一个用于实时多模态数据提取的开源框架,来更好地分析pdf等非结构化文件。我将介绍如何设置 Indexify,包括服务器设置…...

函数式接口实现策略模式
函数式接口实现策略模式 1.案例背景 我们在日常开发中,大多会写if、else if、else 这样的代码,但条件太多时,往往嵌套无数层if else,阅读性很差,比如如下案例,统计学生的数学课程的成绩: 90-100分&#…...

鸿蒙Next-拉起支付宝的三种方式——教程
鸿蒙Next-拉起支付宝的三种方式——教程 鸿蒙Next系统即将上线,应用市场逐渐丰富、很多APP都准备接入支付宝做支付功能,目前来说有三种方式拉起支付宝:通过支付宝SDK拉起、使用OpenLink拉起、传入支付宝包名使用startAbility拉起。以上的三种…...

Vue.js 组件化开发:父子组件通信与组件注册详解
Vue.js 组件化开发:父子组件通信与组件注册详解 简介: 在 Vue.js 的开发中,组件是构建应用的重要基础。掌握组件的创建与使用,尤其是父子组件的通信和组件的注册与命名,是开发中不可或缺的技能。本文将详细探讨这些内容…...
【HTTP、Web常用协议等等】前端八股文面试题
HTTP、Web常用协议等等 更新日志 2024年9月5日 —— 什么情况下会导致浏览器内存泄漏? 文章目录 HTTP、Web常用协议等等更新日志1. 网络请求的状态码有哪些?1)1xx 信息性状态码2)2xx 成功状态码3)3xx 重定向状态码4&…...

Datawhale x李宏毅苹果书AI夏令营深度学习详解进阶Task03
在深度学习中,批量归一化(Batch Normalization,BN)技术是一种重要的优化方法,它可以有效地改善模型的训练效果。本文将详细讨论批量归一化的原理、实现方式、在神经网络中的应用,以及如何选择合适的损失函数…...

【机器学习】任务三:基于逻辑回归与线性回归的鸢尾花分类与波士顿房价预测分析
目录 1.目的和要求 1.1 掌握回归分析的概念和使用场景 1.2 掌握机器学习回归分析进行数据预测的有效方法 1.3 掌握特征重要性分析、特征选择和模型优化的方法 2.波士顿房价预测与特征分析 2.1第一步:导入所需的模块和包 2.2 第二步:加载波士顿房价…...

【操作系统存储篇】Linux文件基本操作
目录 一、Linux目录 二、Linux文件的常用操作 三、Linux文件类型 一、Linux目录 Linux有很多目录,Linux一切皆是文件,包括进程、设备等。 相对路径:相对于当前的操作目录,文件位于哪个目录。 绝对路径 :从根目录开…...

C++ | Leetcode C++题解之第387题字符串中的第一个唯一字符
题目: 题解: class Solution { public:int firstUniqChar(string s) {unordered_map<char, int> position;queue<pair<char, int>> q;int n s.size();for (int i 0; i < n; i) {if (!position.count(s[i])) {position[s[i]] i;…...

数学建模--皮尔逊相关系数、斯皮尔曼相关系数
目录 1.总体的皮尔逊相关系数 2.样本的皮尔逊相关系数 3.对于皮尔逊相关系数的认识 4.描述性统计以及corr函数 编辑 5.数据导入实际操作 6.引入假设性检验 6.1简单认识 6.2具体步骤 7.p值判断法 8.检验正态分布 8.1jb检验 8.2威尔克检验:针对于p值进行…...

DAY87 APP 攻防-安卓逆向篇Smail 语法反编译签名重打包Activity 周期Hook 模块
1、APK 逆向-数据修改-结构&格式 2、APK 逆向-逻辑修改-Smail 语法 3、APK 逆向-视图修改-Activity&Xml #章节点: 1、APP 资产-内在提取&外在抓包 2、APP 逆向-反编译&删验证&重打包 3、APP 安全-存储&服务&组件&注册等 演示案例&a…...

jenkins 工具使用
使用方式 替代手动,自动化拉取、集成、构建、测试;是CI/CD持续集成、持续部署主流开发模式中重要的环节;必须组件 jenkins-gitlab,代码公共仓库服务器(至少6G内存);jenkins-server,…...

使用C语言实现字符推箱子游戏
使用C语言实现字符推箱子游戏 推箱子(Sokoban)是一款经典的益智游戏,玩家通过移动角色将箱子推到目标位置。本文将带你一步步用C语言实现一个简单的字符版本的推箱子游戏。 游戏规则 玩家只能推箱子,不能拉箱子。只能将箱子推到…...
用SpringBoot API实现识别pdf文件是否含有表格
要使用Spring Boot API 实现一个识别 PDF 文件是否含有表格的功能,你可以结合 PDF 解析库(如 Apache PDFBox)来解析 PDF 文件内容,并通过分析文本或线条来判断 PDF 是否包含表格。然后使用 Spring Boot 提供的 REST API 来实现上传…...

嵌入式S3C2440:控制LED灯
发光二极管接口(左端)应为低电平 以LED1为例 LED1的接口为GPB5 void led_init(void) {//配置GPB5功能为输出GPBCON & ~(0x3 << 10);GPBCON | (0x1 << 10); //使GPB5输出高电平(关灯)GPBDAT | (1 << 5); }void led_on(void) {GPB…...

算法:区间dp
文章目录 一、适用场景二、基本思路步骤时间复杂度: 三、例题 区间动态规划(Interval DP)是一种用于解决某些需要处理区间或子段问题的动态规划方法,特别适合于问题的解可以通过子区间的解进行组合的情况。该方法的核心思想是在子…...

【14.1运行版】C++俄罗斯方块-实现欢迎界面
实现欢迎界面 #include <stdio.h>//C语言形式的输入输出 #include <graphics.h>//图形库的头文件//实现欢迎界面 void welcome(void);int main(void) {welcome();//colsegraph();return 0; }void welcome(void) {//初始化画布initgraph(550, 660);//设置窗口标题H…...

数据分析:R语言计算XGBoost线性回归模型的SHAP值
禁止商业或二改转载,仅供自学使用,侵权必究,如需截取部分内容请后台联系作者! 文章目录 介绍SHAP用途计算方法:应用加载R包导入数据数据预处理函数模型介绍 SHAP(SHapley Additive exPlanations)值是一种解释机器学习模型预测的方法。它基于博弈论中的Shapley值概念,…...

SprinBoot+Vue图书馆预约与占座微信小程序的设计与实现
目录 1 项目介绍2 项目截图3 核心代码3.1 Controller3.2 Service3.3 Dao3.4 application.yml3.5 SpringbootApplication3.5 Vue3.6 uniapp代码 4 数据库表设计5 文档参考6 计算机毕设选题推荐7 源码获取 1 项目介绍 博主个人介绍:CSDN认证博客专家,CSDN平…...

云计算之大数据(上)
目录 一、Elasticsearch 1.1 产品组件 1.1.1 X-Pack 1.1.2 Beats数据采集中心 1.1.3 Logstash 1.1.4 Kibana 1.2 架构特性 1.2.1 性能 1.2.2 安全性 1.2.3 可用性 1.2.4 可扩展性 1.2.5 可维护性 1.2.6 国际化 1.3 综合检索分析 1.4 全观测 1.5 大数据检索加速…...

基于ASP.NET+ SQL Server实现(Web)医院信息管理系统
医院信息管理系统 1. 课程设计内容 在 visual studio 2017 平台上,开发一个“医院信息管理系统”Web 程序。 2. 课程设计目的 综合运用 c#.net 知识,在 vs 2017 平台上,进行 ASP.NET 应用程序和简易网站的开发;初步熟悉开发一…...

通过Wrangler CLI在worker中创建数据库和表
官方使用文档:Getting started Cloudflare D1 docs 创建数据库 在命令行中执行完成之后,会在本地和远程创建数据库: npx wranglerlatest d1 create prod-d1-tutorial 在cf中就可以看到数据库: 现在,您的Cloudfla…...
基于服务器使用 apt 安装、配置 Nginx
🧾 一、查看可安装的 Nginx 版本 首先,你可以运行以下命令查看可用版本: apt-cache madison nginx-core输出示例: nginx-core | 1.18.0-6ubuntu14.6 | http://archive.ubuntu.com/ubuntu focal-updates/main amd64 Packages ng…...
【磁盘】每天掌握一个Linux命令 - iostat
目录 【磁盘】每天掌握一个Linux命令 - iostat工具概述安装方式核心功能基础用法进阶操作实战案例面试题场景生产场景 注意事项 【磁盘】每天掌握一个Linux命令 - iostat 工具概述 iostat(I/O Statistics)是Linux系统下用于监视系统输入输出设备和CPU使…...

【 java 虚拟机知识 第一篇 】
目录 1.内存模型 1.1.JVM内存模型的介绍 1.2.堆和栈的区别 1.3.栈的存储细节 1.4.堆的部分 1.5.程序计数器的作用 1.6.方法区的内容 1.7.字符串池 1.8.引用类型 1.9.内存泄漏与内存溢出 1.10.会出现内存溢出的结构 1.内存模型 1.1.JVM内存模型的介绍 内存模型主要分…...

ubuntu22.04有线网络无法连接,图标也没了
今天突然无法有线网络无法连接任何设备,并且图标都没了 错误案例 往上一顿搜索,试了很多博客都不行,比如 Ubuntu22.04右上角网络图标消失 最后解决的办法 下载网卡驱动,重新安装 操作步骤 查看自己网卡的型号 lspci | gre…...

消防一体化安全管控平台:构建消防“一张图”和APP统一管理
在城市的某个角落,一场突如其来的火灾打破了平静。熊熊烈火迅速蔓延,滚滚浓烟弥漫开来,周围群众的生命财产安全受到严重威胁。就在这千钧一发之际,消防救援队伍迅速行动,而豪越科技消防一体化安全管控平台构建的消防“…...
在鸿蒙HarmonyOS 5中使用DevEco Studio实现指南针功能
指南针功能是许多位置服务应用的基础功能之一。下面我将详细介绍如何在HarmonyOS 5中使用DevEco Studio实现指南针功能。 1. 开发环境准备 确保已安装DevEco Studio 3.1或更高版本确保项目使用的是HarmonyOS 5.0 SDK在项目的module.json5中配置必要的权限 2. 权限配置 在mo…...
32位寻址与64位寻址
32位寻址与64位寻址 32位寻址是什么? 32位寻址是指计算机的CPU、内存或总线系统使用32位二进制数来标识和访问内存中的存储单元(地址),其核心含义与能力如下: 1. 核心定义 地址位宽:CPU或内存控制器用32位…...
2.2.2 ASPICE的需求分析
ASPICE的需求分析是汽车软件开发过程中至关重要的一环,它涉及到对需求进行详细分析、验证和确认,以确保软件产品能够满足客户和用户的需求。在ASPICE中,需求分析的关键步骤包括: 需求细化:将从需求收集阶段获得的高层需…...