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

Langchain的学习(一)

目录一,实操编码RunnableRunnable 是什么核心方法(所有 Runnable 都有)最关键能力:用 | 组合(LCEL)常用内置 Runnable总结二,聊天模型-核心能力定义模型init_chat_model本地部署调用工具定义工具-Toolversion1schema:version2(基于Pydantic)version3(基于Annotated)定义工具-StructredToolversion1version2(基于Pydantic)version3(基于response_format)核心概念整理总结绑定工具选择工具调用工具langchain提供的工具TavilySearch结构化返回PydanticTypedDictJson Schema选择结构使用场景作为信息提取器使用少样本提示来增强信息提取能力(后文再介绍)与工具结合使用流式传输stream()-同步传输astream()-异步传输进程、线程、协程的区别异步协程版本核心概念什么时候用协程?自定义输出格式深度流式输出的探索SSE协议Langchain流式传输流程分析一,实操编码依赖安装-见见猪跑pip install langchain-openai langchain-core -i https://pypi.tuna.tsinghua.edu.cn/simplefrom langchain_core.messages import HumanMessage, SystemMessage from langchain_core.output_parsers import StrOutputParser from langchain_openai import ChatOpenAI # 初始化 DeepSeek 模型(兼容 OpenAI 接口) model = ChatOpenAI( model="deepseek-chat", api_key="你的DeepSeek密钥", #可定义为系统环境变量 base_url="https://api.deepseek.com/v1", temperature=0.0 #精确度 ) # model = ChatOpenAI( # model="deepseek-chat", # base_url="https://api.deepseek.com/v1", #) # 构造系统提示 + 用户消息 messages = [ SystemMessage(content="你的任务是翻译,只输出翻译后的英文,不要回答问题,不要额外解释。"), HumanMessage(content="你是谁") ] # 字符串输出解析器 parser = StrOutputParser() # LCEL 链式调用:模型 | 解析器 chain = model | parser # 执行并打印结果 print(chain.invoke(messages)) #DeepSeek 兼容 OpenAI 接口,只需配置 base_url + 自身 APIKey 即可调用; #temperature=0.0 降低随机性,严格遵循系统指令; #StrOutputParser 直接提取纯文本结果,去除模型冗余包装; #用 模型 | 解析器 LCEL 链式写法,代码更简洁优雅。RunnableRunnable 是什么Runnable 是 LangChain 所有可执行组件的统一标准接口(在langchain_core.runnables中定义)。只要实现了这个接口,LLM、Prompt、解析器、检索器、自定义函数、甚至整条链 / Graph,都能用同一套方法调用、组合、部署。一句话:它是 LangChain 的 “万能积木” 规范。核心方法(所有 Runnable 都有)invoke(input):同步执行,输入→输出(最常用)ainvoke(input):异步执行batch([inputs]):批量并行处理多个输入stream(input):流式返回(大模型逐字输出)最关键能力:用|组合(LCEL)所有 Runnable 都能用管道符|串成工作流(LangChain Expression Language):chain = prompt | llm # chain = RunnableSequence ( first=prompt , second=llm ) # chain = prompt.pipe(llm) # 以上效果相同自动变成一个新 Runnablereference.langchain.com自动支持:同步 / 异步、批量、流式reference.langchain.com前一步输出 = 后一步输入,无需手动传参常用内置 RunnableRunnableLambda:把任意 Python 函数包装成 RunnableRunnablePassthrough:原样透传输入(用于分叉 / 保留中间结果)RunnableParallel:并行执行多个分支RunnableBranch:按条件走不同分支总结Runnable = 统一接口 + 四种执行方式 + 管道组合,让 LangChain 组件能像积木一样快速拼出复杂 AI 工作流reference.langchain.com二,聊天模型-核心能力定义模型init_chat_model1.基本用法#++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ # 定义模型1:api_key 加上 英文双引号! model1=ChatOpenAI( model="deepseek-chat", api_key="你的DeepSeek密钥", base_url="https://api.deepseek.com/v1" ) #++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ # 定义模型2 model2= init_chat_model( model="deepseek-chat", model_provider="deepseek", #指定厂商 api_key="你的DeepSeek密钥" ) # 【优化指令:强制模型只做翻译】 message = [ SystemMessage(content="严格执行:只做中文翻译成英文,禁止回答、禁止解释、禁止闲聊,只输出翻译结果!"), HumanMessage(content="你是谁"), ] # 解析器 + 链 parse = StrOutputParser() chain = (model | parse) # 运行 print(chain.invoke(message)) #++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++2.可配置的模型from langchain_core.messages import HumanMessage, SystemMessage from langchain_core.output_parsers import StrOutputParser from langchain.chat_models import init_chat_model #+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ # 未定义模型,仅作初始化 model = init_chat_model( temperature=0.0 ) #+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ # 【优化指令:强制模型只做翻译】 message = [ SystemMessage(content="严格执行:只做中文翻译成英文,禁止回答、禁止解释、禁止闲聊,只输出翻译结果!"), HumanMessage(content="你是谁"), ] # 解析器 + 链 parse = StrOutputParser() chain = (model | parse) # 利用模型的invoke指定模型并运行 print(chain.invoke(message,config={"configurable":{"model":"deepseek-chat"}}))3.可配置的模型(默认值)from langchain_core.messages import HumanMessage, SystemMessage from langchain_core.output_parsers import StrOutputParser from langchain.chat_models import init_chat_model # 未定义模型,仅作初始化 model = init_chat_model( model="deepseek-chat", model_provider="deepseek", temperature=0.0, max_tokens=1024 ) # 【优化指令:强制模型只做翻译】 message = [ HumanMessage(content="你是谁"), ] # 解析器 + 链 parse = StrOutputParser() chain = (model | parse) # 运行 print(chain.invoke( message, config={ "configurable":{ "max_tokens":"20" } } ) )如代码所示:我将"max_tokens":"1024"改变为==》"max_tokens":"20"含义为回答上限最大为20token,结果却并不符合预期#结果展示 #D:\code\review\OwnTest\.venv\Scripts\python.exe D:\code\review\OwnTest\test3.py #你好!我是DeepSeek,由深度求索公司创造的AI助手。我是一个纯文本模型,可以帮你解答问题、处#理信息、进行对话等。我支持阅读链接、上传文件(图片、PDF、Word、Excel等),还能联网搜索(需#要手动开启)。我的上下文长度达到1M,可以一次性处理像《三体》三部曲那样体量的书籍。最重要的#是,我完全免费使用!有什么我可以帮你的吗?😊 #进程已结束,退出代码为 0原因是未定义configurable_fields=("max_tokens",),config_prefix="first":# 未定义模型,仅作初始化 model = init_chat_model( model="deepseek-chat", model_provider="deepseek", temperature=0.0, max_tokens=1024, configurable_fields=("max_tokens",), config_prefix="first" #前缀 ) # 运行 print(chain.invoke( message, config={ "configurable":{ "first_max_tokens":"20" } } ) ) #结果: #D:\code\review\OwnTest\.venv\Scripts\python.exe D:\code\review\OwnTest\test3.py #你好!我是DeepSeek,由深度求索公司创造的AI助手。我是一个纯文本模型 #进程已结束,退出代码为 0本地部署前置条件需要部署本地模型,同时安装ollama包。pip install -Ulangchain_ollama调用工具LLM 本身是封闭知识系统,能力受限于:训练数据存在滞后性仅能进行文本生成,无法执行计算、查询实时信息、操作数据库或调用外部 API工具的具体作用扩展能力边界:借助工具完成自身无法实现的任务,如数学计算、网络搜索、数据库查询等。保证信息实时性:通过搜索 / 数据库查询工具获取训练数据外的最新信息,避免过时或错误回答。处理复杂任务:将复杂请求拆解为多步骤,依次调用不同工具协同完成(如 “获取数据→数据分析→生成图表”),这一协调能力在 Agent 智能体上体现更明显。连接现有系统:将企业内部系统、API、数据库封装为工具,使 LLM 成为自然语言驱动的统一接口,提升自动化与集成能力。定义工具-Tool工具=@tool+python函数version1from langchain_core.tools import tool @tool def add(a:int,b:int)-int: """两数相加 Args: a:第一个整数 b:第二个整数 """ return a+b print(add.invoke({'a': 5, 'b': 6})) #res: #D:\code\review\OwnTest\.venv\Scripts\python.exe D:\code\review\OwnTest\test4.py #11 # #进程已结束,退出代码为 0从中我们发现工具定义:函数名,字符串文档和类型提示缺一不可,这些实际上都是传递给工具schema。schema:如下为一段简单的json代码,而JSON Schema是用来描述json的结构的,而工具schema则是用来描述工具的。//json 要有字段 值类型 { "name": "test", "age": 20, "isStudent": true, "hobby": ["编程", "阅读", "运动"] } //json schema { "type": "object", "properties": { "surname": {"type": "string"}, "given_name": {"type": "string"}, "birthday": {"type": "string","format": "date"}, "address": {"type": "object","properties": { "district": {"type": "string"}, "city": {"type": "string"}, "province": {"type": "string"}, "country": {"type": "string"} } } } } { "$schema": "http://json-schema.org/draft-07/schema#", "type": "object", "title": "用户信息", "description": "匹配你提供的JSON结构", "pr

相关文章:

Langchain的学习(一)

目录 一,实操 编码 Runnable Runnable 是什么 核心方法(所有 Runnable 都有) 最关键能力:用 | 组合(LCEL) 常用内置 Runnable 总结 二,聊天模型-核心能力 定义模型 init_chat_model 本地部署 调用工具 定义工具-Tool version1 schema: version2(基于…...

ETime:高效推动你的时间

我做了一个开源时间工作台:ETime 如果你也试过很多时间管理工具,可能会遇到同一种疲惫:记录本身变成了另一件需要坚持的事。 ETime 想解决的不是“怎样把每一分钟都管起来”,而是更朴素的一件事:让开始更轻&#xff…...

别再让一条宽带拖慢整个公司!手把手教你用H3C防火墙配置双WAN口负载均衡(附HCL模拟器配置)

中小企业网络优化实战:H3C防火墙双WAN负载均衡配置指南 当视频会议频繁卡顿、文件传输速度像蜗牛爬行时,单条宽带已成为制约企业效率的瓶颈。对于50-200人规模的中小企业,双WAN负载均衡技术能以极低成本实现带宽翻倍,本文将用一台…...

别再手动拖拽了!用Java POI + XSSFDrawing,5行代码搞定Excel单元格图片批量插入(附完整源码)

5行代码实现Excel图片批量插入:Java POI XSSFDrawing高效开发指南 1. 为什么需要自动化Excel图片插入? 在日常报表开发中,我们经常遇到需要将大量图片(如用户头像、产品图)嵌入Excel单元格的场景。传统手动操作存在三…...

MiniMax Agent 正式更名 Mavis 上线多智能体协作

如果你用过AI助手,大概都有过这种感受:一个AI同时干太多事,要么顾此失彼,要么卡在某个环节原地转圈。 MiniMax显然也看到了这个问题。 5 月 13 日,他们正式宣布旗下Agent产品全面升级,并给它起了个新名字—…...

Day33-1: Serilog(日志中间件)VS OperLogHelper(操作日志帮助类)

一、一句话分清它们的作用 1. Serilog(日志中间件) 作用:记录系统运行日志 → 给程序员看的 控制台打印文件保存报错、异常、请求信息用于排查问题、调试、监控 2. OperLogHelper(操作日志帮助类) 作用&#xff1…...

5分钟搞定U盘验货!这款绿色工具真香到离谱

兄弟们,你有没有买过那种“1TB只要39块还包邮”的U盘? 醒醒!那玩意儿大概率是扩容盘——实际容量可能只有64GB,超出部分写进去的数据全是空气,轻则文件损坏,重则项目代码全丢,救都救不回来&…...

【Java杂项】为什么 b += 1 可以,但 b = b + 1 会报错?类型提升与复合赋值详解

【Java杂项】为什么 b 1 可以,但 b b 1 会报错?复合赋值与类型提升讲清楚前言一、先给结论:它不是简单的文本替换二、先看认知冲突2.1 普通赋值为什么报错2.2 复合赋值为什么能通过三、类型提升到底是什么3.1 常见类型提升结果3.2 为什么小…...

人类的自然关系与AI的形式化关系

“人类的自然关系”与“AI的形式化关系”是理解下一代人机环境系统智能的两个核心哲学维度。它们分别代表了智能系统在物理世界中的生存根基与在数字世界中的运行逻辑。我们可以从以下三个层面来深度解析这两者的区别与融合:人类的自然关系:从“征服掠夺…...

一文搞懂工业机器人通讯协议:TCP/IP、Modbus与专用协议对比

在我十年的工控开发生涯中,通讯问题永远是项目延期的第一大原因。我见过太多团队花了几个月时间做运动控制和视觉算法,最后却卡在了机器人通讯上:要么是数据传输不稳定,要么是速度跟不上产线节拍,要么是换个品牌机器人就要全部重写代码。 很多新手工程师觉得通讯就是&quo…...

态是相关,势是因果,感是具身,知是离身

态是相关,势是因果,感是具身,知是离身,用四个高度概括的词,切中了“人机环境系统智能”中态势感知四个核心维度的本质属性。我们可以结合之前的探讨,来深入拆解一下这句“十六字真言”:态是相关…...

C#上位机开发工业机器人:从零搭建第一个机器人控制程序

作为一名在工控行业摸爬滚打了十年的老工程师,我见过太多自动化工程师卡在"机器人上位机开发"这一关。很多人C#基础不错,也懂机器人原理,但就是不知道怎么把两者结合起来,写出一个能在生产环境运行的控制程序。 今天这篇文章,我会带着你从零开始,搭建一个完整…...

Google Cloud Dataflow 背后的流式处理模型

原文:towardsdatascience.com/the-stream-processing-model-behind-google-cloud-dataflow-0d927c9506a0?sourcecollection_archive---------3-----------------------#2024-04-27 在无界数据处理中的正确性、延迟和成本平衡 https://medium.com/vutrinh274?sour…...

5分钟搞定!NewGAN-Manager终极配置指南:让Football Manager游戏体验焕然一新

5分钟搞定!NewGAN-Manager终极配置指南:让Football Manager游戏体验焕然一新 【免费下载链接】NewGAN-Manager A tool to generate and manage xml configs for the Newgen Facepack. 项目地址: https://gitcode.com/gh_mirrors/ne/NewGAN-Manager …...

【MySQL百日打怪升级第8天】SELECT执行流程

【第8天】每天一个MySQL知识点,百日打怪升级 SQL基础:SELECT执行流程 大家好,我是一名拥有10年以上经验的DBA老兵。 做这个系列,源于一个朴素的愿望:把踩过的坑、总结的经验系统化输出,希望能帮到刚入行或…...

堆叠集成方法

原文:towardsdatascience.com/the-stacking-ensemble-method-984f5134463a 发现堆叠在机器学习中的力量——一种将多个模型组合成一个单一强大预测器的技术。本文从基础知识到高级技术探讨了堆叠,揭示了它是如何结合不同模型的优势以提高准确性的。无论你…...

离谱!上海交大一学生私吞 5000 奖金,还用豆包 P 假收据骗队友。网友:学历虽高但人品太低

①5 月 18 日,上海交大一则学生违纪通报冲上热搜,实锤了前几天网上曝光的一名学生侵占团队竞赛奖金、造假欺骗队友的恶劣行为。②在 2025 下半年,樊同学(上交大智慧能源学院女生)与 K 同学(电院男生&#x…...

ABAP 采购带组件收货BAPI

一、背景 有一项业务比较特殊,金靶的回收加工,既会有物料的消耗,也会收进上一批加工洗出来的物料,并且组件物料会带有批次,MIGO过账时需要填写批次,那么对应BAPI,也需要加入这一部分批次。如果…...

荣耀MagicOS 10系统游戏模式:如何启用幻影稳帧功能并调整游戏画面的流畅度与画质平衡?

用手机玩游戏,最怕遇到卡顿和画面不清晰。想开高帧率保证流畅,画质就可能下降;想开高画质享受视觉盛宴,又容易掉帧卡顿。这真是让不少玩家头疼的问题。如果你的荣耀手机升级到了MagicOS 10系统,那么恭喜你,…...

Perplexity不是越低越好!资深NLP架构师亲授:3类典型查询场景下的阈值黄金区间

更多请点击: https://kaifayun.com 第一章:Perplexity不是越低越好!资深NLP架构师亲授:3类典型查询场景下的阈值黄金区间 Perplexity(困惑度)常被误认为语言模型性能的“万能标尺”,但实际部署…...

一小时搞懂Python函数:原理+实践

目录 🙄什么是Python函数(了解函数的概念) 🤔为什么需要它?(背景和痛点) 😮函数的分类(函数有哪些?) 内置函数 标准库函数 第三方库函数 定…...

互联网大厂 Java 求职者面试:音视频场景下的技术挑战

互联网大厂 Java 求职者面试:音视频场景下的技术挑战在一次互联网大厂的面试中,面试官和候选人燕双非之间展开了一场精彩的对话。燕双非是一位幽默风趣的程序员,尽管他在技术上并不是特别扎实,但他总是能用他的幽默化解紧张氛围。…...

软件设计师下午题训练2-3题+2020下上午题错题解析 练习真题训练15

一、训练题2 1、2021上 (1) (2) a:团购点编号 b:客户电话 供货 主键 :(供货商编号,团购点编号) 外键:供货商编号、团购点编号 订单 主键:订单编号…...

PHP SimpleXML:深入解析与高效使用

PHP SimpleXML:深入解析与高效使用 引言 PHP 是一种广泛使用的服务器端脚本语言,它以其灵活性和强大的功能而闻名。在处理 XML 数据时,PHP 提供了多种方法,其中 SimpleXML 是一个简单且强大的库,它允许开发者轻松地解析和操作 XML 数据。本文将深入探讨 PHP SimpleXML 的…...

远洋边缘计算实战:基于 Linux 的客滚船高并发网络 QoS 调度与隔离策略

摘要:客滚船直连卫星网络面对几百名旅客并发时存在瘫痪与越权风险。本文记录了基于 Linux 构建标准工业级边缘网关多链路 QoS 调度与隔离的实操复盘。导语:在主导一艘国际客滚船的网络重构项目时,我们面临一个典型的高并发调度与合规挑战&…...

RAG检索体系①【第十一篇】:混合检索架构(BM25+向量+过滤),工业级召回落地方案

生产级 RAG 避坑实战合集【第十一篇】文章简介:前十篇我们彻底打通数据层改写层:文档清洗、Chunk切块、元数据、生命周期、Query双层改写。绝大多数人做完这些,直接无脑上单向量检索。线上投产全部翻车。本文直击行业痛点:纯向量检…...

c++11的初见

列表初始化 c11以后支持{ }的列表初始可以使用{ }括住数据来进行初始化&#xff0c;使用{ }初始化时可以省略号{ }中的数据要匹配构造&#xff1b;使用{ }可以统一初始化方式。#include<iostream> #include<vector> using namespace std; int main(){vector<pai…...

YOLO26优化:TIP2026 FourierSR | FourierSR引入YOLO C3k2:解决感受野局限,实现高效全局特征交互

💡💡💡现有 YOLO C3k2 模块主要基于卷积与跨阶段部分连接,虽能平衡计算与精度,但仍存在以下问题: 感受野受限:堆叠的小核卷积(如 33)感受野有限,难以捕获全局上下文,对尺度变化大或远距离依赖的目标(如小目标、遮挡目标)特征提取能力不足。 特征混合效率低:通…...

基于 HarmonyOS 6.0 的智能家政预约页面实战开发:从页面构建到跨端体验优化

基于 HarmonyOS 6.0 的智能家政预约页面实战开发&#xff1a;从页面构建到跨端体验优化 前言 随着 HarmonyOS 生态不断完善&#xff0c;HarmonyOS 6.0 已经不仅仅是一个移动端操作系统&#xff0c;而是逐渐演变为一个真正意义上的全场景分布式操作平台。对于开发者而言&#xf…...

基于 HarmonyOS 6.0 的家政服务预约页面实战开发:ArkUI 页面构建与跨端设计深度解析

基于 HarmonyOS 6.0 的家政服务预约页面实战开发&#xff1a;ArkUI 页面构建与跨端设计深度解析 前言 随着 HarmonyOS 生态逐渐成熟&#xff0c;HarmonyOS NEXT 与 HarmonyOS 6.0 的持续推进&#xff0c;越来越多开发者开始从传统 Android、Flutter、Web 技术栈逐步迁移到鸿蒙原…...