基于Langchain-Chatchat搭建私有知识库:RAG技术实践与优化指南

news2026/5/10 13:45:32
1. 项目概述从开源社区到企业级知识库的桥梁如果你最近在关注大语言模型LLM的应用落地尤其是私有化知识库问答这个方向那么“Langchain-Chatchat”这个名字你大概率不会陌生。它不是一个全新的模型而是一个基于 LangChain 框架构建的开源项目目标非常明确让开发者能够快速、低成本地搭建一个功能完备、支持本地部署的私有知识库问答系统。简单来说它就像一套“乐高积木”把大语言模型如 ChatGLM、通义千问、LLaMA 等、向量数据库如 Milvus、Chroma、文本切分、检索增强生成RAG等关键技术组件按照最佳实践的方式组装在了一起并提供了一个开箱即用的 Web 界面。你不再需要从零开始研究 LangChain 的复杂链式调用也不用头疼如何将 PDF、Word、TXT 文件转换成模型能理解的格式并进行高效检索。这个项目已经为你铺好了大部分的路你只需要准备好自己的文档和一台有显卡的机器CPU 也能跑但慢就能拥有一个类似 ChatGPT 但完全私有的、能回答你专属领域知识的智能助手。我最初接触它是因为团队内部有大量的技术文档、产品手册和会议纪要分散在各个角落新同事入职或者老员工查找历史资料都非常低效。我们尝试过用传统的全文搜索引擎但面对复杂的专业术语和上下文关联问题效果总是不尽人意。直到我们基于 Langchain-Chatchat 搭建了内部知识库情况才彻底改变。现在无论是问“我们产品的 API 鉴权机制是怎样的”还是“去年 Q3 关于某某功能的性能优化方案是什么”系统都能从海量文档中精准定位相关信息并生成一个连贯、准确的答案。这不仅提升了信息获取效率更关键的是所有数据都在内网安全可控。2. 核心架构与组件选型解析要理解 Langchain-Chatchat 为什么好用得先拆开看看它的“五脏六腑”。它的架构设计清晰地反映了现代 RAG 应用的标准范式并在每个环节都提供了可配置的选项兼顾了灵活性与易用性。2.1 核心工作流RAG 的标准化实现项目的核心工作流是一个经典的 RAG 流程可以分为“知识库构建”和“问答应用”两个相对独立又紧密关联的环节。知识库构建离线处理文档加载支持多种格式包括 PDF、Word、Excel、PPT、TXT、Markdown甚至网页链接。它利用 LangChain 的DocumentLoader体系将不同格式的文件统一转换成包含文本内容和元数据如来源、页码的文档对象。文本切分Split这是影响检索效果的关键一步。大模型有上下文长度限制不能把整本书扔进去。项目默认采用递归字符切分器并允许你设置块大小chunk_size和重叠区chunk_overlap。比如设置chunk_size500chunk_overlap50意味着每段文本大约500个字符且相邻两段之间有50个字符的重叠这样可以避免一个完整的句子或概念被生硬地切断保证检索时上下文的连贯性。文本向量化Embedding将切分后的文本块通过嵌入模型Embedding Model转换成高维向量一堆数字。这个向量就像是这段文本的“数学指纹”语义相近的文本其向量在空间中的距离也更近。项目支持多种嵌入模型如 OpenAI 的text-embedding-ada-002需API密钥、智谱的text2vec、百度的Ernie以及开源的BGE、M3E等。对于私有化部署BGEBAAI/bge-large-zh是中文社区非常受欢迎的选择效果出色且完全免费。向量存储Vector Store将上一步生成的海量向量连同原始的文本块及其元数据存储到专门的向量数据库中。项目支持多种向量库如Chroma轻量、简单、Milvus高性能、可扩展、FAISSFacebook 出品内存效率高等。选择哪种取决于你的数据规模和对性能的要求。对于千万级以下文档Chroma 通常够用且部署最简单。问答应用在线服务用户提问用户在 Web 界面输入问题。问题向量化将用户的问题同样通过嵌入模型转换成向量。向量检索在向量数据库中进行“相似度搜索”Similarity Search找出与问题向量最接近的 K 个文本块比如 top-5。这就是语义检索的核心它不再是关键词匹配而是理解问题意图后去找相关材料。上下文组装将检索到的 top-K 个文本块连同系统提示词Prompt和用户问题一起组装成一个大语言模型的输入上下文。提示词的作用至关重要它告诉模型“请基于以下背景资料回答问题如果资料中没有答案请说不知道。”LLM 生成答案大语言模型根据组装好的上下文生成最终的自然语言答案。项目支持通过 API 方式接入多种模型如 OpenAI GPT、智谱 ChatGLM、百度文心、通义千问、讯飞星火等也支持本地部署的模型如 ChatGLM3、Qwen、Llama 等。返回与引用展示将生成的答案返回给用户并通常附上答案所依据的源文档片段方便用户追溯和验证增强可信度。2.2 关键组件选型背后的考量为什么项目要支持这么多选项这背后是面向不同场景的权衡。嵌入模型选型如果你处理的主要是中文资料那么选择针对中文优化的模型如 BGE、M3E会比通用的多语言模型如 OpenAI效果更好且没有网络延迟和费用问题。BGE-large-zh模型在中文语义相似度任务上评测效果名列前茅是私有化部署的首选。向量数据库选型Chroma如果你的知识库文档数量在几十万以内且追求最快速的启动和最简单的运维Chroma 是理想选择。它可以直接将数据持久化到磁盘无需单独服务。Milvus如果你的数据量达到百万甚至千万级需要分布式部署、高可用性和极强的检索性能毫秒级响应那么 Milvus 是更专业的选择。但它需要额外的部署和运维成本。FAISS非常适合研究、原型验证或对内存使用有严格限制的场景。它更像一个算法库检索极快但通常数据全加载在内存中且缺乏成熟的持久化和服务化功能。大语言模型选型这是决定答案质量的“大脑”。API 模型如 GPT-4通常能力最强但会产生持续费用且有数据出境风险。本地模型如 ChatGLM3-6B、Qwen-7B完全可控但需要足够的 GPU 显存且答案的流畅度和逻辑性可能略逊于顶级 API 模型。一个常见的折中方案是用较强的本地模型如 Qwen-14B作为主力在关键或复杂场景下允许用户选择调用更强大的 API 模型需配置。注意组件间的版本兼容性是个暗坑。比如某些版本的 LangChain 可能与新版的向量数据库客户端存在接口变化。项目在requirements.txt中锁定了主要依赖的版本这是为了稳定性。如果你想升级某个组件需要仔细测试最好在虚拟环境中进行。3. 从零到一的部署与配置实战理论讲完了我们动手搭一个。这里我以最经典的组合在 Linux 服务器上进行部署ChatGLM3-6B 作为 LLM BGE-large-zh 作为嵌入模型Chroma 作为向量数据库。假设你有一台拥有至少 16GB 内存和 8GB GPU 显存用于运行 6B 模型的 Ubuntu 服务器。3.1 基础环境准备与项目拉取首先确保你的系统有 Python 3.8 和 Git。# 1. 克隆项目仓库 git clone https://github.com/chatchat-space/Langchain-Chatchat.git cd Langchain-Chatchat # 2. 创建并激活 Python 虚拟环境强烈推荐避免污染系统环境 python -m venv venv source venv/bin/activate # Linux/Mac # 如果是 Windows使用 venv\Scripts\activate # 3. 安装 PyTorch根据你的 CUDA 版本选择这里是 CUDA 11.8 的例子 # 先去 PyTorch 官网 (https://pytorch.org/get-started/locally/) 获取最新安装命令 pip install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu118 # 4. 安装项目依赖 pip install -r requirements.txt pip install -r requirements_api.txt # 如果你需要用到 API 服务 pip install -r requirements_webui.txt # 安装 Web UI 依赖这里最容易出问题的是 PyTorch 的安装。一定要根据你服务器上实际的 CUDA 版本通过nvcc --version或nvidia-smi查看来选择合适的安装命令否则可能无法利用 GPU 加速。3.2 模型下载与配置项目不会自动下载模型需要你手动准备。1. 下载 LLM 模型 (ChatGLM3-6B)你可以从 Hugging Face 或 ModelScope 下载。这里使用 Modelscope国内速度更快。# 安装 modelscope pip install modelscope # 在 Python 交互环境中执行下载 python from modelscope import snapshot_download model_dir snapshot_download(ZhipuAI/chatglm3-6b, cache_dir./model) exit()这会将模型下载到./model/ZhipuAI/chatglm3-6b目录下。2. 下载嵌入模型 (BGE-large-zh)同样使用 ModelScope。python from modelscope import snapshot_download model_dir snapshot_download(BAAI/bge-large-zh, cache_dir./model) exit()3. 修改配置文件项目所有配置集中在configs文件夹。我们需要修改两个核心文件。configs/model_config.py配置模型路径。# 找到 LLM 模型配置部分修改为你的本地路径 LLM_MODELS [chatglm3-6b, openai-api] # 可用的模型列表 ... # 模型配置字典 model_config { chatglm3-6b: { # 修改为你下载的 ChatGLM3-6B 路径 model_name: chatglm3-6b, model_path: /绝对路径/Langchain-Chatchat/model/ZhipuAI/chatglm3-6b, # 请替换为你的实际路径 device: cuda, # 使用 GPU如果是 CPU 则填 cpu ... # 其他参数保持默认 }, ... # 其他模型配置 } # 找到嵌入模型配置部分 EMBEDDING_MODEL bge-large-zh # 指定使用的嵌入模型 ... # 嵌入模型配置字典 embedding_model_dict { bge-large-zh: /绝对路径/Langchain-Chatchat/model/BAAI/bge-large-zh, # 请替换为你的实际路径 ... # 其他嵌入模型配置 }configs/server_config.py配置服务器和向量数据库。# 默认向量数据库类型我们使用 Chroma DEFAULT_VS_TYPE chroma # Chroma 持久化路径 CHROMA_PERSIST_PATH ./chroma_db # 向量数据将存储在此目录 # 知识库默认存储路径 KB_ROOT_PATH ./knowledge_base3.3 初始化知识库与启动服务配置好后进行初始化。# 初始化数据库会创建必要的表结构 python init_database.py --recreate-vs # 启动 API 服务后端核心 python startup.py --all-webui # 这个命令会依次启动模型加载器 - API 服务器 - Web UI 前端如果一切顺利你会在终端看到多个服务启动成功的日志。默认情况下Web 界面可以通过浏览器访问http://你的服务器IP:8501。首次访问你会看到简洁的界面主要分为“知识库管理”和“对话”两个区域。在“知识库管理”中你可以创建新的知识库然后上传你的文档支持批量上传。上传后点击“向量化”按钮系统就会自动执行我们之前提到的文档加载、切分、向量化、存储的完整流程。实操心得第一次启动时加载 ChatGLM3-6B 这类模型到 GPU 会消耗较长时间几分钟这是正常的。如果内存不足可能会失败。可以尝试在model_config.py中将device改为cpu先进行功能验证但推理速度会非常慢。另外startup.py脚本可能会因为端口占用而失败确保7860Gradio、8000API、8501WebUI等端口没有被其他程序使用。4. 知识库构建的优化技巧与避坑指南项目搭起来了但要让你的知识库问答系统真正好用关键在于知识库的构建质量。这里面的门道不少。4.1 文本切分的艺术不只是按长度分割默认的递归字符切分器RecursiveCharacterTextSplitter对于结构规整的文档如纯文本文档效果不错但它可能把表格、代码块或一段完整的对话切得支离破碎。针对 Markdown/代码文档使用MarkdownTextSplitter或LanguageTextSplitter针对特定编程语言会是更好的选择。它们能识别 Markdown 标题、代码块等语法结构在更自然的边界处进行切分保留更好的语义单元。调整块大小与重叠chunk_size不是越小越好。太小会导致信息碎片化检索到的片段可能缺乏完整上下文太大会导致检索精度下降且可能超过模型的上下文窗口。对于中文500-800 是一个常见的起始点。chunk_overlap设置 50-150 可以有效缓解边界切割问题。你需要根据你的文档类型技术文档、法律条文、会议记录进行微调。一个实用的方法是上传少量典型文档后尝试用不同参数构建知识库然后问几个典型问题对比答案质量。自定义分割函数对于有严格格式的文档如每段一个 QA你可以编写自定义的分割逻辑确保每个 QA 对作为一个独立的块。4.2 嵌入模型的选择与微调BGE-large-zh 在通用中文场景下已经很强但如果你处理的是非常垂直的领域如医疗、金融、法律其中包含大量领域特有术语和表述方式通用嵌入模型可能无法准确捕捉这些术语之间的细微语义关系。领域微调如果你有足够的领域文本对问题-相关段落可以考虑对 BGE 模型进行轻量级的微调继续训练让它更“懂”你的行业黑话。这能显著提升检索的准确率。混合检索除了语义检索向量搜索还可以结合关键词检索如 BM25。这就是“混合检索”Hybrid Search。它的思想是语义检索可能漏掉一些精确的关键词匹配而关键词检索能补上这个缺口。Langchain-Chatchat 项目本身支持集成一些检索器你可以通过配置启用。例如对于查找精确的产品型号、代码函数名关键词检索往往更直接有效。4.3 元数据的重要性给文本块打上“标签”在构建知识库时除了文本内容还可以为每个文本块附加元数据Metadata比如source文件名、page页码、category类别。这些元数据有两个巨大用处检索后过滤你可以在向量检索的同时增加元数据过滤条件。例如用户问“财务部的报销制度是什么”你可以在检索时添加过滤器category‘财务制度’这样能确保检索结果不仅相关而且来源正确极大提升答案的精准度。答案引用可追溯在返回答案时展示引用的源文件名和页码用户可以直接去查阅原始文档增加了系统的可信度。项目默认会携带源文件信息但你可以自定义更丰富的元数据。在configs/model_config.py中可以配置文本分割器及其参数并关注docs字段中元数据的处理逻辑。5. 对话链与提示工程掌控回答的质量检索到相关文本后如何让大模型生成一个好答案这取决于你给模型的“指令”和“上下文”如何组织也就是提示工程。5.1 理解默认的提示模板Langchain-Chatchat 在chains目录下定义了对话链。核心的提示词模板通常在prompt_template.py或类似的配置文件中。一个典型的 RAG 提示词长这样已知信息 {context} 根据上述已知信息简洁和专业的来回答用户的问题。如果无法从中得到答案请说 “根据已知信息无法回答该问题”不允许在答案中添加编造成分。 问题是 {question}这个模板很简单但包含了关键指令基于已知信息回答、简洁专业、禁止编造。这已经能解决大部分问题。5.2 优化提示词以应对复杂场景场景一多文档汇总当用户问题涉及多个文档时检索到的{context}可能包含来自不同文件、甚至观点略有冲突的信息。简单的模板可能导致模型回答混乱。你可以优化为“已知信息来自以下多个来源\n来源1[文档A]的内容{context_part1}\n来源2[文档B]的内容{context_part2}\n... 请综合以上所有信息回答用户问题。如果不同来源信息有冲突请指出冲突点并说明主要依据。”场景二分步骤指令对于“如何配置XXX”这类问题模型需要从文档中提取步骤。提示词可以强调“请从已知信息中提取出配置XXX的具体步骤并以清晰的编号列表形式呈现。”场景三角色扮演如果你想让助手以特定口吻回答比如“技术支持工程师”可以在提示词开头定义角色“你是一个专业的技术支持工程师请用友好、耐心、专业的口吻回答用户问题。”修改提示词模板后需要重启相关的服务组件才能生效。5.3 调整对话链参数在configs/model_config.py中与 LLM 交互相关的参数也影响答案质量temperature温度控制输出的随机性。值越低如 0.1答案越确定、保守值越高如 0.9答案越有创造性、多样性。对于知识库问答通常设置较低的值0.1-0.3以保证答案的稳定性和准确性。max_length/max_new_tokens控制生成答案的最大长度。根据你预期的答案长度调整。history_len对话历史轮数。这决定了模型能记住多少之前的对话上下文。对于多轮追问的场景保持一定的历史长度如 5很重要。6. 高级功能与生产化考量当基本功能跑通后你会开始考虑如何让它更强大、更稳定适合团队甚至企业使用。6.1 多模型路由与热切换一个生产系统不应该只依赖一个模型。Langchain-Chatchat 支持配置多个 LLM 和嵌入模型。你可以实现一个简单的路由逻辑对于简单问题使用速度快的本地小模型如 ChatGLM3-6B对于复杂、需要推理的问题自动路由到更强的 API 模型如 GPT-4。这需要在应用层进行逻辑开发监听问题内容并做出判断。6.2 知识库的更新与增量处理文档不是一成不变的。当有新文档加入或旧文档修改时你不需要重建整个知识库。项目支持增量添加文档到已有知识库。原理是为新文档生成向量后直接插入到向量数据库的对应集合中。但这里有个关键点对于已删除或大幅修改的文档向量数据库很难直接“删除”或“更新”某个特定的向量片段。常见的做法是采用“版本化”知识库为每次大的更新创建一个新的知识库版本或者维护一个“无效片段ID”列表在检索时进行过滤。更彻底的方法是定期如每周全量重建索引但这需要停机时间。6.3 权限管理与审计开源版本主要关注功能企业级应用需要严格的权限控制。你需要在此基础上集成用户认证接入公司的 LDAP/AD 或 OA 系统。知识库权限不同部门、不同角色的员工只能访问和向其提问被授权的知识库。操作审计记录谁、在什么时候、向哪个知识库、问了什么问题、得到了什么答案。这对于合规性和问题追溯至关重要。 这些都需要你基于其 API 进行二次开发构建更完善的管理后台。6.4 性能监控与优化检索速度监控向量检索的耗时。当文档量巨大时100万可能需要考虑升级到 Milvus 这类分布式向量数据库或对向量进行量化如使用faiss的 IVF 索引以加速检索。GPU 利用率监控模型推理的 GPU 显存占用和计算负载。如果并发请求高可能需要部署模型推理的独立服务如使用FastAPI封装并做负载均衡。缓存策略对于高频的、答案固定的常见问题FAQ可以将问答对缓存起来如使用 Redis直接返回缓存结果避免每次重复检索和模型推理极大降低响应延迟和计算成本。7. 常见问题排查与调试实录在实际部署和运营中你会遇到各种各样的问题。这里记录几个我踩过的坑和解决方法。问题1上传文档后点击“向量化”长时间无反应或失败。可能原因1嵌入模型加载失败。检查configs/model_config.py中嵌入模型的路径是否正确以及该路径下是否有pytorch_model.bin或model.safetensors等模型文件。查看后端日志通常是运行startup.py的终端看是否有关于加载模型的错误信息。可能原因2文档格式解析失败。某些复杂排版的 PDF 或加密的 Word 文档LangChain 的文档加载器可能无法正确提取文本。尝试将文档另存为纯文本.txt或标准格式的 PDF 再上传。对于 PDF可以尝试先用pdfminer或pymupdf等库提取文本测试一下。可能原因3内存/显存不足。处理大文档时嵌入模型编码过程可能消耗大量内存。尝试减小单次处理的文件大小或增加系统交换空间。问题2问答时答案明显是模型“胡编乱造”的与提供的知识库内容不符。可能原因1检索到的上下文不相关。这是 RAG 系统最常见的问题。首先去 WebUI 的“知识库管理”中找到对应的知识库使用“搜索测试”功能输入你的问题看看系统返回的文本片段是否真的相关。如果不相关说明向量检索没起作用需要回到4.1 和 4.2章节优化文本切分和嵌入模型。可能原因2提示词指令不够强。模型忽略了“根据已知信息回答”的指令。尝试强化提示词例如在开头加上“你必须严格依据以下背景信息回答问题背景信息中没有的内容一律回答‘我不知道’。”并降低temperature参数值。可能原因3上下文过长或过短。检索到的文本块context可能太多超过了模型的有效上下文窗口导致模型只看到了部分信息或者太少信息不足。调整检索返回的文本块数量top_k通常 3-5 个是一个不错的起点。问题3服务运行一段时间后响应越来越慢甚至崩溃。可能原因1内存泄漏。Python 服务长时间运行可能存在内存未释放的问题。定期重启服务是一个简单粗暴但有效的方法。可以考虑使用supervisor或systemd来管理进程并设置自动重启策略。可能原因2向量数据库性能下降。Chroma 在处理大量数据后如果索引未优化检索速度会变慢。对于 Chroma可以尝试定期重启服务。对于生产环境应考虑迁移到 Milvus 并建立合适的索引如 IVF_FLAT。可能原因3GPU 显存碎片化。长时间进行模型推理尤其是处理不同长度的输入可能导致 PyTorch 的 GPU 显存产生碎片最终导致“显存不足”错误。除了重启服务可以尝试在代码中定期调用torch.cuda.empty_cache()来清理缓存但这并非总是有效。问题4如何查看详细的运行日志进行调试项目使用 Python 的logging模块。你可以在configs/server_config.py中修改日志级别将LOG_LEVEL设置为“DEBUG”这样可以在终端看到更详细的流程信息包括检索了哪些片段、发送给模型的完整提示词是什么这对于调试“胡编乱造”问题至关重要。搭建和优化一个像 Langchain-Chatchat 这样的知识库系统是一个持续迭代的过程。它不是一个“设置好就一劳永逸”的工具而是一个需要你根据自身数据特点和业务需求不断调优的“活系统”。从模型选型、参数调整到提示词优化、运维监控每一步都影响着最终的用户体验。但一旦跑顺它带来的效率提升是革命性的。我的体会是前期多花时间在知识库的“数据清洗”和“切分策略”上比后期拼命调整模型参数要有效得多。毕竟垃圾进垃圾出Garbage in, garbage out这条准则在 AI 时代依然成立。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2597003.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

SpringBoot-17-MyBatis动态SQL标签之常用标签

文章目录 1 代码1.1 实体User.java1.2 接口UserMapper.java1.3 映射UserMapper.xml1.3.1 标签if1.3.2 标签if和where1.3.3 标签choose和when和otherwise1.4 UserController.java2 常用动态SQL标签2.1 标签set2.1.1 UserMapper.java2.1.2 UserMapper.xml2.1.3 UserController.ja…

wordpress后台更新后 前端没变化的解决方法

使用siteground主机的wordpress网站,会出现更新了网站内容和修改了php模板文件、js文件、css文件、图片文件后,网站没有变化的情况。 不熟悉siteground主机的新手,遇到这个问题,就很抓狂,明明是哪都没操作错误&#x…

网络编程(Modbus进阶)

思维导图 Modbus RTU(先学一点理论) 概念 Modbus RTU 是工业自动化领域 最广泛应用的串行通信协议,由 Modicon 公司(现施耐德电气)于 1979 年推出。它以 高效率、强健性、易实现的特点成为工业控制系统的通信标准。 包…

UE5 学习系列(二)用户操作界面及介绍

这篇博客是 UE5 学习系列博客的第二篇,在第一篇的基础上展开这篇内容。博客参考的 B 站视频资料和第一篇的链接如下: 【Note】:如果你已经完成安装等操作,可以只执行第一篇博客中 2. 新建一个空白游戏项目 章节操作,重…

IDEA运行Tomcat出现乱码问题解决汇总

最近正值期末周,有很多同学在写期末Java web作业时,运行tomcat出现乱码问题,经过多次解决与研究,我做了如下整理: 原因: IDEA本身编码与tomcat的编码与Windows编码不同导致,Windows 系统控制台…

利用最小二乘法找圆心和半径

#include <iostream> #include <vector> #include <cmath> #include <Eigen/Dense> // 需安装Eigen库用于矩阵运算 // 定义点结构 struct Point { double x, y; Point(double x_, double y_) : x(x_), y(y_) {} }; // 最小二乘法求圆心和半径 …

使用docker在3台服务器上搭建基于redis 6.x的一主两从三台均是哨兵模式

一、环境及版本说明 如果服务器已经安装了docker,则忽略此步骤,如果没有安装,则可以按照一下方式安装: 1. 在线安装(有互联网环境): 请看我这篇文章 传送阵>> 点我查看 2. 离线安装(内网环境):请看我这篇文章 传送阵>> 点我查看 说明&#xff1a;假设每台服务器已…

XML Group端口详解

在XML数据映射过程中&#xff0c;经常需要对数据进行分组聚合操作。例如&#xff0c;当处理包含多个物料明细的XML文件时&#xff0c;可能需要将相同物料号的明细归为一组&#xff0c;或对相同物料号的数量进行求和计算。传统实现方式通常需要编写脚本代码&#xff0c;增加了开…

LBE-LEX系列工业语音播放器|预警播报器|喇叭蜂鸣器的上位机配置操作说明

LBE-LEX系列工业语音播放器|预警播报器|喇叭蜂鸣器专为工业环境精心打造&#xff0c;完美适配AGV和无人叉车。同时&#xff0c;集成以太网与语音合成技术&#xff0c;为各类高级系统&#xff08;如MES、调度系统、库位管理、立库等&#xff09;提供高效便捷的语音交互体验。 L…

(LeetCode 每日一题) 3442. 奇偶频次间的最大差值 I (哈希、字符串)

题目&#xff1a;3442. 奇偶频次间的最大差值 I 思路 &#xff1a;哈希&#xff0c;时间复杂度0(n)。 用哈希表来记录每个字符串中字符的分布情况&#xff0c;哈希表这里用数组即可实现。 C版本&#xff1a; class Solution { public:int maxDifference(string s) {int a[26]…

【大模型RAG】拍照搜题技术架构速览:三层管道、两级检索、兜底大模型

摘要 拍照搜题系统采用“三层管道&#xff08;多模态 OCR → 语义检索 → 答案渲染&#xff09;、两级检索&#xff08;倒排 BM25 向量 HNSW&#xff09;并以大语言模型兜底”的整体框架&#xff1a; 多模态 OCR 层 将题目图片经过超分、去噪、倾斜校正后&#xff0c;分别用…

【Axure高保真原型】引导弹窗

今天和大家中分享引导弹窗的原型模板&#xff0c;载入页面后&#xff0c;会显示引导弹窗&#xff0c;适用于引导用户使用页面&#xff0c;点击完成后&#xff0c;会显示下一个引导弹窗&#xff0c;直至最后一个引导弹窗完成后进入首页。具体效果可以点击下方视频观看或打开下方…

接口测试中缓存处理策略

在接口测试中&#xff0c;缓存处理策略是一个关键环节&#xff0c;直接影响测试结果的准确性和可靠性。合理的缓存处理策略能够确保测试环境的一致性&#xff0c;避免因缓存数据导致的测试偏差。以下是接口测试中常见的缓存处理策略及其详细说明&#xff1a; 一、缓存处理的核…

龙虎榜——20250610

上证指数放量收阴线&#xff0c;个股多数下跌&#xff0c;盘中受消息影响大幅波动。 深证指数放量收阴线形成顶分型&#xff0c;指数短线有调整的需求&#xff0c;大概需要一两天。 2025年6月10日龙虎榜行业方向分析 1. 金融科技 代表标的&#xff1a;御银股份、雄帝科技 驱动…

观成科技:隐蔽隧道工具Ligolo-ng加密流量分析

1.工具介绍 Ligolo-ng是一款由go编写的高效隧道工具&#xff0c;该工具基于TUN接口实现其功能&#xff0c;利用反向TCP/TLS连接建立一条隐蔽的通信信道&#xff0c;支持使用Let’s Encrypt自动生成证书。Ligolo-ng的通信隐蔽性体现在其支持多种连接方式&#xff0c;适应复杂网…

铭豹扩展坞 USB转网口 突然无法识别解决方法

当 USB 转网口扩展坞在一台笔记本上无法识别,但在其他电脑上正常工作时,问题通常出在笔记本自身或其与扩展坞的兼容性上。以下是系统化的定位思路和排查步骤,帮助你快速找到故障原因: 背景: 一个M-pard(铭豹)扩展坞的网卡突然无法识别了,扩展出来的三个USB接口正常。…

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

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

Linux应用开发之网络套接字编程(实例篇)

服务端与客户端单连接 服务端代码 #include <sys/socket.h> #include <sys/types.h> #include <netinet/in.h> #include <stdio.h> #include <stdlib.h> #include <string.h> #include <arpa/inet.h> #include <pthread.h> …

华为云AI开发平台ModelArts

华为云ModelArts&#xff1a;重塑AI开发流程的“智能引擎”与“创新加速器”&#xff01; 在人工智能浪潮席卷全球的2025年&#xff0c;企业拥抱AI的意愿空前高涨&#xff0c;但技术门槛高、流程复杂、资源投入巨大的现实&#xff0c;却让许多创新构想止步于实验室。数据科学家…

深度学习在微纳光子学中的应用

深度学习在微纳光子学中的主要应用方向 深度学习与微纳光子学的结合主要集中在以下几个方向&#xff1a; 逆向设计 通过神经网络快速预测微纳结构的光学响应&#xff0c;替代传统耗时的数值模拟方法。例如设计超表面、光子晶体等结构。 特征提取与优化 从复杂的光学数据中自…