LangChain-提示模板 (Prompt Templates)
提示模板是LangChain的核心组件,用于构建发送给语言模型的输入。本文档详细介绍了提示模板的类型、功能和最佳实践。
概述
提示工程是使用大型语言模型的关键技术。通过精心设计的提示,可以显著提高模型的输出质量和相关性。LangChain的提示模板系统提供了:
- 标准化的提示构建方式:统一接口创建各种提示
- 变量插值:动态构建包含用户输入的提示
- 复用和组合:模块化提示设计和共享
- 特定任务优化:针对不同场景的专用模板
提示模板类型
1. 字符串提示模板 (StringPromptTemplate)
最基本的提示模板类型,适用于文本补全模型(LLM):
from langchain_core.prompts import PromptTemplate# 基本字符串模板
prompt = PromptTemplate(template="请为一家{industry}公司起一个名字。",input_variables=["industry"]
)# 格式化模板
formatted_prompt = prompt.format(industry="人工智能")
print(formatted_prompt) # 输出: 请为一家人工智能公司起一个名字。
2. 聊天提示模板 (ChatPromptTemplate)
为聊天模型设计的提示模板,支持多种消息类型:
from langchain_core.prompts import ChatPromptTemplate, MessagesPlaceholder
from langchain_core.messages import SystemMessage, HumanMessage# 基本聊天模板
system_message = "你是一位{role}专家,擅长回答{domain}领域的问题。"
human_message = "{question}"chat_prompt = ChatPromptTemplate.from_messages([("system", system_message),("human", human_message)
])# 格式化聊天模板
formatted_messages = chat_prompt.format_messages(role="医疗健康",domain="营养学",question="每天应该摄入多少蛋白质?"
)# 输出结构化的消息列表:
# [SystemMessage(content="你是一位医疗健康专家,擅长回答营养学领域的问题。"),
# HumanMessage(content="每天应该摄入多少蛋白质?")]
3. 多样化提示模板
FewShotPromptTemplate - 用于少样本学习:
from langchain_core.prompts import FewShotPromptTemplate, PromptTemplate# 定义示例
examples = [{"input": "今天天气很好", "output": "The weather is nice today"},{"input": "我喜欢编程", "output": "I enjoy programming"},{"input": "人工智能很有趣", "output": "Artificial intelligence is interesting"}
]# 创建示例模板
example_template = PromptTemplate(input_variables=["input", "output"],template="输入: {input}\n输出: {output}"
)# 创建少样本模板
few_shot_prompt = FewShotPromptTemplate(examples=examples,example_prompt=example_template,prefix="请将以下中文翻译成英文:\n\n",suffix="输入: {input}\n输出:",input_variables=["input"],example_separator="\n\n"
)# 格式化模板
translate_prompt = few_shot_prompt.format(input="机器学习是人工智能的一个子领域")
PromptTemplate与函数集成 - 调用自定义函数处理输入:
from langchain_core.prompts import PromptTemplate
from datetime import datetimedef get_current_date():return datetime.now().strftime("%Y-%m-%d")# 在格式化时调用函数
date_prompt = PromptTemplate(template="今天是{current_date},请为我生成一个当天的新闻摘要。",input_variables=[],partial_variables={"current_date": get_current_date}
)formatted_date_prompt = date_prompt.format()
高级技巧
1. 组合提示模板
将多个提示模板组合成一个复杂模板:
from langchain_core.prompts import PipelinePromptTemplate# 创建初始格式化模板
full_template = """你是一位{role}。{format_instructions}{query}"""full_prompt = PromptTemplate(template=full_template,input_variables=["role", "format_instructions", "query"]
)# 创建用于格式说明的子模板
format_instructions_template = """请用以下格式回答:
{format}"""format_instructions_prompt = PromptTemplate(template=format_instructions_template,input_variables=["format"]
)# 创建管道提示模板
pipeline_prompt = PipelinePromptTemplate(final_prompt=full_prompt,pipeline_prompts=[("format_instructions", format_instructions_prompt)]
)# 格式化管道模板
formatted_pipeline_prompt = pipeline_prompt.format(role="数据分析师",format="1. 数据概述\n2. 关键趋势\n3. 建议行动",query="分析近期股市波动情况"
)
2. 条件提示模板
基于条件生成不同提示:
from langchain_core.prompts import ConditionalPromptSelector, PromptTemplate, ChatPromptTemplate
from langchain_openai import ChatOpenAI, OpenAI# 为不同模型创建不同提示
llm_prompt = PromptTemplate(template="请回答: {question}",input_variables=["question"]
)chat_prompt = ChatPromptTemplate.from_messages([("system", "你是一位有帮助的AI助手。"),("human", "{question}")
])# 创建条件选择器
def is_chat_model(llm):return isinstance(llm, ChatOpenAI)prompt_selector = ConditionalPromptSelector(default_prompt=llm_prompt,conditionals=[(is_chat_model, chat_prompt)]
)# 根据模型自动选择合适的提示
text_model = OpenAI()
chat_model = ChatOpenAI()text_prompt = prompt_selector.get_prompt(text_model)
chat_prompt = prompt_selector.get_prompt(chat_model)
3. 结构化输出提示
创建用于结构化输出的提示模板:
from langchain_core.output_parsers import PydanticOutputParser
from langchain_core.pydantic_v1 import BaseModel, Field, validator# 定义输出结构
class MovieReview(BaseModel):movie_title: str = Field(description="电影标题")year: int = Field(description="上映年份")genre: str = Field(description="电影类型")rating: float = Field(description="评分(1-10分)")review: str = Field(description="简短评价")@validator("rating")def rating_must_be_valid(cls, v):if v < 1 or v > 10:raise ValueError("评分必须在1到10之间")return v# 创建解析器和提示模板
parser = PydanticOutputParser(pydantic_object=MovieReview)prompt = PromptTemplate(template="写一篇关于{movie_name}的电影评论。\n{format_instructions}",input_variables=["movie_name"],partial_variables={"format_instructions": parser.get_format_instructions()}
)# 格式化提示
formatted_prompt = prompt.format(movie_name="流浪地球")
4. 提示模板版本控制和复用
管理和复用提示模板:
from langchain_core.prompts import load_prompt, save_prompt# 保存提示模板
save_prompt(prompt, "./prompts/movie_review_prompt.json")# 加载提示模板
loaded_prompt = load_prompt("./prompts/movie_review_prompt.json")
提示模板最佳实践
1. 任务指令清晰化
提供明确的任务描述和期望输出:
system_template = """你是一位专业的文本总结专家。你的任务是:
1. 阅读提供的内容
2. 提取关键信息
3. 用简洁的语言总结
4. 保持客观,不添加没有在原文中的信息
5. 总结长度控制在100-150字之间"""summarization_prompt = ChatPromptTemplate.from_messages([("system", system_template),("human", "请总结以下内容:\n{text}")
])
2. 角色设定和情景化
通过角色设定增强模型表现:
role_prompt = ChatPromptTemplate.from_messages([("system", "你是一位经验丰富的{profession},擅长{skills}。你的沟通风格是{style}。"),("human", "{question}")
])scientist_prompt = role_prompt.format_messages(profession="生物学家",skills="分子生物学和进化论",style="专业、准确、易于理解",question="请解释DNA复制过程"
)
3. 使用示例和Few-Shot提示
通过示例引导模型输出:
few_shot_template = """你需要将产品评论情感分类为积极、中立或消极。评论: 这个产品质量很好,价格也合理。
情感: 积极评论: 产品外观一般,没有特别出色的地方。
情感: 中立评论: 收到的产品有破损,而且客服态度很差。
情感: 消极评论: {review}
情感:"""few_shot_prompt = PromptTemplate(template=few_shot_template,input_variables=["review"]
)
4. 分解复杂任务
将复杂任务分解为简单步骤:
step_by_step_template = """请逐步思考以下问题:{question}请按照以下步骤进行:
1. 明确问题需要什么信息
2. 列出解决问题所需的关键事实
3. 使用这些事实进行推理
4. 得出结论一步一步地展示你的思考过程:"""step_by_step_prompt = PromptTemplate(template=step_by_step_template,input_variables=["question"]
)
5. 结合结构化输出和验证
要求模型输出特定格式并进行验证:
from langchain_core.prompts.prompt import PromptTemplate
from langchain_core.output_parsers import XMLOutputParser# XML结构化输出
xml_parser = XMLOutputParser()xml_template = """请分析以下文本的情感,并以XML格式返回结果。文本:{text}请使用以下XML格式:
<result><sentiment>积极/中立/消极</sentiment><confidence>0到1之间的数字</confidence><explanation>分析原因的简短解释</explanation>
</result>你的回答(仅包含XML):"""xml_prompt = PromptTemplate(template=xml_template,input_variables=["text"]
)
提示模板类型参考
文本提示模板
- PromptTemplate: 基本字符串模板
- FewShotPromptTemplate: 少样本学习模板
- PipelinePromptTemplate: 通过子模板构建复杂提示
聊天提示模板
- ChatPromptTemplate: 消息列表格式的模板
- MessagesPlaceholder: 在聊天中插入消息列表
- HumanMessagePromptTemplate: 人类消息模板
- AIMessagePromptTemplate: AI消息模板
- SystemMessagePromptTemplate: 系统消息模板
特殊提示模板
- StringPromptTemplate: 所有文本提示模板的基类
- BasePromptTemplate: 所有提示模板的抽象基类
- ImagePromptTemplate: 用于多模态输入的模板
- PromptSelector/ConditionalPromptSelector: 条件选择提示模板
提示模板与其他组件集成
与语言模型集成
from langchain_core.prompts import ChatPromptTemplate
from langchain_openai import ChatOpenAI
from langchain_core.output_parsers import StrOutputParserprompt = ChatPromptTemplate.from_messages([("system", "你是一位简洁的AI助手。"),("human", "{question}")
])
model = ChatOpenAI()
output_parser = StrOutputParser()chain = prompt | model | output_parser
response = chain.invoke({"question": "什么是机器学习?"})
与记忆组件集成
from langchain_core.prompts import ChatPromptTemplate, MessagesPlaceholder
from langchain_community.memory import ConversationBufferMemory# 创建带记忆的提示模板
memory = ConversationBufferMemory(return_messages=True, memory_key="history")
memory_prompt = ChatPromptTemplate.from_messages([("system", "你是一位友好的AI助手。"),MessagesPlaceholder(variable_name="history"),("human", "{input}")
])# 第一轮对话
memory.chat_memory.add_user_message("你好!")
memory.chat_memory.add_ai_message("你好!有什么可以帮助你的吗?")# 第二轮对话,使用历史记录
messages = memory_prompt.format_messages(history=memory.load_memory_variables({})["history"],input="告诉我我们之前聊了什么?"
)
与检索系统集成
from langchain_core.prompts import ChatPromptTemplate# 创建RAG提示模板
retrieval_template = """根据以下上下文回答问题。上下文:
{context}问题:{question}如果上下文中没有足够信息,就说你不知道。"""retrieval_prompt = ChatPromptTemplate.from_template(retrieval_template)# 使用检索结果格式化提示
def format_docs(docs):return "\n\n".join([d.page_content for d in docs])retriever_result = retriever.get_relevant_documents("什么是向量数据库?")
context = format_docs(retriever_result)messages = retrieval_prompt.format_messages(context=context,question="什么是向量数据库?"
)
总结
提示模板是LangChain中至关重要的组件,它们将用户输入、系统指令和上下文信息转换为结构化的提示,以获得更好的模型输出。掌握提示模板的设计和使用技巧,是有效使用大型语言模型的关键。
通过本文档,您应该了解了:
- 不同类型的提示模板及其适用场景
- 如何创建和格式化基本提示
- 高级提示技术,如条件提示、少样本学习等
- 提示模板的最佳实践和设计原则
- 如何将提示模板与其他LangChain组件集成
正确使用提示模板可以显著提升模型输出的质量和相关性,使您的LangChain应用更加强大和可靠。
后续学习
- 模型输入输出 - 深入了解语言模型
- 输出解析器 - 学习如何处理模型输出
- 链 - 将提示模板集成到复杂工作流中
相关文章:
LangChain-提示模板 (Prompt Templates)
提示模板是LangChain的核心组件,用于构建发送给语言模型的输入。本文档详细介绍了提示模板的类型、功能和最佳实践。 概述 提示工程是使用大型语言模型的关键技术。通过精心设计的提示,可以显著提高模型的输出质量和相关性。LangChain的提示模板系统提…...
多线程中的互斥与同步
多线程中的互斥与同步 1. 互斥与同步的区别 互斥:确保某一资源在同一时刻只能被一个线程访问。其主要目的是保证资源的唯一性和排他性,但无法控制访问的顺序。同步:在互斥的基础上,进一步通过其他机制保证访问资源的有序性。 2…...
ValueError: Cannot handle batch sizes > 1 if no padding token is defined`
ValueError: Cannot handle batch sizes > 1 if no padding token is defined` batch sizes > 1 进行掩码填充:pad_token,eos_token 在处理自然语言处理任务时,尤其是在使用批量数据进行训练或推理时,经常需要对输入文本进行填充(padding),以确保每个输入序列具…...
Gemma 3模型:Google 开源新星,大语言模型未来探索
🐇明明跟你说过:个人主页 🏅个人专栏:《深度探秘:AI界的007》 🏅 🔖行路有良友,便是天堂🔖 目录 一、引言 1、快速发展的AI世界:为何关注Gemma 3&#x…...
先占个日常,等会写。
引入一个重要的概念 “struct” (译为中文:结构体) 可用作设出比较复杂的一些变量类型 语法 :struct point name { int x; int y; int z;} point 和 name是任意命名的名字,含义是,声明一个变量类型为st…...
PyTorch Tensor维度变换实战:view/squeeze/expand/repeat全解析
本文从图像数据处理、模型输入适配等实际场景出发,系统讲解PyTorch中view、squeeze、expand和repeat四大维度变换方法。通过代码演示对比不同方法的适用性,助您掌握数据维度调整的核心技巧。 一、基础维度操作方法 1. view:内存连续的形状重…...
212、【图论】字符串接龙(Python)
题目描述 题目链接:110. 字符串接龙 代码实现 import collectionsn int(input()) beginStr, endStr input().split() strList [input() for _ in range(n)]deque collections.deque() # 使用队列遍历结点 deque.append([beginStr, 1]) # 存储当前字符串和遍…...
土堆教程笔记【PyTorch】
官网:torch — PyTorch 2.6 documentation Pycharm 解释器 一般搞深度学习都用虚拟环境的解释器,为了满足不同的项目所需要的不同的包的版本。 1. system interpreter表示本地的解释器 也就是你电脑系统里安装的解释器 2. Virtual Environment—Py…...
【今日三题】小乐乐改数字 (模拟) / 十字爆破 (预处理+模拟) / 比那名居的桃子 (滑窗 / 前缀和)
⭐️个人主页:小羊 ⭐️所属专栏:每日两三题 很荣幸您能阅读我的文章,诚请评论指点,欢迎欢迎 ~ 目录 小乐乐改数字 (模拟)十字爆破 (预处理模拟)比那名居的桃子 (滑窗 / 前缀和) 小乐乐改数字 (模拟) 小乐乐改数字…...
各类神经网络学习:(九)注意力机制(第1/4集),背景介绍,以及理解与引入
上一篇下一篇GRU(下集)注意力机制(第2/4集) Attention(注意力机制) 又叫做: attention pooling 简单来说,就是在训练的过程中,已知哪些东西更重要,哪些东西次重要。从而更…...
微软出品的AI Toolkit,在VS Code中使用DeepSeek
文章目录 简介调用DeepSeek 简介 AI Toolkit是微软出品的VS Code智能插件,整合了多种AI大模型,使之可以在VS Code中调用。 在插件栏搜索【AI Toolkit for Visual Studio Code】即可安装。安装完成后,左侧活动栏中会出现【AI Toolkit】的图标…...
随机森林与决策树
随机森林 vs 决策树: 随机森林(Random Forest)和决策树(Decision Tree)都是经典的机器学习算法,但它们在原理、性能和适用场景上有显著差异。以下是关键对比: 1. 决策树(Decision T…...
Selenium中`driver.get(htmlfile)`方法可能出现的超时问题
针对Selenium中driver.get(htmlfile)方法可能出现的超时问题,以下是几种改进方案及具体实现方法: 1. 设置页面加载超时时间 通过set_page_load_timeout()方法直接控制页面加载的最大等待时间。若超时,会抛出TimeoutException异常,…...
selenium快速入门
一、操作浏览器 from selenium import webdriver from selenium.webdriver.chrome.options import Options from selenium.webdriver.chrome.service import Service from selenium.webdriver.common.by import By# 设置选项 q1 Options() q1.add_argument("--no-sandbo…...
C++_智能指针
目录 一、智能指针的使用场景、基本概念 (1)因为抛异常而出现的资源泄漏的情况 二、RAII和智能指针的设计思路 三、c标准库智能指针以及使用 (1)几种智能指针的概念 auto_ptr unique_ptr shared_ptr weak_ptr 不是new出来…...
微服务简述
单体架构和微服务架构的区别? 最显著的区别看上去就是单体架构用的同一个数据库,微服务架构用的各自的数据库 单体架构: 所有功能模块(如用户管理、订单处理、支付等)都紧密耦合在一个代码库中。模块之间通过函数调用…...
研发效能实践:BDD(行为驱动开发)深度解毒手册:从「撕逼大会」到「人见人爱」的协作秘笈
引言:每个研发团队都该养一亩「黄瓜田」——论BDD如何终结「三体人」式需求沟通 🌌 「产品说登录要人脸识别,开发做成了指纹验证,测试按文档测出18个bug,最后发现原型图藏在三年前的邮件附件里…」家人们…...
【第40节】windows编程:仿造MFC版本QQ安全卫士
目录 前言 一、实现功能 二、附加功能 三、开发环境 四、数据库简单字段设计 五、代码架构 六、软件界面 七、功能架构 八、部分功能截图 九、相关实现细节概要 9.1 获取文件信息 9.2 清理电脑垃圾信息 9.2.1 回收站 9.2.2 清理指定数据下的文件 9.3 数据库与网…...
BOE(京东方)旗下控股子公司“京东方能源”成功挂牌新三板 以科技赋能零碳未来
2025年4月8日,BOE(京东方)旗下控股子公司京东方能源科技股份有限公司(以下简称“京东方能源”)正式通过全国中小企业股份转让系统审核,成功在新三板挂牌(证券简称:能源科技,证券代码:874526),成为BOE(京东方)自物联网转型以来首个独立孵化并成功挂牌的子公司。此次挂牌是BOE(京…...
【汽车产品开发项目管理——端到端的汽车产品诞生流程】
MPU:集成运算器、寄存器和控制器的中央处理器芯片 MCU:微控制单元,将中央处理器CPU、存储器ROM/RAM、计数器、IO接口及多种外设模块集成在单一芯片上的微型计算机系统。 汽车产品开发项目属性:临时性、独特性、渐进明细性、以目标…...
Visual Studio 2019 配置VTK9.3.1
文章目录 参考博客1、 VTK下载和编译2、vs2019配置vtk9.3.1参考博客 Visual Studio 2022 配置VTK9.3.0 1、 VTK下载和编译 见博客 CMake编译VTK 2、vs2019配置vtk9.3.1 新建一个项目 写入以下代码 #include <vtkActor.h> #include <vtkAssembly.h> #include…...
【含文档+PPT+源码】基于小程序的智能停车管理系统设计与开发
项目视频介绍: 毕业作品基于小程序的智能停车管理系统设计与开发 课程简介: 本课程演示的是一款基于小程序的智能停车管理系统设计与开发,主要针对计算机相关专业的正在做毕设的学生与需要项目实战练习的 Java 学习者。 1.包含:…...
科技自立+产业周期:透视人工智能的配置机遇
最近,全球市场因关税政策调整引发震荡,科技板块波动尤为明显。在此背景下,中国人工智能产业经历了一轮回调。 不过,《一点财经》注意到,4月9日上证科创板人工智能指数一度上涨3.7%。拉长周期看,Wind数据显…...
linux网络配置
今天我们来了解一下linux的网络配置,这个是我们进行网络传输的基础,保证网络资源的使用的手段.那么来看. 网络配置原理图: 查看网络ip和网关 windows:ipconfig linux:ifconfig ping测试主机之间网络联通性 ⭐️ip地址要在同一个网段下才…...
机器学习 | 强化学习方法分类汇总 | 概念向
文章目录 📚Model-Free RL vs Model-Based RL🐇核心定义🐇核心区别 📚Policy-Based RL vs Value-Based RL🐇核心定义🐇 核心区别 📚Monte-Carlo update vs Temporal-Difference update…...
git仓库迁移包括提交记录日志
网上找了很多资料都不好用,直到看到一个亲测有效后,整理如下: 1、进入仓库目录下,并且切换到要迁移的分支上 前提是你本地已有旧仓库的代码;如果没有的话,先拉取。 2、更改仓库地址 git remote set-url …...
Docker部署.NetCore8项目
在VS.net新建.netCore8项目,生成项目的发布文件,之后添加Dockerfile,内容如下: FROM mcr.microsoft.com/dotnet/aspnet:8.0 # 设置工作目录 WORKDIR /app # 挂载临时卷(类似于 VOLUME /tmp) VOLUME /tmp …...
xv6部分源码阅读-1
xv6部分源码阅读 前言 在lab2中,我们会为了完成attack这个实验,而花费大量的时间去阅读相关的系统调用源码,以此来分析出我们最终secret所在的页表的位置,而我写lab2中,重点并没有关注其中的逻辑关系,有很…...
CentOS中离线安装DockerCompos并用其部署Rabbitmq(使用离线导入导出docker镜像方式)
场景 DockerDockerCompose实现部署jenkins,并实现jenkinsfile打包SpringBootVue流水线项目过程详解、踩坑记录(附镜像资源、离线包资源下载): DockerDockerCompose实现部署jenkins,并实现jenkinsfile打包SpringBootVue流水线项目过程详解、踩坑记录(附镜像资源、离…...
基于 OpenHarmony 5.0 的星闪轻量型设备应用开发——Ch2 OpenHarmony LiteOS-M 内核应用开发
写在前面: 此篇是系列文章《基于 OpenHarmony5.0 的星闪轻量型设备应用开发》的第 2 章。本篇介绍了如何在 OpenHarmony 5.0 框架下,针对 WS63 进行 LiteOS-M 内核应用工程的开发。 为了方便读者学习,需要OpenHarmony 5.0 WS63 SDK 的小伙伴可…...
2025年4月9日-华为暑期实习-第二题-200分
📌 点击直达笔试专栏 👉《大厂笔试突围》 💻 春秋招笔试突围在线OJ 👉 笔试突围OJ 02. 智能导航系统 问题描述 K小姐生活在一个被称为"未来之城"的智能城市,这个城市拥有高效的无人驾驶运输网络。城市内的智能车辆可以在不同的交通枢纽之间穿行,每个枢…...
抖音视频下载工具
抖音视频下载工具 功能介绍 这是一个基于Python开发的抖音视频下载工具,可以方便地下载抖音平台上的视频内容。 主要特点 支持无水印视频下载自动提取视频标题作为文件名显示下载进度条支持自动重试机制支持调试模式 使用要求 Python 3.10Chrome浏览器必要的P…...
基于大模型预测儿童急性淋巴细胞白血病诱导达完全缓解患者综合治疗方案研究报告
目录 一、引言 1.1 研究背景与意义 1.2 研究目的 1.3 国内外研究现状 二、儿童急性淋巴细胞白血病及大模型相关理论基础 2.1 儿童急性淋巴细胞白血病概述 2.2 大模型技术原理及特点 三、大模型在术前评估中的应用 3.1 患者基本信息与病情数据收集 3.2 大模型对病情严…...
项目合同从专家到小白
文章目录 按项目范围划分项目总承包合同项目单项承包合同项目分包合同 按项目付款方式划分总价合同固定总价合同总价加激励费用合同(FPIF)总价加经济价格调整合同订购单 \ 单边合同 成本补偿合同工料合同(混合型) 基础概念目标成本…...
【windows10】基于SSH反向隧道公网ip端口实现远程桌面
【windows10】基于SSH反向隧道公网ip端口实现远程桌面 1.背景2.SSH反向隧道3.远程连接电脑 1.背景 Windows 10远程桌面协议的简称是RDP(Remote Desktop Protocol)。 RDP是一种网络协议,允许用户远程访问和操作另一台计算机。 远程桌面功…...
学习海康VisionMaster之四边形查找
一:进一步学习了 今天学习下VisionMaster中的四边形查找,这个还是拟合直线的衍生应用,可以同时测量四条直线并且输出交点或者判定是否有交点 二:开始学习 1:什么是四边形查找? 按照传统的算法,…...
菊风RTC 2.0 开发者文档正式发布,解锁音视频新体验!
重磅发布! 开发者们,菊风实时音视频2.0文档已正式发布上线,为您提供更清晰、更高效的开发支持!让菊风实时音视频2.0为您的音视频应用加速~ 菊风实时音视频2.0聚焦性能升级、体验升级、录制服务升级,助力视频通话、语…...
用Python和OpenCV开启图像处理魔法之旅
你是否曾好奇计算机是如何“看懂”这个世界的?从人脸识别到自动驾驶,计算机视觉技术正日益渗透到我们的生活中。而 OpenCV (Open Source Computer Vision Library),作为一个强大的开源计算机视觉库,正是我们探索这个奇妙世界的强大…...
初识MySQL · 复合查询(内外连接)
目录 前言: 基本查询回顾 笛卡尔积和子查询 笛卡尔积 内外连接 子查询 单行子查询 多行子查询 多列子查询 from中使用子查询 合并查询 前言: 在前文我们学习了MySQL的基本查询,就是简单的套用了select语句,最多不过是…...
Devops系列之对接Gerrit的设计与实现(三)-- Java编程实现
一、背景 上文讲述了如何使用shell命令实现创建gerrit项目,本文介绍如何使用java语言编程实现。 二、java语言实现 1、引入jar包 <dependency><groupId>com.urswolfer.gerrit.client.rest</groupId><artifactId>gerrit-rest-java-client…...
深入理解全排列算法:DFS与回溯的完美结合
全排列问题是算法中的经典问题,其目标是将一组数字的所有可能排列组合列举出来。本文将详细解析如何通过深度优先搜索(DFS)和回溯法高效生成全排列,并通过模拟递归过程帮助读者彻底掌握其核心思想。 问题描述 给定一个正整数 n&a…...
服务器(一种管理计算资源的计算机)
服务器是在网络环境中提供计算能力并运行软件应用程序的特定IT设备,它在网络中为其他客户机(如个人计算机、智能手机、ATM机等终端设备)提供计算或者应用服务, 一般来说服务器都具备承担响应服务请求、承担服务、保障服务的能力。服务器相比普…...
时态--02--一般过去时
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 一般过去时1.肯定句am/is — wasare — were 2.否定句3.⼀般疑问句4.特殊疑问句5.there be 过去式 practice过去分词 一般过去时 1.肯定句 am/is — was are — wer…...
WSA(Windows Subsystem for Android)安装LSPosed和应用教程
windows安卓子系统WSA的Lsposed和shamiko的安装教程 WSA(Windows Subsystem for Android)安装LSPosed和应用教程 一、环境准备 在开始之前,请确保: 已经安装好WSA(Windows Subsystem for Android)已经安装好ADB工具下载好LSPosed和Shamiko框架安装包 二、连接WSA 首先需要…...
Opencv计算机视觉编程攻略-第十三节 跟踪视频中的物品
这是opencv系列的最后一节,主要学习视频序列,上一节介绍了读取、处理和存储视频的工具,本文将介绍几种跟踪图像序列中运动物体的算法。可见运动或表观运动,是物体以不同的速度在不同的方向上移动,或者是因为相机在移动…...
10 个最新 CSS 功能已在所有主流浏览器中得到支持
前言 CSS 不断发展,新功能使我们的工作更快、更简洁、更强大。得益于最新的浏览器改进(Baseline 2024),许多新功能现在可在所有主要引擎上使用。以下是您可以立即开始使用的10 CSS新功能。 1. Scrollbar-Gutter 和 Scrollbar-Co…...
[特殊字符] 企业级Docker私有仓库实战:3步搭建Harbor安全仓库,镜像管理从此高效无忧
本文提供 一站式Docker私有仓库部署指南,聚焦企业级镜像管理需求,深入解析Harbor私有仓库的搭建、运维与安全加固全流程。内容涵盖 轻量级Registry快速部署与 Harbor企业级方案对比,手把手演示SSL证书配置、多租户权限控制、镜像漏洞扫描等核…...
一个基于Django的进销存管理系统Demo实现
第一步:创建 Django 项目 bash 复制 django-admin startproject inventory_system cd inventory_system python manage.py startapp erp 第二步:定义数据模型(models.py) python 复制 from django.db import models from d…...
wsl2+ubuntu22.04安装blender教程(详细教程)
本章教程介绍,如何在Windows操作系统上通过wsl2+ubuntu安装blender并运行教程。Blender 是一款免费、开源的 3D 创作套件,广泛应用于建模、动画、渲染、视频编辑、特效制作等领域。它由全球开发者社区共同维护,支持跨平台(Windows、macOS、Linux),功能强大且完全…...
netty中的ChannelPipeline详解
Netty中的ChannelPipeline是事件处理链的核心组件,负责将多个ChannelHandler组织成有序的责任链,实现网络事件(如数据读写、连接状态变化)的动态编排和传播。以下从核心机制、执行逻辑到应用场景进行详细解析: 1. 核心结构与组成 双向链表结构 组成单元:ChannelPipeline…...