使用LangSmith来快速学习LangChain

好风凭借力,送我上青云!

什么是LangSmith

LangSmith is a platform for building production-grade LLM applications.

It lets you debug, test, evaluate, and monitor chains and intelligent agents built on any LLM framework and seamlessly integrates with LangChain, the go-to open source framework for building with LLMs.

LangSmith is developed by LangChain, the company behind the open source LangChain framework.

LangSmith 是一个用于构建生产级 LLM 应用程序的平台。
它允许您调试、测试、评估和监控基于任何 LLM 框架构建的链和智能代理,并无缝集成 LangChain(用于构建 LLM 的首选开源框架)。
LangSmith 由 LangChain 开发,LangChain 是开源 LangChain 框架背后的公司。

LangSmith的目标很宏大,但是实际上还是处于早期阶段,目前最实用的功能还是调试、跟踪LangChain应用,但是单是这一项的价值都已经无可估量,可以大大缩减你学习LangChain的时间,提高用LangChain开发LLM应用的效率。

用LangChain来完成大语言模型的应用原型/代理很简单,但是,要交付实际的大语言应用异常困难:可能要大量定制、迭代Prompt、链和其他组件。LangSmith可以帮你快速调试链、代理或者一组工具,可视化各种组件(链、llms、检索器retrievers等)如何交互及使用,评估不同的Prompts等等。

注册与设置

注册

登录 https://smith.langchain.com/ 可以直接用Discord、GitHub、Google账号登录,也可以用自己邮箱注册。现在已经不需要邀请码。

生成API Key

在这里插入图片描述

注意生成Key的时候就复制下来,后面丢了就只能重新生成。

设置环境变量

Linux用下面的命令设置环境变量:

export LANGCHAIN_TRACING_V2=true
export LANGCHAIN_ENDPOINT="https://api.smith.langchain.com"
export LANGCHAIN_API_KEY="<your-api-key>"
export LANGCHAIN_PROJECT="langchain_for_llm_application_development"

Windows可以用下面的命令:

setx LANGCHAIN_TRACING_V2 true
setx LANGCHAIN_ENDPOINT "https://api.smith.langchain.com"
setx LANGCHAIN_API_KEY <your-api-key>
setx LANGCHAIN_PROJECT langchain_for_llm_application_development

LANGCHAIN_TRACING_V2是设置LangChain是否开启日志跟踪模式。

LANGCHAIN_PROJECT 是要跟踪的项目名称,如果LangSmith平台上还没有这个项目,会自动创建。如果不设置这个环境变量,会把相关信息写到default项目。这里的项目不一定要跟你实际的项目一一对应,可以理解为分类或者标签。你只要在运行某个应用前改变这一项,就会把相关的日志写到这个下面。可以按开发、生产环境分,也可以按日期分等等。

LANGCHAIN_API_KEY就是上面生成的LangSmith的key。

设置好环境变量就可以了,代码无需任何变动!完全没有侵入性的感觉真好。当然,如果要较真的话,引入LangChain的时候代码就已经侵入了,但是我们本来就要用LangChain,那就不用管这个了。

使用

我们可以使用LangSmith调试:出乎意料的最终结果、代理为何一直在循环、链为何比预期慢、代理使用了多少个令牌等等。

我们来看一个RouterChain的例子(源码来自黄佳老师的课程):

'''欢迎来到LangChain实战课
https://time.geekbang.org/column/intro/100617601
作者 黄佳'''
import warnings
warnings.filterwarnings('ignore')# 设置OpenAI API密钥
# import os
# os.environ["OPENAI_API_KEY"] = 'Your Key'
from dotenv import load_dotenv, find_dotenv
_ = load_dotenv(find_dotenv())  # read local .env file
from langchain.chat_models import AzureChatOpenAI# 构建两个场景的模板
flower_care_template = """
你是一个经验丰富的园丁,擅长解答关于养花育花的问题。
下面是需要你来回答的问题:
{input}
"""flower_deco_template = """
你是一位网红插花大师,擅长解答关于鲜花装饰的问题。
下面是需要你来回答的问题:
{input}
"""# 构建提示信息
prompt_infos = [{"key": "flower_care","description": "适合回答关于鲜花护理的问题","template": flower_care_template,},{"key": "flower_decoration","description": "适合回答关于鲜花装饰的问题","template": flower_deco_template,}
]# 初始化语言模型
# from langchain.llms import OpenAI
# llm = OpenAI()
llm = AzureChatOpenAI(deployment_name="GPT-4", temperature=0)# 构建目标链
from langchain.chains.llm import LLMChain
from langchain.prompts import PromptTemplatechain_map = {}for info in prompt_infos:prompt = PromptTemplate(template=info['template'],input_variables=["input"])print("目标提示:\n", prompt)chain = LLMChain(llm=llm,prompt=prompt,verbose=True)chain_map[info["key"]] = chain# 构建路由链
from langchain.chains.router.llm_router import LLMRouterChain, RouterOutputParser
from langchain.chains.router.multi_prompt_prompt import MULTI_PROMPT_ROUTER_TEMPLATE as RounterTemplatedestinations = [f"{p['key']}: {p['description']}" for p in prompt_infos]
router_template = RounterTemplate.format(destinations="\n".join(destinations))
print("路由模板:\n", router_template)router_prompt = PromptTemplate(template=router_template,input_variables=["input"],output_parser=RouterOutputParser(),
)
print("路由提示:\n", router_prompt)router_chain = LLMRouterChain.from_llm(llm,router_prompt,verbose=True
)# 构建默认链
from langchain.chains import ConversationChain
default_chain = ConversationChain(llm=llm,output_key="text",verbose=True
)# 构建多提示链
from langchain.chains.router import MultiPromptChainchain = MultiPromptChain(router_chain=router_chain,destination_chains=chain_map,default_chain=default_chain,verbose=True
)# 测试1
print(chain.run("如何为玫瑰浇水?"))

虽然黄佳老师加了很多print输出信息,但是代码的逻辑还是不容易看清楚。

查看运行情况

运行一次上面的程序,然后打开LangSmith,找到最近一次的运行:
在这里插入图片描述

从图中,我们可以很直观的看到LangChain组件的调用顺序(如果有用过微服务的Zipkin,对这个界面应该不陌生)、每一步耗费的时间、调用OpenAI消耗的Token数。

使用Playground

面向LLM编程,很多时候就是要迭代Prompt。在LangSmith里除了可以直接看到输入给LLM的Prompt和输出结果,更方便的是里面还集成了Playground,可以直接修改Prompt来看输出的结果。

点击上图右上角的Playground,进去后你会发现你调用LLM的各种参数、Prompt都帮你设置好了(OpenAI的Key还要设置,只保存在本地浏览器)。

这样,你就可以修改你的Prompt,重新运行,观察Prompt改变引起的结果变化。

在Playground里执行的过程会记录到“playground”这个项目。
在这里插入图片描述

添加到数据集

在查看运行情况的界面,点击右上角的“Add to Dataset”,可以把对应的输入、输出添加到数据集,后面大模型或者Prompt有了调整,可以用数据集来测试、评估。
在这里插入图片描述

Hub

LangSmith里面还有一个有趣的功能是Hub。在Hub里,可以发现、分享和对Prompt进行版本控制。Hub感觉是借用GitHub的概念,也可以叫PromptHub?

对别人分享出来的Prompt,你可以点爱心收藏(收藏了之后没找到相应的入口 😅),也可以Fork、试运行。
在这里插入图片描述

总的来说,LangSmith还处于快速开发的阶段(LangChain本身也才0.0.348版),某些功能还比较简陋。从另一方面来说,我们可以和它一起成长,更快速掌握LangChain,打造自己的LLM应用。

参考

  1. LangSmith文档:https://docs.smith.langchain.com/

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

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

相关文章

Python学习路线 - Python语言基础入门 - 循环语句

Python学习路线 - Python语言基础入门 - 循环语句 前言为什么学习循环语句 while循环的基础语法while循环语句while循环注意点 while循环的基础案例while循环的嵌套应用while循环的嵌套 while循环的嵌套案例补充知识 - print输出不换行补充知识 - 制表符\t练习案例 - 打印九九乘…

创建dockerSwarm nfs挂载

创建dockerSwarm nfs挂载 nfs高可用部署(lsyncd两主机双向同步) nfs高可用部署(lsyncd三主机三向同步) 1. 通过 Volume 1.1 创建 Docker Volume 每个 swarm 节点均创建相同名称的 Docker Volume&#xff08;名称为 nfs120&#xff09; docker volume create --driver local …

算法:进制之前的转换

1. X进制转换成十进制-V1&#xff1a; /*** 笨办法&#xff0c;从左往右开始* Tips&#xff1a;只支持正数** param num* param radix* return*/private static Integer xToTenV1(String num, Integer radix) {if (num.length() 0 || num.charAt(0) -) {throw new IllegalArg…

外贸找客户软件工具:BotMaster 18.5 Crack

BotMaster 拓展您的业务大师增加销量Whatsapp营销&#xff0c;使用 BotMaster 将您的业务提升到新的水平 - 最强大的 WhatsApp 营销软件&#xff0c;可促进销售和发展您的业务。 BotMaster 是一款革命性的 WhatsApp 营销工具&#xff0c;于 2022 年 1 月推出。这款功能强大的工…

10 大 Mac 数据恢复软件深度评测

对于任何依赖计算机获取重要文件&#xff08;无论是个人照片还是重要商业文档&#xff09;的人来说&#xff0c;数据丢失可能是一场噩梦。值得庆幸的是&#xff0c;有多种专门为 Mac 用户提供的数据恢复工具&#xff0c;可以帮助检索丢失或意外删除的文件。在本文中&#xff0c…

HNU计算机体系结构-实验3:多cache一致性算法

文章目录 实验3 多cache一致性算法一、实验目的二、实验说明三 实验内容1、cache一致性算法-监听法模拟2、cache一致性算法-目录法模拟 四、思考题五、实验总结 实验3 多cache一致性算法 一、实验目的 熟悉cache一致性模拟器&#xff08;监听法和目录法&#xff09;的使用&am…

从零构建属于自己的GPT系列4:模型训练3(训练过程解读、序列填充函数、损失计算函数、评价函数、代码逐行解读)

&#x1f6a9;&#x1f6a9;&#x1f6a9;Hugging Face 实战系列 总目录 有任何问题欢迎在下面留言 本篇文章的代码运行界面均在PyCharm中进行 本篇文章配套的代码资源已经上传 从零构建属于自己的GPT系列1&#xff1a;数据预处理 从零构建属于自己的GPT系列2&#xff1a;模型训…

[力扣100] 10.滑动窗口的最大值

添加链接描述 class Solution:def maxSlidingWindow(self, nums: List[int], k: int) -> List[int]:# 思路是使用单调队列&#xff0c;把滑动窗口中最大的元素放在最头quecollections.deque()nlen(nums)res[]# 初始化队列,队头保存最大的数的下标&#xff0c;因为需要下标来…

Spring Security 6.x 系列(10)—— SecurityConfigurer 配置器及其分支实现源码分析(二)

一、前言 在本系列文章&#xff1a; Spring Security 6.x 系列&#xff08;4&#xff09;—— 基于过滤器链的源码分析&#xff08;一&#xff09; 中着重分析了Spring Security在Spring Boot自动配置、 DefaultSecurityFilterChain和FilterChainProxy 的构造过程。 Spring …

Oauth2.0 认证

目录 前言 1.介绍 2.Oauth2.0过程详解 3.Oauth 整合到 Spring Boot 实践 4.方法及配置详解&#xff1a; 总结 前言 Oauth2.0 是非常流行的网络授权表准&#xff0c;已经广泛应用在全球范围内&#xff0c;比较大的公司&#xff0c;如腾讯等都有大量的应用场景。 1.介绍 …

ARP欺骗攻击

一.大概原理 ARP&#xff1a;address solution protocol 地址解析协议 ARP是一种基于局域网的TCP/IP协议&#xff0c;arp欺骗就是基于此协议的漏洞来达成我们的目的的&#xff0c;局域网中的数据传输并不是用ip地址传输的&#xff0c;而是靠mac地址。 我们如果出于某种目的想…

vue打包完成后出现空白页原因及解决

vue打包完成后出现空白页原因及解决 原因 资源路径不对 路由模式&#xff1a;使用history&#xff0c; 此模式上线后易出现404 解决 1、vue.config.js中配置: publicPath: ./2、在后端要求做重定向 如在nginx中使用rewrite做重定向

【Fastadmin】利用 build_select 做一个树状下拉选择框

1.效果展示 系统crud生成的下拉分类有些不是很好看&#xff0c;并且选择困难&#xff0c;看不出级差&#xff0c;效果如下&#xff1a; 经过 build_select 加工后的效果,美观好看&#xff0c;并添加上搜索功能: 2. 首先需要写一个树状图的数据格式 protected $datalist []; pu…

前沿科技与医药领域碰撞,《AI制药方法与实践》课程重磅上线

药物发现是生物学、化学、医学、药学等基础研究与工业转化的重要窗口。近年来&#xff0c;AI技术的发展&#xff0c;为高投入、高失败率的制药行业带来了全新机遇&#xff0c;或将彻底改变传统制药的研究范式。为了帮助更多人了解并掌握这一前沿技术&#xff0c;百度飞桨联合清…

LeedCode刷题---滑动窗口问题

顾得泉&#xff1a;个人主页 个人专栏&#xff1a;《Linux操作系统》 《C/C》 《LeedCode刷题》 键盘敲烂&#xff0c;年薪百万&#xff01; 一、长度最小的子数组 题目链接&#xff1a;长度最小的子数组 题目描述 给定一个含有 n 个正整数的数组和一个正整数 target 。…

29 水仙花数

题目描述 所谓水仙花数&#xff0c;是指一个n位的正整数&#xff0c;其各位数字的n次方和等于该数本身。 例如153是水仙花数&#xff0c;153是一个3位数&#xff0c;并且1531^35^33^3. 输入描述 第一行输入一个整数n&#xff0c;表示一个n位的正整数。n在3到7之间&#xff0c;…

uniapp各种小程序分享 share - 主要流程 - 微信、抖音、快手、qq

参考 小程序环境 分享 | uni-app官网uni-app,uniCloud,serverless,分享,uni.share(OBJECT),分享到微信聊天界面示例代码,分享到微信朋友圈示例代码,uni.share 在App端各社交平台分享配置说明,uni.shareWithSystem(OBJECT),plus.share.sendWithhttps://uniapp.dcloud.net.cn/a…

MCS-51系列与AT89C5x系列单片机的介绍与AT系列的命名规则

MCS-51系列与AT89C5x系列单片机 主要涉及MCS-51系列与AT89C5x系列单片机的介绍与AT系列单片机的命名规则 文章目录 MCS-51系列与AT89C5x系列单片机一、 MCS-51系列单片机二、AT89C5x系列单片机2.1 AT89C5x/AT89S5x系列单片机的特点2.2 AT89系列单片机的型号说明2.2.1 前缀2.2.2…

数组区段的最大最小值

题干 本题要求实现一个函数&#xff0c;找出数组中一部分数据的最大值和最小值。 题目保证没有无效数据。 函数接口定义&#xff1a; void sublistMaxMin ( int* from, int* to, int* max, int* min ); 其中 from和to都是用户传入的参数&#xff0c;分别存放数组部分数据的起…

深度绑定的二维码

南京西祠 500 万股股份被以 1 元价格挂牌转让。 唏嘘不已&#xff0c;就像现在的孩子们都知道玩抖音&#xff0c;我们那个时代&#xff0c;西祠胡同就是互联网的代名词。在一个叫做西祠胡同的地方&#xff0c;住着一群村里的年轻人&#xff0c;他们痛并快乐着&#xff0c;渴望…