构建垂直领域智能助手:混合智能体与RAG架构实战解析

news2026/4/27 6:06:29
1. 项目概述一个专为宝可梦世界打造的智能对话系统如果你是一个宝可梦的资深爱好者或者对构建垂直领域的智能助手感兴趣那么“可萌”这个项目绝对值得你花时间研究。它不是一个简单的聊天机器人而是一个融合了知识图谱、大语言模型、多智能体编排和高级检索增强生成技术的完整系统。简单来说它能让用户像和一个“宝可梦博士”对话一样用自然语言询问任何关于宝可梦的问题比如“皮卡丘的进化链是什么”、“在关都地区哪里可以遇到小火龙”甚至“帮我规划一个以水系宝可梦为主的队伍来挑战岩石系道馆”。系统不仅能给出精准、结构化的答案还能通过知识图谱可视化让你直观地看到宝可梦之间的进化关系、属性克制网络甚至在地图上定位它们可能出现的地点。这个项目的核心价值在于它提供了一个高度可复用的技术框架。虽然它披着宝可梦的外衣但其底层架构——从数据爬取、知识图谱构建、大模型微调到多智能体任务路由和混合检索——完全可以迁移到任何其他垂直领域比如法律、医疗、游戏攻略或者企业内部知识库。开发者可以将其视为一个“领域智能助手模板”通过更换数据源和调整图谱schema快速打造出另一个专业领域的问答专家。接下来我将为你深入拆解这个项目的设计思路、技术实现细节以及我在复现和探索过程中积累的实操经验。2. 核心架构与设计思路拆解2.1 为什么选择“混合智能体混合检索”的架构在构建一个面向复杂、结构化知识领域的问答系统时单一的技术路线往往力不从心。传统的基于关键词匹配的搜索无法理解用户意图的细微差别纯向量检索虽然语义理解能力强但对于精确的事实查询如“妙蛙种子的编号是多少”可能不够准确且无法回答需要多跳推理的问题如“小智的皮卡丘都学会了哪些技能”而单纯依赖大语言模型生成又会有“幻觉”问题可能编造不存在的宝可梦或属性。“可萌”项目采用的“混合智能体混合检索”架构正是为了系统性地解决这些问题。其设计思路可以概括为用智能体Agent来理解任务和决策用混合检索来获取最可靠的知识最后用大语言模型来组织自然语言回答。智能体Agent负责“思考”和“调度”系统内置了多个具备不同能力的智能体Worker如RAG检索智能体、知识图谱查询智能体、网络搜索智能体、MCP服务智能体等。一个顶层的“监督者Supervisor”智能体会根据用户的问题判断需要调用哪些子智能体来协同工作。例如对于问题“丰缘地区的御三家分别克制哪些宝可梦”监督者可能会并行调用1RAG智能体从文档中查找“丰缘地区御三家”的具体信息2图谱智能体查询“木守宫、火稚鸡、水跃鱼”的属性及克制关系3如果需要最新资讯再调用网络搜索智能体。这种基于规则和LLM判断的路由机制使得系统能灵活应对各种复杂查询。混合检索负责“找答案”这是知识的来源确保回答的准确性。向量检索Milvus擅长处理语义相似性问题如“有哪些电属性的、长得像老鼠的宝可梦”。它将非结构化的文本如维基百科条目转化为向量进行相似度匹配。图谱检索Neo4j擅长处理高度结构化、关系型查询如“展示喷火龙的完整进化链及其学习技能”。它以“实体-关系-实体”的形式存储知识能高效进行多跳查询和路径发现。关键词检索BM25作为补充确保精确术语如特定技能名“十万伏特”、道具名“不变之石”能被快速命中它对字面匹配的召回率很高。高级RAG技术项目集成了Self-RAG、CRAG、HyDE等技术进一步优化检索质量。例如HyDE假设性文档嵌入会根据用户问题先让LLM生成一个假设性答案再用这个答案的向量去检索有时能比原始问题找到更相关的文档。这种架构的优势在于它将不同的技术模块化并通过智能体进行有机串联既保证了系统的准确性和可靠性又具备了处理复杂问题的灵活性。2.2 技术栈选型背后的逻辑项目的技术栈选择体现了现代AI应用开发的典型组合Python生态用于AI核心Docker用于环境隔离与部署Vue3用于构建现代化的交互界面。LangChain LangGraph (v1.x)这是整个智能体系统的“大脑”和“神经系统”。LangChain提供了与大模型、工具、记忆等组件交互的标准接口而LangGraph则是一个基于状态机的编排框架非常适合描述具有循环、分支、并行等复杂逻辑的智能体工作流。选择v1.x版本是因为其API更加稳定和模块化create_agent等函数让智能体定义更简洁。相较于自行编写复杂的if-else状态管理代码使用LangGraph可以清晰地用图Graph来定义智能体的决策流程可维护性和可观测性都大大增强。LightRAG这是一个高效、轻量级的RAG框架。相较于一些重型、封装过度的RAG方案LightRAG更注重核心检索流程的灵活性和性能。项目用它来构建和管理向量检索索引并集成高级RAG策略。选择它的原因可能是其易于与LangChain集成且对自定义检索器、重排序器等组件的支持较好。Milvus Neo4j分别作为向量数据库和图数据库的业界标杆。Milvus专为海量向量相似性搜索而优化支持多种索引类型如IVF_FLAT, HNSW能轻松应对成千上万的宝可梦文档向量。Neo4j则是属性图模型的代表其Cypher查询语言非常直观能优雅地表达“查找所有由‘小火龙’进化而来并且能学会技能‘喷射火焰’的宝可梦”这类复杂查询。两者的结合构成了“混合检索”的坚实底座。FastAPI Vue3FastAPI以其高性能、自动生成API文档Swagger UI和易于使用的异步支持成为Python后端API的首选。Vue3的响应式系统和组合式API则非常适合构建动态、交互性强的聊天界面和知识图谱可视化组件。前后端分离的架构也便于独立开发和部署。FunASR阿里达摩院开源的语音识别工具包。集成它是为了提供语音输入功能让交互更自然。其WebSocket协议的支持也便于实现实时的语音转文字流式传输。实操心得技术栈的“组合拳”这个技术栈清单看起来很长但核心思想是“专业的人做专业的事”。不要试图用一个工具解决所有问题。例如用Neo4j处理关系查询的效率远高于用关系型数据库进行多次JOIN也更高于让大语言模型去“记忆”这些关系。在项目初期明确每个组件的职责边界能有效降低后续集成的复杂度。建议先分别验证每个核心组件如Milvus检索、Neo4j查询的基本功能再通过LangGraph将它们串联起来。3. 核心模块深度解析与实操要点3.1 知识图谱的构建从数据到关联网络知识图谱是项目的“结构化知识大脑”。构建一个高质量的宝可梦知识图谱是整个系统能否提供精确答案的基础。数据来源与处理 项目主要从百度贴吧、维基百科等数据源爬取信息。原始数据通常是半结构化或非结构化的文本。处理流程一般包括实体识别使用训练好的NER模型如基于RoBERTa微调的模型从文本中抽取出宝可梦、技能、属性、地点、道具等实体。关系抽取通过规则匹配如“X 进化成 Y”的句式、依存句法分析或基于预训练模型的关系抽取方法识别实体之间的关系如(妙蛙种子, 进化成, 妙蛙草)、(皮卡丘, 拥有技能, 十万伏特)、(大岩蛇, 属性克制, 大嘴雀)。属性补全为每个实体添加属性如宝可梦的身高、体重、特性等。这些信息可能来自结构化数据表或通过信息抽取获得。数据清洗与融合不同来源的数据可能存在冲突或重复需要进行消歧和合并最终形成统一的entities.json实体列表和relations.json关系列表。图谱建模与存储 在Neo4j中我们需要设计一个合理的图模型。一个典型的宝可梦图谱可能包含以下节点标签和关系类型节点标签Pokemon,Move(技能),Type(属性),Region(地区),Item(道具),Ability(特性)。关系类型EVOLVES_TO(进化到),LEARNS_MOVE(学会技能),HAS_TYPE(拥有属性),LOCATED_IN(位于地区),WEAK_AGAINST(被...克制),RESISTANT_TO(抵抗...)。使用Cypher语句将清洗后的数据导入Neo4j// 创建宝可梦节点 CREATE (p:Pokemon {id: 025, name: Pikachu, chinese_name: 皮卡丘, height: 0.4, weight: 6.0}) // 创建属性节点 CREATE (t:Type {name: Electric}) // 创建关系 MATCH (p:Pokemon {name: Pikachu}), (t:Type {name: Electric}) CREATE (p)-[:HAS_TYPE]-(t)注意事项图谱构建的坑实体链接文本中“皮卡丘”、“皮神”、“电气鼠”可能指向同一实体需要在构建时做好归一化统一使用标准ID或名称。关系权重对于“克制”关系可以添加effectiveness属性如2.0表示双倍克制0.5表示效果减半这样在图谱查询时能直接计算伤害倍数。增量更新宝可梦世界会更新新世代、新形态图谱需要有增量更新的机制。可以定期运行爬虫和ETL流程或设计一个版本化的图谱结构。性能优化为高频查询的属性如name,id建立索引CREATE INDEX ON :Pokemon(name)。对于超大规模图谱需要考虑分片或使用Neo4j的企业版集群。3.2 大模型微调与专域知识注入为了让大语言模型LLM更“懂”宝可梦项目对基座模型如Qwen2.5进行了领域适应性微调。微调的目的不是让模型记忆所有宝可梦数据那是知识图谱和RAG的工作而是让模型理解宝可梦领域的术语和对话风格让模型知道“御三家”、“Mega进化”、“太晶化”是什么意思并以一种“宝可梦图鉴”或“博士”的口吻来回答。更好地遵循指令针对宝可梦问答场景优化指令遵循能力例如当用户问“它怕什么”时模型能理解“它”指代上文提到的宝可梦并调用正确的工具去查询克制关系。减少通用领域的幻觉通过注入领域语料降低模型在宝可梦话题上“胡编乱造”的概率。微调数据准备 通常需要构建一个高质量的指令微调数据集格式如下[ { instruction: 请介绍宝可梦‘捷拉奥拉’。, input: , output: 捷拉奥拉是电属性的幻之宝可梦它...基于知识库的真实信息 }, { instruction: 根据以下信息回答用户问题。信息[皮卡丘电属性身高0.4m]。问题皮卡丘有多高, input: , output: 皮卡丘的身高是0.4米。 }, { instruction: 以宝可梦博士的口吻向新手训练家解释属性克制。, input: , output: 好的训练家属性克制是宝可梦对战的核心。简单来说就像水能灭火... } ]数据来源可以是清洗后的维基百科文本、人工构造的问答对、以及从社区如贴吧整理的对话。微调实践 项目使用了Hugging Face上的qwen2.5-14b-instruct-pokemon-int4模型。这是一个经过量化INT4的模型在保持较好性能的同时大幅降低了部署所需的显存。微调通常采用QLoRA等参数高效微调技术在消费级GPU上即可完成。实操心得微调 vs. RAG永远要明确微调和RAG的分工。微调改变的是模型的“语言风格”和“领域常识”让它更擅长处理这个领域的对话逻辑。而具体的事实性知识如某个宝可梦的具体身高、技能威力应该交给RAG和知识图谱。不要试图通过微调让模型记住所有事实这效率低下且难以更新。正确的模式是微调后的模型 精准的检索工具 既专业又准确的领域专家。3.3 多智能体协同与LangGraph工作流这是系统的“指挥中心”。LangGraph将整个问答流程建模为一个有状态的工作流State Graph。核心状态设计 状态State是一个字典贯穿工作流始终通常包含class AgentState(TypedDict): messages: List[BaseMessage] # 对话历史 current_query: str # 当前用户问题 selected_agents: List[str] # 监督者选出的待执行智能体列表 rag_results: Optional[List[Document]] # RAG检索结果 graph_results: Optional[List[Dict]] # 图谱查询结果 web_results: Optional[List[Dict]] # 网络搜索结果 final_answer: Optional[str] # 最终答案工作流节点路由节点Supervisor接收用户问题分析意图。这里采用了“规则优先”策略先匹配一系列预定义规则如问题中包含“进化”则路由到图谱智能体包含“最新”则路由到网络搜索智能体若规则不匹配则调用一个轻量级LLM如GPT-3.5-Turbo进行判断。这减少了对昂贵大模型的调用提升了响应速度和确定性。并行执行节点根据selected_agents列表并行调用相应的工人智能体Worker。每个Worker独立运行RAG Worker将问题向量化在Milvus中检索相关文档片段。Graph Worker解析问题中的实体和关系构造Cypher查询语句在Neo4j中查询。Web Search Worker调用Tavily等搜索API获取实时信息。MCP Worker通过Model Context Protocol查询外部服务如地理位置数据。结果汇总与生成节点收集所有Worker的结果进行去重、排序和融合。然后将“用户问题”和“检索到的证据”一起提交给微调后的LLM让它生成一个连贯、准确、引用了证据的自然语言回答。循环与条件边LangGraph支持循环。例如如果汇总节点认为证据不足可以返回路由节点要求启用更多工具如开启网络搜索进行二次检索。LangGraph实现片段示例from langgraph.graph import StateGraph, END from typing import Literal def supervisor_node(state: AgentState) - AgentState: query state[current_query] # 规则匹配 if 进化 in query: state[selected_agents] [graph_agent] elif 新闻 in query or 最新 in query: state[selected_agents] [web_agent] else: # LLM路由 llm_decision llm.invoke(f请判断问题{query}最适合用哪种工具回答rag, graph, web, 或 combined。) state[selected_agents] parse_decision(llm_decision) return state def rag_agent_node(state: AgentState) - AgentState: if rag_agent in state[selected_agents]: docs retriever.invoke(state[current_query]) state[rag_results] docs return state # 构建图 workflow StateGraph(AgentState) workflow.add_node(supervisor, supervisor_node) workflow.add_node(rag_agent, rag_agent_node) workflow.add_node(graph_agent, graph_agent_node) workflow.add_node(synthesizer, synthesizer_node) # 汇总生成节点 workflow.set_entry_point(supervisor) workflow.add_edge(supervisor, rag_agent) # 所有路径都先经过rag_agent这里需要条件逻辑 # 更合理的做法是使用add_conditional_edges ... graph workflow.compile()避坑指南智能体编排的稳定性工具调用异常处理每个Worker内部必须做好异常捕获try-catch。网络搜索API可能超时Neo4j查询可能语法错误。Worker应返回一个包含错误信息的标准格式结果而不是让整个工作流崩溃。状态管理确保状态中的每个字段都被清晰地定义和初始化。避免在条件分支中访问可能不存在的字段。超时控制为并行执行设置总体超时。如果一个Web搜索卡住了不能无限期等待。LLM调用成本监督者路由和最终答案生成都需要调用LLM。可以通过缓存Semantic Cache和选用不同规格的模型如用小模型做路由大模型做生成来控制成本。4. 系统部署与运维实战4.1 基于Docker Compose的一键部署项目提供了完善的docker-compose.yml文件这是快速上手和保证环境一致性的关键。它定义了多个服务Service及其依赖关系。核心服务剖析api(FastAPI后端)应用核心依赖llm,neo4j,milvus等服务。web(Vue3前端)提供用户界面。neo4j图数据库服务。neo4j-bootstrap是一个初始化容器在Neo4j启动后自动执行Cypher脚本导入数据实现了数据持久化与容器化部署的解耦。milvus向量数据库服务。包含三个组件etcd元数据存储、minio对象存储用于存向量索引文件、standaloneMilvus单机服务。mysql为MCP地理映射等功能提供关系型数据存储。funasr语音识别服务。mcp-serverMCP服务容器提供额外的工具能力。环境变量配置.env文件 这是部署前的关键一步。你需要至少配置LLM的API密钥如OpenAI、SiliconFlow等。其他开关根据需求调整# LLM 配置示例使用硅基流动 SILICONFLOW_API_KEYyour_api_key_here LLM_MODEL_NAMEqwen2.5-14b-instruct-pokemon-int4 LLM_BASE_URLhttps://api.siliconflow.cn/v1 # 功能开关 ENABLE_KNOWLEDGE_GRAPHtrue ENABLE_KNOWLEDGE_BASEtrue ENABLE_WEB_SEARCHfalse # 如需开启需配置TAVILY_API_KEY ENABLE_MCPtrue ENABLE_ASRfalse # 数据库连接通常由Docker Compose内部网络自动配置 NEO4J_URIbolt://neo4j:7687 NEO4J_USERneo4j NEO4J_PASSWORDyour_strong_password_here MILVUS_HOSTmilvus-standalone MILVUS_PORT19530部署命令详解# 基础启动只启动前端、后端和必要的依赖如Redis缓存 cd docker docker compose up -d --build # 全功能启动启动所有基础设施数据库、搜索引擎和MCP服务 docker compose --profile infra --profile mcp up -d --build # 启动语音识别功能 docker compose --profile asr up -d --build--profile是Docker Compose的一个强大功能它允许你定义和启动一组相关的服务。infraprofile包含了所有基础设施服务Neo4j, Milvus, MySQLmcpprofile包含了MCP服务asrprofile包含了FunASR服务。这种按需启动的方式非常灵活。4.2 数据初始化与持久化首次部署时数据初始化是关键步骤。知识图谱数据当使用--profile infra启动时neo4j-bootstrap容器会自动将项目resources/data/kg_data/下的entities.json和relations.json导入到Neo4j中。这是通过将初始化脚本挂载到容器的/docker-entrypoint-initdb.d/目录实现的。确保这两个数据文件格式正确。向量知识库数据Milvus的索引需要手动构建。通常需要运行一个初始化脚本读取你的文档如Markdown、PDF通过嵌入模型如BGE-M3转换为向量并插入到Milvus集合Collection中。项目可能提供了scripts/init_knowledge_base.py之类的脚本。你需要确保嵌入模型服务可用可以是本地部署也可以是调用云端API。MySQL地图数据对于宝可梦地理位置功能需要将地理坐标数据导入MySQL。项目提供了scripts/import_pokemon_map.py脚本但需要手动执行docker compose exec api python scripts/import_pokemon_map.py注意由于MySQL容器启动和数据导入的时序问题这个步骤没有放在neo4j-bootstrap中自动执行避免因数据库未就绪而失败。数据持久化 Docker Compose文件中通过volumes将容器内的数据目录映射到宿主机./volumes/neo4j/data等。这样即使删除容器数据也不会丢失。定期备份这些volumes目录是重要的运维工作。4.3 常见运维问题与排查容器启动失败检查日志docker compose logs [service_name]例如docker compose logs neo4j查看Neo4j启动日志。常见问题是端口冲突、内存不足特别是Milvus和Neo4j对内存有要求、或者.env文件配置错误。检查依赖确保api服务等待其依赖如neo4j、milvus完全就绪后再启动。项目可能在api服务的启动命令中使用了wait-for-it.sh脚本或类似健康检查机制。LLM API调用失败确认.env中的API密钥和Base URL正确无误。检查网络连通性确保Docker容器可以访问外部互联网如果使用云端LLM。查看API服务的用量和配额是否充足。检索结果不准确向量检索检查嵌入模型是否与构建索引时使用的模型一致。检查Milvus集合的索引类型如HNSW和搜索参数metric_type、ef等。图谱检索在Neo4j Browser (http://localhost:7474) 中手动执行Cypher查询验证数据是否存在、关系是否正确。检查智能体生成的Cypher语句是否有语法错误。混合检索融合检查RAG结果和图谱结果的融合策略如加权平均、重新排序。可以尝试调整不同来源的权重。前端无法连接后端检查前端web服务配置的后端API地址是否正确通常是http://api:5050内部地址或通过Nginx转发。检查后端FastAPI的CORS跨域资源共享配置确保允许前端的源cors_allow_origins。5. 扩展与定制化开发指南5.1 适配你自己的领域“可萌”作为一个模板其迁移价值巨大。要将它用于其他领域如“星球大战知识库”、“医疗健康问答”你需要进行以下步骤数据准备领域文档收集你所在领域的非结构化文档Wiki、PDF、手册。结构化数据整理实体列表人物、概念、术语和关系列表。这是构建知识图谱的基础。指令微调数据构造该领域的问答对和对话数据用于微调LLM使其掌握领域术语和对话风格。修改知识图谱Schema在resources/data/kg_data/中替换entities.json和relations.json为你领域的实体和关系数据。修改Neo4j的初始化Cypher脚本通常在docker/neo4j/import/目录下创建适合你领域的节点标签和关系类型。重构智能体工具RAG智能体需要为你的领域文档构建新的向量索引。更新文档加载、分块和嵌入的代码。图谱智能体可能需要更新实体识别和关系抽取的逻辑或者直接提供适用于新图谱的Cypher查询模板。其他智能体可以移除或替换与宝可梦强相关的智能体如MCP地图服务增加你领域特有的工具如调用专业API。更新前端界面修改Vue3前端中的主题、Logo、文字描述使其符合你的领域。调整知识图谱可视化组件中显示的节点和关系类型。5.2 性能优化与高级特性集成语义缓存Semantic Cache 对于相同或相似的问题没必要每次都进行完整的检索和LLM生成。可以引入语义缓存将(问题向量, 答案)对存储起来例如使用Redis。当新问题到来时先计算其向量与缓存中问题的相似度如果超过阈值直接返回缓存的答案。这能极大降低响应延迟和LLM API成本。检索优化查询重写Query Rewriting在检索前先用LLM对原始问题进行改写、扩展或分解生成多个更易检索的查询。例如将“哪些宝可梦既可爱又强大”分解为“可爱的宝可梦”和“强大的宝可梦”两个子查询。重排序Re-ranking初步检索出Top-K个结果后使用一个更精细的交叉编码器模型如BGE-Reranker对结果进行重新排序将最相关的结果排到最前面。自适应Top-K根据问题的复杂性动态调整检索数量。简单事实性问题如“皮卡丘是什么属性”只需Top-1而开放性问题如“总结一下超梦的背景故事”可能需要Top-10。流式输出与前端优化 将LLM生成答案的方式改为流式Streaming让用户能实时看到答案逐字生成提升体验。前端需要适配Server-Sent Events (SSE) 或WebSocket来接收流式数据。评估与监控 建立评估流水线使用一组标准问题来定期测试系统的准确率、相关性和响应时间。集成监控工具如Prometheus, Grafana来跟踪API调用次数、延迟、错误率等关键指标。5.3 项目结构导读理解项目代码结构有助于进行二次开发pokemon-chat/ ├── backend/ # FastAPI 后端 │ ├── app/ │ │ ├── agents/ # 智能体定义 (Supervisor, RAG Agent, Graph Agent...) │ │ ├── core/ # 核心配置、LLM初始化、缓存 │ │ ├── models/ # Pydantic数据模型 │ │ ├── routers/ # API路由 (chat, knowledge_base, graph...) │ │ ├── services/ # 业务逻辑层 (检索服务、图谱服务) │ │ └── tools/ # 智能体可用的工具函数 │ ├── scripts/ # 数据导入、初始化脚本 │ └── requirements.txt ├── frontend/ # Vue3 前端 │ ├── src/ │ │ ├── components/ # 可复用组件 (ChatWindow, GraphVisualizer...) │ │ ├── views/ # 页面组件 │ │ └── router/ │ └── package.json ├── resources/ # 静态资源、数据 │ ├── data/ │ │ ├── kg_data/ # 知识图谱原始数据 │ │ └── documents/ # 知识库原始文档 │ └── picture/ ├── docker/ # Docker 部署文件 │ ├── compose.yaml # Docker Compose 主文件 │ ├── .env.example │ └── volumes/ # 数据持久化目录映射 └── README.md从“可萌”这个项目中我们能清晰地看到现代AI应用开发的范式它不再是单一模型的堆砌而是数据工程知识图谱/RAG、模型工程微调/提示、智能体工程编排/工具调用和软件工程前后端/部署的深度融合。每一个环节都至关重要共同决定了最终系统的智能水平和用户体验。这个项目为你提供了一个高起点的蓝本无论是想深入学习这些技术还是想快速构建自己的领域助手它都是一个极佳的实践对象。在实际操作中耐心调试每个模块理解数据在其中的流动你就能真正掌握构建智能系统的精髓。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2555197.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;替代传统耗时的数值模拟方法。例如设计超表面、光子晶体等结构。 特征提取与优化 从复杂的光学数据中自…