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.mzph.cn/news/726593.shtml

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

相关文章

中华财险启动“3·15”金融消费者权益保护教育宣传活动!

2024年中国银行保险业“3•15”消费者权益保护教育宣传活动拉开帷幕。中华财险始终坚持“中华保险•服务中华”,切实履行险企责任,为主动保护金融消费者合法权益,在国家监督管理总局和中华保险集团的指导下,全面开展“3•15” 金融…

吼!原来教师这样发布学生成绩,轻松没烦恼

在教育的日常工作中,发布学生成绩往往是一项繁琐而重要的任务。教师们需要确保每位学生及家长能准确、及时地了解到学习成果。然而,传统的纸质成绩单或逐个通知的方式不仅耗时耗力,还容易出错。那么,有没有一种方法能够让教师们轻…

前端请求的错误处理

全局考虑: 错误需要从三个方面考虑,范围一次减小: 网络层 > 协议层 > 应用层

全球IT外包的趋势与发展

随着全球化进程的不断深化,IT外包已经成为众多企业的关键战略之一。IT外包是将企业的信息技术需求委托给第三方服务提供商,以在成本、效率和核心业务专注方面取得优势。在全球化的大背景下,IT外包的发展呈现出一系列新的趋势。 首先&#xff…

如何部署极狐GitLab Runner Cache 缓存配置?

本文作者:徐晓伟 GitLab 是一个全球知名的一体化 DevOps 平台,很多人都通过私有化部署 GitLab 来进行源代码托管。极狐GitLab 是 GitLab 在中国的发行版,专门为中国程序员服务。可以一键式部署极狐GitLab。 极狐GitLab Runner Cache 缓存 支…

【ChatGPT实践】Claude 3全面升级:多模态+100万Token上下文长度,碾压OpenAI?

最近几天这张图在ai圈很火。 前几天,Anthropic发布了其新一代大语言模型Claude 3系列,包括Claude 3 Opus、Sonnet和Haiku三种规模,分别代表了超大杯、大杯和中杯。其中Sonnet版本在官网可以免费体验:https://claude.ai 最强的Opus版本&#x…

c++单例模式和call_once函数

单例模式是一种常见的设计模式,用于确保某个类只能创建一个实例。由于单例模式是全局唯一的,因此在多线程中使用单例模式时需要考虑线程安全问题。 1.GetInstance()实例化一个对象 懒汉式:第一次用到类的时候才会去实例化。 懒汉式创建对象…

pyqt 界面中嵌入当前系统shell界面

pyqt 界面中嵌入当前系统shell界面 在PyQt中嵌入当前系统shell界面,可以使用QProcess来启动一个子进程,并将其输出显示在一个文本编辑窗口中。以下是一个简单的例子,展示了如何在PyQt界面中嵌入当前Windows系统的cmd shell: impo…

Nodejs web服务器之GET、POST请求初次体验

一、认识http请求 步骤 1.DNS解析域名,找到ip地址,建立TCP连接,发起http请求 2.服务器接收到http请求,进行处理,返回数据 3.客户端接收到返回的数据,处理数据(比如渲染页面) 二、no…

element多选框select下拉框数据回显的问题value.push is not a function

文章目录 问题描述 问题描述 今天在使用Element UI el-select组件遇到了一个问题,如下图: 下拉框里的值选中了,但是文本框里没有值 这是 el-select组件代码,我这里是用了一个多选框,options的值是在后端查询的,form.we…

Batch Nomalization 迁移学习

Batch Nomalization 1.Batch Nomalization原理 图像预处理过程中通常会对图像进行标准化处理,这样能够加速网络的收敛。就是按照channel去求均值和方差,然后原数据减均值除标准差,使我们的feature map满足均值为0,方差为1的分布…

hnswlib -向量ANN检索库

文章目录 关于 hnswlib安装使用示例1、创建索引,插入元素,搜索和选择序列2、序列化/反序列化后更新 关于 hnswlib Header-only C/python library for fast approximate nearest neighbors github : https://github.com/nmslib/hnswlib hnswlib 是一个…

系统架构设计师 2023年 综合知识

1、McCabe度量法的公式 V(G)=m-n+2。V(G)表示环路复杂性,m表示图中的边数,n表示图中的结点数。 2、McCabe度量法的规模 模块规模以V(G)<=10为宜。 3、多线程任务通信方式 共享内存、消息传递、信号、套接字、管道。 4、星型拓扑结构 最多只需要2跳就可以完成跟网络中任…

使用pdf.js预览pdf遇到的问题总结

我先说一下问题点&#xff1a; 最近项目做了一次改造&#xff0c;是关于iobs的。用户上传的pdf资料和图片等文件都是上传到iobs上&#xff0c; 所以用户需要预览或者页面返显图片的时候&#xff0c;都是从iobs上拿。之前拿到iobs链接之后&#xff0c;可以在一定的时间内无限次…

three.js如何实现简易3D机房?(三)显示信息弹框/标签

接上一篇&#xff1a; three.js如何实现简易3D机房&#xff1f;(二&#xff09;模型加载的过渡动画&#xff1a;http://t.csdnimg.cn/onbWY 目录 七、创建信息展示弹框 1.整体思路 &#xff08;1&#xff09;需求&#xff1a; &#xff08;2&#xff09;思路&#xff1a;…

网康科技 NS-ASG 应用安全网关 SQL注入漏洞复现(CVE-2024-2022)

0x01 产品简介 网康科技的NS-ASG应用安全网关是一款软硬件一体化的产品,集成了SSL和IPSec,旨在保障业务访问的安全性,适配所有移动终端,提供多种链路均衡和选择技术,支持多种认证方式灵活组合,以及内置短信认证、LDAP令牌、USB KEY等多达13种认证方式。 0x02 漏洞概述 …

生物电信号测量技术

引言 生物电信号是生物体内的电活动产生的电流或电压信号&#xff0c;它反映了生物体的生理状态和活动。生物电信号测量技术是一种用于记录和分析这些信号的方法&#xff0c;广泛应用于医学、生物学、神经科学等领域。本文将介绍几种常见的生物电信号测量技术&#xff0c;并讨…

C语言第三十六弹---文件操作(中)

✨个人主页&#xff1a; 熬夜学编程的小林 &#x1f497;系列专栏&#xff1a; 【C语言详解】 【数据结构详解】 文件操作 1、文件的顺序读写 1.1、顺序读写函数介绍 1.1.1、fgetc 与 fputc 1.1.2、fgets 与 fputs 1.1.3、fscanf 与 fprintf 1.1.4、fread 与 fwrite 1.…

全志D1s开发板裸机开发之坏境搭建

环境搭建 开发板介绍 张天飞老师编写的《RISC-V体系结构编程与实践》&#xff0c;里面的源码是基于 QEMU 模拟器的&#xff0c;可以认为它是一款虚拟的开发板。如果需要在真实开发板上学习&#xff0c;可以使用百问网的 DongshanPI-D1S 开发板。 DongshanPI-D1S 是百问网推出…

Python web自动化测试 —— 文件上传!

​文件上传三种方式&#xff1a; &#xff08;一&#xff09;查看元素标签&#xff0c;如果是input&#xff0c;则可以参照文本框输入的形式进行文件上传 方法&#xff1a;和用户输入是一样的&#xff0c;使用send_keys 步骤&#xff1a;1、找到定位元素&#xff0c;2&#…