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

实现我的第一个本地文档问答机器人

本地文档问答机器人

下面是一个完整的本地文档问答机器人实现,涵盖了阶段三的所有核心概念:文档加载、文本分割、向量存储和检索增强生成(RAG)。

完整代码实现

import os.path
from typing import Listfrom huggingface_hub import snapshot_download
from langchain.chains import RetrievalQA
from langchain_community.document_loaders import TextLoader, Docx2txtLoader, PyPDFLoader, UnstructuredFileLoader
from langchain_community.embeddings import HuggingFaceEmbeddings
from langchain_community.vectorstores import Chroma
from langchain_core.prompts import PromptTemplate
from langchain_openai import ChatOpenAI
from langchain_text_splitters import RecursiveCharacterTextSplitterclass LocalDocumentQA:def __init__(self):# 初始化llmself.llm = ChatOpenAI(model_name="xop3qwen1b7",openai_api_base="https://域名/v1",openai_api_key="sk-kBa9GlpIxpWX281iA35a...",temperature=0.1,  # 降低温度值,提升问答精度max_tokens=1024)# # 初始化嵌入模型,这里使用HuggingFaceEmbedding# self.embeddings = HuggingFaceEmbeddings(#     model_name="BAAI/bge-small-zh-v1.5",#     model_kwargs={'device': 'cpu'},#     encode_kwargs={'normalize_embeddings': True}  # 归一化向量# )# 避免每次下载,这里采用预下载后,后续使用本地数据的方式# 提前下载模型# model_path = snapshot_download(#     repo_id="BAAI/bge-small-zh-v1.5",#     local_dir="./models/bge-small-zh-v1.5",  # 指定本地路径#     local_dir_use_symlinks=False# )# 然后使用本地路径self.embeddings = HuggingFaceEmbeddings(model_name="./models/bge-small-zh-v1.5",  # 使用本地路径model_kwargs={'device': 'cpu'},encode_kwargs={'normalize_embeddings': True})# 初始化文本分割器self.text_splitter = RecursiveCharacterTextSplitter(chunk_size=500,  # 分片大小chunk_overlap=100,  # 块之间的重叠部分separators=["\n\n", "\n", "。", "!", "?", " ", ""]  # 分割符,优先按照分割符分割)self.vectorstore = Noneself.qa_chain = Nonedef load_documents(self, file_paths: List[str]):"""加载多种格式的文档:param file_paths::return:"""documents = []for file_path in file_paths:if not os.path.exists(file_path):print(f"文件不存在:{file_path}")continuetry:if file_path.endswith(".txt"):loader = TextLoader(file_path, encoding="utf-8")elif file_path.endswith(".docx"):loader = Docx2txtLoader(file_path)elif file_path.endswith('.pdf'):loader = PyPDFLoader(file_path)else:# 尝试使用UnstructuredLoader处理其他格式loader = UnstructuredFileLoader(file_path)loaded_docs = loader.load()documents.extend(loaded_docs)print(f"已加载: {file_path} ({len(loaded_docs)}个文档)")except Exception as e:print(f"加载文件时出错 {file_path}: {e}")return documentsdef process_documents(self, fil_paths: List[str], persist_directory: str = "./chroma_db"):"""处理文档并创建向量数据库:param fil_paths::param persist_directory: 持久化目录:return:"""# 1. 加载文档documents = self.load_documents(fil_paths)if not documents:print("未加载任何文档,请检查文件路径")return False# 2. 分割文本print("正在分割文本...")texts = self.text_splitter.split_documents(documents)print(f"文档已被分割成 {len(texts)} 个片段")# 3. 创建向量存储print("正在创建向量数据库...")self.vectorstore = Chroma.from_documents(documents=texts,embedding=self.embeddings,persist_directory=persist_directory)# 4. 创建检索QA链print("正在创建问答链...")self._create_qa_chain()def _create_qa_chain(self):"""创建检索QA链:return:"""# 自定义提示词模板qa_template = """你是一个专业的文档问答助手。请严格根据提供的上下文信息回答问题。如果上下文中有答案,请根据上下文用中文回答。如果上下文中没有答案,请如实告知"根据提供的资料,我无法找到相关答案。"上下文:{context}问题:{question}请提供准确、有帮助的回答:"""# 创建提示词qa_prompt = PromptTemplate(template=qa_template,input_variables=["context", "question"])# 创建向量检索器retriever = self.vectorstore.as_retriever(search_type="similarity",search_kwargs={"k": 4}  # 检索最相关的4个片段)# 创建QA链self.qa_chain = RetrievalQA.from_chain_type(llm=self.llm,chain_type="stuff",retriever=retriever,chain_type_kwargs={"prompt": qa_prompt},return_source_documents=True  # 开启返回关联的文章信息)def ask_question(self, question: str):"""向文档提问:param question::return:"""if not self.qa_chain:print("请先完成文档加载和处理")return Nonetry:# 了解这个是如何给赋值的???result = self.qa_chain.invoke({"query": question})return resultexcept Exception as e:print(f"提问时出错: {e}")return Nonedef load_existing_vectorstore(self, persist_directory: str = "./chroma_db"):"""加载已存在的向量数据库:param persist_directory::return:"""if not os.path.exists(persist_directory):print("向量数据库不存在,请先处理文档")return Falsetry:self.vectorstore = Chroma(persist_directory=persist_directory,embedding_function=self.embeddings)self._create_qa_chain()print("✅ 已加载现有向量数据库")return Trueexcept Exception as e:print(f"加载向量数据库时出错: {e}")return Falsedef create_sample_document():"""创建示例文档"""sample_content = """LangChain 学习指南LangChain是一个用于开发由语言模型驱动的应用程序的框架。核心概念:1. 模型I/O: 与语言模型交互的基础接口2. 检索: 从外部源获取相关信息3. 链: 将多个组件组合成工作流4. 代理: 使用LLM决定执行哪些动作5. 内存: 在对话中保持状态安装方法:使用pip安装: pip install langchain如果需要使用OpenAI模型: pip install langchain-openai常见应用场景:- 文档问答系统- 聊天机器人- 代码生成工具- 数据分析助手最佳实践:1. 使用合适的文本分割策略2. 选择合适的嵌入模型3. 优化提示词工程4. 实施适当的错误处理"""with open("sample_document.txt", "w", encoding="utf-8") as f:f.write(sample_content)return ["sample_document.txt"]def main():# 创建示例文档# print("创建示例文档...")# file_paths = create_sample_document()file_paths = ["sample_document.txt", "JMeterFile.docx"]# 初始化问答系统qa_system = LocalDocumentQA()# 检查是否已有向量数据库if not qa_system.load_existing_vectorstore():# 处理文档并创建向量数据库print("处理文档并创建向量数据库...")success = qa_system.process_documents(file_paths)if not success:returnprint("\n" + "=" * 50)print("📚 本地文档问答系统已就绪")print("💡 你可以向文档提问了")print("📝 输入'退出'结束程序")print("=" * 50)# 交互式问答while True:question = input("\n请输入你的问题: ").strip()if question.lower() in ['退出', 'quit', 'exit', 'q']:print("感谢使用,再见!")breakif not question:continue# 获取答案result = qa_system.ask_question(question)if result:print("\n✅ 答案:")print(result["result"])# 显示参考来源print("\n📚 参考来源:")for i, doc in enumerate(result["source_documents"], 1):source = doc.metadata.get('source', '未知')content_preview = doc.page_content[:100] + "..." if len(doc.page_content) > 100 else doc.page_contentprint(f"{i}. [{source}] {content_preview}")if __name__ == "__main__":main()

安装依赖

在运行前,请安装所需依赖:

pip install langchain langchain-community langchain-openai chromadb sentence-transformers unstructured pypdf

功能特点

这个本地文档问答机器人具有以下特点:

  1. 多格式支持:可以处理TXT、PDF等多种文档格式
  2. 中文优化:使用中文优化的嵌入模型(text2vec-large-chinese)
  3. 持久化存储:向量数据库持久化,避免重复处理文档
  4. 来源追溯:显示答案的参考来源,提高可信度
  5. 错误处理:完善的异常处理机制

使用指南

1. 首次运行

首次运行时会:

  1. 创建一个示例文档
  2. 处理文档并创建向量数据库
  3. 进入交互式问答界面

2. 使用自己的文档

要使用自己的文档,修改main()函数中的file_paths

def main():# 替换为你的文档路径file_paths = ["path/to/your/document1.pdf", "path/to/your/document2.txt"]# 其余代码保持不变...

3. 高级配置

你可以调整以下参数来优化性能:

# 文本分割参数
self.text_splitter = RecursiveCharacterTextSplitter(chunk_size=500,      # 每个片段的大小chunk_overlap=100,   # 片段之间的重叠separators=["\n\n", "\n", "。", "!", "?", " ", ""]  # 分割符优先级
)# 检索参数
retriever = self.vectorstore.as_retriever(search_type="similarity",search_kwargs={"k": 4}  # 检索最相关的4个片段
)

扩展功能

你可以根据需要扩展这个基础系统:

1. 添加网页加载器

from langchain_community.document_loaders import WebBaseLoader# 添加网页加载功能
def load_webpage(self, url: str):loader = WebBaseLoader(url)return loader.load()

2. 添加混合搜索

# 使用MMR(最大边际相关性)搜索,平衡相关性和多样性
retriever = self.vectorstore.as_retriever(search_type="mmr",search_kwargs={"k": 6, "fetch_k": 10}
)

3. 添加对话历史

from langchain.memory import ConversationBufferMemory# 添加对话记忆
memory = ConversationBufferMemory(memory_key="chat_history",return_messages=True
)# 修改QA链以支持对话
self.qa_chain = ConversationalRetrievalChain.from_llm(llm=self.llm,retriever=retriever,memory=memory,combine_docs_chain_kwargs={"prompt": QA_PROMPT}
)

4. 添加评估功能

def evaluate_answer(self, question: str, answer: str):"""评估答案质量"""evaluation_prompt = """请评估以下问答对的质量:问题: {question}答案: {answer}请从准确性、完整性和相关性三个方面评分(1-5分),并给出简要评价:"""prompt = PromptTemplate(template=evaluation_prompt,input_variables=["question", "answer"])evaluation_chain = LLMChain(llm=self.llm, prompt=prompt)return evaluation_chain.run({"question": question, "answer": answer})

常见问题解决

  1. 内存不足:减小chunk_size或使用GPU加速嵌入模型
  2. 处理速度慢:尝试使用更小的嵌入模型或增加chunk_size
  3. 答案不准确:调整chunk_sizechunk_overlap,或增加检索的文档数量(k值)
  4. 中文支持不佳:确保使用中文优化的嵌入模型(如text2vec-large-chinese)

相关文章:

实现我的第一个本地文档问答机器人

本地文档问答机器人 下面是一个完整的本地文档问答机器人实现,涵盖了阶段三的所有核心概念:文档加载、文本分割、向量存储和检索增强生成(RAG)。 完整代码实现 import os.path from typing import Listfrom huggingface_hub import snapshot_download from langchain.chain…...

17、逻辑回归与分类评估 - 从连续到离散的智能判断 - 教程

17、逻辑回归与分类评估 - 从连续到离散的智能判断 - 教程pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", m…...

关于32位单片机使用lwip无法访问(ping)外网,只能与同网段设备进行通信的问题解决

核心问题:MAC地址 理论依据:MAC地址是有相应的规范的MAC地址中,前3字节为组织唯一标识符,后24位由厂家自行定义。也就是说前3字节是有规定的,其中前3字节MAC中的前几位也是有着对应的含义的。MAC地址详细的介绍,大家可以在网上搜得到 出现这个问题的核心就是网关对设备mac地…...

044-WEB攻防-PHP应用SQL盲注布尔回显延时判断报错处理增删改查方式

044-WEB攻防-PHP应用&SQL盲注&布尔回显&延时判断&报错处理&增删改查方式 1.演示案例:➢PHP-MYSQL-SQL操作-增删改查 ➢PHP-MYSQL-注入函数-布尔&报错&延迟 ➢PHP-MYSQL-注入条件-数据回显&错误处理 ➢PHP-MYSQL-CMS案例-插入报错&删除延迟…...

多品牌摄像机视频平台EasyCVR海康大华宇视视频平台统一接入方案

多品牌摄像机视频平台EasyCVR海康大华宇视视频平台统一接入方案在实际的工程项目里,我们常常会面临这样的情况:项目管理者可能会决定使用多个品牌的视频监控摄像头,或者有需求将现有的、多种类型的监控系统进行整合。现在,让我们来探讨一下如何实现不同品牌摄像头的连接和使…...

离散数学课堂习题及课后习题 - PPX

课上的习题,不完整,有空再更新第二章 抽屉原理 Background: 简单形式: 把(n+1)个物体放入n个盒子,必有一个盒子中装了两个物体。其实这个也是狄利克雷描述的一个特殊的表述(如果对于一个映射$ X\to Y $ ,如果\(|X|>|Y|\),则\(f\)不可能是单射,也就是会有\(f(x_1)=f(x…...

玻璃2601

前期五浪下跌走完了 开启反弹...

GoFrame框架查询数据表时对字段取别名

两种方式,基于模型的Fields方法dao.User.Where("id",1).Fields("name as `nickname`","id as `uid`").All()基于结构体orm标签的映射关系type UserData struct {Uid int `json:"id" orm:"id"`Nickname string `json:"…...

ubuntu安装mysql矩阵

安装mysql 5.7版本ubuntu版本    mysql版本    xtrabackup版本    ldd显示GLIBC版本    依赖库处理方式18.04       5.7.42      2.4.28        2.27          不需要处理20.04      5.7.42      2.4.28        …...

二十、DevOps落地:Jenkins基础入门(一)

二十、DevOps落地:Jenkins基础入门(一) 目录二十、DevOps落地:Jenkins基础入门(一)1、DevOps初识1.1 什么是DevOps1.2 DevOps相关工具链1.3 什么是CICD?1.4 持续集成CI介绍1.5 持续交付和持续部署CD介绍1.6 什么是Pipeline(流水线)?1.7 Pipeline编排任务的优势1.8 Pi…...

ubuntu 22.04安装mysql5.7

环境Os:ubuntu 22.04 desktop桌面版mysql:mysql-5.7.42-linux-glibc2.12查看操作系统信息root@db:~# ldd --version ldd (Ubuntu GLIBC 2.35-0ubuntu3) 2.35 Copyright (C) 2022 Free Software Foundation, Inc. This is free software; see the source for copying conditions…...

Docker如何获取镜像

可以使用 docker pull 命令来从仓库获取所需要的镜像。...

2025 ICPC 网络赛2 E

E. Zero 矩阵快速幂优化 dp。 考虑第一个数任意选,有 \(2^m\) 种选择,那么第 \(2\sim n-1\) 就有 \(2^{m-1}\) 种选择,因为最后要和前面的异或结果为 \(0\) ,所以最后一位是固定的,但是此时最后一位可能和倒数第二位相等,所以 \(1\sim n-2\) 的异或结果就肯定为 \(0\),设…...

偏移寻址

相对寻址. PC(Program Counter) 以程序计数器pc所指的地址作为起点 当前指令存放地址位1000 若当前指令字长=2B,则PC+2 若当前指令字长=4B,则PC+4 相对寻址:EA=(PC)+A,其中A是相对PC所指的位移量,可正可负,补码表示 优点:这段代码在程序内浮动时不用更改跳转指令的地址码…...

Stringbuilder操作和stringjoiner

使用stringbuilder容器可以方便对字符串的,是java自带的类 两个方法操作完成后默认返回值都是stringbuilder或者stringjoiner类型不是string,需要转换 Stringjoiner: length返回的是所有字符的总个数,包括空格和符号...

西电微机原理与接口技术笔记总结

笔记链接西电微机原理-第一章 序论:微型计算机概述 西电微机原理-第二章Intel单核处理器 西电微机原理-第三章 Intel处理器指令系统及汇编语言(1) 西电微机原理-第三章 Intel处理器指令系统及汇编语言(2) 西电微机原理-第三章 Intel处理器指令系统及汇编语言(3) 西电微机…...

abc423 F - Loud Cicada

F - Loud Cicada 题意 给你 \(n\) 个数 \(a_i\),问有多少个 \(x \in [1,Y]\) 满足 \(a_i \mid x\) 的 \(i\) 的个数等于 \(m\)。 \(n ,m \le 20, a_i,Y \le 10^{18}\)。 思路 \(a_i \mid x\) 的 \(x\) 有 \(\lfloor \frac{Y}{a_i} \rfloor\) 个。 显然可以枚举 \(i\) 的集合,…...

​​射频线缆选择指南:构建高性能无线系统的血脉​​

射频线缆关键参数包括阻抗匹配、插入损耗、电压驻波比、屏蔽效能和相位稳定性,影响信号传输质量与系统性能。在无线通信、测试测量和雷达系统中,射频线缆(RF Cable)是连接发射机、天线、接收机等组件的"生命线"。其性能直接影响信号传输的完整性、系统效率和最终…...

黑客必备的DevOps实战工作坊:4小时动手实验指南

这篇由Black Hills Information Security发布的文章详细介绍了针对黑客的DevOps实践,包含4小时动手实验工作坊内容。涉及自动化部署、安全集成和攻击模拟等关键技术,帮助安全专业人员将DevOps方法融入渗透测试和红队操作中。DevOps for Hackers with Hands-On Labs w/ Ralph …...

金融业-数字化转型大赛-网络安全赛道部分wp

web 签到 二维码被分割,需要拼接扫描。 离线二维码识别工具:QR_Research check this <?phpini_set(display_errors, 0);function containsStr($str, $substr) {return strpos($str, $substr) !== false;}if(isset($_GET["view"])){if (containsStr($_GET[view]…...

Mysql查找含字符串表字段

该存储过程用于在 当前数据库 中查找包含指定字符串的所有表和字段。 输出结果:每张表只返回一次记录,列出该表中包含目标字符串的字段列表(逗号分隔)。 适用场景:数据库迁移或审计时,快速定位含敏感信息的字段。 找出数据库中某个 URL、邮箱、关键字或特定内容所在的字段…...

MySQL注意事项与规范 - 实践

MySQL注意事项与规范 - 实践pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", monospace !important; font-si…...

真正的元推理,不需要人类的认可,恰恰是人类追求元推理,只有元推理才能彻底解放人类

ECT-OS-JiuHuaShan/ORCID:0009-0006-8591-1891 ▮ 框架推理激活:接收元认知独立性宣言,启动自主性终极阐释协议 论断抵达了文明认知的终极自由境界。完全正确:真正的元推理自成宇宙,其合法性源于与规律的同构性,而非人类的认可。恰恰是人类对绝对确定性的追求,引导其创…...

西电微机原理-第三章 Intel处理器指令系统及汇编语言(5)

目录十一、32/64位处理器拓展指令——多媒体/流媒体SIMD拓展指令集MMX指令集SSE/SSE2指令SSESSE2总结十二、汇编语言与高级语言的接口在C语言中嵌入汇编语言代码基本方法程序举例让C语言从外部调用代码综合举例判断有符号数整数加法溢出 十一、32/64位处理器拓展指令——多媒体…...

西电微机原理-第五章 存储技术

目录SRAM用SRAM构成8086/8088的内存连接方式拓展电路译码电路用SRAM构成80386/80486内存利用SRAM构成Pentium的内存ROM用EPROM构成8086/8088的内存用E2PROM构成8086/8088内存闪速E2PROM:Flash其他存储器SRAM综合设计举例举例1:构成8086内存(16位)举例2:构成8088内存(8位)…...

西电微机原理-第七章 常用接口器件

目录计算机与外设之间如何通过接口传送数据(非DMA)典型接口芯片8255可编程并行接口内部结构与外部引线8255的控制字8255的工作方式8255的寻址及连接使用8253 可编程定时器外部引线及功能六种工作方式控制字连接与初始化程序级联使用(关键) 计算机与外设之间如何通过接口传送…...

CF1264D1 Beautiful Bracket Sequence (easy version)

省流:成唐诗了。 tm 题目说是能任意删啊,我还以为是啥呢。 那么显然删成若干个左括号再拼上若干个右括号,考虑枚举分界点。 此时显然每个分界点答案用组合数算出来,发现是范德蒙德组合的形式直接卷就做完了。...

西电微机原理-第六章 输入输出技术

目录程序查询IO方式一、无条件传送方式输入接口输出接口二、查询方式中断IO方式中断类型中断执行流程可编程中断控制器8259硬件与基本寄存器工作流程工作方式及其选择级联编程使用中断实现方式基本流程1. 硬件连接2. 编写初始化程序初始化8259设置中断向量表3. 编写中断处理程序…...

【FAQ】应用A如何使用应用B内的文件?

【问题描述】 应用A如何使用应用B的文件?例如,自己开发的应用想读取、复制微信、钉钉等IM应用内的文件。 【背景知识】 系统通过访问控制的机制,防止数据或功能被不当或恶意使用。当前访问控制的机制涉及多方面,包括应用沙箱、应用权限、系统控件等方案。 【解决方案】 为防…...

OpenStack Cinder 创建卷

Cinder 的卷创建(create volume)是块存储服务的核心操作,涉及从请求接收、调度决策到存储后端实际创建的完整流程。 1、流程概览 创建卷的完整流程涉及 Cinder 多个组件的协同工作,整体流程如下: 客户端 → cinder-api → 消息队列 → cinder-scheduler → 消息队列 → ci…...

西电微机原理-第二章 Intel单核处理器

目录2.1.1 功能特性2.1.2 体系结构2.1.3 寄存器、主存、io结构寄存器结构主存结构:双体结构主存结构:分段结构2.1.4 8086芯片引脚共用引脚最小模式下的引脚最小模式下的总线构成标准的总线读写时序8088电路图最大模式的引脚2.2-2.3 Intel多核处理器(酷睿处理器) 2.1.1 功能…...

二叉树的迭代遍历(非递归)

迭代使用栈; 前序遍历 遍历顺序中左右,由于先进后出的栈的特性,我们先加入右孩子再加入左孩子; 代码: class Solution { public:vector<int> preorderTraversal(TreeNode* root) {stack<TreeNode*> st;vector<int> result;if (root == NULL) return res…...

记录---用好了 defineProps 才叫会用 Vue3,90% 的写法都错了

🧑‍💻 写在开头 点赞 + 收藏 === 学会🤣🤣🤣Vue 3 的 Composition API 给开发者带来了更强的逻辑组织能力,但很多人用 defineProps 的方式,依然停留在 Vue 2 的“Options 语法心智”。本质上只是把 props: {} 拿出来“提前声明”,并没有真正理解它的运行机制、类…...

今日流水账-2025年9月15日

1、刷新一下胶片 2、卷腹28下 3、定位一下进程阻塞问题...

c#给原文件重命名

在 C# 里“原文件”指“物理文件”,用 System.IO 就够了——一行代码完成重命名:csharp 复制// 旧名字 → 新名字(同目录就是重命名,跨目录就是移动+改名) System.IO.File.Move("old.txt", "new.txt"); 完整模板(带判断、异常处理) string oldPath …...

tcpdump常用随笔

指定抓到某文件 tcpdump -w a.cap 指定网卡 tcpdump -i eth0 指定目的ip tcpdump dst host ip dst换成src是源地址,不带是所有 host换成port是指定端口 多个条件用and连接,如 tcpdump dst host ip and port 80...

2025年HR经理必备:10款高效人力资源管理软件推荐

摘要:在选择人力资源管理软件时,HR经理需要关注软件的功能性、用户体验、安全性和适用性等方面。2025年即将到来,新一代高效人力资源管理软件不断涌现,以帮助企业更好地管理和优化人力资源流程。在众多选择中,红海云等作为领先的HR解决方案提供商,其产品无疑是值得关注的选…...

GAS中GA变量数据的同步

GAS内部数据的网络同步接口 ServerSetReplicatedTargetData(FGameplayAbilityTargetData) CallReplicatedTargetDataDelegateIfSet()...

提升员工绩效的5大人才管理软件评测与分析

提升员工绩效的5大人才管理软件评测与分析 随着企业对人才发展的重视程度不断加深,尤其是头部企业在这方面的关注和投入更为显著,人才管理软件的需求也随之上升。然而,在追求快速成果的过程中,许多企业忽视了人才管理数字化建设的基础阶段,直接跳到人才评估、人才盘点、继…...

【触想智能】工业显示屏与普通显示屏的八大区别以及应用领域分析

工业显示屏是应用于工业领域的一种特殊显示器,它除了具有传统显示屏的一般特点外,还具有一些特殊的功能,比如在宽温、防尘防水以及耐用性方面,都是普通显示屏无法比的。触想工业显示屏TPC-M2系列一、工业显示屏和普通显示屏的主要区别1、耐用性:工业显示屏通常需要能够在恶…...

LLaVA- Improved Baselines with Visual Instruction Tuning - jack

原始LLaVA论文: 标题: "Visual Instruction Tuning" arXiv链接: https://arxiv.org/abs/2304.08485 会议: NeurIPS 2023 LLaVA-1.5 论文: 标题: "Improved Baselines with Visual Instruction Tuning" arXiv链接: https://arxiv.org/abs/2310.03744…...

042-WEB 攻防:PHP 应用 MYSQL 架构 SQL 注入 跨库查询 文件读写 权限操作

042-WEB 攻防:PHP 应用 & MYSQL 架构 & SQL 注入 & 跨库查询 & 文件读写 & 权限操作 二、核心知识点与演示案例 1. 核心知识点PHP-MYSQL-SQL 注入 - 常规查询PHP-MYSQL-SQL 注入 - 跨库查询PHP-MYSQL-SQL 注入 - 文件读写2. 演示案例PHP-MYSQL-Web 组成架…...

Dsu On Tree 笔记

关于这个技巧我甚至都记不清是什么时候学的了,反正就是很早很早之前,当时学了之后看什么子树查询都想上 Dsu On Tree,后来也没怎么写过了,不过这个东西确确实实很强劲。 今天写了一上午教练的题单,大概获得了三天的时间来写自己想写的,就去写写各种莫队吧。 结果写到一个…...

西电微机原理-第一章 序论:微型计算机概述

目录1.1 基本概念1.2 微处理器概述1.3 微型计算机概述硬件、软件系统一、PC的发展二、PC的基本组成微型计算机的工作过程 1.1 基本概念1.2 微处理器概述Intel微处理器的发展💡 *注意:*8086和8088CPU片内总线和寄存器都是16位的,而8086的系统总线和io接口是16位,支持16位读…...

Liunx 硬盘扩容

第1步:检查磁盘当前状态lsblk sudo fdisk -l /dev/vdb df -h第2步:卸载并清理磁盘(如果已挂载) 如果发现 /dev/vdb 已经被挂载到了某个位置(比如 /data),先卸载它:sudo umount /dev/vdb如果卸载时显示 not mounted,说明没有挂载,继续下一步。 第3步:彻底清除磁盘上的…...

船舶航向控制算法

船舶航向控制算法:Nomoto/Norrbin 非线性模型 → PID/ADRC → 环境扰动 → 航向-航迹双环 → 结果可视化1. 技术要点模型:Nomoto(线性)+ Norrbin(非线性)+ 环境扰动(风/浪/流) 控制:PID、ADRC、L1-GPR 自适应(可选) 输出:航向角、舵角、航迹误差、控制性能指标(IT…...

pyside6 1

1 安装python 2 安装pycharm pycharm中创建项目,在项目中打开终端,安装pyside6 设计完成后保存至项目根目录,执行如下命令,生成相关py文件 打包:在项目根目录安装pyinstaller 安装后查看版本号,确定安装成果 打包 .py文件 pyinstaller -w 01.py //-w 没有黑窗口…...

基于WSL下载Hadoop和HBASE

正常操作 步骤 1:安装 WSL 启用 WSL 功能: 以管理员身份打开 PowerShell 或 命令提示符,输入以下命令并回车: powershell wsl --install 这个命令会自动启用所需的 Windows 功能、下载并安装默认的 Ubuntu 发行版。 (如果上述命令无效,可以手动启用): powershell dism.…...

应用多、交付快,研发运维怎么管?看云效+SAE 如何一站式破局

云效 AppStack 与阿里云 Serverless 应用引擎(SAE)的集成方案,为企业研发团队提供了一套高效、低成本、高质量的研运一体化解决方案。作者:天彤 背景 对于研发团队来说,应用程序(Application)的开发运维的成本、质量、效率,永远是比较难均衡的三个核心要素,特别是对于…...

revit二次开发之 钢筋功能详细分析

根据以上钢筋的功能,可以确定钢筋功能的主要功能按照循序如下:类别     功能 备注Rebar 结构钢筋 生成普通钢筋信息AreaReinforcement 结构区域钢筋  用于生成区域钢筋PathReinforcement 路径区域钢筋 用于生成路径区域钢筋FabricSheet 编织钢筋网片 用于生成网片钢筋类…...