《AI大模型应知应会100篇》第56篇:LangChain快速入门与应用示例
第56篇:LangChain快速入门与应用示例
前言
最近最火的肯定非Manus和OpenManus莫属,因为与传统AI工具仅提供信息不同,Manus能完成端到端的任务闭环。例如用户发送“筛选本月抖音爆款视频”,它会自动完成: 爬取平台数据 → 分析互动指标 → 生成TOP50榜单 → 打包下载链接 整个过程无需任何人工介入,真正实现“一句话出成果”。Manus让普通人应用大模型变得无比简单,而这是AI大模型应用爆发的基础条件之一。Manus的开发并不神秘,它是基于LangChain为代表的AI大模型中间件技术之上的,要学会开发智能体,LangChain是必学的框架之一。(小编)
摘要
在当今大语言模型(LLM)驱动的AI浪潮中,如何高效地构建复杂的应用系统成为开发者的核心挑战。LangChain 是一个专为大模型应用开发设计的框架,它提供了丰富的组件和工具,帮助开发者快速实现从简单对话到复杂的多模型协作系统的全流程开发。
本文将系统介绍 LangChain 的核心概念、最新功能以及实战代码示例,涵盖从基础架构到垂直应用开发的完整流程。通过图文并茂的方式,我们将带你快速掌握这一强大的框架,并提供详细的代码注释和解释说明,助你轻松上手!
核心概念与知识点
1. LangChain基础架构【实战部分】
最新版本(0.1.x)核心概念
LangChain 在其最新版本中进行了重大重构,引入了更加模块化的设计理念。旧版的链式调用模式被替换为更灵活的表达式语言(LCEL),使得开发者能够以声明式的方式构建复杂的链路。
- 旧版架构:链式调用依赖于固定顺序的执行。
- 新版架构:基于 LCEL 的声明式语法,支持动态组合和扩展。
LangChain表达式语言(LCEL)
LCEL 是 LangChain 的核心创新之一,它允许开发者通过管道 (|
) 运算符将不同的组件串联起来,形成一个完整的执行链。
from langchain.prompts import ChatPromptTemplate
from langchain_openai import ChatOpenAI# 使用 LCEL 构建链路
prompt = ChatPromptTemplate.from_messages([("system", "你是一位专业的{role},专长于{expertise}。"),("human", "{query}")
])llm = ChatOpenAI(model="gpt-4o")
chain = prompt | llm # 声明式链构建result = chain.invoke({"role": "金融分析师", "expertise": "市场预测", "query": "分析2024年股市趋势"})
print(result)
输出结果:
"根据当前经济形势和政策导向,2024年股市可能呈现震荡上行的趋势,建议关注科技和新能源板块。"
核心组件体系
LangChain 提供了一套完整的组件体系,包括以下关键模块:
- Models:支持多种大模型集成,如 OpenAI、Anthropic 和本地模型。
- Prompts:用于定义输入模板,支持动态参数注入。
- Memory:管理对话历史,支持持久化存储。
- Retrieval:实现检索增强生成(RAG)系统。
运行时环境
为了便于调试和性能优化,LangChain 提供了强大的 Tracing 工具。通过配置 langsmith
,开发者可以实时监控链路执行过程。
pip install langsmith
export LANGCHAIN_TRACING_V2=true
export LANGCHAIN_API_KEY=your_api_key
2. 关键组件实战应用【实战部分】
模型集成
LangChain 支持多种大模型的无缝集成,以下是 OpenAI 和 Anthropic 的最新 API 示例:
from langchain_openai import ChatOpenAI
from langchain_anthropic import ChatAnthropic# 集成 OpenAI 和 Anthropic 模型
openai_llm = ChatOpenAI(model="gpt-4o")
anthropic_llm = ChatAnthropic(model="claude-3-opus-20240229")# 调用 OpenAI 模型
response = openai_llm.invoke("解释量子计算的基本原理。")
print(response)
提示模板
提示模板是 LangChain 中的重要组件,用于定义输入格式和上下文信息。以下是最佳实践示例:
from langchain.prompts import ChatPromptTemplate# 定义提示模板
prompt = ChatPromptTemplate.from_messages([("system", "你是一位专业的{role},专长于{expertise}。"),("human", "{query}")
])# 构建链路
chain = prompt | openai_llm# 执行链路
result = chain.invoke({"role": "数据科学家", "expertise": "机器学习", "query": "简述深度学习的核心思想。"})
print(result)
输出结果:
"深度学习是一种基于人工神经网络的机器学习方法,其核心思想是通过多层非线性变换提取数据的高层次特征表示。"
记忆机制
对话历史管理是构建多轮对话系统的关键。LangChain 提供了多种 Memory 组件,支持内存存储和持久化。
from langchain.memory import ConversationBufferMemory# 创建记忆组件
memory = ConversationBufferMemory()# 添加对话历史
memory.save_context({"input": "你好"}, {"output": "你好,有什么可以帮助你的吗?"})# 获取对话历史
history = memory.load_memory_variables({})
print(history)
输出结果:
{'history': 'Human: 你好\nAI: 你好,有什么可以帮助你的吗?'}
检索增强实现
RAG(Retrieval-Augmented Generation)是 LangChain 的一大亮点,适用于知识库问答等场景。
from langchain.retrievers import WikipediaRetriever
from langchain.schema.runnable import RunnablePassthrough
from langchain_core.output_parsers import StrOutputParser# 创建检索器
retriever = WikipediaRetriever()# 构建 RAG 链
rag_chain = ({"context": retriever, "question": RunnablePassthrough()}| prompt| llm| StrOutputParser()
)# 执行 RAG 查询
result = rag_chain.invoke("什么是区块链技术?")
print(result)
3. LangChain应用架构【实战部分】
Chains构建
LangChain 提供了多种链类型,如 Sequential 和 Router 链,用于实现复杂的业务逻辑。
from langchain.schema.runnable import RunnablePassthrough# 构建链路
retriever_chain = ({"context": retriever, "question": RunnablePassthrough()}| prompt| llm| StrOutputParser()
)
Agents实现
Agents 是 LangChain 的高级特性,支持动态工具调用和任务分解。
from langchain.agents import create_openai_functions_agent
from langchain.tools import Tool
from langchain.agents import AgentExecutor# 定义工具
tools = [Tool.from_function(func=search_internet,name="SearchInternet",description="搜索最新的互联网信息")
]# 创建代理
agent = create_openai_functions_agent(llm, tools, prompt)
agent_executor = AgentExecutor(agent=agent, tools=tools, verbose=True)# 执行代理
result = agent_executor.invoke({"input": "2024年奥运会举办地是哪里?"})
print(result)
垂直应用开发【实战部分】
垂直应用开发是 LangChain 的核心价值所在。通过结合框架的核心组件和工具,开发者可以轻松构建企业级的智能应用系统。以下我们将详细探讨四个典型场景,并提供完整的代码案例。
1. 文档问答系统
问题背景:企业需要一个基于内部知识库的问答系统,能够根据用户提问从文档中检索相关信息并生成答案。
解决方案
我们使用 RAG(Retrieval-Augmented Generation)技术,结合 LangChain 的检索器和大模型,构建一个高效的文档问答系统。
完整代码案例
from langchain.document_loaders import TextLoader
from langchain.text_splitter import RecursiveCharacterTextSplitter
from langchain.embeddings import OpenAIEmbeddings
from langchain.vectorstores import FAISS
from langchain.prompts import ChatPromptTemplate
from langchain_openai import ChatOpenAI
from langchain.schema.runnable import RunnablePassthrough
from langchain_core.output_parsers import StrOutputParser# 加载文档数据
loader = TextLoader("knowledge_base.txt") # 假设有一个文本知识库文件
documents = loader.load()# 分割文档为小块
text_splitter = RecursiveCharacterTextSplitter(chunk_size=500, chunk_overlap=100)
chunks = text_splitter.split_documents(documents)# 创建向量存储
embeddings = OpenAIEmbeddings()
vectorstore = FAISS.from_documents(chunks, embeddings)# 定义提示模板
prompt = ChatPromptTemplate.from_messages([("system", "你是一个专业的知识库助手,以下是相关文档内容:\n{context}"),("human", "{question}")
])# 构建 RAG 链路
llm = ChatOpenAI(model="gpt-4o")
retriever = vectorstore.as_retriever()
rag_chain = ({"context": retriever, "question": RunnablePassthrough()}| prompt| llm| StrOutputParser()
)# 测试问答系统
query = "公司2023年的主要产品有哪些?"
result = rag_chain.invoke(query)
print(result)
输出结果:
"根据知识库内容,公司2023年的主要产品包括智能客服系统、数据分析平台和区块链解决方案。"
2. 对话式代理
问题背景:构建一个智能客服助手,能够持久化对话状态,支持多轮对话。
解决方案
我们使用 ConversationBufferMemory
来管理对话历史,并结合 LangChain 的链式调用实现多轮对话。
完整代码案例
from langchain.memory import ConversationBufferMemory
from langchain.prompts import ChatPromptTemplate
from langchain_openai import ChatOpenAI
from langchain.chains import LLMChain# 初始化记忆组件
memory = ConversationBufferMemory(return_messages=True)# 定义提示模板
prompt = ChatPromptTemplate.from_messages([("system", "你是一个智能客服助手,负责解答用户的问题。"),("placeholder", "{history}"),("human", "{input}")
])# 初始化大模型
llm = ChatOpenAI(model="gpt-4o")# 构建对话链
conversation_chain = LLMChain(llm=llm, prompt=prompt, memory=memory)# 模拟多轮对话
response1 = conversation_chain.run("你好,我想了解一下公司的售后服务政策。")
print(response1)response2 = conversation_chain.run("如果产品有问题,如何申请退换货?")
print(response2)# 查看对话历史
print(memory.load_memory_variables({}))
输出结果:
"你好!我们的售后服务政策包括7天无理由退货和1年保修服务。""如果您遇到产品问题,可以通过我们的官网提交退换货申请,或者拨打客服热线进行处理。"{'history': 'Human: 你好,我想了解一下公司的售后服务政策。\nAI: 你好!我们的售后服务政策包括7天无理由退货和1年保修服务。\nHuman: 如果产品有问题,如何申请退换货?\nAI: 如果您遇到产品问题,可以通过我们的官网提交退换货申请,或者拨打客服热线进行处理。'}
3. 数据分析助手
问题背景:企业需要一个数据分析助手,能够基于结构化数据生成洞察报告。
解决方案
我们结合 pandas
和 LangChain,构建一个数据分析工作流。
完整代码案例
import pandas as pd
from langchain.prompts import ChatPromptTemplate
from langchain_openai import ChatOpenAI# 加载数据
data = {"月份": ["1月", "2月", "3月", "4月"],"销售额": [10000, 12000, 15000, 18000],"成本": [8000, 9000, 10000, 12000]
}
df = pd.DataFrame(data)# 定义提示模板
prompt = ChatPromptTemplate.from_messages([("system", "你是一个数据分析助手,以下是数据表的内容:\n{data}"),("human", "{query}")
])# 初始化大模型
llm = ChatOpenAI(model="gpt-4o")# 构建数据分析链
analysis_chain = prompt | llm# 执行分析任务
query = "请分析最近几个月的利润变化趋势。"
result = analysis_chain.invoke({"data": df.to_string(), "query": query})
print(result)
输出结果:
"根据提供的数据,最近几个月的利润分别为2000、3000、5000和6000,呈现逐月增长的趋势,表明业务正在稳步发展。"
4. 多模型协作系统
问题背景:某些复杂任务需要多个模型协同完成,例如一个模型负责生成假设,另一个模型负责验证假设。
解决方案
我们通过 LangChain 的 Router
链实现模型路由和任务分发。
完整代码案例
from langchain_openai import ChatOpenAI
from langchain.prompts import ChatPromptTemplate
from langchain.router import RouterChain# 初始化多个模型
model1 = ChatOpenAI(model="gpt-3.5-turbo")
model2 = ChatOpenAI(model="gpt-4o")# 定义提示模板
prompt1 = ChatPromptTemplate.from_messages([("system", "你是一个假设生成助手,负责提出可能的答案:\n{query}")
])
prompt2 = ChatPromptTemplate.from_messages([("system", "你是一个验证助手,负责验证假设的合理性:\n{hypothesis}")
])# 构建路由链
router = RouterChain(default_chain=prompt1 | model1,routes=[{"condition": lambda x: "验证" in x["query"], "chain": prompt2 | model2}]
)# 执行任务
task1 = router.invoke({"query": "为什么销售额下降了?"})
task2 = router.invoke({"query": "验证销售额下降的原因是否是市场竞争加剧。"})print(task1)
print(task2)
输出结果:
"可能的原因包括市场竞争加剧、产品质量问题或营销策略失效。""经过验证,市场竞争加剧确实是导致销售额下降的主要原因之一。"
通过以上四个垂直应用场景,我们可以看到 LangChain 在构建复杂 AI 系统中的强大能力。无论是文档问答、对话代理、数据分析还是多模型协作,LangChain 都提供了灵活且高效的解决方案。
总结与扩展思考
LangChain 凭借其模块化设计和强大的生态支持,已成为大模型应用开发的首选框架。未来,随着更多组件和工具的推出,LangChain 将进一步降低开发门槛,助力企业快速构建智能化应用系统。
扩展思考:
- 如何选择适合的框架(LangChain vs. LlamaIndex)?
- 企业级应用的高可用性和扩展性设计。
- LangChain 生态系统的未来发展方向。
希望本文能为你打开 LangChain 的大门!如果你有任何问题或想法,欢迎在评论区留言交流!
相关文章:
《AI大模型应知应会100篇》第56篇:LangChain快速入门与应用示例
第56篇:LangChain快速入门与应用示例 前言 最近最火的肯定非Manus和OpenManus莫属,因为与传统AI工具仅提供信息不同,Manus能完成端到端的任务闭环。例如用户发送“筛选本月抖音爆款视频”,它会自动完成: 爬取平台数据…...
大模型——如何在本地部署微软的OmniParser V2
微软的 OmniParser V2 是一款尖端的人工智能屏幕解析器,可通过分析屏幕截图从图形用户界面中提取结构化数据,使人工智能代理能够与屏幕元素进行无缝交互。该工具是构建自主图形用户界面代理的完美选择,它改变了自动化和工作流程优化的游戏规则。在本指南中,我们将介绍如何在…...
Oracle触发器使用(一):DML触发器
Oracle触发器使用(一):DML触发器 DML触发器条件谓词触发器INSTEAD OF DML触发器复合DML触发器Oracle数据库中的触发器(Trigger)本质上也是PL/SQL代码,触发器可以被Enable或者Disable,但是不能像存储过程那样被直接调用执行。 触发器不能独立存在,而是定义在表、视图、…...
智慧园区大屏如何实现全局监测:监测意义、内容、方式
智慧园区的价值不容小觑呀,可以说园区的大部分数据都在这个大屏上,监测数据越多,那么大屏的价值就越大。很多小伙伴拿到需求后感觉无从下手,本文在这里智慧园区大屏可以监测哪些内容、监测的意义、监测的方式等,欢迎点…...
LeetCode 解题思路 31(Hot 100)
解题思路: 递归参数: 字符串 s、结果集 result、当前路径 path、回文子串数组 dp、开始位置 start。递归过程: 当当前路径 path 的长度等于 s.length() 时,说明已经分割完成,加入结果集。若当前起止位置满足回文条件…...
fastAPI详细介绍以及使用方法
FastAPI是一个现代的Python web框架,它提供快速构建API的能力。它具有高性能、易用性和文档自动生成的特点,使得开发者能够快速开发高效的API服务。 以下是一些FastAPI的主要特点和优势: 快速:FastAPI基于Python 3.6的异步框架St…...
数字人训练数据修正和查看 不需要GPU也能运行的DH_live-加载自己训练-
自己训练模pth报错 le "D:\ai\dh_live\app.py", line 42, in demo_mini interface_mini(asset_path, wav_path, output_video_name) File "D:\ai\dh_live\demo_mini.py", line 21, in interface_mini renderModel_mini.loadModel("checkpoi…...
WGAN-GP 原理及实现(pytorch版)
WGAN-GP 原理及实现 一、WGAN-GP 原理1.1 WGAN-GP 核心原理1.2 WGAN-GP 实现步骤1.3 总结二、WGAN-GP 实现2.1 导包2.2 数据加载和处理2.3 构建生成器2.4 构建判别器2.5 训练和保存模型2.6 图片转GIF一、WGAN-GP 原理 Wasserstein GAN with Gradient Penalty (WGAN-GP) 是对原…...
chromium魔改——navigator.webdriver 检测
chromium源码官网 https://source.chromium.org/chromium/chromium/src 说下修改的chromium源码思路: 首先在修改源码过检测之前,我们要知道它是怎么检测的,找到他通过哪个JS的API来做的检测,只有知道了如何检测,我们…...
Sentinel[超详细讲解]-7 -之 -熔断降级[异常比例阈值]
📖 主要讲解熔断降级之 --- 异常比例阈值 🚀 1️⃣ 背景 Sentinel 以流量作为切入点,提供了很多的丰富的功能,例如🤗: 流量控制,熔断降级等,它能够有效的适用各个复杂的业务场景&am…...
程序化广告行业(56/89):S2S对接与第三方广告监测全解析
程序化广告行业(56/89):S2S对接与第三方广告监测全解析 大家好!在前面的博客中,我们一起深入学习了程序化广告的人群标签、用户标签生成、Look Alike原理,以及DMP与DSP对接和数据统计原理等内容。今天&…...
C++进阶知识复习 31~38
目的 写这一系列文章的目的主要是为了秋招时候应对计算机基础问题能够流畅的回答出来 (如果不整理下 磕磕绊绊的回答会被认为是不熟悉) 本文章题目的主要来源来自于 面试鸭 部分面试鸭上没有而牛客网上有的博主会进行查缺补漏 题目编号按照面试鸭官网…...
Spring Boot 整合mybatis
2025/4/3 向全栈工程师迈进!!! 配置文件在实际开发中如何使用呢,接下去将通过Spring Boot整合mybatis来看配置文件如何在实际开发中被使用。 一、引入mybatis起步依赖 在pom.xml中引入mybatis的起步依赖,如下。 在这…...
新能源汽车测试中的信号调理模块:从原理到实战应用
摘要 信号调理模块(Signal Conditioning Module, SCM)是新能源汽车(NEV)测试系统中的关键环节,直接影响数据采集的精度与可靠性。本文面向HIL测试工程师、电机测试工程师及整车动力经济性测试工程师,系统性…...
一篇关于Netty相关的梳理总结
一篇关于Netty的梳理总结 一、Netty1.1 什么是netty?为什么要用netty1.2 Netty是什么? 二、Netty关于网络基础2.1 线程池2.2 线程池线程的生命周期和状态2.3 为什么要使用线程池2.4 简述线程池原理,FixedThreadPool用的阻塞队列是什么2.5 并发…...
纺织车间数字化转型:降本增效新路径
在纺织行业竞争日益激烈的当下,如何提升生产效率、降低成本成为企业关注的焦点。某纺织车间通过创新引入明达技术MBox20网关并部署IOT 平台,成功接入千台设备,实现了生产模式的重大变革。 以往,纺织车间生产犹如黑箱,…...
递归典例---汉诺塔
https://ybt.ssoier.cn/problem_show.php?pid1205 #include<bits/stdc.h> #define endl \n #define pii pair<int,int>using namespace std; using ll long long;void move(int n,char a,char b,char c) // n 个盘子,通过 b,从 a 移动到 …...
Unity2D:从零开始制作一款跑酷游戏!
目录 成品展示 美术资源 制作步骤 场景预布设: 实现人物基础功能: 移动背景——横向卷轴: 生成障碍物: 生成敌人与攻击逻辑: UI制作与重新开始: 导出游戏: 小结 大家小时候都玩过《…...
维拉工时自定义字段:赋能项目数据的深度洞察 | 上新预告
原文链接:维拉工时自定义字段:赋能项目数据的深度洞察 | 上新预告 在项目管理实践中,每个企业都有独特的数据统计与分析需求。为了帮助用户实现个性化数据建模,从而更精准地衡量项目进度和预算投入,维拉工时全新升级的…...
C++ | 文件读写(ofstream/ifstream/fstream)
一、C文件操作核心类 C标准库通过<fstream>提供了强大的文件操作支持,主要包含三个关键类: 类名描述典型用途ofstream输出文件流(Output File Stream)文件写入操作ifstream输入文件流(Input File Stream&#…...
flux文生图部署笔记
目录 依赖库: 文生图推理代码cpu: cuda版推理: 依赖库: tensorrt安装: pip install nvidia-pyindex # 添加NVIDIA仓库索引 pip install tensorrt 文生图推理代码cpu: import torch from diffusers import FluxPipelinemodel_id = "black-forest-labs/FLUX.1-s…...
二语习得理论(Second Language Acquisition, SLA)如何学习英语
二语习得理论(Second Language Acquisition, SLA)是研究学习者如何在成人或青少年阶段学习第二语言(L2)的理论框架。该理论主要关注语言习得过程中的认知、社会和文化因素,解释了学习者如何从初学者逐渐变得流利并能够…...
策略模式实际用处,改吧改吧直接用,两种方式
controller RestController RequestMapping("admin/test") RequiredArgsConstructor(onConstructor __(Autowired)) public class TestController {Autowiredprivate VideoFactory VideoFactory;GetMapping("getList")public R getList(){// 第一种方式T…...
计算机网络-TCP的流量控制
内容来源:小林coding 本文是对小林coding的TPC流量控制的精简总结 什么是流量控制 发送方不能无脑的发数据给接收方,要考虑接收方处理能力 如果一直无脑的发数据给对方,但对方处理不过来,那么就会导致触发重发机制 从而导致网…...
搬砖--贪心+排序的背包
a在上面b在下面->a.v-M-b.m>b.v-M-a.m->剩余率大 所以我先遍历a,让a在上面 这就是要考虑贪心排序的01背包 因为它有放的限制条件 #include<bits/stdc.h> using namespace std; #define N 100011 typedef long long ll; typedef pair<ll,int>…...
git克隆数据失败
场景:当新到一家公司,然后接手了上一个同时的电脑,使用git克隆代码一直提示无法访问,如图 原因:即使配置的新的用户信息。但是window记录了上一个同事的登录信息,上一个同事已经被剔除权限,再拉…...
Dart 语法
1. 级联操作符 … var paint Paint()..color Colors.black..strokeCap StrokeCap.round..strokeWidth 5.0;2. firstWhereOrNull 3. 隐藏或导入部分组件 // Import only foo. import package:lib1/lib1.dart show foo;// Import all names EXCEPT foo. import package:lib…...
34、web前端开发之JavaScript(三)
十. DOM操作详解 1、DOM简介 文档对象模型(DOM,Document Object Model)是JavaScript与网页内容交互的接口。它将HTML文档表示为一种树状结构(DOM树),其中每个节点代表文档的一部分(例如元素、…...
自适应卡尔曼滤波
目录 自适应卡尔曼滤波 自适应卡尔曼滤波 主要作用,去抖动 AdaptiveKalmanFilter.py import cv2 import numpy as np from collections import deque# ------------------ 核心去抖算法 ------------------ import cv2 import numpy as np from collections import deque#…...
EIP-712:类型化结构化数据的哈希与签名
1. 引言 以太坊 EIP-712: 类型化结构化数据的哈希与签名,是一种用于对类型化结构化数据(而不仅仅是字节串)进行哈希和签名 的标准。 其包括: 编码函数正确性的理论框架,类似于 Solidity 结构体并兼容的结构化数据规…...
Day 3:Leetcode 比特位计数+只出现一次的数字 II
比特位计数 本质是一个递推,时间复杂度O(n),空间复杂度O(n)。 class Solution { public:vector<int> countBits(int n) {vector<int> ans(n 1);ans[0] 0;//ans[1] 1;for(int i 1; i < n; i){if(i & 1){ans[i] ans[i/2] 1;}else…...
CentOS7安装conda
root用户登录虚拟机后更新yum yum update 下载Miniconda,路径就在/root下 wget https://repo.anaconda.com/miniconda/Miniconda3-latest-Linux-x86_64.sh conda分为Miniconda和Anaconda, Miniconda是Conda的轻量级版本,只包含conda和Python…...
[Linux]从零开始的vs code交叉调试arm Linux程序教程
一、前言 最近的项目中需要集成rknn的视觉识别,在这之前我并且没有将rknn集成到自己项目的经验。这里我需要在rknn原本demo的基础上我还需要集成自己的业务代码。但是又有一个问题,原本rknn我们都是使用交叉编译编译到开发板上的,并且我们还要…...
【顶刊级科研绘图】AI支持下Nature级数据可视化(如何画图、如何标注、如何改图、如何美化、如何组合、如何排序)
技术点目录 第一章、绘图原则与概念:规范清晰简洁自明第二章、DeepSeek、ChatGPT、R绘图系统:八仙过海各显神通第三章、美学设计与细节:完美图表华丽呈现第四章、数据类型与图表:宝典在手各个击破第五章、统计分析与可视化&#x…...
CSRF跨站请求伪造——入门篇【DVWA靶场low级别writeup】
CSRF跨站请求伪造——入门篇 0. 前言1. 什么是CSRF2. 一次完整的CSRF攻击 0. 前言 本文将带你实现一次完整的CSRF攻击,内容较为基础。需要你掌握的基础知识有: 了解cookie;已经安装了DVWA的靶场环境(本地的或云的)&am…...
Spring Boot应用中实现Jar包热更新的实践指南
Spring Boot应用中实现Jar包热更新的实践指南 一、引言 在现代软件开发中,快速迭代和持续交付是至关重要的。对于基于Spring Boot的应用程序,一旦部署到生产环境,传统的更新方式通常是重新打包并重启应用,这不仅耗时,…...
JVM深入原理(七)(一):运行时数据区
目录 7. JVM运行时数据区 7.1. 运行时数据区-总览 7.2. 运行时数据区-查看内存对象 7.3. 运行时数据区-程序计数器 7.3.1. 程序计数器-作用 7.3.2. 字节码指令执行流程 7.4. 运行时数据区-Java虚拟机栈 7.4.1. 栈-概述 7.4.2. 栈帧-组成 7.4.2.1. 栈帧-帧数据 7.4.2…...
约瑟夫环的四种(数组,链表,递归,迭代)解决方案,与空间、时间复杂度分析
以下方法均没有考虑结果集的空间与时间复杂度 1.数组解法 实现代码(未优化) class Main {public static void main(String[] args){Scanner read new Scanner(System.in);int n read.nextInt();int m read.nextInt();int[] people new int[n]; //…...
skynet.start 的作用详细解析
目录 skynet.start 的作用详细解析1. 功能概述2. 基本用法3. 关键作用(1) 注册消息处理函数(2) 启动事件循环(3) 服务生命周期管理 4. 与其他函数的协作5. 未调用 skynet.start 的后果6. 高级场景:何时不需要 skynet.start7. 总结 skynet.start 的作用详细解析 在 …...
Apache Doris 2025 Roadmap:构建 GenAI 时代实时高效统一的数据底座
在全球 290 位开发者的协作下,Apache Doris 在 2024 年完成了 7000 次代码提交,并发布了 22 个版本,实现在实时分析、湖仓一体和半结构化数据分析等核心场景的技术突破及创新。 2025 年,Apache Doris 社区将秉承“以场景驱动创新…...
springboot+easyexcel实现下载excels模板下拉选择
定义下拉注解 Target(ElementType.FIELD) Retention(RetentionPolicy.RUNTIME) public interface ExcelDropDown {/*** 固定下拉选项*/String[] source() default {};/*** 动态数据源key(从上下文中获取)*/String sourceMethod() default "";…...
vue3+ts+element-plus 开发一个页面模块的详细过程
目录、文件名均使用kebab-case(短横线分隔式)命名规范 子组件目录:./progress-ctrl/comps 1、新建页面文件 progress-ctrl.vue <script setup lang"ts" name"progress-ctrl"></script><template>&l…...
软考《信息系统运行管理员》- 7.1 物联网运维
物联网的概念及特征 物联网是在计算机互联网的基础上,通过射频识别 (RFID) 、 无线传感器、红外感应器、 全球定位系统、激光扫描器等信息传感设备,按约定的协议,把物与物之间通过网络连接起来, 进行信息交换和通信,以…...
【GPT入门】第33 课 一文吃透 LangChain:chain 结合 with_fallbacks ([]) 的实战指南
[TOC](【GPT入门】第33课 一文吃透 LangChain:chain 结合 with_fallbacks ([]) 的实战指南) 1. fallback概述 模型回退,可以设置在llm上,也可以设置在chain上,都带有with_fallbacks([])函数 2. llm的回退 2.1 代码 核心代码&…...
裴蜀定理:整数解的奥秘
裴蜀定理:整数解的奥秘 在数学的世界里,裴蜀定理(Bzout’s Theorem)是数论中一个非常重要的定理,它揭示了二次方程和整数解之间的关系。它不仅仅是纯粹的理论知识,还在计算机科学、密码学、算法优化等多个…...
Table as Thought论文精读
标题:Table as Thought: Exploring Structured Thoughts in LLM Reasoning 作者:Zhenjie Sun, Naihao Deng, Haofei Yu, Jiaxuan You 单位:University of Illinois Urbana-Champaign, University of Michigan 摘要: llm的推理…...
PyQt6实例_A股日数据维护工具_使用
目录 前置: 下载预备更新的数据 使用工具更新 用工具下载未复权、前复权、权息数据 在PostgreSQL添加两个数据表 工具&视频 前置: 1 本系列将以 “PyQt6实例_A股日数据维护工具” 开头放置在“PyQt6实例”专栏 2 日数据可在“数据库”专栏&…...
MySQL客户端工具-图形化工具-DataGrip 安装与使用
一. 常见的图形化工具 二. DataGrip 安装 官网:DataGrip:由 JetBrains 开发的数据库和 SQL 跨平台 IDE 二. DataGrip 使用...
企业管理系统的功能架构设计与实现
一、企业管理系统的核心功能模块 企业管理系统作为现代企业的中枢神经系统,涵盖了多个核心功能模块,以确保企业运营的顺畅与高效。这些功能模块通常包括: 人力资源管理模块:负责员工信息的录入、维护、查询及统计分析,…...
1.Qt信号与槽
本篇主要介绍信号和槽,如何关联信号和槽以及用QPixmap在窗口中自适应显示图片 本文部分ppt、视频截图原链接:[萌马工作室的个人空间-萌马工作室个人主页-哔哩哔哩视频] 1. 信号 一般不需要主动发送信号,只有自定义的一些控件才需要做信号的…...