本地大模型联网搜索实战:LLocalSearch架构解析与部署指南

news2026/5/6 15:00:16
1. 项目概述一个能“联网”的本地大模型搜索工具如果你和我一样经常折腾本地部署的大语言模型LLM比如 Llama、Qwen 或者 ChatGLM那你肯定遇到过这个痛点模型的知识是“静态”的。它只能回答训练数据截止日期之前的问题对于最新的新闻、股价、体育赛事结果或者某个刚刚发布的软件库的 API 用法它要么一本正经地胡说八道要么直接告诉你“我的知识截止于XXXX年”。LLocalSearch这个项目就是为了解决这个问题而生的。它的核心思路非常清晰让一个运行在你本机上的大语言模型具备实时从互联网搜索信息并整合回答的能力。你可以把它理解为你本地 AI 的“眼睛”和“手”——模型本身是大脑负责理解和生成而 LLocalSearch 则负责帮大脑去查看最新的网页抓取需要的信息然后交给大脑处理。我第一次看到这个项目时就觉得它戳中了本地 LLM 应用的一个关键痒点。我们追求本地部署是为了隐私、可控和离线可用性但代价是与实时信息世界隔绝。LLocalSearch 试图在两者之间找到一个平衡点在需要时可控地、按需地连接网络获取信息而对话和思考的核心过程依然发生在本地。这不仅仅是给模型加了个搜索框那么简单它涉及到搜索查询的生成、结果的抓取与清洗、信息的摘要与整合以及如何让本地模型“理解”并“信任”这些外部信息等一系列工程挑战。接下来我会带你深入拆解 LLocalSearch 的实现从设计思路到每一行代码背后的考量并分享我在部署和定制过程中踩过的坑和总结的经验。无论你是想直接使用它还是借鉴其思路构建自己的智能体Agent相信都能有所收获。2. 核心架构与工作流程拆解LLocalSearch 的架构属于典型的“工具调用Tool Calling”或“智能体Agent”模式。它不是一个大而全的单一应用而是一个精巧的管道Pipeline将本地 LLM、搜索工具和内容处理模块串联起来。理解这个数据流是掌握其精髓的关键。2.1 核心组件交互图景整个系统可以看作由四个核心模块构成它们像流水线一样协作用户接口与问题分析器接收用户的自然语言问题例如“特斯拉今天股价多少”并将其传递给本地 LLM 进行初始分析。LLM 的任务是判断这个问题是否需要联网搜索如果需要应该用什么样的关键词去搜搜索执行器接收来自 LLM 生成的搜索查询可能是优化后的关键词调用外部的搜索引擎 API如 Google Search API、Serper API、DuckDuckGo 等执行搜索并获取返回的搜索结果列表通常是标题、链接和摘要片段。内容获取与提炼器根据搜索结果列表智能地选择最相关的几个链接然后通过 HTTP 请求抓取这些链接对应的完整网页内容。接下来是最脏最累的活从充满广告、导航栏和无关内容的 HTML 中提取出核心正文文本。这里通常会用到专门的库如readability、newspaper3k或trafilatura。信息整合与答案生成器将清洗后的、来自多个网页的文本片段连同用户的原始问题再次提交给本地 LLM。这次的任务是“基于以下背景资料请回答用户的问题。” LLM 需要扮演一个研究助理的角色综合多源信息生成一个连贯、准确且注明来源的最终答案。这个流程的核心思想是“LLM 作为决策中枢”。第一次调用 LLM 是为了规划是否需要搜索如何搜索第二次调用 LLM 是为了合成基于搜索到的信息生成答案。搜索和抓取只是它使用的“工具”。2.2 关键技术选型与考量项目作者在技术选型上做了不少权衡这些选择直接影响着系统的性能、成本和易用性。本地 LLM 服务层LLocalSearch 默认通过 OpenAI 兼容的 API 与本地模型交互。这意味着你可以在本地部署任何提供了此类 API 的模型服务例如Ollama这是目前最流行的选择。它部署简单模型库丰富API 完全兼容 OpenAI并且资源管理友好。LM Studio提供了直观的图形界面和同样兼容的 API适合不想敲命令的用户。vLLM或text-generation-webui如果你需要更高效的生产级推理或更细粒度的控制这些是更强大的后端选择。注意选择本地模型时务必考虑其“指令遵循Instruction Following”能力和上下文长度。一个善于理解复杂指令的模型如 Qwen2.5-7B-Instruct, Llama-3.1-8B-Instruct在判断是否需要搜索、生成搜索词时会更准确。上下文长度则决定了它能处理多少抓取回来的网页内容。搜索引擎 API这是连接外部世界的桥梁。LLocalSearch 支持多种引擎各有优劣Serper API这是官方示例中使用的。它是 Google 搜索的代理结果质量高有免费额度价格相对便宜非常适合个人和小规模使用。Google Custom Search JSON API最“正统”的 Google 搜索接口但免费额度极低配置稍复杂需要创建自定义搜索引擎。DuckDuckGo完全免费且注重隐私不需要 API 密钥。但它的结果结构化程度可能不如 Google有时稳定性也略逊一筹。SearXNG这是一个开源的元搜索引擎你可以自己搭建实例完全控制且免费。但对用户的技术要求较高。我的选择与心得对于绝大多数个人用户我强烈推荐从Serper API开始。注册简单免费额度足够日常使用返回的结果格式规整集成起来最省心。只有在你有极强的隐私需求或想完全脱离商业 API 时才考虑去折腾 DuckDuckGo 或自建 SearXNG。内容提取库从网页中提取干净文本是个经典难题。项目可能使用readability-lxml或trafilatura。readability-lxml就是著名的goose3或以前newspaper3k的核心算法对于新闻类网站效果拔群。trafilatura较新的库在多语言支持和提取精度上表现更好速度也很快。避坑提示没有任何一个提取库是完美的。对于某些 JavaScript 重度渲染的现代网站如某些技术博客、单页应用这些库可能会失效抓取到空内容或乱码。这是此类工具目前普遍的技术局限。3. 从零开始的部署与配置实战理论讲完了我们动手把它跑起来。假设我们使用最经典的组合Ollama Serper API。3.1 基础环境搭建首先你需要准备 Python 环境。建议使用 Python 3.10 或以上版本并创建一个独立的虚拟环境。# 1. 克隆项目仓库 git clone https://github.com/nilsherzig/LLocalSearch.git cd LLocalSearch # 2. 创建并激活虚拟环境以 venv 为例 python -m venv venv # Windows: venv\Scripts\activate # Linux/Mac: source venv/bin/activate # 3. 安装依赖 pip install -r requirements.txt通常requirements.txt会包含openai用于调用兼容API、requests、beautifulsoup4/readability-lxml或trafilatura等库。如果安装失败可以尝试逐个安装核心包。3.2 配置核心参数LLocalSearch 通常通过环境变量或配置文件来管理密钥和设置。我们以环境变量为例这是最安全便捷的方式。获取 Serper API Key访问 serper.dev 注册账号。在 Dashboard 中你可以找到你的 API Key。免费 tier 每月有 2500 次搜索请求足够个人高频使用。设置环境变量在终端中直接设置临时export SERPER_API_KEY你的_serper_api_key_here export OPENAI_API_BASEhttp://localhost:11434/v1 # Ollama 的默认 API 地址 export OPENAI_API_KEYollama # Ollama 的 API Key 可以任意填写非空即可为了永久保存建议将上述export命令添加到你的 shell 配置文件如~/.bashrc或~/.zshrc中或者创建一个.env文件在项目根目录如果项目支持的话。3.3 启动本地模型服务Ollama确保 Ollama 已经安装并运行。# 拉取一个合适的指令微调模型例如 7B 参数的模型在消费级显卡上运行良好 ollama pull qwen2.5:7b-instruct # 或者 ollama pull llama3.1:8b-instruct # 启动模型服务Ollama 默认会在 11434 端口提供 OpenAI 兼容 API # 通常安装后 Ollama 服务会自动运行无需手动启动你可以通过访问http://localhost:11434/v1/models来测试 API 是否正常应该会返回你拉取的模型列表。3.4 运行 LLocalSearch根据项目的具体设计启动方式可能是一个 Python 脚本或一个命令行工具。假设主入口文件是main.py。python main.py或者如果项目提供了交互式命令行界面python -m llocalsearch.cli运行后你应该会进入一个对话界面。尝试问一个需要最新信息的问题比如“今天法国网球公开赛男单决赛谁赢了”。第一次运行的常见问题连接错误检查OPENAI_API_BASE是否设置正确Ollama 是否正在运行。API Key 错误确认SERPER_API_KEY已正确导出可以通过echo $SERPER_API_KEY验证。模块导入错误可能是依赖未安装完整根据错误信息使用pip install补全缺失的包。4. 核心代码逻辑深度解析要真正驾驭这个工具甚至进行二次开发我们需要深入其核心代码逻辑。我们聚焦几个关键函数。4.1 搜索决策与查询生成这是智能的起点。代码中会有一个函数可能叫should_search或generate_search_query它调用本地 LLM 的 Chat Completion API。# 伪代码展示核心逻辑 def decide_search_and_generate_query(user_question: str, llm_client) - dict: 分析用户问题决定是否需要搜索并生成搜索查询词。 返回一个字典包含是否需要搜索的布尔值和生成的查询词。 system_prompt 你是一个判断助手。请分析用户的问题判断是否需要通过联网搜索最新信息来回答。 如果需要搜索请生成一个简洁、有效的搜索查询词关键词组合。 如果问题基于通用知识或你的内部知识就能很好回答则不需要搜索。 只输出JSON格式{need_search: true/false, search_query: 你的查询词或空字符串} response llm_client.chat.completions.create( modelqwen2.5:7b-instruct, # 你实际使用的模型 messages[ {role: system, content: system_prompt}, {role: user, content: user_question} ], response_format{type: json_object}, # 强制输出JSON便于解析 temperature0.1 # 低温度确保决策稳定 ) decision json.loads(response.choices[0].message.content) return decision关键技巧System Prompt 设计这是引导模型行为的关键。清晰的指令和严格的输出格式要求能极大提高模型的可靠性。Temperature 设置在决策类任务上使用较低的temperature如 0.1-0.3可以减少输出的随机性让“是否需要搜索”的判断更一致。JSON 强制输出利用 LLM 的 JSON Mode 功能可以确保返回结果的结构化方便程序解析避免正则表达式匹配的脆弱性。4.2 网页内容的智能抓取与清洗获取到搜索链接后不能盲目抓取所有结果。通常的做法是选取排名最靠前的 3-5 个链接。然后并行或串行抓取。import trafilatura import requests from concurrent.futures import ThreadPoolExecutor, as_completed def fetch_and_extract_main_content(url: str, timeout10) - str: 抓取给定URL的网页并提取核心正文内容。 try: headers {User-Agent: Mozilla/5.0 ...} # 模拟浏览器避免被屏蔽 response requests.get(url, timeouttimeout, headersheaders) response.raise_for_status() # 检查HTTP错误 # 使用 trafilatura 提取正文 extracted_text trafilatura.extract(response.text, include_commentsFalse, include_tablesTrue) if extracted_text: # 简单清理去除过多空白字符 cleaned_text .join(extracted_text.split()) return cleaned_text[:5000] # 限制长度避免超出模型上下文 else: return f[内容提取失败] 来自 {url} except Exception as e: return f[抓取错误] {url}: {str(e)} def fetch_multiple_contents(urls: list) - list: 并发抓取多个网页内容。 contents [] with ThreadPoolExecutor(max_workers5) as executor: # 控制并发数 future_to_url {executor.submit(fetch_and_extract_main_content, url): url for url in urls} for future in as_completed(future_to_url): url future_to_url[future] try: content future.result() contents.append((url, content)) except Exception as e: contents.append((url, f[并发任务错误] {str(e)})) return contents避坑指南超时与重试网络请求必须设置超时如10秒并对失败请求实现简单的重试逻辑如最多3次提高鲁棒性。User-Agent务必设置合理的 User-Agent否则很多网站会返回 403 错误。内容长度限制抓取到的文本可能很长必须进行截断确保所有内容加上问题不会超出本地 LLM 的上下文窗口。例如Llama 3.1 8B 的上下文是 8192你需要为问题、指令和答案预留空间。并发控制使用线程池并发抓取可以大幅缩短等待时间但并发数不宜过高5-10个为宜避免对目标网站造成压力或被封 IP。4.3 信息综合与答案生成这是最后一步也是体现价值的一步。我们将所有抓取到的、清洗后的文本片段以及原始问题一起喂给 LLM。def synthesize_answer(question: str, search_contexts: list, llm_client) - str: 基于搜索到的上下文信息综合生成最终答案。 search_contexts: 列表每个元素是 (url, content) 元组 # 构建上下文字符串 context_str for idx, (url, content) in enumerate(search_contexts, 1): # 如果内容不是错误信息才加入上下文 if not content.startswith([抓取错误]) and not content.startswith([内容提取失败]): context_str f[来源 {idx}: {url}]\n{content}\n\n system_prompt 你是一个专业的研究助手。请严格基于用户提供的以下来自互联网的上下文信息来回答问题。 如果上下文信息足以回答问题请给出清晰、准确的答案并注明你的答案主要参考了哪个来源使用 [来源X] 的格式。 如果上下文信息不足以完全回答问题你可以基于已知信息进行部分回答但必须明确指出信息的局限性。 绝对不要在答案中编造上下文信息中不存在的内容。 如果所有上下文都无法提供有效信息请如实告知用户“根据现有资料无法回答此问题”。 上下文信息 {context} user_prompt f用户问题{question} response llm_client.chat.completions.create( modelqwen2.5:7b-instruct, messages[ {role: system, content: system_prompt.format(contextcontext_str)}, {role: user, content: user_prompt} ], temperature0.7 # 生成答案时可以稍高一些让语言更自然 ) return response.choices[0].message.content核心要点强指令约束System Prompt 必须反复强调“基于给定上下文”并警告不要胡编乱造。这是减少模型“幻觉”Hallucination的关键。来源引用要求模型在答案中引用[来源X]这不仅增加了答案的可信度也方便用户追溯和验证。诚实性指令中必须包含“信息不足时如实告知”的条款这比让模型强行猜测要好得多。5. 性能优化与高级定制基础功能跑通后我们可以从以下几个方面进行优化让它更快、更准、更强大。5.1 缓存机制省钱省时的利器对于重复性问题或者短期内被多人问到的热点问题每次都搜索和抓取是巨大的浪费。实现一个简单的缓存层能极大提升体验。import hashlib import json import os from datetime import datetime, timedelta class SearchCache: def __init__(self, cache_dir./cache, ttl_hours24): self.cache_dir cache_dir self.ttl timedelta(hoursttl_hours) os.makedirs(cache_dir, exist_okTrue) def _get_cache_key(self, search_query: str) - str: 用查询词的哈希作为缓存文件名 return hashlib.md5(search_query.encode()).hexdigest() .json def get(self, search_query: str): 获取缓存如果过期或不存在则返回None key self._get_cache_key(search_query) path os.path.join(self.cache_dir, key) if os.path.exists(path): with open(path, r) as f: data json.load(f) cache_time datetime.fromisoformat(data[timestamp]) if datetime.now() - cache_time self.ttl: return data[results] # 返回缓存的搜索结果或内容 return None def set(self, search_query: str, results): 设置缓存 key self._get_cache_key(search_query) path os.path.join(self.cache_dir, key) data { timestamp: datetime.now().isoformat(), query: search_query, results: results } with open(path, w) as f: json.dump(data, f) # 在搜索函数中使用 cache SearchCache(ttl_hours6) # 缓存6小时 cached cache.get(search_query) if cached: print(命中缓存) return cached else: results perform_actual_search(search_query) cache.set(search_query, results) return results你可以将完整的搜索结果链接列表缓存也可以将抓取到的网页内容缓存。TTL生存时间可以根据信息类型调整比如股价缓存1分钟科技新闻缓存1小时历史知识缓存1天。5.2 搜索查询的优化策略模型生成的搜索词有时并不理想。我们可以加入一些后处理规则来优化去除停用词移除“的”、“呢”、“吗”等对搜索无益的中文虚词。添加限定词对于技术性问题自动添加“教程”、“文档”、“GitHub”等词。例如“怎么用 PyTorch 实现 Transformer” 可以优化为 “PyTorch Transformer 实现 教程”。分句处理如果用户问题很长可以尝试让模型提取多个角度的搜索关键词并行搜索提高覆盖率。5.3 支持更多工具与后端LLocalSearch 的模式可以轻松扩展。除了搜索你还可以集成计算器让模型处理数学计算。天气 API回答实时天气。数据库查询连接本地知识库。代码执行器谨慎在沙箱中运行代码片段。这需要扩展工具调用决策逻辑。可以让模型在决定行动时从一个工具列表中选择。这其实就是构建一个功能更全面的本地 AI 智能体的起点。6. 常见问题排查与实战心得在实际使用和改造 LLocalSearch 的过程中我遇到了不少典型问题这里汇总一下。6.1 问题排查速查表问题现象可能原因解决方案模型始终回答“我不清楚”不触发搜索。1. System Prompt 指令不清晰。2. 模型指令遵循能力弱。3. 决策阶段的temperature过高。1. 简化并强化 System Prompt使用更明确的 JSON 输出格式。2. 换用指令微调效果更好的模型如 Qwen2.5-Instruct, Llama3.1-Instruct。3. 将决策阶段的temperature设为 0.1。搜索到了链接但最终答案仍是过时或错误的。1. 网页内容提取失败模型拿到的是空或杂乱文本。2. 模型在合成答案时出现“幻觉”。3. 抓取的网页本身不是权威来源。1. 检查内容提取库尝试trafilatura或添加备用提取方案。2. 强化合成答案时的 System Prompt加入“严禁编造”的严厉警告。3. 在搜索查询中手动添加“site:github.com”或“site:official.site”等来源限定词。程序运行缓慢响应时间长。1. 串行抓取多个网页。2. 本地模型推理速度慢。3. 网络延迟高。1. 实现并发抓取如使用ThreadPoolExecutor。2. 考虑使用量化版本模型如 4-bit 量化或升级硬件。3. 为网络请求设置合理的超时并使用缓存。遇到“Rate Limit”或“429 Too Many Requests”错误。1. 搜索引擎 API 调用频率超限。2. 对单一网站抓取过于频繁。1. 检查并遵守所用 API 的速率限制在代码中添加请求间隔如time.sleep(1)。2. 对抓取任务实施更严格的并发控制和延迟。模型生成的搜索词质量差。1. 用户问题本身模糊。2. 模型不擅长关键词提取。1. 在用户界面引导用户问更具体的问题。2. 在调用模型生成搜索词前先让模型对原问题进行一步澄清或改写。6.2 个人实战心得与技巧从小模型开始不要一上来就用 70B 参数的大模型。7B 或 8B 的指令微调模型如 Qwen2.5-7B-Instruct在判断和摘要任务上已经表现相当不错且推理速度快资源消耗小。先用小模型跑通整个流程优化 Prompt 和代码逻辑。Prompt 工程是核心这个项目的效果八成取决于 Prompt 写得好不好。多花时间迭代你的 System Prompt。一个技巧是让模型在决策和生成时“扮演”具体的角色比如“你是一个严谨的科研助手”或“你是一个高效的技术信息检索专家”这往往比干巴巴的指令更有效。实施“熔断”机制如果连续多次网页抓取失败或者模型多次返回“无法回答”应该有一个回退策略。例如直接告诉用户“当前无法获取实时信息您可以尝试以下更具体的问法……”而不是让程序无限重试或返回空洞答案。关注成本如果你使用 Serper API 等付费服务记得在代码里加入简单的调用计数和日志监控使用量避免意外超支。免费的 DuckDuckGo 虽然省钱但稳定性需要额外处理。安全与伦理意识你构建的这个工具能访问互联网并生成内容。务必考虑内容过滤在最终答案输出前可以加入一层简单的内容安全审查例如检查是否包含极端不当言论。尊重版权提醒用户生成的内容可能包含来自其他网站的文本用于个人学习研究避免商用侵权。免责声明在交互界面添加提示告知用户信息可能不准确需自行核实。LLocalSearch 为我们提供了一个绝佳的蓝本展示了如何将本地大模型与外部工具连接起来。它的价值不在于提供一个开箱即用的完美产品而在于展示了一种可扩展、可定制的架构模式。你可以基于它轻松地接入你自己的知识库、企业内部数据源或者任何其他 API打造一个真正属于你个人的、全能的本地信息助手。

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