LangChain 工作流编排

文章目录

  • LCEL
  • 流式调用案例
  • invoke的异步调用
  • 异步流中的事件

LCEL

LangChain Expression Language,是一种强大的工作流编排工具,可以从基本组件构建复杂的任务链(Chain),有如下亮点:

  • 流式支持;
    • chain = prompt | model | parser
    • chain.stream({“input”: “xxx”})
    • chain.astream({“input”: “异步流式调用”})
    • 流式,逐个返回数据块,避免因数据量大导致用户等待;
  • 异步支持;
    • chain.invoke({“input”: “同步调用”})
    • chain.ainvoke({“input”: “异步调用”})
    • 一次性返回所有数据,如果数据量大,用户可能会一直等待;
  • 重试与回退;
  • 获取中间结果;

 

流式调用案例

import os
from langchain_community.chat_models import QianfanChatEndpoint
from langchain_core.prompts import ChatPromptTemplate
from langchain_core.messages import SystemMessage, HumanMessage, AIMessage, FunctionMessage, ToolMessage
from langchain_core.output_parsers import StrOutputParser, JsonOutputParser, MarkdownListOutputParser
import asyncio# 环境变量,指定ak/sk
os.environ["QIANFAN_AK"] = "xxx"
os.environ["QIANFAN_SK"] = "xxx"# 千帆大模型 (文心一言)
qianfan_chat = QianfanChatEndpoint(model="ERNIE-3.5-8K",temperature=0.2, # 越大越随机回答timeout=50,  # 有时网络不好,可能会超时,可以指定长些# api_key="...",# secret_key="...",# top_p="...",# other params...)# 字符串模板
prompt = ChatPromptTemplate.from_template("请简单介绍下用于{area}的深度学习算法都有哪些?")# 模型输出的为 AIMessage,需解析为对应的数据格式
parser = StrOutputParser()  # 或者 JsonOutputParser# 组装链
chat_chain = prompt | qianfan_chat | parser# 异步流式调用
async def call():# 异步for循环async for chunck in chat_chain.astream({"area": "图像识别领域"}):# chunck.content print(chunck, end="", flush=True)  # chunck对象被解析为字符串或者json类型# 异步入口
asyncio.run(call())  # 传入一个协程

 

invoke的异步调用

import os
from langchain_community.chat_models import QianfanChatEndpoint
from langchain_core.prompts import ChatPromptTemplate
from langchain_core.messages import SystemMessage, HumanMessage, AIMessage, FunctionMessage, ToolMessage
from langchain_core.output_parsers import StrOutputParser, JsonOutputParser, MarkdownListOutputParser
import asyncio# 环境变量,指定ak/sk
os.environ["QIANFAN_AK"] = "xxx"
os.environ["QIANFAN_SK"] = "xxx"# 千帆大模型 (文心一言)
qianfan_chat = QianfanChatEndpoint(model="ERNIE-3.5-8K",temperature=0.2, # 越大越随机回答timeout=30,  # 有时网络不好,可能会超时,可以指定长些# api_key="...",# secret_key="...",# top_p="...",# other params...)# 定义自己的模板
my_tpl = """
## 角色:你是一个非常专业的数据分析工程师,可以判定数据前后的变化是否属于真实变更。关于文件名、版本的变更都是非真实变更,其他的变更都是真实变更。## 任务目标: before表示变更前的数据,after表示变更后的数据,change_content 表示变更内容,判断变更的内容是否为真实的变更。## before: {before}## after: {after}## change_content: {change_content}## 背景信息: 表格相关的变更基本上都是真实的变更。 ## 约束条件:## 输出格式为 Markdown。## 避免使用过于专业的术语。## 示例:## 如 before 的内容为 “编程语言为python”, after的内容为“编程语言为java”, change_content为“编程语言从python变更为java”, 这属于真实的变更。## 其他说明:## 当你回答的准确率低于60%时,请说明答案的可信度。
"""# 使用自定义的模板
prompt = ChatPromptTemplate.from_template(my_tpl)# 模型输出的为 AIMessage,需解析为对应的数据格式
parser = StrOutputParser()# 组装链
chat_chain = prompt | qianfan_chat | parser# 异步调用
async def call():# 异步调用result = Nonetry:result = await chat_chain.ainvoke({"before": "5", "after": "10", "change_content": "表格CC中第一行、第一列单元格的值从5变成了10"})except:print("except...")return resultdef thread_main():# 子线程中  异步入口,自动管理事件循环(创建,关闭)r = asyncio.run(call())  # 传入一个协程print("result:", r)if __name__ == '__main__':import timeimport threading# 同步调用# r = chat_chain.invoke({"before": "5", "after": "10", "change_content": "表格CC中第一行、第一列单元格的值从5变成了10"})# 放在主线程会报错,所以放入子线程中th = threading.Thread(target=thread_main, name="async_th")th.setDaemon(True)  # 设置为主线程的守护线程,主线程退出,则一起退出,不管有没有执行完th.start()# 主线程的事件循环while True:time.sleep(1)print("main thread running...")

 

异步流中的事件


# 查看异步流 中的事件
async def call():# 异步调用result = Nonetry:async for event in chat_chain.astream_events("hello", version="v2"):print("event:", event)except:print("except...")return result

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/34550.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

PyTorch 深度学习实战(14):Deep Deterministic Policy Gradient (DDPG) 算法

在上一篇文章中,我们介绍了 Proximal Policy Optimization (PPO) 算法,并使用它解决了 CartPole 问题。本文将深入探讨 Deep Deterministic Policy Gradient (DDPG) 算法,这是一种用于连续动作空间的强化学习算法。我们将使用 PyTorch 实现 D…

3.14-1列表

列表 一.列表的介绍和定义 1 .列表 类型: <class list> 2.符号:[] 3.定义列表: 方式1:[] 通过[] 来定义 list[1,2,3,4,6] print(type(list)) #<class list> 方式2: 通过list 转换 str2"12345" print(type(str2)) #<class str> list2lis…

Java集合 - HashMap

HashMap 是 Java 集合框架中的一个重要类&#xff0c;位于 java.util 包中。它实现了 Map 接口&#xff0c;基于哈希表的数据结构来存储键值对&#xff08;key-value pairs&#xff09;。HashMap 允许使用 null 作为键和值&#xff0c;并且是非同步的&#xff08;非线程安全的&…

有效的山脉数组 力扣941

一、题目 给定一个整数数组 arr&#xff0c;如果它是有效的山脉数组就返回 true&#xff0c;否则返回 false。 让我们回顾一下&#xff0c;如果 arr 满足下述条件&#xff0c;那么它是一个山脉数组&#xff1a; arr.length > 3在 0 < i < arr.length - 1 条件下&am…

本地部署Spark集群

部署Spark集群大体上分为两种模式&#xff1a;单机模式与集群模式 大多数分布式框架都支持单机模式&#xff0c;方便开发者调试框架的运行环境。但是在生产环境中&#xff0c;并不会使用单机模式。 下面详细列举了Spark目前支持的部署模式。 &#xff08;1&#xff09;Local…

前端---初识HTML(前端三剑客)

1.HTML 先为大家介绍几个学习前端的网站&#xff1a;菜鸟教程&#xff0c;w3school&#xff0c;CSS HTML&#xff1a;超文本标记语言 超⽂本: ⽐⽂本要强⼤. 通过链接和交互式⽅式来组织和呈现信息的⽂本形式. 不仅仅有⽂本, 还可能包含图⽚, ⾳频, 或者⾃已经审阅过它的学者…

AcWing 4905. 面包店 二分

类似还有一个题是二分&#xff0c;用区间来判断是否有解 这个爆long long 有点坑了 const int N 1e2 10;LL n,tc,Tm; LL a[N],b[N],c[N];bool check(LL mid) {LL minx max(0LL,mid 1 - Tm),maxx min(tc - 1LL,mid);//将y转为x的函数,此时判断x是否有解//枚举所有客户的需…

SpringBoot 第一课(Ⅲ) 配置类注解

目录 一、PropertySource 二、ImportResource ①SpringConfig &#xff08;Spring框架全注解&#xff09; ②ImportResource注解实现 三、Bean 四、多配置文件 多Profile文件的使用 文件命名约定&#xff1a; 激活Profile&#xff1a; YAML文件支持多文档块&#xff…

2025年西安交通大学少年班招生考试初试数学试题(初中组)

1、已知正整数 x 、 y 、 z x、y、z x、y、z 满足 x y z 2025 xyz2025 xyz2025 &#xff0c; x 2 y y 2 z z 2 x x y 2 y z 2 z x 2 x^2yy^2zz^2xxy^2yz^2zx^2 x2yy2zz2xxy2yz2zx2&#xff0c;则 x 、 y 、 z x、y、z x、y、z 共有 ___ 组解。 2、在数 1 、 2 、 …

开发、科研、日常办公工具汇总(自用,持续更新)

主要记录汇总一下自己平常会用到的网站工具&#xff0c;方便查阅。 update&#xff1a;2025/2/11&#xff08;开发网站补一下&#xff09; update&#xff1a;2025/2/21&#xff08;补充一些AI工具&#xff0c;刚好在做AI视频相关工作&#xff09; update&#xff1a;2025/3/7&…

软件架构设计习题及复习

软件系统需求分析 系统需求模型转换为架构模型 软件架构设计 架构风格领域 难点 单选 平衡点是敏感点的一种&#xff0c;如果达到了平衡点一定要选平衡点&#xff0c;不能选敏感点添加层次不能提高系统性能&#xff0c;任何时候直接沟通性能最高效

ccf3501密码

//密码 #include<iostream> #include<cstring> using namespace std; int panduan(char a[]){int lstrlen(a);int s0;int zm0,sz0,t0;int b[26]{0},c[26]{0},d[10]{0},e0,f0;while(s<l&&l>6){if(a[s]<Z&&a[s]>A){b[a[s]-A];zm;}if(a[s…

【JavaEE进阶】Spring事务

目录 &#x1f343;前言 &#x1f334;事务简介 &#x1f6a9; 什么是事务? &#x1f6a9;为什么需要事务? &#x1f6a9;事务的操作 &#x1f340;Spring 中事务的实现 &#x1f6a9;Spring 编程式事务 &#x1f6a9;Spring声明式事务Transactional &#x1f6a9;T…

MySQL索引特性——会涉及索引的底层B+树

1 没有索引&#xff0c;可能会有什么问题 索引&#xff1a;提高数据库的性能&#xff0c;索引是物美价廉的东西了。不用加内存&#xff0c;不用改程序&#xff0c;不用调sql&#xff0c;只要执行正确的 create index &#xff0c;查询速度就可能提高成百上千倍。但是天下没有免…

给单片机生成字库的方案

Python 这段代码用来将txt文件中储存的字符串转变成二进制的像素数据 from PIL import Image, ImageFont, ImageDraw import osdef find_microsoft_yahei():"""Windows系统定位微软雅黑字体"""font_paths ["C:/Windows/Fonts/msyh.ttc&q…

01Spring Security框架

Spring Security是什么&#xff1f; Spring Security是⼀个提供身份验证、授权和针对常见攻击的保护的框架。 Spring Security做什么&#xff1f; 作为开发⼈员&#xff0c;在⽇常开发过程中需要⽤到Spring Security的场景⾮常多。事实上&#xff0c;对Web应⽤程序⽽⾔&#xf…

「BWAPP靶场通关记录(1)」A1注入漏洞

BWAPP通关秘籍&#xff08;1&#xff09;&#xff1a;A1 injection 1.HTML Injection - Reflected (GET)1.1Low1.2Medium1.3High 2.HTML Injection - Reflected (POST)2.1Low2.2Medium2.3High 3.HTML Injection - Reflected (URL)3.1Low3.2/3.3Medium/HIgh 4.HTML Injection - …

机器学习算法实战——敏感词检测(主页有源码)

✨个人主页欢迎您的访问 ✨期待您的三连 ✨ ✨个人主页欢迎您的访问 ✨期待您的三连 ✨ ✨个人主页欢迎您的访问 ✨期待您的三连✨ ​ ​​​ 1. 引言 随着互联网的快速发展&#xff0c;信息传播的速度和范围达到了前所未有的高度。然而&#xff0c;网络空间中也充斥着大量的…

Ollama+DeepSeek+NatCross内网穿透本地部署外网访问教程

目录 一、Ollama 简介 二、下载Ollama 三、下载并运行 DeepSeek 模型 四、运行 DeepSeek 模型 五、NatCross免费内网穿透 六、配置 ChatBox 连接 Ollama 七、外网使用ChatBox体验 一、Ollama 简介 Ollama 是一个开源的本地大模型部署工具&#xff0c;旨在让用户能够在个…

联想台式电脑启动项没有U盘

开机按F12&#xff0c;进入启动设备菜单&#xff0c;发现这里没有识别到插在主机的U盘&#xff1f; 解决方法 1、选上图的Enter Setup或者开机按F2&#xff0c;进入BIOS设置 选择Startup -> Primary Boot Sequence 2、选中“Excludeed from boot order”中U盘所在的一行 …