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

《AI大模型应知应会100篇》第41篇:多轮对话设计:构建高效的交互式应用

第41篇:多轮对话设计:构建高效的交互式应用

摘要

在银行客服机器人突然准确回答出用户第7次追问的信用卡额度规则时,在医疗问诊系统记住患者既往病史的瞬间,多轮对话技术正在创造令人惊叹的交互体验。本文将以工业级案例为经,核心技术为纬,带您深入对话系统的"记忆宫殿"。


在这里插入图片描述

核心概念与技术突破

一、对话系统架构的三大支柱

一个完整的多轮对话系统通常包含以下几个核心模块:

  • 自然语言理解 (NLU): 将用户的输入转化为机器可理解的意图和实体。
  • 对话状态跟踪 (DST): 维护对话的状态信息,记录用户已提供的信息以及系统当前的理解。
  • 对话策略 (DP): 根据对话状态选择合适的系统行为,例如回复用户、询问更多信息或执行任务。
  • 自然语言生成 (NLG): 将系统行为转化为自然语言回复。
  • 对话状态跟踪机制: DST是多轮对话的核心。它需要追踪用户在对话中提供的所有信息,并将其存储在对话状态中。常见的DST方法包括基于规则的方法、基于机器学习的方法和基于深度学习的方法。
1.1 对话状态跟踪(DST)
# 基于有限状态机的对话跟踪示例
class ConversationState:def __init__(self):self.context = {"user_intent": None,  # 用户意图"slot_values": {},    # 槽位填充"dialogue_act": None  # 对话行为}def update_state(self, new_input):# 实际应用中此处应调用NLU模型if "订票" in new_input:self.context["user_intent"] = "book_flight"# ...其他状态更新逻辑
1.2 上下文管理的黄金三角
  • 短期记忆:使用Attention机制动态维护最近5轮对话
  • 长期记忆:用户画像存储(Redis/MongoDB)
  • 知识记忆:FAISS向量数据库支持的检索增强
1.3 内存模型对比实验
模型类型上下文长度记忆衰减适合场景
LSTM有限显著简单任务
Transformer可扩展可配置复杂对话
记忆网络无限智能筛选专业领域

二、上下文优化的四大神技

  • 上下文管理与维护策略: 有效的上下文管理是构建流畅多轮对话的关键。需要维护一个对话历史记录,并根据当前对话内容动态更新对话状态。

  • 多轮对话的内存模型: 内存模型决定了系统如何存储和访问对话历史信息。常见的内存模型包括:

  • 固定窗口: 只存储最近几轮对话。
  • 滑动窗口: 存储一个固定长度的对话历史,并根据新的对话轮次进行滑动。
  • 检索增强记忆: 利用外部知识库或向量数据库存储对话历史,并根据当前对话内容检索相关信息。
    对话流程控制与规划: DP 负责根据对话状态选择最佳系统行为。 常见的DP方法包括基于规则的方法、基于强化学习的方法和基于深度学习的方法
2.1 上下文压缩实战
# 使用BERT进行语义压缩示例
from transformers import BertTokenizer, BertModeldef compress_context(history, max_length=128):tokenizer = BertTokenizer.from_pretrained('bert-base-uncased')model = BertModel.from_pretrained('bert-base-uncased')inputs = tokenizer(history, return_tensors='pt', truncation=True)outputs = model(**inputs)# 取[CLS]向量作为压缩表示return outputs.last_hidden_state[:,0,:].detach().numpy()
2.2 动态窗口管理算法
// 滑动窗口策略(Node.js实现)
function manageWindow(messages, maxSize=2048) {let total = messages.reduce((sum, m) => sum + m.tokens, 0);while(total > maxSize && messages.length > 3) {// 优先删除非关键语句if(!messages[1].important) {total -= messages.shift().tokens;}}return messages;
}

交互体验设计的魔法时刻

3.1 主动澄清设计模式

# 模糊意图检测模块
def detect_ambiguity(query):ambiguity_patterns = [r"(可能|大概|估计).*?(时间|价格)",r"你们.*?支持.*?(吗|\?)"]for pattern in ambiguity_patterns:if re.search(pattern, query):return Truereturn False

3.2 情感适应性回应矩阵

用户情绪回应策略示例回复
困惑分步引导“让我们一步步来看…”
焦虑确认安抚“我理解您的担忧,我们先处理紧急部分”
喜悦正向强化“很高兴您认可这个方案!”

垂直领域对话增强实践

4.1 医疗咨询系统构建(Claude案例)

# 症状标准化处理模块
class SymptomEncoder:def __init__(self):self.knowledge_graph = load_umls_graph()  # 加载医学本体def encode(self, text):# 实体链接+语义推理entities = ner_model.predict(text)standardized = []for entity in entities:# 在知识图谱中寻找最精确匹配concept = self.knowledge_graph.find_closest(entity.text, semantic_type="symptom")standardized.append(concept)return standardized

4.2 编程助手的代码感知

// TypeScript语言服务集成示例
interface CodeContext {ast: ts.SourceFile;      // 抽象语法树symbols: SymbolTable;    // 符号表diagnostics: ts.Diagnostic[]; // 错误诊断
}function analyzeCode(context: string): CodeContext {const sourceFile = ts.createSourceFile('temp.ts',context,ts.ScriptTarget.Latest,true);// 执行类型检查和符号解析...return { ast: sourceFile, symbols, diagnostics };
}

多轮对话系统完整代码实践手册

本指南提供可直接运行的代码示例,涵盖多轮对话系统核心模块实现。所有代码均包含详细注释和运行说明。


一、对话状态跟踪完整实现(Python)

# -*- coding: utf-8 -*-
import json
from datetime import datetimeclass DialogueStateTracker:"""多轮对话状态跟踪器支持槽位填充、意图识别和对话行为追踪"""def __init__(self):# 初始化对话状态self.state = {"intent": None,          # 当前识别的用户意图"slots": {},             # 槽位信息存储"dialogue_history": [],  # 对话历史记录"timestamp": None,       # 状态更新时间戳"user_profile": {}       # 用户画像信息}# 定义意图映射表(示例)self.intent_mapping = {"订票": ["买票", "订飞机票", "购买机票"],"退票": ["退票", "取消预订"],"查询": ["查", "看看", "有没有"]}def update_state(self, user_input, user_profile=None):"""更新对话状态Args:user_input (str): 用户输入语句user_profile (dict): 用户画像信息Returns:dict: 更新后的对话状态"""# 更新用户画像if user_profile:self.state["user_profile"] = user_profile# 更新时间戳self.state["timestamp"] = datetime.now().isoformat()# 意图识别self.state["intent"] = self._recognize_intent(user_input)# 槽位填充self.state["slots"] = self._fill_slots(user_input)# 更新对话历史self.state["dialogue_history"].append({"user_input": user_input,"current_state": self.get_summary()})return self.statedef _recognize_intent(self, text):"""意图识别模块(简单模式匹配示例)"""for main_intent, variations in self.intent_mapping.items():if any(variant in text for variant in variations):return main_intent# 默认意图分类if any(qw in text for qw in ["吗", "?", "什么", "怎么"]):return "咨询"return "其他"def _fill_slots(self, text):"""槽位填充(示例实现)实际应用中应使用NER模型"""slots = {}# 示例:提取日期信息date_match = re.search(r"(\d{4}年)?\d{1,2}月\d{1,2}日?", text)if date_match:slots["date"] = date_match.group()# 示例:提取地点信息locations = ["北京", "上海", "广州", "深圳"]for loc in locations:if loc in text:slots["location"] = locreturn slotsdef get_summary(self):"""获取状态摘要"""return {"intent": self.state["intent"],"filled_slots": list(self.state["slots"].keys()),"timestamp": self.state["timestamp"]}# --------------------------
# 使用示例
# --------------------------if __name__ == "__main__":dst = DialogueStateTracker()# 模拟用户画像user_profile = {"name": "张三","frequent_traveler": True}# 模拟多轮对话conversations = ["我想订明天去北京的票","那后天回来的呢","改一下,我要坐高铁"]for utterance in conversations:state = dst.update_state(utterance, user_profile)print(f"\n用户说:{utterance}")print("当前状态:")print(json.dumps(state, indent=2, ensure_ascii=False))

运行结果示例:

用户说:我想订明天去北京的票
当前状态:
{"intent": "订票","slots": {"date": "明天","location": "北京"},...
}用户说:那后天回来的呢
当前状态:
{"intent": "订票","slots": {"date": "后天","location": "北京"},...
}

二、上下文压缩完整实现(BERT)

# -*- coding: utf-8 -*-
from transformers import BertTokenizer, BertModel
import torch
import numpy as npclass ContextCompressor:"""基于BERT的上下文压缩器"""def __init__(self, model_name='bert-base-chinese'):self.tokenizer = BertTokenizer.from_pretrained(model_name)self.model = BertModel.from_pretrained(model_name)self.max_length = 512  # BERT最大输入长度def compress(self, conversation_history, target_length=128):"""压缩对话历史Args:conversation_history (list): 包含对话轮次的列表target_length (int): 目标压缩长度Returns:np.array: 压缩后的向量表示"""# 将对话历史拼接为文本full_text = "\n".join([f"{'用户' if i%2==0 else '助手'}{turn}" for i, turn in enumerate(conversation_history)])# 分块处理长文本chunks = self._split_text(full_text)# 获取每个块的嵌入向量embeddings = []for chunk in chunks:inputs = self.tokenizer(chunk, return_tensors='pt', truncation=True, padding=True,max_length=self.max_length)with torch.no_grad():outputs = self.model(**inputs)# 使用[CLS]向量作为句子表示chunk_embedding = outputs.last_hidden_state[:, 0, :].numpy()embeddings.append(chunk_embedding)# 合并嵌入向量combined = self._combine_embeddings(embeddings)# 进一步降维到目标长度compressed = self._dimensionality_reduction(combined, target_length)return compresseddef _split_text(self, text):"""将长文本分割为可处理的块"""tokens = self.tokenizer.tokenize(text)chunks = []for i in range(0, len(tokens), self.max_length - 2):  # 保留特殊标记空间chunk = self.tokenizer.convert_tokens_to_string(tokens[i:i + self.max_length - 2])chunks.append(chunk)return chunksdef _combine_embeddings(self, embeddings):"""合并多个嵌入向量"""# 简单平均池化return np.mean(np.vstack(embeddings), axis=0)def _dimensionality_reduction(self, vector, target_dim):"""维度约简(示例使用随机投影)"""# 实际应用应使用PCA等正规方法projection_matrix = np.random.randn(len(vector), target_dim)return np.dot(vector, projection_matrix)# --------------------------
# 使用示例
# --------------------------if __name__ == "__main__":compressor = ContextCompressor()# 模拟长对话历史conversation = ["用户:请帮我订明天上午9点从北京到上海的机票","助手:好的,正在为您查询航班信息","用户:经济舱的价格是多少","助手:最低价格是850元,含税","用户:那商务舱呢","助手:商务舱价格是2200元","用户:我要预订经济舱","助手:请提供乘客的姓名和身份证号码"] * 5  # 扩展对话历史compressed_vector = compressor.compress(conversation)print(f"压缩后的向量维度:{compressed_vector.shape}")

运行结果:

压缩后的向量维度:(128,)

三、医疗对话系统核心模块

# -*- coding: utf-8 -*-
import re
import json
from collections import defaultdictclass MedicalDialogueSystem:"""医疗对话系统核心模块包含症状标准化、意图识别和知识库检索功能"""def __init__(self):# 加载医学知识库(模拟数据)self.knowledge_base = {"symptoms": {"头痛": {"code": "SYM_001", "related": ["偏头痛", "颅压高"]},"发热": {"code": "SYM_002", "related": ["发烧", "体温升高"]},"咳嗽": {"code": "SYM_003", "related": ["干咳", "湿咳"]}},"diseases": {"感冒": {"symptoms": ["头痛", "发热", "咳嗽"],"treatment": "多休息,服用解热镇痛药"},"偏头痛": {"symptoms": ["头痛"],"treatment": "避免诱因,服用特异性药物"}}}# 构建同义词词典self.symptom_synonyms = {}for sym, data in self.knowledge_base["symptoms"].items():self.symptom_synonyms[sym] = [sym]self.symptom_synonyms[sym].extend(data["related"])def process_query(self, query):"""处理用户医疗咨询Args:query (str): 用户输入的查询Returns:dict: 包含处理结果的字典"""result = {"original_query": query,"intent": None,"symptoms": [],"possible_diseases": [],"response": ""}# 意图识别result["intent"] = self._identify_intent(query)# 症状提取result["symptoms"] = self._extract_symptoms(query)# 疾病推断if result["symptoms"]:result["possible_diseases"] = self._infer_diseases(result["symptoms"])# 生成回应result["response"] = self._generate_response(result)return resultdef _identify_intent(self, text):"""识别用户意图"""if any(word in text for word in ["建议", "怎么办", "治疗"]):return "医疗建议"elif any(word in text for word in ["症状", "表现"]):return "症状查询"elif any(word in text for word in ["病因", "原因"]):return "病因分析"else:return "其他咨询"def _extract_symptoms(self, text):"""提取症状信息"""detected = []# 构建正则模式patterns = []for symptom, synonyms in self.symptom_synonyms.items():pattern = r"(?:症状|现在|最近).*?(?:是|有)?(" + "|".join(synonyms) + ")"patterns.append((symptom, pattern))# 匹配症状for symptom, pattern in patterns:match = re.search(pattern, text)if match:detected.append({"name": symptom,"matched_term": match.group(1),"code": self.knowledge_base["symptoms"][symptom]["code"]})return detecteddef _infer_diseases(self, symptoms):"""根据症状推断疾病"""disease_scores = defaultdict(int)for symptom in symptoms:for disease, data in self.knowledge_base["diseases"].items():if symptom["name"] in data["symptoms"]:disease_scores[disease] += 1# 按匹配症状数量排序ranked = sorted(disease_scores.items(), key=lambda x: x[1], reverse=True)return [{"disease": d, "score": s} for d, s in ranked]def _generate_response(self, result):"""生成自然语言回应"""if not result["symptoms"]:return "请问您有哪些不适症状需要咨询?"response = "根据您描述的症状:"# 列出症状symptom_str = "、".join(s["name"] for s in result["symptoms"])response += f"{symptom_str},"if result["possible_diseases"]:disease = result["possible_diseases"][0]["disease"]treatment = self.knowledge_base["diseases"][disease]["treatment"]response += f"可能与{disease}相关。建议:{treatment}"else:response += "暂时无法确定具体病因,建议及时就医检查。"return response# --------------------------
# 使用示例
# --------------------------if __name__ == "__main__":mds = MedicalDialogueSystem()queries = ["我最近头痛得厉害,应该怎么办?","我现在有点发热还咳嗽,需要吃什么药?","最近总是偏头痛,应该怎么治疗?"]for query in queries:result = mds.process_query(query)print(f"\n用户问:{query}")print("系统响应:", result["response"])print("详细分析:")print(json.dumps(result, indent=2, ensure_ascii=False))

运行结果示例:

用户问:我最近头痛得厉害,应该怎么办?
系统响应:根据您描述的症状:头痛,可能与偏头痛相关。建议:避免诱因,服用特异性药物
详细分析:
{"original_query": "我最近头痛得厉害,应该怎么办?","intent": "医疗建议","symptoms": [{"name": "头痛","matched_term": "头痛","code": "SYM_001"}],"possible_diseases": [{"disease": "偏头痛","score": 1},{"disease": "感冒","score": 1}],...
}

四、代码说明和依赖

1. 环境要求
# 安装基础依赖
pip install transformers torch numpy# 安装中文BERT模型(首次运行时)
# 模型会自动下载到本地缓存目录
2. 代码结构说明
文件功能
dialogue_state_tracker.py对话状态跟踪器
context_compressor.py上下文压缩模块
medical_dialogue.py医疗对话系统核心
config.json配置文件(示例)
3. 扩展建议
  • 性能优化:添加缓存机制(如Redis)存储常见对话状态
  • 安全性:在医疗系统中添加敏感词过滤和隐私保护模块
  • 监控:集成Prometheus指标收集,监控对话状态更新频率
  • 持久化:将对话历史存储到数据库(如MongoDB)


成本优化的黑暗艺术

Token节省三重奏:

  1. 历史摘要:将超过5轮的对话压缩为JSON摘要
  2. 结构化存储:用{“user_age”:25}代替"用户今年25岁"
  3. 智能截断:保留包含关键槽位的对话片段
# 上下文压缩效果对比
original_tokens = 12800
compressed_tokens = 3200
cost_saving = (original_tokens - compressed_tokens)/original_tokens * 100
print(f"节省成本:{cost_saving:.1f}%")  # 输出:节省成本:75.0%

未来趋势的哲学思考

记忆悖论:该记住还是该遗忘?

在银行客服场景中,我们需要记住账户信息却要遗忘具体交易;在心理咨询中,需要理解情绪模式却不存储敏感对话。这催生了新型的选择性记忆网络

# 带遗忘机制的记忆存储
class SelectiveMemory:def store(self, info, persistent=False):if persistent:self.long_term.save(info)else:# 设置自动过期时间self.temporary.save(info, ttl=3600*24*7)

结语:对话系统的文艺复兴

当医疗助手能记住患者三年来的治疗历程,当编程助手能理解项目演进的技术债,我们正在见证交互范式的革命。记住:最好的对话系统,是让用户忘记它是个系统。

“真正的智能不在记住所有,而在知道该忘记什么” ——《对话系统伦理白皮书》

相关文章:

《AI大模型应知应会100篇》第41篇:多轮对话设计:构建高效的交互式应用

第41篇:多轮对话设计:构建高效的交互式应用 摘要 在银行客服机器人突然准确回答出用户第7次追问的信用卡额度规则时,在医疗问诊系统记住患者既往病史的瞬间,多轮对话技术正在创造令人惊叹的交互体验。本文将以工业级案例为经&am…...

【Day 14】HarmonyOS分布式数据库实战

一、分布式数据库基础 1. 核心概念速记表 术语解释示例场景分布式数据库数据自动同步到同账号设备手机添加商品→平板立即显示KV数据模型键值对存储(类似JSON){"cart_item1": {"name":"牛奶","price":10}}数据…...

terraform 删除资源前先校验资源是否存在关联资源

Terraform 删除资源前校验关联资源的解决方案 在使用 Terraform 进行资源删除操作时,确实存在直接删除可能影响关联资源的风险。以下是几种在删除前校验关联资源的方法: 1. 使用 Terraform Data Sources 进行预检查 在删除主资源前,可以通…...

如何免费使用 DeepSeek-Prover-V2?

近日,Deepseek 发布了一个新模型,这是一个在数学推理方面表现卓越的模型,即 DeepSeek Prover V2。 DeepSeek-Prover-V2 是一个专门使用 Lean 4 证明助手进行形式化定理证明的高级语言模型。 简单来说, DeepSeek-Prover-V2 旨在支持数学家和计算机科学家创建和验证形式化证…...

dify+ollama+知识库 部署

这篇文章的前提是已经部署了deepseek和ollama deepseek和ollama安装 代码、配置 本地电脑如果是Windows的话,需要安装Git # 拉取Dify代码 git clone https://github.com/langgenius/dify.git复制配置 进入dify\docker目录 复制.env.example到.env 复制.middlewa…...

补题:K - Magic Tree (Gym - 105231K)

来源:问题 - K - Codeforceshttps://codeforces.com/gym/105231/problem/K 题目描述: 一、题目分析 本题给定一个2行m列的网格,从(1, 1)格子开始进行深度优先搜索,每个格子可到达至少一个边相邻的格子且不重复访问,…...

文章记单词 | 第58篇(六级)

一,单词释义 naive:英 [naɪˈiːv , nɑːˈiːv] 美 [naɪˈiːv , nɑːˈiːv],形容词,意为 “天真的;幼稚的;轻信的;易受骗的;无经验的;率真的;质朴的”…...

红利底波是什么意思?

红利低波是一种结合了红利策略和低波策略的投资策略,主要选取股息率高且波动率低的股票进行投资,具有 “高收益低风险” 的特点,适合大多数投资者的权益资产配置。以下是具体介绍: 策略构成要素 红利策略 :关注股息率…...

缓存:缓解读库压力的高效方案与应用实践

在软件开发和系统设计中,使用缓存来缓解读库压力是一种常见且有效的优化策略,以下是具体的介绍: 一、缓存的基本概念 缓存是一种临时数据存储区域,它存储了经常访问的数据副本。当应用程序需要访问数据时,首先会检查…...

17. LangChain流式响应与实时交互:打造“类ChatGPT“体验

引言:从"等待加载"到"即时对话"的革命 2025年某在线教育平台的AI助教引入流式交互后,学生平均对话轮次提升3.2倍,完课率提高47%。本文将基于LangChain的异步流式架构,揭秘如何实现毫秒级响应的自然对话体验。…...

仿腾讯会议——服务器结构讲解

总功能 1、数据库类 1、进入mysql 2、查看当前数据库 2、线程池 3、网络类 阻塞和非阻塞是通过套接字来实现的,所以不能发送和接收的阻塞状态不同...

【笔记】深度学习模型训练的 GPU 内存优化之旅③:内存交换篇

开设此专题,目的一是梳理文献,目的二是分享知识。因为笔者读研期间的研究方向是单卡上的显存优化,所以最初思考的专题名称是“显存突围:深度学习模型训练的 GPU 内存优化之旅”,英文缩写是 “MLSys_GPU_Memory_Opt”。…...

(B题|矿山数据处理问题)2025年第二十二届五一数学建模竞赛(五一杯/五一赛)解题思路|完整代码论文集合

我是Tina表姐,毕业于中国人民大学,对数学建模的热爱让我在这一领域深耕多年。我的建模思路已经帮助了百余位学习者和参赛者在数学建模的道路上取得了显著的进步和成就。现在,我将这份宝贵的经验和知识凝练成一份全面的解题思路与代码论文集合…...

【2025最新】为什么用ElasticSearch?和传统数据库MySQL与什么区别?

Elasticsearch 深度解析:从原理到实践 一、为什么选择 Elasticsearch? 数据模型 Elasticsearch 是基于文档的搜索引擎,它使用 JSON 文档来存储数据。在 Elasticsearch 中,相关的数据通常存储在同一个文档中,而不是分散…...

华为云Astro大屏连接器创建操作实例:抽取物联网iotda影子设备数据的连接器创建

目录 样图(API连接器创建成功) 说明 操作场景(以Astro大屏抽取iotda影子参数为例) 实际操作步骤 新建连接器 设置基本信息。 接口鉴权方式,支持API鉴权、AK/SK、API Key和无身份验证 无身份验证 AK/SK认证(目前暂不能用) API Key认证(第三方使用) API鉴权认…...

C#泛型集合深度解析(九):掌握System.Collections.Generic的核心精髓

一、泛型集合革命:告别装箱拆箱的性能噩梦 1.1 泛型与非泛型集合性能对比 // 非泛型集合(ArrayList) ArrayList arrayList = new ArrayList(); arrayList.Add(100); // 装箱发生 int value = (int)arrayList[0]; // 拆箱发生// 泛型集合(List<T>) List<…...

人工智能-深度学习之卷积神经网络

深度学习 mlp弊端卷积神经网络图像卷积运算卷积神经网络的核心池化层实现维度缩减卷积神经网络卷积神经网络两大特点卷积运算导致的两个问题&#xff1a;图像填充&#xff08;padding&#xff09;结构组合问题经典CNN模型LeNet-5模型AlexNet模型VGG-16模型 经典的CNN模型用于新…...

《软件设计师》复习笔记(11.1)——生命周期、CMM、开发模型

目录 一、信息系统生命周期 系统规划阶段 系统分析阶段&#xff08;逻辑设计&#xff09; 系统设计阶段&#xff08;物理设计&#xff09; 系统实施阶段 系统运行与维护阶段 二、能力成熟度模型&#xff08;CMM/CMMI&#xff09; CMM 五级模型 CMMI 两种表示方法 真题…...

AI大模型基础设施:主流的几款开源AI大语言模型的本地部署成本

以下是对目前主流开源AI大语言模型&#xff08;如DeepSeek R1、LLaMA系列、Qwen等&#xff09;本地部署成本的详细分析&#xff0c;涵盖计算机硬件、显卡等成本&#xff0c;价格以美元计算。成本估算基于模型参数规模、硬件需求&#xff08;GPU、CPU、RAM、存储等&#xff09;以…...

Narendra自适应控制器设计

上一篇介绍了在系统结构中引入前馈和反馈的结构&#xff0c;然后利用李雅普诺夫稳定性理论设计MRACS&#xff0c;在基于输入输出形式中&#xff0c;利用李雅普诺夫稳定性设计的自适应率中包含了误差的导数&#xff0c;这降低了系统的抗干扰性&#xff0c;为了避免这一缺点&…...

为什么大模型偏爱Markdown

Markdown 的简洁之美 我们常见的文档格式&#xff0c;比如HTML、JSON、XML或者Markdown&#xff0c;Markdown是最简洁的。 比如要展示一行标题&#xff0c;相比复杂的HTML标签&#xff0c;使用Markdown我们只需要在文本前加个井号&#xff1a; <heading level“1”>这是…...

【kafka系列】消费者组

目录 消费者组功能点 1. 动态负载均衡 2. 容错高可用 3. 消费进度管理 4. 并行消费能力 5. 消费隔离性 其他要点 1. Rebalance过程详解 2. 位移提交的精确语义 3. 消费者限速策略 4. 跨机房消费设计 消费者组功能点 1. 动态负载均衡 核心机制&#xff1a;通过Rebal…...

2025五一杯数学建模C题:社交媒体平台用户分析问题;思路分析+模型代码

&#xff08;一&#xff09;问题背景 想象一下&#xff0c;社交媒体平台是一个充满活力的生态系统&#xff0c;博主们如同才华横溢的创作者&#xff0c;凭借专业知识或独特兴趣&#xff0c;精心打造出各种高质量内容&#xff0c;吸引着众多用户的目光。用户则像热情的参与者&a…...

Kotlin-运算符重载函数

在 Kotlin 里&#xff0c;运算符重载函数允许为自定义类型重新定义现有的运算符(如 -…)行为&#xff0c;从而让自定义类型能像内置类型那样使用运算符 文章目录 基本语法作用场景类对象数据类型接口 注意事项 基本语法 若要重载运算符&#xff0c;需要定义一个带有 operato…...

哈希表笔记(三)Java Hashmap

一、基本介绍 HashMap 是 Java 集合框架中的核心类之一&#xff0c;基于哈希表实现&#xff0c;提供了 Map 接口的主要实现。 1.1 主要特点 实现了 Map<K,V> 接口允许 null 键和 null 值&#xff08;不同于 Hashtable&#xff09;非同步实现&#xff08;非线程安全&am…...

2025五一杯C题五一杯数学建模思路代码文章教学:社交媒体平台用户分析问题

完整内容请看文章最下面的推广群 问题一详细分析&#xff1a;逐步思考与建模过程 第1步&#xff1a;问题理解与数学建模目标明确 目标明确&#xff1a; 平台希望根据2024年7月11日至7月20日的用户与博主交互数据&#xff0c;预测2024年7月21日各博主新增的关 注数&#xff0c;…...

2025五一数学建模竞赛B题完整分析论文(共42页)(含模型、可运行代码、数据)

2025年五一数学建模竞赛B题完整分析论文 摘 要 一、问题分析 二、问题重述 三、模型假设 四、符号定义 五、 模型建立与求解 5.1问题1 5.1.1问题1思路分析 5.1.2问题1模型建立 5.1.3问题1代码 5.1.4问题1求解结果 5.2问题2 5.2.1问题2思路分析 5.2.…...

[蓝桥杯 2021 省 AB] 砝码称重 Java

import java.util.*;public class Main {public static void main(String[] args) {Scanner sc new Scanner(System.in);int n sc.nextInt();int[] w new int[n 1];int sum 0; // 所有砝码重量之和for (int i 1; i < n; i) {w[i] sc.nextInt();sum w[i];}sc.close()…...

Linux 命令如何同时支持文件参数与管道输入?

文章目录 Linux 命令如何同时支持文件参数与管道输入&#xff1f;命令输入方式与管道机制概述常见输入控制方式常见使用示例程序实现思路&#xff1a;统一处理输入的方式判定输入来源的基本模式为何命令应支持参数与标准输入&#xff1f; GNU Coreutils wc 源码解析&#xff1a…...

Lucene多种数据类型使用说明

Lucene 作为一款高性能的全文检索引擎库&#xff0c;其核心功能围绕索引和搜索文本数据&#xff0c;但它也支持多种数据类型以满足复杂的应用场景。以下是 Lucene 支持的主要数据类型及其用途的详细说明&#xff1a; 1. 文本类型&#xff08;Text&#xff09; 用途&#xff1a;…...

使用CubeMX新建DMA工程——存储器到外设模式

目录 1、新建板级支持包 1、usart.c: 2、修改的地方&#xff1a;在usart.c中添加了这些 3、usart.h: 4、在usart.h中添加了这些&#xff1a; 5、dma.c: 6、dma.h: 2、修改main.c文件 1、在main.c文件中添加头文件 2、添加外部变量声明 3、添加简单延时函数 4、添加…...

基于Redis实现-附近商铺查询

基于Redis实现-附近查询 这个功能将使用到Redis中的GEO这种数据结构来实现。 1.GEO相关命令 GEO就是Geolocation的简写形式&#xff0c;代表地理坐标。Redis在3.2版本中加入到了对GEO的支持&#xff0c;允许存储地理坐标信息&#xff0c;帮助我们根据经纬度来检索数据&#…...

【Redis】Another Redis Desktop Manager 安装指南

目录 一、Another Redis Desktop Manager 介绍 ​二、下载安装指南 三、效果预览 一、Another Redis Desktop Manager 介绍 国人开发的更快、更好、更稳定的 Redis 桌面客户端工具&#xff0c;功能强大&#xff0c;支持集群、哨兵、SSL 认证、 树状视图、自定义格式化脚本等功…...

装饰器设计模式(Decorator Pattern)详解

装饰器设计模式(Decorator Pattern)详解 装饰器模式是一种结构型设计模式,它允许动态地向对象添加额外行为,而无需修改其原始类。这种模式通过包装对象的方式提供灵活的扩展功能替代继承。 1. 核心概念 (1)模式定义 装饰器模式:动态地给一个对象添加一些额外的职责,就…...

LiteOS与SLE透传实战案例

文章目录 硬件设计EDA 软件介绍创建元件及封装原理图绘制Layout元件焊接 软件设计LiteOS 入门核心概念TaskWorkflow参考 API&#xff08;参考 osal_task. h&#xff09; 时间片任务轮转练习&#xff1a;仿写 example/peripheral/blinkyQueue参考 API&#xff08;参考 osal_msgq…...

MCAL学习(1)——AutoSAR

1.了解AutoSAR及一些概念 AutoSAR是Automotive Open System Architecture ,汽车开放系统架构。 针对汽车ECU的软件开发架构。已经是汽车电子软件开发的标准。 OS服务&#xff1a;Freertos 整车厂&#xff08;OEM&#xff09;主要负责应用层算法 一级供应商&#xff1a;生产制…...

前端vue3项目学习

鸽王经过一个多月的学习&#xff08;断断续续吧&#xff0c;毕竟还有其他杂事&#xff09;&#xff0c;学的昏天黑地&#xff0c;终于把主线捋的差不多了。只能说&#xff0c;前端真不是人学的&#xff0c;涉及的语言语法太杂乱了&#xff0c;入门真的太难了。而后端&#xff0…...

ActiveMQ 性能优化与网络配置实战(二)

五、性能优化实战 5.1 基础配置调整 5.1.1 增加并发消费者 在 ActiveMQ 中&#xff0c;增加并发消费者是提高消息处理效率的重要手段之一。通过配置多个消费者并行处理消息&#xff0c;可以充分利用系统资源&#xff0c;加快消息的消费速度&#xff0c;从而提高系统的整体吞…...

Python 函数装饰器和闭包(装饰器基础知识)

本章内容&#xff1a; Python 如何计算装饰器句法 Python 如何判断变量是不是局部的 闭包存在的原因和工作原理 nonlocal 能解决什么问题 掌握这些基础知识后&#xff0c;我们可以进一步探讨装饰器&#xff1a; 实现行为良好的装饰器 标准库中有用的装饰器 实现一个参数化装饰器…...

“Everything“工具 是 Windows 上文件名搜索引擎神奇

01 Everything 和其他搜索引擎有何不同 轻量安装文件。 干净简洁的用户界面。 快速文件索引。 快速搜索。 快速启动。 最小资源使用。 轻量数据库。 实时更新。 官网&#xff1a;https://www.voidtools.com/zh-cn/downloads/ 通过网盘分享的文件&#xff1a;Every…...

【Machine Learning Q and AI 读书笔记】- 04 彩票假设

Machine Learning Q and AI 中文译名 大模型技术30讲&#xff0c;主要总结了大模型相关的技术要点&#xff0c;结合学术和工程化&#xff0c;对LLM从业者来说&#xff0c;是一份非常好的学习实践技术地图. 本文是Machine Learning Q and AI 读书笔记的第4篇&#xff0c;对应原…...

linux下安装ollama网不好怎么办?

文章目录 前言kkgithub下载脚本,而不是直接运行修改脚本修改权限还是不行?前言 今天想在linux上面更新一下ollama,于是去到官网: https://ollama.com/download/linux linux下安装ollama还是挺简单的: curl -fsSL https://ollama.com/install.sh | sh我也是特别嗨皮地就…...

(A题|支路车流量推测问题)2025年第二十二届五一数学建模竞赛(五一杯/五一赛)解题思路|完整代码论文集合

我是Tina表姐&#xff0c;毕业于中国人民大学&#xff0c;对数学建模的热爱让我在这一领域深耕多年。我的建模思路已经帮助了百余位学习者和参赛者在数学建模的道路上取得了显著的进步和成就。现在&#xff0c;我将这份宝贵的经验和知识凝练成一份全面的解题思路与代码论文集合…...

RDMA高性能网络通信实践

RDMA高性能网络通信实践 一、背景介绍二、方法设计A.实现方案B.关键技术点三、代码及注释四、注意事项一、背景介绍 远程直接内存访问(RDMA)技术通过绕过操作系统内核和CPU直接访问远程内存,实现了超低延迟、高吞吐量的网络通信。该技术广泛应用于高性能计算、分布式存储和…...

【LeetCode Hot100】图论篇

前言 本文用于整理LeetCode Hot100中题目解答&#xff0c;因题目比较简单且更多是为了面试快速写出正确思路&#xff0c;只做简单题意解读和一句话题解方便记忆。但代码会全部给出&#xff0c;方便大家整理代码思路。 200. 岛屿数量 一句话题意 求所有上下左右的‘1’的连通块…...

图论---有向图的强连通分量(Tarjan求SCC)

强连通分量作用&#xff1a;有向图——>&#xff08;缩点&#xff09;有向无环图&#xff08;DAG&#xff09; 缩点&#xff1a;将所有连通的分量缩成一个点。 有向无环图作用/好处&#xff1a;求最短路/最长路 可以递推&#xff0c;按照拓扑图从前往后递推. x 是否在某个…...

2025年- H17-Lc125-73.矩阵置零(矩阵)---java版

1.题目描述 2.思路 &#xff08;1&#xff09;计算矩阵的行数 &#xff08;2&#xff09;计算矩阵的列数 &#xff08;3&#xff09;设计一个行列的bool数组 &#xff08;4&#xff09;遍历矩阵&#xff08;二维数组&#xff09;&#xff0c;如果遇到元素0&#xff0c;则把…...

【信息系统项目管理师-论文真题】2023下半年论文详解(包括解题思路和写作要点)

更多内容请见: 备考信息系统项目管理师-专栏介绍和目录 文章目录 试题(第一批):论信息系统项目的干系人管理1、写作要点2、解题思路项目干系人管理的过程和执行要点项目中所有干系人如何进行分类管理?试题(第二批):论信息系统项目的工作绩效域1、写作要点2、解题思路绩…...

分享5款开源、美观的 WinForm UI 控件库

前言 今天大姚给大家分享5款开源、美观的 WinForm UI 控件库&#xff0c;助力让我们的 WinForm 应用更好看。 WinForm WinForm是一个传统的桌面应用程序框架&#xff0c;它基于 Windows 操作系统的原生控件和窗体。通过简单易用的 API&#xff0c;开发者可以快速构建基于窗体…...

微软推出数款Phi 4“开放式”人工智能模型

微软周三推出了几款新的“开放式”人工智能模型&#xff0c;其中功能最强大的模型至少在一个基准测试上可与 OpenAI 的 o3-mini 相媲美。所有新的授权模型——Phi 4 mini reasoning、Phi 4 reasoning 和 Phi 4 reasoning plus——都是“推理”模型&#xff0c;这意味着它们能够…...