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

【LangChain全栈开发指南】从LLM集成到智能体系统构建

目录

    • 🌟 前言
      • 🏗️ 技术背景与价值
      • 💢 当前技术痛点
      • 🛠️ 解决方案概述
      • 👥 目标读者说明
    • 🔍 一、技术原理剖析
      • 📊 核心概念图解
      • 💡 核心作用讲解
      • 🧩 关键技术模块说明
      • ⚖️ 技术选型对比
    • 🛠️ 二、实战演示
      • ⚙️ 环境配置要求
      • 💻 核心代码实现
        • 案例1:文档问答系统
        • 案例2:SQL智能体
      • ✅ 运行结果验证
    • ⚡ 三、性能对比
      • 📐 测试方法论
      • 📊 量化数据对比
      • 📈 结果分析
    • 🏆 四、最佳实践
      • ✅ 推荐方案
      • ❌ 常见错误
      • 🐞 调试技巧
    • 🚀 五、应用场景扩展
      • 🌍 适用领域
      • 💡 创新应用方向
      • 🔌 生态工具链
    • 🎯 结语
      • ⚠️ 技术局限性
      • 🔮 未来发展趋势
      • 📚 学习资源推荐


🌟 前言

🏗️ 技术背景与价值

LangChain作为大语言模型(LLM)应用开发框架,GitHub星标数已突破6万(2024年数据)。其标准化了LLM应用的开发流程,使开发者效率提升3-5倍,成为AI工程化落地的关键基础设施。

💢 当前技术痛点

  1. 上下文受限:LLM原生窗口长度有限(如GPT-4 Turbo仅128K tokens)
  2. 知识滞后:模型训练数据存在时间差(如ChatGPT-4知识截止2023年)
  3. 复杂逻辑实现困难:多步骤推理需手工编排
  4. 生产部署障碍:缺乏标准化工程范式

🛠️ 解决方案概述

LangChain通过以下机制破局:

  • 组件化设计:模块化链(Chains)、智能体(Agents)、记忆(Memory)
  • 文档增强:RAG(检索增强生成)架构
  • 工具集成:500+内置工具连接器
  • 生产就绪:LangServe部署方案

👥 目标读者说明

  • 🤖 AI应用开发者
  • 🧠 机器学习工程师
  • 📊 数据科学家
  • 🏽 技术决策者

🔍 一、技术原理剖析

📊 核心概念图解

用户输入
文档检索
LLM处理
工具调用
输出生成
记忆存储

💡 核心作用讲解

LangChain如同"AI应用的操作系统":

  1. 信息枢纽:连接LLM与外部数据源(如数据库/API)
  2. 流程编排:将简单任务组合为复杂工作流
  3. 记忆系统:维护对话/任务状态
  4. 安全护栏:通过提示工程控制输出

🧩 关键技术模块说明

模块功能核心类/方法
Models多模型抽象层ChatOpenAI/Anthropic
Prompts提示模板管理ChatPromptTemplate
Chains任务流程编排LLMChain/SequentialChain
Agents动态工具调用initialize_agent
Memory状态持久化ConversationBufferMemory

⚖️ 技术选型对比

特性LangChainLlamaIndexSemantic Kernel
多模型支持⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐
工具生态500+工具100+连接器50+插件
生产部署LangServe有限支持Azure集成
学习曲线中等简单陡峭

🛠️ 二、实战演示

⚙️ 环境配置要求

pip install langchain langchain-openai chromadb tiktoken
export OPENAI_API_KEY="sk-..."

💻 核心代码实现

案例1:文档问答系统
from langchain_community.document_loaders import WebBaseLoader
from langchain_text_splitters import RecursiveCharacterTextSplitter
from langchain_openai import OpenAIEmbeddings
from langchain_chroma import Chroma# 1. 文档加载与处理
loader = WebBaseLoader("https://example.com/ai-policy")
docs = loader.load()
text_splitter = RecursiveCharacterTextSplitter(chunk_size=1000)
splits = text_splitter.split_documents(docs)# 2. 向量存储
vectorstore = Chroma.from_documents(documents=splits,embedding=OpenAIEmbeddings()
)# 3. 检索链构建
retriever = vectorstore.as_retriever()
qa_chain = RetrievalQA.from_chain_type(llm=ChatOpenAI(model="gpt-4"),chain_type="stuff",retriever=retriever
)result = qa_chain.invoke({"query": "AI伦理原则有哪些?"})
print(result["result"])
案例2:SQL智能体
from langchain_community.agent_toolkits import create_sql_agent
from langchain_community.utilities import SQLDatabase# 连接数据库
db = SQLDatabase.from_uri("sqlite:///chinook.db")# 创建智能体
agent = create_sql_agent(llm=ChatOpenAI(temperature=0),toolkit=SQLDatabaseToolkit(db=db),agent_type="openai-tools",verbose=True
)agent.run("销量最高的前5名艺术家是谁?")

✅ 运行结果验证

案例1输出:
该文档提到的AI伦理原则包括:透明度、公平性、隐私保护和人类监督...案例2日志:
> Entering new AgentExecutor chain...
Action: sql_db_query
Action Input: SELECT artists.Name, SUM(invoice_items.Quantity) FROM artists...  
Observation: [(u'Metallica', 827), (u'U2', 819)...]
Thought: 返回销量前5名艺术家
Final Answer: 销量前5的艺术家是:1. Metallica (827)...

⚡ 三、性能对比

📐 测试方法论

  • 测试场景:1000次问答请求
  • 对比方案:原生API调用 vs LangChain优化
  • 测量指标:响应延迟/准确率/成本

📊 量化数据对比

方案平均延迟准确率成本/千次
直接调用GPT-42.3s78%$20
LangChain RAG1.8s92%$15
智能体系统3.5s95%$18

📈 结果分析

  • RAG架构显著提升准确率(+14%)
  • 智能体系统适合复杂查询但延迟较高
  • 综合成本降低25%-40%

🏆 四、最佳实践

✅ 推荐方案

  1. 分块策略优化
text_splitter = RecursiveCharacterTextSplitter(chunk_size=512,chunk_overlap=128,length_function=len,add_start_index=True
)
  1. 混合检索增强
retriever = EnsembleRetriever(retrievers=[vectorstore.as_retriever(search_type="mmr"),bm25_retriever],weights=[0.7, 0.3]
)
  1. 智能体工具设计
@tool
def get_current_weather(location: str):"""查询指定城市天气"""return requests.get(f"https://weatherapi.com/{location}").json()agent = initialize_agent(tools=[get_current_weather],llm=ChatOpenAI(),agent=AgentType.STRUCTURED_CHAT_ZERO_SHOT_REACT_DESCRIPTION
)

❌ 常见错误

  1. 提示注入风险
# 错误:未过滤用户输入
template = "翻译这段话: {user_input}"  # 可能被恶意注入# 正确:添加校验
from langchain_core.prompts import SafeTemplate
template = SafeTemplate("翻译这段话: {user_input}")
  1. 无限递归调用
# 错误:工具间循环调用
@tool
def tool_a(): tool_b()
@tool
def tool_b(): tool_a()

🐞 调试技巧

  1. 开启详细日志:
import langchain
langchain.debug = True
  1. 可视化链结构:
from langchain import visualization
visualization.draw_chain(qa_chain)

🚀 五、应用场景扩展

🌍 适用领域

  • 智能客服(多轮对话管理)
  • 法律文书分析(条款检索)
  • 医疗知识库(诊断辅助)
  • 金融研报生成(数据增强)

💡 创新应用方向

  • 多模态Agent(文本+图像+语音)
  • 自主AI科研助手
  • 实时市场分析机器人

🔌 生态工具链

类型工具
向量数据库Chroma/Pinecone
部署框架LangServe/FastAPI
监控系统LangSmith/Weights&Biases
测试工具Pytest-LangChain

🎯 结语

⚠️ 技术局限性

  • 复杂链的调试困难
  • 实时性要求高的场景延迟明显
  • 工具集成需要额外开发

🔮 未来发展趋势

  1. 可视化编排工具成熟
  2. 与AutoML技术深度整合
  3. 边缘设备部署优化

📚 学习资源推荐

  1. 官方文档:LangChain Docs
  2. 实战课程:《LangChain for LLM Application Development》
  3. 案例库:LangChain Cookbook
  4. 社区:LangChain Discord

挑战任务
使用LangChain构建能同时处理PDF文档查询和实时网络搜索的混合Agent,并在评论区分享你的实现方案!

相关文章:

【LangChain全栈开发指南】从LLM集成到智能体系统构建

目录 🌟 前言🏗️ 技术背景与价值💢 当前技术痛点🛠️ 解决方案概述👥 目标读者说明 🔍 一、技术原理剖析📊 核心概念图解💡 核心作用讲解🧩 关键技术模块说明⚖️ 技术选…...

《内存单位:解锁数字世界的“度量衡”》

🚀个人主页:BabyZZの秘密日记 📖收入专栏:C语言 🌍文章目入 一、基础单位:字节(Byte)二、进阶单位:千字节(KB)、兆字节(MB&#xff09…...

Spring Boot + MyBatis-Plus 高并发读写分离实战

引言 在高并发场景下,单一数据库实例往往成为性能瓶颈。数据库读写分离通过将读操作和写操作分配到不同的数据库实例,有效缓解主库压力,提升系统吞吐量。MyBatis-Plus 作为一款强大的持久层框架,结合 Spring Boot 能够轻松实现读…...

STC32G12K128-旋转编码器-软件去抖

STC32G12K128-旋转编码器-软件去抖 简介代码 简介 EC11旋转编码器是一种可以连续旋转的器件A,B,C为旋转编码引脚,带按键的有D,E引脚。引脚功能: A:编码器A相;B:编码器B相;C:公共端-一般接到GN…...

第J7周:对于ResNeXt-50算法的思考

目录 思考 一、代码功能分析 1. 构建 shortcut 分支(残差连接的旁路) 2. 主路径的第一层卷积(11) 4. 主路径的第三层卷积(11) 5. 残差连接 激活函数 二、问题分析总结:残差结构中通道数不一致的…...

古方焕新潮!李良济盒马联名养生水,以创新赋能中式养生新潮流

今天下午,中华老字号李良济与新零售巨头盒马联名的“五汁饮&暑清元气水”新品发布会,在李良济隆重举行。 新品发布会上,盒马与多家媒体齐聚李良济,通过中医文化体验、新品品鉴、生产全链路探秘、媒体采访等环节,不…...

使用PyTorch训练马里奥强化学习代理的完整指南

以下是使用PyTorch训练马里奥强化学习代理的完整指南,涵盖依赖库配置、环境搭建、核心代码实现及输出结果分析,结合关键优化策略与实战经验。 一、依赖库配置 基础环境安装 # 使用Anaconda创建虚拟环境(推荐) conda create -n m…...

STM32F103RCT6 + MFC实现网口设备搜索、修改IP、固件升级等功能

资源下载链接:https://download.csdn.net/download/qq_35831134/90712875?spm=1001.2014.3001.5501 一.大概逻辑: // 网口搜索大概逻辑: // ************************************************************************** // 一.环境: // 上位机用MFC下位机用STM32F103R…...

ch09 课堂参考代码

ch09 拓扑排序与基环树 拓扑排序 在一些场景中,需要完成一系列事情,这些事情之间有顺序关系或者依赖关系,在做一件事情之前必须先做另一件事,例如课程学习的先后顺序,这类问题可以抽象为图论中的拓扑排序问题。 拓扑…...

Day 15 训练

Day 15 对鸢尾花数据集进行处理,特征可视化,贝叶斯优化随机森林,Shap解释1. 导入必要的库2. 设置中文字体3. 加载数据集4. 查看数据5. 数据准备6. 贝叶斯优化随机森林7. 评估结果8. 绘制箱形图9. 绘制特征相关性热力图10. SHAP模型解释总结 对…...

Path to Integer_ABC402分析与解答

考虑怎么降低复杂度,使用分治策略降低搜索的复杂度。 对于a_i,j,其一定在最后结果数的第(2n-i-j)位(如果将最低位看成第0位),故将a_i,j看成a_i,j * 10^(2n-i-j),这样每次加上a_i,j就可以了。 从(1,1)到(n…...

嵌入式学习笔记 - 关于结构体成员地址对齐问题

一 在没有#pragma pack()这个宏声明的情况下 C语言中结构体成员分配内存大小时需要满足2个条件,这也是内存对齐的原则: ①每个成员变量的起始地址必须为其数据类型所占空间大小的整数倍 ②结构体所占空间总大小为其最大数据类…...

JAVA实战开源项目:健身房管理系统 (Vue+SpringBoot) 附源码

本文项目编号 T 180 ,文末自助获取源码 \color{red}{T180,文末自助获取源码} T180,文末自助获取源码 目录 一、系统介绍二、数据库设计三、配套教程3.1 启动教程3.2 讲解视频3.3 二次开发教程 四、功能截图五、文案资料5.1 选题背景5.2 国内…...

升级element-ui步骤

1 执行 cnpm uninstall element-ui 删除element-ui依赖2 执行 cpm install element-ui -S 安装最新的element-ui,并加入到packjson中3 在element-ui中生成主题,并将主题文件加入到element-ui-theme中。删除所有旧版本到主题文件 *4 修改element-ui-theme…...

Dp通用套路(闫式)

闫式dp分析法: 从集合角度来分析DP问题。 核心思想: DP是一种求有限集中的最值或者个数问题 由于集合中元素的数量都是指数级别的,直接用定义去求,把每种方案都用dfs暴力枚举一遍,时间复杂度很高,此时用…...

如何删除豆包本地大模型

由于无法选择大模型的安装位置,因此会占用C盘大量空间,然后又找到不卸载的地方,经排查豆包大模型安装位为:C:\Users\[当前电脑用户]\AppData\Local\Doubao\User Data,只能进行手动卸载。...

在ISOLAR A/B 工具使用UDS 0x14服务清除单个DTC故障的配置

在ISOLAR A/B 工具使用UDS 0x14服务清除单个DTC故障的配置如下图所示 将DemClearDTCLimitation参数改成DEM_ALL_SUPPORTED_DTCS 此时0x14 服务就可以支持单个DTC的故障清除, 如果配置成 DEM_ONLY_CLEAR_ALL_DTCS 则只能够用0x14服务清楚所有DTC。...

Linux59 SSH配置前瞻 JumpServer双网卡ping通

为什么Ping这个IP地址Ping得通 本地址 [rootlocalhost network-scripts]# cat ifcfg-ens33 iTYPEEthernet BOOTPROTOnone DEFROUTEyes DEVICEens33 ONBOOTno IPADDR192.168.235.4 NETMASK255.255.255.0 GATEWAY192.168.235.2 DNS1114.114.114.114 [rootlocalhost network-scrip…...

TensorFlow中数据集的创建

目录 前言示例示例1示例2示例3示例4 前言 TensorFlow 的 tf.data.Dataset API 提供了一种灵活且高效的方式来加载和预处理数据。它可以轻松处理大规模数据集,并支持多种数据源格式。 所有数据集相关的内容都在tf.data中,from_tensor_slices:…...

OpenHarmony SystemUI开发——实现全局导航栏和状态栏关闭

在实际生产中,进场遇到需要关闭导航栏和状态栏的需求,现分享解决办法: 开发环境 OpenHarmony 5.0.0r 代码分析 思路: launcher本身可以关闭 导航栏(实际是 公共事件,发送消息给systemUI来实控制&#x…...

机器视觉的平板电脑屏幕组件覆膜应用

在现代智能制造业中,平板电脑屏幕组件覆膜工序是确保产品外观和功能完整性的重要环节。随着技术的进步,传统的覆膜方式已经无法满足高速度、高精度的生产需求。而MasterAlign视觉系统的出现,将传统覆膜工艺转变为智能化、自动化的生产流程。在…...

Windows 10 无法启动或黑屏的修复指南(适用于更新失败或磁盘故障)

Windows 10 无法启动或黑屏的修复指南(适用于更新失败或磁盘故障) 当 Windows 10 突然无法启动(黑屏、无限重启、更新失败后断电等情况),很可能是由于启动引导程序损坏或系统映像异常(如系统磁盘出现坏道&…...

AI星智协脑:智能驱动的高效协作管理平台全解读

前言 想象一下:早上刚开电脑,十几条未读消息如机关枪般扫射而来,各路任务像陨石雨一样砸向你,会议排得比热播剧还密集,文档版本堪比宫斗剧剧情反转,同事围着你转圈追KPI,活脱脱一场《职场大逃杀…...

WebSocket:实时通信的新时代

在现代Web应用中,实时通信变得越来越重要。传统的HTTP协议虽然能够满足基本的请求-响应模式,但在需要频繁更新数据的场景下,其效率和性能显得捉襟见肘。WebSocket协议应运而生,它提供了一种在单个TCP连接上进行全双工通信的机制&a…...

NetSuite Saved Search如何在Criteria中利用Expressions处理不同Transaction之间的关系?

最近有几个Saved Search都用到了Criteria中的Use Expressions的参数,具体的场景是我们想要对不同的Transaction Type做出不同条件的限定,这里有两个不同的举例。 1.除了ER类型头和行的内容要根据实际取,其余所有Transaction类型都取头信息&a…...

2025年 全新 AI 编程工具 Cursor 安装使用教程

一、Cursor 软件下载 首选,登录Cursor官网,进行软件下载,官网下载地址如下: Cursor AI IDE 下载 二、Cursor软件安装配置 此处以Windows10系统安装为例,下载完成之后,右键安装包,以管理员身份…...

跨平台编码规范文档

1. 引言 1.1 目的与范围 本编码规范旨在为软件开发团队提供统一的代码编写标准,以提高代码质量、可维护性和团队协作效率。适用于使用C#、Java、安卓和Web前端(HTML/CSS/JavaScript/TypeScript)的项目开发,不针对特定语言特性&a…...

Spring创建的线程池

在自动审核的方法上加上Async注解(标明要异步调用) Async//异步方法调用public void audit(WmNews wmNews) {//这个方法处理时间很长,单体异步思想,线程池}在自媒体引导类中使用EnableAsync注解开启异步调用 SpringBootApplicati…...

【深度学习新浪潮】苹果在显示算法技术上的研发进展调研

苹果的显示算法技术研发呈现三大趋势:AI深度整合(如HDR增强、动态校准)、多模态环境感知(光、温湿度、生物特征)、软硬件协同优化(芯片、传感器、算法深度耦合)。 一、动态刷新率与功耗管理 1. ProMotion技术的算法升级 技术修正: 像素级功耗管理:iPhone 13系列的Pr…...

图像画质算法记录(前言)

一、背景介绍 本篇主要是对图像画质增强相关,进行简单整理和记录。 二、整体流程 整体效果主要受到两部分影响: 1、前端isp处理。 2、后端画质增强。 三、isp常规流程 可以参考:刘斯宁:Understanding ISP Pipeline 四、后端画质…...

uniapp-商城-47-后台 分类数据的生成(通过数据)

在第46章节中,我们为后台数据创建了分类的数据表结构schema,使得可以通过后台添加数据并保存,同时使用云函数进行数据库数据的读取。文章详细介绍了如何通过前端代码实现分类管理功能,包括获取数据、添加、更新和删除分类。主要代…...

阿里云服务器数据库故障排查指南?

阿里云服务器数据库故障排查指南? 以下是针对阿里云服务器(如ECS自建数据库或阿里云RDS等托管数据库)的故障排查指南,涵盖常见问题的定位与解决方案: 一、数据库连接失败 检查网络连通性 ECS自建数据库 确认安全组规则放行数据库…...

服务器不备案有影响吗

在当今数字化的时代,服务器成为了众多企业和个人开展业务、展示自我的重要工具。然而,有一个问题常常被忽视,那就是服务器不备案到底有没有影响? 答案是肯定的!服务器不备案,影响可不小。据相关数据显示&a…...

LVGL9保姆级教程(源码获取)

文章目录 🌟 LVGL 9 源码获取全流程指南📥 获取 LVGL 9 源码✅ 官方 GitHub 仓库下载📌 下载步骤: 🛠️ 获取 LVGL Code::Blocks 工程源码下载步骤有两种方式:🚀 方法一:通过 README…...

【react组件】矩形框选小组件,鼠标左键选中 div,键盘 ESC 清空

在线预览 GitHub demo import React, { useState } from react; import Chooser from rc-chooser;const containerStyle: React.CSSProperties {display: flex,alignItems: center,justifyContent: center,flexWrap: wrap, };const boxStyle: React.CSSProperties {width:…...

数据结构5.0

大家好,今天是队列的知识哦~ 目录 一、概念 1.0单链表 2.0双链表 3.0数组 二、队列的方法 1.0 offer方法 2.0 poll方法 3.0 peek方法 4.0 isEmpty方法 三、队列的题目 1.0 用队列实现栈 2.0 用栈实现队列 3.0 设计循环队列 一、概念 数组 、单链表和双…...

Python字典:数据操作的核心容器

在Python编程生态中,字典(dict)是最常用且功能强大的内置数据结构之一。它以键值对(Key-Value Pair)的形式存储数据,为快速查找、灵活映射关系提供了天然支持。无论是数据清洗、算法实现还是Web开发&#x…...

Midjourney-V7:支持参考图片头像或背景生成新保真图

Midjourney-V7重磅升级Omni Reference:全能图像参考神器!再也不用担心生成图片货不对版了! 就在上周,Midjourney发版它最新的V7版本:Omini Reference,提供了全方位图像参考功能,它可以参考你提…...

【MySQL数据库】--SQLyog创建数据库+python连接

目录 1.连接本地数据库 2.创建数据库和表 3.使用 python读取数据 1.连接本地数据库 进入SQLyog 2.创建数据库和表 创建数据库gyp_test: CREATE DATABASE gyp_test CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci; 创建表student_grade: CREATE TABLE …...

深入解析:思维链模型在大语言模型中的应用与实践

在人工智能领域,大语言模型的发展正以前所未有的速度改变着我们的生活和工作方式。从早期的文本生成到如今的复杂推理,模型的能力不断进化。而其中,思维链(Chain-of-Thought, CoT)技术的出现,更是为大模型的…...

服务器多客户端连接核心要点(1)

刷题 服务器多客户端连接核心要点 多进程服务器 实现原理 fork子进程:每次accept新客户端后,调用fork创建子进程。独立处理:子进程负责与客户端通信(如read/write),父进程继续监听新连接。 特点 隔离性…...

SIGIR 2025端到端生成式推荐ETEGRec

文章目录 1. 背景2. 方法2.1 框架图2.2 问题定义2.3 Item Tokenizer2.4 Generative Recommender2.5 ⭐️Sequence-Item Alignment2.6 ⭐️Preference-Semantic Alignment2.7 交替优化 3. 总结 现阶段 GRM 大多是两阶段的模型,第一阶段进行内容理解-行为语义对齐&…...

rust 中的 EBNF 介绍

在 rust 参考手册中,有大量类似: 句法 MacroInvocation :SimplePath ! DelimTokenTreeDelimTokenTree :( TokenTree* )| [ TokenTree* ]| { TokenTree* }TokenTree :Token排除 定界符(delimiters) | DelimTokenTreeMacroInvocationSemi :SimplePath ! (…...

解决 Redis 缓存与数据库一致性问题的技术指南

Redis 缓存与数据库一致性是分布式系统中常见的挑战,尤其在高并发场景下(如电商、用户管理、对账系统)。Redis 作为高性能缓存,常用于加速数据访问,但其与数据库(如 MySQL)之间的数据同步可能因…...

LlamaIndex 第六篇 SimpleDirectoryReader

SimpleDirectoryReader 是将本地文件数据加载到 LlamaIndex 的最简单方式。虽然在实际生产场景中,您更可能需要使用 LlamaHub 提供的多种数据读取器(Reader),但 SimpleDirectoryReader 无疑是快速入门的理想选择。 支持的文件类型…...

window 显示驱动开发-配置内存段类型

视频内存管理器(VidMm)和显示硬件仅支持某些类型的内存段。 因此,内核模式显示微型端口驱动程序(KMD)只能配置这些类型的段。 KMD 可以配置内存空间段和光圈空间段,其中不同: 内存空间段由保存…...

【人工智能学习之动作识别TSM训练与部署】

【人工智能学习之动作识别TSM训练与部署】 基于MMAction2动作识别项目的开发一、MMAction2的安装二、数据集制作三、模型训练1. 配置文件准备2. 关键参数修改3. 启动训练4. 启动成功 ONNX模型部署方案一、环境准备二、执行转换命令 基于MMAction2动作识别项目的开发 一、MMAct…...

PostgreSQL冻结过程

1.冻结过程 冻结过程有两种模式,依特定条件而择其一执行。为方便起见,将这两种模式分别称为惰性模式(lazy mode)和迫切模式(eager mode)。 并发清理(Concurrent VACUUM)通常在内部…...

SSHv2公钥认证示例-Paramiko复用 Transport 连接

在 Paramiko 中复用 Transport 连接时,若要通过 公钥认证(而非密码)建立连接,需手动加载私钥并与 Transport 关联。以下是详细操作步骤及完整代码示例: 步骤 1:加载私钥文件 使用 RSAKey 或 Ed25519Key 类…...

华为5.7机考-最小代价相遇的路径规划Java题解

题目内容 输入描述 输出描述 示例: 输入: 2 1 2 2 1 输出: 3 思路: Dijkstra 算法实现 dijkstra(int sx, int sy, int[][] dirs) 方法: 参数:起点坐标 (sx, sy) 和允许的移动方向 初始化&#xff1…...