(三)链式工作流构建——打造智能对话的强大引擎
上一篇:(二)输入输出处理——打造智能对话的灵魂
在前两个阶段,我们已经搭建了一个基础的智能对话,并深入探讨了输入输出处理的细节。今天,我们将进入智能对话的高级阶段——链式工作流构建。这一阶段的目标是通过链式调用和复杂逻辑编排,让对话系统具备更强大的处理能力和更灵活的应用场景。(建议从第一篇食用)
一、链式调用:构建任务处理流水线
链式调用是智能对话的核心功能之一,它允许我们将多个处理步骤串联起来,形成一个完整的任务处理流水线。通过这种方式,我们可以让智能对话自动完成一系列复杂的任务。
导入相关包
from langchain_community.chat_models import ChatZhipuAI
from langchain_core.runnables import RunnablePassthrough
from langchain_core.prompts import ChatPromptTemplate
from langchain_core.output_parsers import StrOutputParser
from langchain_core.runnables import RunnableLambda
from langchain_core.runnables import RunnableBranch
from langchain_core.runnables.base import RunnableEach
基础链式调用
chain = (RunnablePassthrough() # 传递原始输入| ChatPromptTemplate.from_template("将以下文本翻译成{language}:{text}")| chat # GLM-4-Flash模型| StrOutputParser() # 提取文本内容
)
result = chain.invoke({"text": "Hello, world!", "language": "中文"})
print(result)
这段代码展示了如何通过链式调用实现文本翻译功能。输入的文本首先被传递到模板中,然后由模型进行处理,最后通过解析器提取结果。这种流水线式的处理方式不仅高效,而且易于扩展。
结果如下:
你好,世界!
多步骤组合链
# 定义子链1:生成菜谱
recipe_chain = (ChatPromptTemplate.from_template("生成{cuisine}菜谱")| chat| StrOutputParser()
)# 定义子链2:生成购物清单
shopping_chain = (ChatPromptTemplate.from_template("根据菜谱列出食材:{recipe}")| chat| StrOutputParser()
)# 组合链
full_chain = {"recipe": recipe_chain, # 先执行菜谱生成"cuisine": RunnablePassthrough() # 传递原始输入
} | shopping_chain # 将菜谱结果传递给购物清单链result = full_chain.invoke("川菜")
print(result)
通过多步骤组合链,我们可以将多个子任务串联起来,形成一个完整的任务流程。这种设计方式特别适合需要多步骤处理的复杂任务,比如菜谱生成和购物清单生成。
结果如下:
根据您提供的麻婆豆腐菜谱,以下是所需的食材列表:1. 老豆腐
2. 猪肉末
3. 姜蒜末
4. 葱花
5. 豆瓣酱
6. 花椒粉
7. 食用油
8. 生抽
9. 老抽(可选)
10. 料酒
11. 水淀粉
12. 鸡精或味精(可选)
13. 清水
14. 盐
二、异步处理:提升系统的并发能力
在实际应用中,对话系统往往需要同时处理多个请求。异步处理技术可以显著提升系统的并发能力,让系统更加高效。
基础异步调用
import asyncioasync def async_query():chain = (ChatPromptTemplate.from_template("用比喻解释{concept}")| chat| StrOutputParser())return await chain.ainvoke({"concept": "机器学习"})# 运行异步任务
result = await async_query()
print(result)
通过异步调用,我们可以让系统在等待一个任务完成的同时处理其他任务,从而提高系统的整体效率。
结果如下:
机器学习就像是一个聪明的学生,他不需要老师反复讲解,只要给他一些例子,他就能自己学会如何解决问题。这个过程就像是一个孩子通过观察和模仿来学习说话和走路。在这个比喻中,例子就是“数据”,而学生就是“算法”。算法通过不断分析这些数据,就像孩子通过不断模仿来学习语言和动作一样,最终能够独立地识别模式和做出决策。
批量异步处理
async def batch_process():chain = (ChatPromptTemplate.from_template("生成关于{theme}的标题")| chat| StrOutputParser())# 并行处理多个请求tasks = [chain.ainvoke({"theme": "人工智能"}),chain.ainvoke({"theme": "气候变化"})]return await asyncio.gather(*tasks)results = await batch_process()
print(results)
批量异步处理可以同时处理多个请求,特别适合需要同时生成多个结果的场景。
结果如下:(由于是批量处理,所以返回是列表形式)
['1. "人工智能:未来科技浪潮中的引领者"\n2. "智能革命:人工智能如何改变我们的世界"\n3. "从科幻走向现实:人工智能的无限可能"\n4. "AI赋能未来:探索人工智能的无限边界"\n5. "智能时代来临:人工智能如何重塑产业格局"\n6. "人工智能:开启智慧生活新篇章"\n7. "智能进化论:人工智能技术发展历程解析"\n8. "AI赋能教育:人工智能如何助力人才培养"\n9. "人工智能:推动医疗健康产业变革的力量"\n10. "智能时代,人工智能如何助力社会治理创新"', '1. "全球气候变暖:挑战与应对之道"\n2. "极端天气频发,气候变化警钟长鸣"\n3. "绿色未来:携手应对气候变化危机"\n4. "气候变化下的生态危机:我们能做什么?"\n5. "低碳生活,共建地球家园——应对气候变化行动指南"\n6. "气候变化对农业的影响:挑战与转型之路"\n7. "从巴黎协定到行动:全球气候治理的挑战与机遇"\n8. "城市如何应对气候变化:可持续发展的绿色策略"\n9. "气候变化与人类健康:揭示未知风险与应对策略"\n10. "绿色能源革命:推动全球气候治理新格局"']
三、流式处理:实时响应与分析
流式处理技术可以让我们实时获取模型的输出,并在输出过程中进行分析和处理。这种技术特别适合需要实时反馈的场景。
基础流式输出
chain = (ChatPromptTemplate.from_template("用100字介绍{topic}")| chat| StrOutputParser()
)for chunk in chain.stream({"topic": "人工智能"}):print(chunk, end="", flush=True)
通过流式输出,我们可以实时获取模型的输出,这在需要即时反馈的场景中非常有用。
结果如下:(实时输出结果,好像打字机一样,一个或几个字输出)
人工智能是计算机科学领域,研究、开发用于模拟、延伸和扩展人的智能的理论、方法、技术及应用系统。它通过算法和机器学习,使计算机具备学习、推理、感知和决策能力,广泛应用于各行各业。
带中间状态的流式处理
def word_counter(input_text):word_count = len(input_text.split())yield f"当前字数:{word_count}\n"analysis_chain = (ChatPromptTemplate.from_template("分析{AI_tool}的市场竞争力")| chat| StrOutputParser()| RunnableLambda(word_counter) # 添加自定义处理
)for chunk in analysis_chain.stream({"AI_tool": "deepseek"}):print(chunk)
通过在流式处理中加入自定义逻辑,我们可以在输出过程中实时分析和处理数据。
结果如下:
当前字数:61
四、复杂逻辑编排:让系统更智能
复杂逻辑编排是智能对话系统的核心能力之一。通过条件分支和循环处理,我们可以让系统根据不同的输入执行不同的逻辑。
条件分支路由
def classify_input(text: str) -> str:if "笑话" in text:return "joke"elif "新闻" in text:return "news"return "other"# 定义子链
joke_chain = (ChatPromptTemplate.from_template("生成关于{topic}的笑话")| chat| StrOutputParser()
)
news_chain = (ChatPromptTemplate.from_template("写一则关于{topic}的简讯")| chat| StrOutputParser()
)
default_chain = (ChatPromptTemplate.from_template("回答关于{topic}的问题")| chat| StrOutputParser()
)# 构建分支逻辑
branch = RunnableBranch((lambda x: classify_input(x["topic"]) == "joke", joke_chain),(lambda x: classify_input(x["topic"]) == "news", news_chain),default_chain
)# 测试分支
print(branch.invoke({"topic": "人工智能笑话"})) # 输出笑话
print(branch.invoke({"topic": "科技新闻"})) # 输出简讯
通过条件分支,我们可以让系统根据输入的不同执行不同的逻辑。这种设计方式特别适合需要处理多种类型输入的场景。
结果如下:
# 第一个输出
为什么人工智能不喜欢去健身房?因为它只想“训练数据”,而不是“锻炼身体”!😄
# 第二个输出
【科技新闻简讯】
我国科学家成功研发新型太阳能电池,效率提升30%近日,我国科研团队在太阳能电池领域取得重大突破,成功研发出一种新型太阳能电池。该电池采用新型材料,通过优化设计,将光电转换效率提升至30%,创下了国际领先水平。据悉,该技术有望广泛应用于光伏发电、太阳能充电等领域,为我国新能源产业发展提供有力支持。目前,该成果已申请国际专利,并计划在未来五年内实现产业化应用。
循环处理
prompt = ChatPromptTemplate.from_template("什么是{topic}")
model = chat
output_parser = StrOutputParser()chain = prompt | model | output_parserloop_chain = RunnableEach(bound=chain)response = loop_chain.invoke([{'topic': '人工智能'},{'topic': '机器学习'},{'topic': '深度学习'}
])
print(response)
通过循环处理,我们可以批量处理多个输入,特别适合需要批量生成内容的场景。
结果如下:
['人工智能(Artificial Intelligence,简称AI)是指由人制造出来的系统所表现出的智能行为。这种智能可以是机器学习、自然语言处理、视觉识别、决策制定、问题解决等多种形式。人工智能的目标是使计算机能够执行通常需要人类智能才能完成的任务。\n\n以下是人工智能的一些关键特点:\n\n1. **机器学习**:通过算法从数据中学习并改进性能。\n2. **自然语言处理**:让机器能够理解和生成人类语言。\n3. **计算机视觉**:让机器能够“看到”和理解图像或视频。\n4. **机器人技术**:将人工智能集成到物理机器人中。\n5. **专家系统**:模拟人类专家解决问题的能力。\n\n人工智能的应用领域非常广泛,包括但不限于以下方面:\n\n- **医疗**:辅助诊断、药物研发等。\n- **交通**:自动驾驶、交通流量管理等。\n- **金融**:风险评估、欺诈检测等。\n- **教育**:个性化学习、自动评分等。\n- **娱乐**:游戏、虚拟助手等。\n\n人工智能的发展对人类社会具有深远的影响,但也带来了一些伦理和安全方面的挑战。因此,在推动人工智能发展的同时,也需要关注其潜在的风险和影响,并采取措施确保其健康、可持续发展。', '机器学习是人工智能(AI)的一个分支,它使计算机系统能够从数据中学习并做出决策或预测,而无需显式编程。简单来说,机器学习就是让计算机通过经验改进其性能的过程。\n\n以下是机器学习的一些关键点:\n\n1. **数据驱动**:机器学习依赖于大量数据来训练模型。这些数据可以是结构化的(如数据库中的表格)或非结构化的(如图像、文本、音频和视频)。\n\n2. **算法**:机器学习使用各种算法来分析数据并从中学习。这些算法可以是监督学习、无监督学习或强化学习。\n\n3. **监督学习**:在这种方法中,模型从标记的数据(即已知结果)中学习。例如,通过学习大量已标记的电子邮件,模型可以学会将新电子邮件分类为垃圾邮件或非垃圾邮件。\n\n4. **无监督学习**:在这种方法中,模型从未标记的数据中学习。例如,无监督学习可以用于发现客户购买模式或市场趋势。\n\n5. **强化学习**:在这种方法中,模型通过与环境的交互来学习。它通过尝试不同的行动并从中学习来优化其行为。\n\n6. **应用**:机器学习在各个领域都有广泛的应用,包括自然语言处理、图像识别、推荐系统、医疗诊断、自动驾驶汽车等。\n\n7. **挑战**:尽管机器学习有许多优势,但也面临一些挑战,如数据隐私、偏见、可解释性和伦理问题。\n\n总之,机器学习是一种强大的技术,它使计算机能够从数据中学习,并在此过程中不断提高其性能。', '深度学习是机器学习的一个子领域,主要研究的是如何使用神经网络来模拟人脑处理信息的方式,以实现对数据的自动学习和提取特征。它通过构建具有多层节点的神经网络模型,使得模型能够自动从原始数据中学习到更深层次的特征表示。\n\n以下是深度学习的一些关键点:\n\n1. **神经网络**:深度学习的基础是神经网络,特别是深度神经网络(DNN)。神经网络由多个层组成,包括输入层、隐藏层和输出层。\n\n2. **多层结构**:与传统的单层神经网络相比,深度神经网络包含多个隐藏层,这使得模型能够学习更复杂的特征和模式。\n\n3. **自动特征提取**:深度学习模型可以自动从原始数据中提取特征,无需人工干预。这使得深度学习在图像识别、语音识别等领域具有显著优势。\n\n4. **大规模数据**:深度学习通常需要大量的数据进行训练,以使模型能够学习到有效的特征表示。\n\n5. **优化算法**:深度学习模型通常使用梯度下降等优化算法进行训练,以最小化预测误差。\n\n6. **应用领域**:深度学习在多个领域取得了显著成果,包括图像识别、语音识别、自然语言处理、推荐系统等。\n\n深度学习在近年来取得了巨大进展,推动了人工智能技术的发展。随着计算能力的提升和数据量的增加,深度学习有望在更多领域发挥重要作用。']
总结
链式工作流构建是智能对话的核心能力,它不仅决定了处理效率,还影响着灵活性和扩展性。通过链式调用、异步处理、流式处理和复杂逻辑编排等技术,我们可以让对话变得更加智能、高效和实用。
未来,我们可以进一步探索以下方向:
- 更复杂的任务编排:结合 RAG 技术,实现多步骤任务的自动化处理。
- 实时交互优化:通过流式处理和异步技术,进一步提升系统的响应速度。
- 多模态支持:支持图片、语音等多种输入输出形式,让对话系统更加多样化。
祝我们学习愉快! 😊
下一篇:(四)数据检索与增强生成——让对话系统更智能、更高效
相关文章:
(三)链式工作流构建——打造智能对话的强大引擎
上一篇:(二)输入输出处理——打造智能对话的灵魂 在前两个阶段,我们已经搭建了一个基础的智能对话,并深入探讨了输入输出处理的细节。今天,我们将进入智能对话的高级阶段——链式工作流构建。这一阶段的目…...
跳跃连接(Skip Connection)与残差连接(Residual Connection)
1. 跳跃连接(Skip Connection)的基本概念 跳跃连接是一种在深度神经网络中广泛应用的技术,它允许信息在网络中跨层直接传递。在传统的神经网络里,每一层的输出仅仅是前一层输出经过特定变换后的结果。而在具备跳跃连接的网络中&a…...
[特殊字符] 通过Postman和OAuth 2.0连接Dynamics 365 Online的详细步骤 [特殊字符]
🌟 引言 在企业应用开发中,Dynamics 365 Online作为微软的核心CRM平台,提供了强大的Web API接口。本文将教你如何通过Postman和OAuth 2.0认证实现与Dynamics 365的安全连接,轻松调用数据接口。 📝 准备工作 工具安装…...
什么是RPC通信
RPC(Remote Procedure Call,远程过程调用)通信是一种允许程序像调用本地函数一样调用远程服务器上函数的通信技术。它简化了分布式系统中的网络交互,隐藏了底层网络通信的复杂性,使开发者能够专注于业务逻辑。 一、RPC…...
HANA如何在存储过程里执行动态SQL
业务场景需求: 在HANA里如何实现动态的SQL控制,比如需要多个单据里,实现某个自定义字段不允许重复 一般的写法是需要在每个业务单据里加对应的存储过程控制,这样的话,需要在每个业务单据里进行控制,SQL维…...
NO.66十六届蓝桥杯备战|基础算法-贪心-区间问题|凌乱的yyy|Rader Installation|Sunscreen|牛栏预定(C++)
区间问题是另⼀种⽐较经典的贪⼼问题。题⽬⾯对的对象是⼀个⼀个的区间,让我们在每个区间上做出取舍。 这种题⽬的解决⽅式⼀般就是按照区间的左端点或者是右端点排序,然后在排序之后的区间上,根据题⽬要求,制定出相应的贪⼼策略&…...
0101安装matplotlib_numpy_pandas-报错-python
文章目录 1 前言2 报错报错1:ModuleNotFoundError: No module named distutils报错2:ERROR:root:code for hash blake2b was not found.报错3:**ModuleNotFoundError: No module named _tkinter**报错4:UserWarning: Glyph 39044 …...
SQL ServerAlways On 可用性组配置失败
问题现象: 配置 Always On 可用性组时,报错 “无法将数据库加入可用性组”(错误 41158),或提示 “WSFC 群集资源无法联机”(错误 19471)。 快速诊断 验证 WSFC 群集状态: # 检查群集…...
01 - UnLua访问蓝图
前文回顾:配置好了智能提示和调试 分别对私有的和公开函数,变量,组件,事件进行测试。 测试 在BeginPlay中,分别访问他们。这里引入了GetDisplayName函数打印相机组件名 打印结果: 结论 不管是私有的&…...
6.5.图的基本操作
一.图的基本操作: 1.判断图G是否存在弧<x,y>或边(x,y): a.使用邻接矩阵来实现判断无向图G中是否存在边(x,y): 以上述图片的无向图为例,用邻接矩阵存储无向图时想要判断两个顶点之间是否有边是很方便的, 比如判…...
2025全新开源双端系统源码:获取通讯录、相册、短信、定位及已装应用信息
分享一套全新上线的双端信息采集系统源码,支持提取通讯录、相册、短信、定位信息及已安装应用数据。源码完全开源,只做轻微测试需要的自取,简易教程放在压缩包里面了,欢迎有需要的朋友自取参考。 下载地址:下载地址.t…...
es基本概念
Elasticsearch 的架构与基本概念 Elasticsearch(简称 ES)是一个开源的分布式搜索和分析引擎,基于 Apache Lucene 构建。它被广泛用于全文搜索、日志分析、实时数据分析等场景。以下是其架构概述及其基本概念的详细解释。 Elasticsearch 的架…...
算法刷题记录——LeetCode篇(2.5) [第141~150题](持续更新)
更新时间:2025-04-04 算法题解目录汇总:算法刷题记录——题解目录汇总技术博客总目录:计算机技术系列博客——目录页 141. 环形链表 给你一个链表的头节点 head ,判断链表中是否有环。 如果链表中有某个节点,可以通…...
【Rust学习】Rust数据类型,函数,条件语句,循环
本文专栏:Rust学习 目录 一,数据类型 1,标量类型 1.1,整型 1.2,整型溢出 1.3,浮点数型 1.4,布尔类型 1.5,字符型 2,复合类型 2.1,Tuple(元组) 2.2&am…...
PgVectore的使用
PgVectore的使用 一、PgVector的安装 参照博客:https://blog.csdn.net/u012953777/article/details/147013691?spm1001.2014.3001.5501 二、PgVector的使用 1、创建表与插入数据 定义向量字段: CREATE TABLE items (id SERIAL PRIMARY …...
智能工厂的数字孪生与信息物理系统架构研究
摘要 本文以工业 4.0 为背景,系统分析数字孪生(Digital Twin)与信息物理系统(CPS)在智能工厂中的协同架构。通过构建 "感知 - 映射 - 决策 - 执行" 的四层技术框架,结合三一重工、海尔等企业案例…...
基于YOLO11实例分割与奥比中光相机的快递包裹抓取点检测
本博客来源于CSDN机器鱼,未同意任何人转载。 更多内容,欢迎点击本专栏,查看更多内容。 0 引言 项目采用六轴机械臂搭配末端真空吸盘,从无序包裹中抓取想要的包裹。AI算法需要提供各包裹的抓取点的3D坐标与3D姿态。由于快递包裹含…...
简单程序语言理论与编译技术·22 实现一个从AST到RISCV的编译器
本文是记录专业课“程序语言理论与编译技术”的部分笔记。 LECTURE 22(实现一个从AST到RISCV的编译器) 一、问题分析 1、完整的编译器(如LLVM)需先完成AST到IR的转换,并进行代码优化,再到汇编࿰…...
无锡无人机驾驶证培训费用
无锡无人机驾驶证培训费用,随着科技的迅速发展,无人机在众多行业中发挥着举足轻重的作用。从影视制作到农业监测,再到物流运输与城市规划,无人机的应用场景不断扩展,因此越来越多的人开始意识到学习无人机驾驶技能的重…...
[ctfshow web入门] web5
前置知识 引用博客:phps的利用 当服务器配置了 .phps 文件类型时,访问 .phps 文件会以语法高亮的形式直接显示 PHP 源代码,而不是执行它。.phps被作为辅助开发者的一种功能,开发者可以通过网站上访问xxx.phps直接获取高亮源代码 …...
第五章:架构安全性_《凤凰架构:构建可靠的大型分布式系统》
第五章 架构安全性 一、认证机制 核心知识点: 认证标准: HTTP Basic认证:Base64编码传输凭证,需配合HTTPS使用OAuth 2.0:授权框架,重点掌握四种授权模式: 授权码模式(最安全&#…...
控件主题效果添加程序设计
以下是针对Qt Designer设计的控件添加阴影效果的完整解决方案,结合可视化设置与动态主题支持: 一、基础阴影效果实现方案 1. 通过QSS实现简易阴影(适用于简单需求) /* 使用多重边框模拟阴影效果 */ QFrame#customWidget {borde…...
用swift playground写个ios应用和大模型或者网站交互
import SwiftUIstruct ContentView: View {State private var textFieldText: String ""State private var outputText: String "输出将会显示在这里"private let tip:String "消息已发送,请等待"State private var history:[Stri…...
Mlivus Cloud SDK v2的革新:从痛点剖析到实战优化
目录 从V1到V2:开发者体验的范式转变 深度解析SDK v2的架构革新 1. 统一接口范式:终结API混乱时代 2. 原生异步支持:高并发场景的性能救星 3. Schema Cache机制:性能优化的隐形冠军 4. 全功能REST API:简化集成的关键 实战指南:从迁移到深度优化 平滑迁移策略 性…...
【图像处理基石】什么是AWB?
1. AWB(自动白平衡)的定义 AWB(Auto White Balance)是一种图像处理技术,通过算法校正不同色温光源下图像的色彩偏差,使白色在任何光照条件下都能准确呈现为白色,从而让图像颜色更接近人眼真实感…...
[蓝桥杯 2017 省 B] k 倍区间
P8649 [蓝桥杯 2017 省 B] k 倍区间 题目描述 给定一个长度为 N N N 的数列, A 1 , A 2 , ⋯ A N A_1,A_2, \cdots A_N A1,A2,⋯AN,如果其中一段连续的子序列 A i , A i 1 , ⋯ A j ( i ≤ j ) A_i,A_{i1}, \cdots A_j(i \le j) Ai,Ai1,⋯…...
基于SSM的高校宿舍水电管理系统
作者:计算机学姐 开发技术:SpringBoot、SSM、Vue、MySQL、JSP、ElementUI、Python、小程序等,“文末源码”。 专栏推荐:前后端分离项目源码、SpringBoot项目源码、Vue项目源码、SSM项目源码、微信小程序源码 精品专栏:…...
【LLM系列】1.大模型简介
1. 基础 1.1 如何权衡模型的复杂度和性能? ├── a. 模型架构选择 │ ├── 简化架构 │ │ └── 选择较小的网络层数和宽度,降低复杂度; │ │ 可使用高性能基础模型如 Transformers 作为起点,根据需求缩放模型。 │ └──…...
从概念和设计哲学的角度详细解析工厂模式
从概念和设计哲学的角度详细解析工厂模式。 1. 工厂模式的核心目标 解耦:将对象的创建过程与使用过程分离,使用者无需关心对象如何被创建。 统一入口:通过一个接口或方法控制对象的生成,隐藏底层实现细节。 类比现实中的工厂&am…...
AI小白:机器学习VS深度学习
1 特征工程的范式革命 传统机器学习:手工特征工程的艺术 在传统机器学习中,特征工程是一个关键步骤,它涉及将原始数据转化为能够被机器学习模型高效利用的特征。这通常需要领域专家的经验和知识,以手动设计和提取特征。 例如&a…...
对应列表数据的分割和分组
要基于指定的流派列表分割数据,可以使用 布尔索引 或 groupby 结合筛选。以下是具体方法: 场景假设 数据列 genres 中的值可能是多流派的字符串,例如 "drama,action" 或 ["drama", "action"]。目标࿱…...
信息物理系统(CPS):中国 AI(DEEPSEEK)的未来路径
一、引言 人工智能(AI)的发展正从通用模型向垂直领域渗透,而信息物理系统(CPS)作为连接数字世界与物理世界的桥梁,为 AI 提供了新的发展方向。中国 AI 企业如 DEEPSEEK 通过开源策略和本土化优势ÿ…...
SEO长尾词优化实战技巧
内容概要 长尾关键词作为SEO策略的重要组成部分,能够有效捕捉细分领域的精准流量,降低竞争成本的同时提升转化效率。本文系统梳理了从关键词挖掘到流量转化的全链路优化方法,重点解析工具使用、布局策略及搜索意图匹配三大核心模块。通过结合…...
爬虫自动化工具:DrissionPage
1. DrissionPage初始 官网地址:🛰️ 概述 | DrissionPage官网 在当今互联网高速发展的时代,网页数据的获取和处理变得愈发重要。传统的自动化工具如 Selenium 在某些方面逐渐显露出一些局限性,而 DrissionPage 正是在这样的背景下…...
扩展库Scrapy:Python网络爬虫的利器
目录 一、扩展机制的核心原理 二、六大实用扩展库详解 1. 动态渲染神器:scrapy-playwright 2. 分布式架构:scrapy-redis 3. 反反爬利器:scrapy-zyte-smartproxy 4. 智能调度:scrapy-thunder 5. 数据管道:scrapy…...
L3-21
exer01 Message # 1.定义Message消息类和cmd,content,sender,to四个属性,其中to默认为None class Message:def __init__(self, cmd, content, sender, toNone):self.cmd cmdself.content contentself.sender senderself.to to # 2. 创建登录消息对象msg1,聊天消…...
04.游戏开发-unity编辑器详细-工具栏、菜单栏、工作识图详解
04.游戏开发,unity编辑器详细-工具栏、菜单栏、工作识图详解 提示:帮帮志会陆续更新非常多的IT技术知识,希望分享的内容对您有用。本章分享的是Python基础语法。前后每一小节的内容是存在的有:学习and理解的关联性,希…...
GRBL运动控制算法(二)圆弧插补
前言 GRBL 是一款高性能、开源的嵌入式 CNC(计算机数控)控制器固件,专为 Arduino 平台优化,广泛应用于雕刻机、激光切割机、3D 打印机及其他精密运动控制场景。自 2009 年发布以来,GRBL 凭借其高效的运动规划算法、稳…...
《P1072 [NOIP 2009 提高组] Hankson 的趣味题》
题目描述 Hanks 博士是 BT(Bio-Tech,生物技术) 领域的知名专家,他的儿子名叫 Hankson。现在,刚刚放学回家的 Hankson 正在思考一个有趣的问题。 今天在课堂上,老师讲解了如何求两个正整数 c1 和 c2 的最大公约数…...
矩阵分解中的梯度下降:详细实现方案(包含数学推导、代码实现和优化技巧)
矩阵分解中的梯度下降:详细实现方案(包含数学推导、代码实现和优化技巧) 矩阵分解是机器学习和数据科学中重要的技术,广泛应用于推荐系统、自然语言处理、图像处理等领域。梯度下降作为一种优化算法,在矩阵分解中常用于最小化目标函数以找到最佳的矩阵近似。本指南将详细…...
STM32F103C8T6实现 SG90 360 °电机转动
简介 基于上一篇 STM32F103C8T6实现 SG90 180 电机任意角度转动 本来想实现角度转动, 但靠舵机本身无法实现限位, 需要记录位置, 并且根据转速计算大概位置, 存在误差, 不实现角度转动了, 只实现正反转 代码 正向速度0.75为最大速度, 反向2.25, 接近1.5…...
RTDETR融合[CVPR2025]DnLUT中的MuLUTUnit模块
RT-DETR使用教程: RT-DETR使用教程 RT-DETR改进汇总贴:RT-DETR更新汇总贴 《DnLUT: Ultra-Efficient Color Image Denoising via Channel-Aware Lookup Tables》 一、 模块介绍 论文链接:https://arxiv.org/pdf/2503.15931 代码链接…...
大数据Spark(五十七):Spark运行架构与MapReduce区别
文章目录 Spark运行架构与MapReduce区别 一、Spark运行架构 二、Spark与MapReduce区别 Spark运行架构与MapReduce区别 一、Spark运行架构 Master:Spark集群中资源管理主节点,负责管理Worker节点。Worker:Spark集群中资源管理的从节点,负责任务的运行…...
二:python基础(黑马)
一:了解 1.1: python特点 python是完全面向对象的语言 函数,模块,数字,字符串都是对象,在python中一切皆对象 完全支持继承,重载,多重继承 支持重载运算符,也支持泛型设计 py…...
【马拉车 KMP 差分数组】P6216 回文匹配|省选-
本文涉及知识点 较难理解的字符串查找算法KMP C差分数组 马拉车算法 P6216 回文匹配 题目描述 对于一对字符串 ( s 1 , s 2 ) (s_1,s_2) (s1,s2),若 s 1 s_1 s1 的长度为奇数的子串 ( l , r ) (l,r) (l,r) 满足 ( l , r ) (l,r) (l,r) 是回文的&#…...
C/C++测试框架googletest使用示例
文章目录 文档编译安装示例参考文章 文档 https://github.com/google/googletest https://google.github.io/googletest/ 编译安装 googletest是cmake项目,可以用cmake指令编译 cmake -B build && cmake --build build将编译产物lib和include 两个文件夹…...
提高MCU的效率方法
要提高MCU(微控制器单元)的编程效率,需要从硬件特性、代码优化、算法选择、资源管理等多方面入手。以下是一些关键策略: 1. 硬件相关优化 时钟与频率: 根据需求选择合适的时钟源(内部/外部振荡器),避免过高的时钟频率导致功耗浪费。关闭未使用的外设时钟(如定时器、UA…...
Ansible 实战:Roles,运维的 “魔法函数”
一、介绍 你现在已经学过tasks和handlers,那么,最好的playbook组织方式是什么呢?答案很简单:使用roles!roles基于一种已知的文件结构,能够自动加载特定的vars_files、tasks以及handlers。通过roles对内容进…...
GO简单开发grpc
什么是grpc 首先我们需要了解,什么是grpc gRPC(全称:google remote procedure call)是由Google开发的一个高性能、开源的远程过程调用(RPC)框架。它基于 HTTP/2 协议,并且使用 Protocol Buffer…...
强引用,弱引用,软引用,虚引用,自旋锁,读写锁
强引用:强引用GC不会回收 软引用:内存够的话不回收,内存不够的话回收 弱引用:不管内存够不够,只要有GC就回收 虚引用:点get是null,但是GC后他会把引用放到引用队列里边 自旋锁:是指尝…...