【2024最全最细Langchain教程-11】Langchain回调模块

【2024最全最细Lanchain教程-10】Langchain记忆模块-CSDN博客

        回调(callback)是一个python中常用的技术,在langchain中回调作为一个主要模块主要应用在运行过程管理、查看日志、计算token等场景。下面我们来看具体的代码:

1. 一个最简单的同步回调

        我们从 langchain.callbacks库中引入 StdOutCallbackHandler类,并进行实例化:

import os

from langchain.callbacks import StdOutCallbackHandler
from langchain.chains import LLMChain
from langchain_openai import OpenAI
from langchain.prompts import PromptTemplate

handler = StdOutCallbackHandler()

llm = OpenAI(
    temperature=0,
    openai_api_key = os.getenv("OPENAI_API_KEY"),
    base_url = os.getenv("OPENAI_BASE_URL"),
 
)

prompt = PromptTemplate.from_template("{year}年是中国生肖年的哪年?")

chain_callback =  LLMChain(
    llm=llm,
    prompt=prompt,
    callbacks = [handler]
)

chain_callback.invoke({"year":1987})

        在构造链的时候我们加入回调  callbacks = [handler],然后在运行链的过程中会看到回调的效果,就是在启动、结束链的时候可以看到相关的输出,这咋复杂链的构造中可以有效地帮助你定位问题:

2. 使用FileCallbackHandler进行日志输出

        我们在实际项目运行中,不太可能去console去盯着看StdOutCallbackHandler的输出,我们往往使用loggin来记录、保存和回顾代码运行情况。

        注意我们要先pip安装 loguru 这个库,然后我们先声明一个logfile并添加进logger里,我们实例化一个 FileCallbackHandler并将logfile作为参数输入进去:

from loguru import logger
from langchain.callbacks import FileCallbackHandler

logfile = 'output.log'
logger.add(logfile,colorize=True,enqueue = True)
handler = FileCallbackHandler(logfile)

chain =  LLMChain(
    llm=llm,
    prompt=prompt,
    callbacks = [handler],
    verbose = True
)

response = chain.invoke({"year":1988})
logger.info(response)

        在运行chain之后,我们可以通过logger.info()来查看log信息,我们同样可以在代码当前目录下面找到 output.log文件,查看里面的信息:

with open('output.log','r',encoding='utf-8') as file:
    content = file.read()
    
print(content)

 3. 使用 get_openai_callback 回调实现token计数

        我们使用如下代码可以实现token的计数,这个在生产场景很有用,因为在线调用各种模型都是要付费的:

from langchain.callbacks import get_openai_callback


llm = OpenAI(
    temperature=0,
    openai_api_key = os.getenv("OPENAI_API_KEY"),
    base_url = os.getenv("OPENAI_BASE_URL"),
)

with get_openai_callback() as cb:
    llm.invoke("牛顿什么时候发现的万有引力定律?")

total_tokens = cb.total_tokens
assert total_tokens >0

print(total_tokens)

        我们也可以把整个链的调用放到 with as: 语句下面:

with get_openai_callback() as cb:
    logfile = 'output.log'
    logger.add(logfile,colorize=True,enqueue = True)
    handler = FileCallbackHandler(logfile)

    chain =  LLMChain(
    llm=llm,
    prompt=prompt,
    callbacks = [handler],
    verbose = True
    )

    response = chain.invoke({"year":1988})
    logger.info(response)

total_tokens = cb.total_tokens
assert total_tokens >0

print(total_tokens)    

  • 8
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值