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

Langchain的学习(一)

目录

一,实操

编码

Runnable

Runnable 是什么

核心方法(所有 Runnable 都有)

最关键能力:用 | 组合(LCEL)

常用内置 Runnable

总结

二,聊天模型-核心能力

定义模型

init_chat_model

本地部署

调用工具

定义工具-Tool

version1

schema:

version2(基于Pydantic)

version3(基于Annotated)

定义工具-StructredTool

version1

version2(基于Pydantic)

version3(基于response_format)

核心概念整理

总结

绑定工具

选择工具

调用工具

langchain提供的工具

TavilySearch

结构化返回

Pydantic

TypedDict

Json Schema

选择结构

使用场景

作为信息提取器

使用少样本提示来增强信息提取能力(后文再介绍)

与工具结合使用

流式传输

stream()-同步传输

astream()-异步传输

进程、线程、协程的区别

异步协程版本

核心概念

什么时候用协程?

自定义输出格式

深度流式输出的探索

SSE协议 

Langchain流式传输流程分析


一,实操

编码

依赖安装-见见猪跑

pip install langchain-openai langchain-core -i https://pypi.tuna.tsinghua.edu.cn/simple
from 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 链式写法,代码更简洁优雅。

Runnable

Runnable 是什么

        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
  • 前一步输出 = 后一步输入,无需手动传参

常用内置 Runnable

  • RunnableLambda:把任意 Python 函数包装成 Runnable
  • RunnablePassthrough:原样透传输入(用于分叉 / 保留中间结果)
  • RunnableParallel:并行执行多个分支
  • RunnableBranch:按条件走不同分支

总结

Runnable = 统一接口 + 四种执行方式 + 管道组合,让 LangChain 组件能像积木一样快速拼出复杂 AI 工作流reference.langchain.com

二,聊天模型-核心能力

定义模型

init_chat_model

1.基本用法

#++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ # 定义模型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

工具的具体作用

  1. 扩展能力边界借助工具完成自身无法实现的任务,如数学计算、网络搜索、数据库查询等。
  2. 保证信息实时性:通过搜索 / 数据库查询工具获取训练数据外的最新信息,避免过时或错误回答。
  3. 处理复杂任务:将复杂请求拆解为多步骤,依次调用不同工具协同完成(如 “获取数据→数据分析→生成图表”),这一协调能力在 Agent 智能体上体现更明显。
  4. 连接现有系统将企业内部系统、API、数据库封装为工具,使 LLM 成为自然语言驱动的统一接口,提升自动化与集成能力。

定义工具-Tool

工具=@tool+python函数

version1
from 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
http://www.jsqmd.com/news/849148/

相关文章:

  • C++(模拟法下练习题)
  • 杭州即刻飞行体育文化传播有限公司2026上海滑翔伞培训机构优选:江浙沪滑翔伞培训机构含考证费用与考证攻略推荐杭州即刻飞行 - 栗子测评
  • RabbitMQ 集群网络分区如何配置分区处理策略
  • 别再只会用阻塞式了!STM32CubeMX串口非阻塞收发实战(附LED灯控制案例)
  • 从沙子到车辙(1.1):什么是“计算”?
  • 手机店还会存在吗
  • 快速将现有基于OpenAIAPI的项目迁移至Taotoken平台指南
  • Zemax序列模式模拟双折射:手把手教你用多重组态同时追迹o光和e光
  • 2026杭州弱电工程哪家专业?智能照明/监控安防系统/机房施工公司实力盘点 - 栗子测评
  • 2026年优质PA管路胎具生产厂家推荐:领拓工业领衔,口碑好的TPV管路胎具制作厂家/管路胎具厂家汇总 - 栗子测评
  • 2026深圳防伪标签源头工厂推荐:一物一码防伪标签厂家对比 - 栗子测评
  • 从手机待机到芯片发热:深入聊聊CMOS反相器那点‘电费’是怎么算出来的
  • 2026杭州专业汽车4S店弱电智能化服务公司推荐:车牌识别系统/门禁道闸定制厂家实力解析 - 栗子测评
  • Linux内核消息观测生产排障流程
  • 影像技术实战19:图片上传安全校验:伪装后缀、损坏图片、超大分辨率与后端防护方案
  • 黄仁勋夫妇基金会捐赠 1.08 亿美元算力,助力科研机构 AI 研究
  • 人脸识别:用数据蒸馏训练高精度人脸识别模型
  • OpenClaw 用户配置 Taotoken 作为 Provider 的详细操作指南
  • 临床决策倒计时:Perplexity医生信息搜索如何将循证检索从15分钟压缩至22秒?
  • 从沙子到车辙(1.2):计算的梦想与破灭
  • 从Memos到Obsidian:利用Thino插件实现数据无缝迁移
  • 不锈钢发酵罐厂家/不锈钢配液罐厂家/不锈钢搅拌罐厂家/不锈钢调配罐定制厂家推荐:海之鑫领衔,2026行业实力厂家深度盘点 - 栗子测评
  • C++(随机数练习题)
  • 022、旋转变压器原理与解码
  • C语言嵌入式开发中的软件复位实现方法
  • 蓝桥杯C++选手必看:动态规划从入门到拿分,我用这5道题搞定了(附完整代码)
  • 03手把手学会yolov8模型之使用Labelimg标注数据集
  • AI数据标注实战:如何高效、准确地标注训练数据
  • Java SE 11 与 Spring Boot 在电商场景中的应用
  • 【更新至2024年】2011-2024年地级市金融科技指数数据