Wan2.1-umt5多轮对话记忆机制详解与聊天机器人开发

news2026/3/25 2:17:40
Wan2.1-umt5多轮对话记忆机制详解与聊天机器人开发你是不是也遇到过这样的聊天机器人你刚说完“我喜欢科幻电影”下一句问它“有什么推荐吗”它却一脸茫然完全不记得你刚才说过什么。这种“金鱼记忆”式的对话体验确实让人有点抓狂。今天我们就来彻底解决这个问题。我会带你深入一个能真正“记住”对话的聊天机器人是怎么构建起来的。我们会从最基础的模型上下文记忆开始一直讲到如何给它装上“外置大脑”——也就是向量数据库让它不仅能记住几分钟前的对话还能记住几天前、甚至几周前你告诉它的个人喜好。整个过程我会用最直白的话讲清楚原理并且手把手带你写出能跑的代码。无论你是想做个有趣的个人助手还是探索智能对话的更多可能这篇文章都能给你一套马上就能用的方案。1. 对话记忆从“瞬间失忆”到“过目不忘”要让机器和人一样聊天记忆是关键。我们首先得明白现在的对话模型是怎么“记事情”的以及为什么它们常常表现得像得了健忘症。1.1 模型自身的记忆上下文窗口像 Wan2.1-umt5 这类大模型它们最基本的记忆方式靠的是一个叫“上下文窗口”的东西。你可以把它想象成模型的工作记忆区或者一个固定长度的“对话记录本”。每次你和模型对话你当前说的话加上模型能看到的之前若干轮对话比如最近10轮会被一起打包作为输入送给模型。模型就是看着这个“记录本”里的内容来生成下一句回复的。# 一个非常简化的上下文组装示例 def build_context(history_messages, new_user_input, max_tokens2048): 将历史对话和新输入组装成模型能理解的上下文。 history_messages: 之前的对话列表格式如 [{role:user, content:你好}, {role:assistant, content:你好}] new_user_input: 用户最新的输入 max_tokens: 上下文的最大长度限制 context_parts [] # 1. 先把历史对话格式化成文本 for msg in history_messages[-10:]: # 假设只保留最近10轮 role msg[role] content msg[content] context_parts.append(f{role}: {content}) # 2. 加入用户的新输入 context_parts.append(fuser: {new_user_input}) # 3. 将所有部分用换行符连接形成完整的上下文 full_context \n.join(context_parts) # 4. 一个简单的长度检查实际中需要更精确的token计数 if len(full_context) max_tokens * 4: # 粗略估算假设平均每个token 4个字符 # 如果太长了就需要丢弃最老的几轮对话 print(上下文过长正在截断...) # ... 这里需要实现更智能的截断逻辑 full_context truncate_context(full_context, max_tokens) return full_context # 模拟使用 history [ {role:user, content:我喜欢看科幻电影。}, {role:assistant, content:很棒科幻电影想象力丰富。}, {role:user, content:尤其是那种太空歌剧类型的。} ] new_input 你能推荐几部吗 context_for_model build_context(history, new_input) print(模型看到的上下文) print(context_for_model)这种方式简单直接模型在生成回复时能“看到”并利用这些最近的对话历史。对于短对话、话题集中的聊天效果还不错。1.2 上下文记忆的“天花板”但是只靠上下文窗口问题很快就来了。这就像让人只靠短期记忆来生活一样不靠谱。第一个大问题长度限制。模型的上下文窗口不是无限的。可能是2048个token也可能是4096或更多。一旦对话轮数多了或者某几句话特别长这个“记录本”就写不下了。最老的对话会被无情地丢弃模型也就“忘记”了。第二个问题效率低下。即使窗口还没满每次对话都把全部历史记录重新喂给模型计算量很大响应速度会变慢成本也更高。第三个也是最致命的问题找不到重点。想象一下你和朋友聊了半小时涵盖了电影、美食、工作计划等多个话题。现在你突然问“对了刚才说的那家餐厅叫什么来着” 你的朋友需要快速从半小时的闲聊中精准定位到关于“餐厅”的那几句话。如果模型只能看到一堆按时间排列的文本它很难高效地完成这种“知识检索”。所以仅仅依靠模型的上下文窗口来实现记忆就像是让一个健忘的人拿着一本不能翻页、写满就擦的记录本。对于构建一个真正智能、个性化的聊天机器人来说这远远不够。我们需要一个更强大的记忆系统。2. 给聊天机器人装上“外置大脑”向量数据库既然模型自带的“工作记忆”不够用我们就给它配一个“外部长期记忆库”。这个库的核心技术就是向量数据库比如我们后面会用到的 ChromaDB。你可以把它理解成一个超级智能的、专门存储“意思”的仓库。2.1 向量把文字变成“意思点”计算机不懂文字的意思但它擅长处理数字。向量化就是把一句话、一段文字转换成一串有意义的数字即向量。这个过程通常由另一个专门的模型称为嵌入模型或文本编码器来完成。这个模型经过训练能够把语义相近的文本转换成在数字空间里位置也相近的向量。比如“我喜欢吃苹果” - 向量 A“我爱吃水果” - 向量 B“今天的天气真好” - 向量 C向量A和向量B在数字空间里的距离会很近因为它们都关于“喜欢水果”。而向量C和它们的距离就会远很多。# 使用 sentence-transformers 库进行文本向量化的示例 # 这是一个示意实际开发中你可能需要安装相应的库 # pip install sentence-transformers from sentence_transformers import SentenceTransformer import numpy as np # 加载一个轻量级的嵌入模型 embedder SentenceTransformer(paraphrase-MiniLM-L6-v2) # 准备一些句子 sentences [ 我喜欢吃苹果, 我爱吃水果, 今天的天气真好, 科幻电影充满想象力, 推荐一些太空歌剧电影 ] # 将句子转换为向量 embeddings embedder.encode(sentences) print(f句子数量: {len(sentences)}) print(f每个向量的维度: {embeddings[0].shape}) # 例如 (384,) print(\n计算相似度余弦相似度:) # 计算第一个句子和其他句子的相似度 query_embedding embeddings[0] for i, sent in enumerate(sentences): if i 0: continue # 计算余弦相似度 similarity np.dot(query_embedding, embeddings[i]) / (np.linalg.norm(query_embedding) * np.linalg.norm(embeddings[i])) print(f {sentences[0]} 与 {sent} 的相似度: {similarity:.4f})运行上面的代码需要先安装库你会看到“我喜欢吃苹果”和“我爱吃水果”的相似度很高而和“今天的天气真好”的相似度很低。这就是向量检索的基础用数学上的“距离”来衡量语义上的“相似度”。2.2 向量数据库存储和检索“意思”有了把文字变向量的能力向量数据库的工作就清晰了存储每当发生一轮有价值的对话比如用户表达了某个偏好、提供了某个信息我们就把这轮对话的文本转换成向量然后把这个向量连同原始的对话文本一起存到数据库里。检索当用户提出一个新问题时我们先把这个问题也转换成向量。然后让数据库帮我们找出和这个问题向量最相似的、历史上存储过的那些对话向量。这样我们就能快速找到和当前问题最相关的历史记忆。这完美解决了上下文窗口的痛点突破长度限制数据库可以存储海量的历史对话没有硬性的长度上限。检索高效精准不再是按时间顺序翻阅而是直接根据“意思”进行检索。用户问电影就找历史上关于电影的对话用户问餐厅就找关于餐厅的对话。记忆长期化只要不删除这些记忆可以永久保存实现真正的“长期记忆”。接下来我们就用 ChromaDB 这个轻量又好用的向量数据库来把这个“外置大脑”搭建起来。3. 手把手搭建基于向量数据库的记忆型聊天机器人理论讲完了我们开始动手。这个部分我会带你一步步创建一个能记住对话的聊天机器人原型。我们会用到 Wan2.1-umt5或类似开源对话模型作为“大脑”用 ChromaDB 作为“记忆库”。3.1 环境与工具准备首先确保你的Python环境建议3.8以上已经准备好。我们需要安装一些核心的库。# 安装必要的Python库 pip install chromadb sentence-transformers torch transformers # 如果你打算使用 Wan2.1-umt5可能需要从特定的源安装这里以通用的transformers库加载为例 # pip install -U transformerschromadb: 我们选择的轻量级向量数据库易于使用和集成。sentence-transformers: 提供高质量的文本向量化嵌入模型我们用它来把对话文本转换成向量。torch transformers: PyTorch 和 Hugging Face Transformers 库用于加载和运行对话大模型。3.2 构建记忆核心对话向量存储与检索我们先来实现最核心的记忆模块。这个模块负责两件事1) 把重要的对话存起来2) 根据当前问题找出相关的历史记忆。# memory_core.py import chromadb from chromadb.config import Settings from sentence_transformers import SentenceTransformer import uuid from typing import List, Dict, Any class DialogueMemory: def __init__(self, persist_directory: str ./chroma_db): 初始化对话记忆系统。 persist_directory: ChromaDB数据持久化的目录。 # 1. 初始化ChromaDB客户端并设置持久化路径 self.client chromadb.PersistentClient(pathpersist_directory) # 2. 创建或获取一个集合Collection可以理解为数据库中的一个表 # 我们给这个集合起名叫“dialogue_memory” self.collection self.client.get_or_create_collection(namedialogue_memory) # 3. 加载文本向量化模型 # 我们选用一个在语义相似度任务上表现不错的小模型平衡速度和效果 self.embedder SentenceTransformer(paraphrase-MiniLM-L6-v2) print(对话记忆系统初始化完成。) def store_dialogue(self, user_input: str, assistant_response: str, metadata: Dict[str, Any] None): 存储一轮对话。 通常我们存储的是“用户输入”和“助手回复”的组合这样上下文更完整。 # 将对话内容拼接 dialogue_text fUser: {user_input}\nAssistant: {assistant_response} # 将文本转换为向量 embedding self.embedder.encode(dialogue_text).tolist() # 生成一个唯一ID doc_id str(uuid.uuid4()) # 准备元数据可以记录时间、对话轮次等信息 if metadata is None: metadata {} metadata.update({user_input: user_input, assistant_response: assistant_response}) # 存储到ChromaDB集合中 self.collection.add( documents[dialogue_text], # 原始文本 embeddings[embedding], # 对应的向量 metadatas[metadata], # 附加信息 ids[doc_id] # 唯一标识 ) print(f已存储对话: {user_input[:50]}...) # 打印前50个字符 def retrieve_relevant_memories(self, query: str, n_results: int 3) - List[Dict]: 根据当前查询用户问题检索最相关的历史对话记忆。 n_results: 返回最相关的几条记忆。 # 将查询文本转换为向量 query_embedding self.embedder.encode(query).tolist() # 向ChromaDB查询最相似的向量 results self.collection.query( query_embeddings[query_embedding], n_resultsn_results ) # 整理返回结果 retrieved_memories [] if results[documents]: for i in range(len(results[documents][0])): memory { text: results[documents][0][i], metadata: results[metadatas][0][i], distance: results[distances][0][i] # 距离越小越相似 } retrieved_memories.append(memory) print(f针对查询 {query}检索到 {len(retrieved_memories)} 条相关记忆。) return retrieved_memories def clear_memory(self): 清空所有记忆谨慎使用。 self.client.delete_collection(namedialogue_memory) self.collection self.client.get_or_create_collection(namedialogue_memory) print(对话记忆已清空。)这个DialogueMemory类就是我们机器人的记忆中枢。每完成一轮有意义的对话我们就调用store_dialogue把它存起来。当用户提出新问题时我们先调用retrieve_relevant_memories从记忆库里找到和当前问题最相关的几条历史对话。3.3 集成对话模型Wan2.1-umt5接下来我们需要一个能生成回复的“大脑”。这里我们以加载一个类似的可控生成模型为例。在实际操作中你需要根据 Wan2.1-umt5 模型的具体格式和加载方式进行适配。# dialogue_agent.py from transformers import AutoTokenizer, AutoModelForCausalLM, pipeline import torch class DialogueAgent: def __init__(self, model_name_or_path: str): 初始化对话智能体。 model_name_or_path: 本地模型路径或HuggingFace模型ID。 print(f正在加载对话模型: {model_name_or_path}) # 加载分词器和模型 self.tokenizer AutoTokenizer.from_pretrained(model_name_or_path, trust_remote_codeTrue) self.model AutoModelForCausalLM.from_pretrained( model_name_or_path, torch_dtypetorch.float16, # 使用半精度减少内存占用 device_mapauto, # 自动分配模型层到GPU/CPU trust_remote_codeTrue ) # 创建文本生成管道 self.generator pipeline( text-generation, modelself.model, tokenizerself.tokenizer, max_new_tokens512, # 生成文本的最大长度 temperature0.7, # 控制随机性越低越确定越高越有创意 do_sampleTrue ) print(对话模型加载完成。) def generate_response(self, prompt: str) - str: 根据给定的提示prompt生成回复。 # 使用管道生成文本 outputs self.generator(prompt, return_full_textFalse) response outputs[0][generated_text].strip() return response重要提示在实际使用 Wan2.1-umt5 时请务必参考其官方文档或模型卡Model Card中的具体加载方式和对话模板。不同的模型可能有不同的对话格式要求例如是否需要在用户和助手消息前加特殊标记如|im_start|user。上面的代码是一个通用框架你需要根据实际模型进行调整。3.4 组装完整系统记忆与生成的协同现在我们把记忆模块和对话模块组装起来让它们协同工作。核心逻辑是用检索到的记忆来增强给模型的提示Prompt。# main.py from memory_core import DialogueMemory from dialogue_agent import DialogueAgent class ChatbotWithMemory: def __init__(self, model_path: str): self.memory DialogueMemory() self.agent DialogueAgent(model_path) # 一个简单的上下文缓存用于存放最近几轮对话作为模型的直接上下文 self.context_window [] self.max_context_length 5 # 保留最近5轮对话作为直接上下文 def _build_prompt(self, user_input: str, retrieved_memories: List[Dict]) - str: 构建最终的提示词包含系统指令、长期记忆、短期上下文和当前问题。 这是决定机器人回复质量的关键步骤。 # 1. 系统指令告诉模型它是什么角色以及如何利用记忆 system_prompt 你是一个友好的、有帮助的聊天助手。你拥有长期记忆能够记住和用户之前的对话。 请根据下面的“相关历史记忆”和“最近对话”来理解上下文并回答用户的最新问题。 如果记忆中有相关信息请自然地引用或基于它来回答。保持对话连贯、友好。\n\n # 2. 长期记忆部分从向量数据库检索到的 memory_section if retrieved_memories: memory_section 【相关历史记忆】\n for i, mem in enumerate(retrieved_memories): # 这里我们使用存储的原始对话文本 memory_section f{i1}. {mem[text]}\n memory_section \n # 3. 短期上下文部分最近几轮对话 context_section if self.context_window: context_section 【最近对话】\n for msg in self.context_window[-self.max_context_length:]: context_section f{msg}\n context_section \n # 4. 当前用户问题 current_query f【当前问题】\n用户: {user_input}\n助手: # 5. 将所有部分组合成最终提示 full_prompt system_prompt memory_section context_section current_query return full_prompt def chat(self, user_input: str) - str: 处理一轮用户输入并返回助手回复。 # 步骤1从长期记忆库中检索与当前输入相关的记忆 relevant_memories self.memory.retrieve_relevant_memories(user_input, n_results2) # 步骤2构建包含记忆和上下文的增强提示 prompt self._build_prompt(user_input, relevant_memories) # 打印提示词用于调试实际使用时可以关闭 print(\n *50) print(发送给模型的提示词:) print(prompt) print(*50 \n) # 步骤3调用对话模型生成回复 assistant_response self.agent.generate_response(prompt) # 步骤4将本轮对话存入长期记忆这里简单判断实际可根据对话重要性决定是否存储 # 例如可以只存储用户表达了偏好、提供了个人信息等有价值的对话 if self._is_worth_remembering(user_input, assistant_response): self.memory.store_dialogue(user_input, assistant_response) # 步骤5更新短期上下文窗口 self.context_window.append(f用户: {user_input}) self.context_window.append(f助手: {assistant_response}) # 保持上下文窗口不超过最大长度 if len(self.context_window) self.max_context_length * 2: # 乘以2因为包含用户和助手两条 self.context_window self.context_window[-(self.max_context_length*2):] return assistant_response def _is_worth_remembering(self, user_input: str, response: str) - bool: 一个简单的启发式规则判断本轮对话是否值得存入长期记忆。 # 这里可以定义一些规则例如 # 1. 用户表达了明确的偏好如“我喜欢...”“我讨厌...” # 2. 用户提供了个人信息如“我叫...”“我住在...” # 3. 对话涉及重要的事实或决定 # 这里只是一个示例如果用户输入包含“喜欢”、“讨厌”、“名字是”等关键词则存储 keywords [喜欢, 讨厌, 爱, 不喜欢, 名字是, 住在, 我是] for keyword in keywords: if keyword in user_input: return True return False # 运行一个简单的对话示例 if __name__ __main__: # 初始化机器人传入你的模型路径 # 注意请替换为你的 Wan2.1-umt5 模型实际路径 bot ChatbotWithMemory(model_path./your_wan_model_directory) # 或使用HF模型ID print(聊天机器人已启动输入 退出 结束对话。) while True: user_input input(\n你: ) if user_input.lower() in [退出, exit, quit]: print(再见) break response bot.chat(user_input) print(f助手: {response})这个ChatbotWithMemory类就是我们最终的聊天机器人。它的工作流程非常清晰听接收用户输入。想去长期记忆库向量数据库里搜索和当前输入最相关的历史对话。组织把系统指令、找到的长期记忆、最近的短期对话、以及当前问题组合成一个丰富的提示词。说把这个增强版的提示词送给对话大模型让它生成回复。记判断这轮对话是否重要如果重要就把它存回长期记忆库同时更新短期对话记录。4. 让机器人更“聪明”进阶技巧与优化基础系统跑通了但要让机器人真正好用我们还得下点功夫。这里分享几个提升体验的实用技巧。技巧一设计更智能的记忆存储策略。上面的例子中我们简单根据关键词来判断是否存储。这太粗糙了。更好的方法是重要性打分可以用一个小模型来判断一句话的信息量或重要性。主题聚类定期对记忆进行聚类合并相似主题的记忆避免冗余。记忆摘要对于很长的对话可以生成一个简短的摘要存起来而不是存全文。技巧二优化提示词工程。我们构建的提示词是模型理解任务的关键。可以尝试更清晰地告诉模型如何利用记忆例如“请优先参考【相关历史记忆】中的信息来回答。”在提示词中区分“事实性记忆”和“用户偏好记忆”。加入少量示例Few-shot Learning教模型如何结合记忆进行回复。技巧三处理记忆冲突与更新。用户可能会说“我其实不喜欢科幻电影了”。这时新记忆和旧记忆就冲突了。我们需要一个机制来更新或降权旧的记忆。一个简单的办法是给记忆加上时间戳检索时给更新近的记忆更高权重或者在存储新记忆时主动去检索并标记与之矛盾的旧记忆。技巧四为记忆添加丰富的元数据。除了对话文本存储时还可以加入更多信息比如timestamp: 对话发生时间。topic: 对话主题可以自动提取。importance_score: 重要性分数。entity: 对话中提到的实体如人名、电影名、地点。这样在检索时我们不仅可以做语义搜索还可以做过滤例如“只检索上周关于‘电影’主题的记忆”让记忆检索更精准。获取更多AI镜像想探索更多AI镜像和应用场景访问 CSDN星图镜像广场提供丰富的预置镜像覆盖大模型推理、图像生成、视频生成、模型微调等多个领域支持一键部署。

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