LLM 大模型框架 LangChain 可观测性最佳实践

LLM(Large Language Model)大模型的可观测性是指对模型内部运行过程的理解和监控能力。由于LLM大模型通常具有庞大的参数量和复杂的网络结构,因此对其内部状态和运行过程的理解和监控是一个重要的问题。

什么是 LangChain?

LangChain 是一个开源的应用开发框架,旨在将大型语言模型(LLM)与开发者现有的知识和系统相结合,以提供更智能化的服务。具体来说,LangChain 可以帮助开发者f轻松地管理与 LLM 的交互,将多个组件链接在一起,并集成额外的资源,例如 API 和数据库。

此外,LangChain 还提供了多种工具、组件和接口,以简化创建由 LLM 提供支持的应用程序的过程。例如,它提供了模型输入/输出管理工具,用于管理 LLM 及其输入和格式化输出;Prompt 模板支持自定义 Prompt 工程的快速实现以及和 LLMs 的对接;Utils 组件提供了大模型常见的植入能力的封装,如搜索引擎、Python 编译器、Bash 编译器、数据库等;Chains 组件则提供了大模型针对一系列任务的顺序执行逻辑链。

因此,LangChain 的应用场景非常广泛,可以应用于自然语言处理、聊天机器人、智能客服、文本生成等多个领域。同时,由于其开源的特性,LangChain 也可以被广大开发者用于定制开发自己的 LLM 应用,从而推动人工智能技术的不断发展和创新。

LangChain 可观测性体系

在这里插入图片描述
LangChain 本身并没有提供可观测性能力,但可以通过集成其他工具来实现对 LangChain 应用的可观测性,以此来提高大模型的可解释性和可控性。

  • 日志:收集、存储和分析 LangChain 应用的日志数据。通过日志数据,可以监控应用程序的运行状态、错误日志、用户行为等信息。
  • 指标:使用监控工具收集 LangChain 应用的性能指标,如响应时间、吞吐量、错误率等。这些指标可以帮助你了解应用程序的性能瓶颈和潜在问题,并及时进行优化和调整。
  • 组件依赖:监控 LangChain 应用所依赖的服务或组件,如数据库、API接口等。确保这些依赖服务的可用性和性能稳定,以避免因依赖问题导致的应用故障。
  • 自定义监控:根据具体需求,可以编写自定义的监控脚本或插件,用于监控特定的业务逻辑或功能。例如,你可以编写脚本监控某个特定任务的执行情况、API 接口的调用频率等。
  • 告警与通知:设置告警规则,当监控数据达到预设的阈值时,触发告警并通知相关人员。这可以帮助你及时发现并处理潜在问题,确保应用程序的稳定运行。
    需要注意的是,可观测性方案的选择和实施应根据具体的应用场景和需求进行定制。

LangChain 可观测性接入方案

准备工作

安装 DataKit

token 在「观测云控制台」-「集成」-「Datakit」 上面获取。

DK_DATAWAY=“https://openway.guance.com?token=tkn_xxxxxx” bash -c “$(curl -L https://static.guance.com/datakit/install.sh)”

在这里插入图片描述

DataKit 采集器配置
  • 开启 DDTrace 采集器
    DDTrace 采集器用于采集链路信息,进入到 DataKit 安装目录下,执行conf.d/ddtrace/,复制ddtrace.conf.sample 并重命名为 ddtrace.conf
  • 开启 StatsD 采集器
    StatsD 采集器用于采集指标信息,默认端口为8125。
  • 重启 DataKit
    systemctl restart datakit
准备 OpenAI API Key

在 Langchain 应用中使用 OpenAI 的模型,需要一个 API Key,点击 https://platform.openai.com/account/api-keys 创建你的 API Key。

模拟 LLM 应用并接入观测云

主要实现了一个基于 OpenAI 的 GPT-3.5 模型的聊天对话系统,并设置了一个函数来跟踪 API 令牌的使用情况。

  • 安装 Python 依赖

pip install langchain
pip install openai
pip install ddtrace

  • 创建 LLM

使用 Langchain 创建 LLM,模型选择gpt-3.5


llm = ChatOpenAI(model='gpt-3.5-turbo',temperature=0)
  • 创建 ConversationChain 对象

创建一个 ConversationChain 对象,传入之前创建的 llm 对象,设置 verbose 为True(表示输出详细的调试信息),并使用 ConversationBufferMemory 作为记忆储存。

conversation = ConversationChain(llm=llm, verbose=True, memory=ConversationBufferMemory()
)
  • 创建对话函数

定义一个函数track_tokens_usage,它接受一个对话链和一个查询作为参数

def track_tokens_usage(chain, query):with get_openai_callback() as cb:result = chain.run(query)print(f"prompt token {cb.prompt_tokens}, res token {cb.completion_tokens}, total token {cb.total_tokens}")print(f"successful requests {cb.successful_requests}, total cost {cb.total_cost}USD")print(result)return result

通过回调函数get_openai_callback创建一个回调对象 cb,并通过对象 cb 可以获取请求相关信息:请求数、消耗金额、令牌数量等。

  • 调用
track_tokens_usage(conversation, "介绍一下观测云可观测性的产品及优势")

由于执行完成后,进程会退出,添加以下代码阻止退出,方便相关数据及时上报。

print("脚本执行完成,按 Enter 键退出...")
input()
  • 执行脚本
DD_SERVICE="my-langchain" DD_ENV="dev" DD_AGENT_HOST="localhost" DD_AGENT_PORT="9529" ddtrace-run python3 langchain_demo.py 

LangChain 可观测性实践效果

  • 指标
    在这里插入图片描述
  • 调用链
    在这里插入图片描述

常见异常

Token 异常

如果没有配置 Token,则会报错:

pydantic.v1.error_wrappers.ValidationError: 1 validation error for ChatOpenAI
__root__Did not find openai_api_key, please add an environment variable `OPENAI_API_KEY` which contains it, or pass `openai_api_key` as a named parameter. (type=value_error)

关于 Token,可以在代码中定义:

import os
os.environ["OPENAI_API_KEY"] = 'sk-...DcE2'

但不建议那么做,可以使用环境变量方式:

OPENAI_API_KEY=“sk-…DcE2”

余额不足

openai.RateLimitError: Error code: 429 - {'error': {'message': 'You exceeded your current quota, please check your plan and billing details. For more information on this error, read the docs: https://platform.openai.com/docs/guides/error-codes/api-errors.', 'type': 'insufficient_quota', 'param': None, 'code': 'insufficient_quota'}}

代理

如需配置代理,可以加入以下配置:

import os
os.environ["http_proxy"] = "http://localhost:7890"
os.environ["https_proxy"] = "http://localhost:7890"

第三方 API

如果需要更换第三方 API 地址,可以使用以下方式

import os
os.environ["OPENAI_API_BASE"] = 'https://chatapi.a3e.top/v1'

参考

LangChain 集成文档

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

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

相关文章

一文彻底搞懂从输入URL到显示页面的全过程

简略版: 用户输入URL后,浏览器经过URL解析、DNS解析、建立TCP连接、发起HTTP请求、服务器处理请求、接收响应并渲染页面、关闭TCP连接等步骤,最终将页面显示给用户。 详细版: URL解析:浏览器根据用户输入的URL&#x…

新火种AI|全国两会直击!政府报告首提,20位代表热议,人工智能+来了

作者:文子 编辑:小迪 两会来了,AI又火了。 “人工智能”行动开启,打造新质生产力 3月5日,全国人大十四届二次会议在北京人民大会堂开幕。国务院总理李强在2024政府工作报告中,首次提出“人工智能”的概…

使用Linux命令行上传及下载百度云盘文件(远程服务器大文件传输必备)

使用Linux命令行上传及下载百度云盘文件(远程服务器大文件传输必备) 简单记录一下两篇博客,通过bypy实现: https://developer.aliyun.com/article/1056072 https://mdnice.com/writing/1e33dbfdbbab4fbeba0d4a4632d0208a 1. 安装…

纯手工搭建一个springboot maven项目

前言&#xff1a;idea社区版无法自动搭建项目&#xff0c;手动搭建的经验分享如下&#xff1a; 1 包结构 参考下图&#xff1a; 2 项目结构 3 maven依赖 具体的项目包结构如下图&#xff1a; 依据这个项目包结构配置一个springboot 的 pom依赖&#xff1a; <?xml ve…

在 echarts 的 rich 中使用 iconfont 图标库图标作为 backgroundColor.image 值的方法

实现步骤 1、引入 iconfont.js。该脚本执行时&#xff0c;会在 body 下插入一个 svg 标签&#xff0c;标签下包含了图标库中的 svg 图标 path。 <script src"your/iconfont/path/iconfont.js"></script>或者 import your/iconfont/path/iconfont.js2、…

2024年最新整理腾讯云学生服务器价格、续费和购买流程

2024年腾讯云学生服务器优惠活动「云校园」&#xff0c;学生服务器优惠价格&#xff1a;轻量应用服务器2核2G学生价30元3个月、58元6个月、112元一年&#xff0c;轻量应用服务器4核8G配置191.1元3个月、352.8元6个月、646.8元一年&#xff0c;CVM云服务器2核4G配置842.4元一年&…

KOA优化最近邻分类预测(matlab代码)

KOA-最近邻分类预测matlab代码 开普勒优化算法&#xff08;Kepler Optimization Algorithm&#xff0c;KOA&#xff09;是一种元启发式算法&#xff0c;灵感来源于开普勒的行星运动规律。该算法模拟行星在不同时间的位置和速度&#xff0c;每个行星代表一个候选解&#xff0c;…

ZYNQ--AXI_DMA使用

文章目录 手册阅读典型连接图SG模式关闭时的寄存器地址SG模式开启时的寄存器地址BD设计PS端设计对于DMA寄存器的控制对DMA进行初始化手册阅读 典型连接图 SG模式关闭时的寄存器地址 SG模式开启时的寄存器地址

慢SQL调优-索引详解面试题

Mysql 慢SQL调优-索引详解面试题 前言一、慢查询日志设置二、explain查看执行计划三、索引失效四、索引操作五、profile 分析执行耗时 前言 最新的 Java 面试题&#xff0c;技术栈涉及 Java 基础、集合、多线程、Mysql、分布式、Spring全家桶、MyBatis、Dubbo、缓存、消息队列…

软件测试工程师,如何工资过万?(我的经验之谈)

对于测试工程师这个岗位而言&#xff0c;月薪过万并不是一件难事&#xff0c;笔者毕业时的第一份工作便拿到了7K的薪资&#xff0c;如今入职两年&#xff0c;薪资也过了万元大关。 我周边有不少想要入行这一行业的小伙伴都对我目前的工作和生活状态好奇&#xff0c;在此写一篇文…

Python+Pytest接口自动化之HTTP协议基础

HTTP协议简介 HTTP 即 HyperText Transfer Protocol&#xff08;超文本传输协议&#xff09;&#xff0c;是互联网上应用最为广泛的一种网络协议。所有的 WWW 文件都必须遵守这个标准。 设计 HTTP 最初的目的是为了提供一种发布和接收 HTML 页面的方法。HTTP 协议在 OSI 模型…

对于simplex算法的代码实现最优解存在性的证明

对于任何线性规划系统,并不是都存在最优解,如果在约束条件中,每个常量都是大于等于0的,那么线性规划系统肯定是有最优解的,此时将每个变量选取为0就可以了。而只有当约束条件中的常量有小于0的情况的时候,才需要验证系统是否存在最优解,给出一个反例,进行最优解的存在性…