LangChain 26: 回调函数callbacks打印prompt verbose调用

news/2024/5/18 8:07:54 标签: langchain, prompt, chatgpt, LLM, 语言模型

LangChain系列文章

  1. LangChain 实现给动物取名字,
  2. LangChain 2模块化prompt template并用streamlit生成网站 实现给动物取名字
  3. LangChain 3使用Agent访问Wikipedia和llm-math计算狗的平均年龄
  4. LangChain 4用向量数据库Faiss存储,读取YouTube的视频文本搜索Indexes for information retrieve
  5. LangChain 5易速鲜花内部问答系统
  6. LangChain 6根据图片生成推广文案HuggingFace中的image-caption模型
  7. LangChain 7 文本模型TextLangChain和聊天模型ChatLangChain
  8. LangChain 8 模型Model I/O:输入提示、调用模型、解析输出
  9. LangChain 9 模型Model I/O 聊天提示词ChatPromptTemplate, 少量样本提示词FewShotPrompt
  10. LangChain 10思维链Chain of Thought一步一步的思考 think step by step
  11. LangChain 11实现思维树Implementing the Tree of Thoughts in LangChain’s Chain
  12. LangChain 12调用模型HuggingFace中的Llama2和Google Flan t5
  13. LangChain 13输出解析Output Parsers 自动修复解析器
  14. LangChain 14 SequencialChain链接不同的组件
  15. LangChain 15根据问题自动路由Router Chain确定用户的意图
  16. LangChain 16 通过Memory记住历史对话的内容
  17. LangChain 17 LangSmith调试、测试、评估和监视基于任何LLM框架构建的链和智能代理
  18. LangChain 18 LangSmith监控评估Agent并创建对应的数据库
  19. LangChain 19 Agents Reason+Action自定义agent处理OpenAI的计算缺陷
  20. LangChain 20 Agents调用google搜索API搜索市场价格 Reason Action:在语言模型中协同推理和行动
  21. LangChain 21 Agents自问自答与搜索 Self-ask with search
  22. LangChain 22 LangServe用于一键部署LangChain应用程序
  23. LangChain 23 Agents中的Tools用于增强和扩展智能代理agent的功能
  24. LangChain 24 对本地文档的搜索RAG检索增强生成Retrieval-augmented generation
  25. LangChain 25: SQL Agent通过自然语言查询数据库sqlite
    在这里插入图片描述

1. 回调Callbacks

LangChain提供了一个回调系统,允许您钩入LLM应用程序的各个阶段。这对于记录、监控、流式传输和其他任务非常有用。

您可以通过使用API中的callbacks参数订阅这些事件。这个参数是处理程序对象的列表,这些对象预期实现下面更详细描述的一个或多个方法。

2. Callback handlers 回调处理程序

CallbackHandlers是实现CallbackHandler接口的对象,该接口针对可以订阅的每个事件都有一个方法。当事件触发时,CallbackManager将在每个处理程序上调用适当的方法。

class BaseCallbackHandler:
    """Base callback handler that can be used to handle callbacks from langchain."""

    def on_llm_start(
        self, serialized: Dict[str, Any], prompts: List[str], **kwargs: Any
    ) -> Any:
        """Run when LLM starts running."""

    def on_chat_model_start(
        self, serialized: Dict[str, Any], messages: List[List[BaseMessage]], **kwargs: Any
    ) -> Any:
        """Run when Chat Model starts running."""

    def on_llm_new_token(self, token: str, **kwargs: Any) -> Any:
        """Run on new LLM token. Only available when streaming is enabled."""

    def on_llm_end(self, response: LLMResult, **kwargs: Any) -> Any:
        """Run when LLM ends running."""

    def on_llm_error(
        self, error: Union[Exception, KeyboardInterrupt], **kwargs: Any
    ) -> Any:
        """Run when LLM errors."""

    def on_chain_start(
        self, serialized: Dict[str, Any], inputs: Dict[str, Any], **kwargs: Any
    ) -> Any:
        """Run when chain starts running."""

    def on_chain_end(self, outputs: Dict[str, Any], **kwargs: Any) -> Any:
        """Run when chain ends running."""

    def on_chain_error(
        self, error: Union[Exception, KeyboardInterrupt], **kwargs: Any
    ) -> Any:
        """Run when chain errors."""

    def on_tool_start(
        self, serialized: Dict[str, Any], input_str: str, **kwargs: Any
    ) -> Any:
        """Run when tool starts running."""

    def on_tool_end(self, output: str, **kwargs: Any) -> Any:
        """Run when tool ends running."""

    def on_tool_error(
        self, error: Union[Exception, KeyboardInterrupt], **kwargs: Any
    ) -> Any:
        """Run when tool errors."""

    def on_text(self, text: str, **kwargs: Any) -> Any:
        """Run on arbitrary text."""

    def on_agent_action(self, action: AgentAction, **kwargs: Any) -> Any:
        """Run on agent action."""

    def on_agent_finish(self, finish: AgentFinish, **kwargs: Any) -> Any:
        """Run on agent end."""

3. 回调函数的使用场景

回调函数参数可用于 API 中的大多数对象(链、模型、工具、代理等),分别有两个不同的使用场景:

  • 构造函数回调函数:在构造函数中定义,例如 LLMChain(callbacks=[handler], tags=['a-tag']),将用于该对象上的所有调用,并且仅限于该对象,例如如果您将处理程序传递给 LLMChain 构造函数,则不会被附加到该链上的模型使用。

  • 请求回调函数:在 run()/apply() 方法中定义,用于发出请求,例如 chain.run(input, callbacks=[handler]),将仅用于该特定请求以及其中包含的所有子请求(例如对LLMChain的调用触发对模型的调用,该模型使用在 call() 方法中传递的相同处理程序)。

verbose 参数可用于 API 中的大多数对象(链、模型、工具、代理等)作为构造函数参数,例如 LLMChain(verbose=True),相当于将 ConsoleCallbackHandler 传递给该对象和所有子对象的回调参数。这对于调试非常有用,因为它将所有事件记录到控制台。

4. 你想要在什么时候使用这些回调函数呢?

  • 构造函数回调最适用于诸如日志记录、监控等用例,这些用例并不特定于单个请求,而是整个链条。例如,如果你想要记录发送到LLMChain的所有请求,你可以将一个处理程序传递给构造函数。

  • 请求回调最适用于诸如流式传输等用例,其中你想要将单个请求的输出流传输到特定的websocket连接,或者其他类似的用例。例如,如果你想要将单个请求的输出流传输到websocket,你可以将一个处理程序传递给call()方法。

5. 代码实现

LangChain提供了一些内置处理程序,您可以使用它们来开始。这些都可以在langchain/callbacks模块中找到。最基本的处理程序是StdOutCallbackHandler,它只是将所有事件记录到标准输出。

注意:当对象上的verbose标志设置为true时,即使没有显式传递,StdOutCallbackHandler也会被调用。

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

handler = StdOutCallbackHandler()
llm = OpenAI()
prompt = PromptTemplate.from_template("1 + {number} = ")

# Constructor callback: First, let's explicitly set the StdOutCallbackHandler when initializing our chain
chain = LLMChain(llm=llm, prompt=prompt, callbacks=[handler])
chain.run(number=2)

# Use verbose flag: Then, let's use the `verbose` flag to achieve the same result
chain = LLMChain(llm=llm, prompt=prompt, verbose=True)
chain.run(number=2)

# Request callbacks: Finally, let's use the request `callbacks` to achieve the same result
chain = LLMChain(llm=llm, prompt=prompt)
chain.run(number=2, callbacks=[handler])

运行结果

langchain-llm-app (develop*) » python Callbacks/llm_callbacks.py         ~/Workspace/LLM/langchain-llm-app 1> Entering new LLMChain chain...
Prompt after formatting:
1 + 2 = 

> Finished chain.


> Entering new LLMChain chain...
Prompt after formatting:
1 + 2 = 

> Finished chain.


> Entering new LLMChain chain...
Prompt after formatting:
1 + 2 = 

> Finished chain.

代码

https://github.com/zgpeace/pets-name-langchain/tree/develop

参考

https://python.langchain.com/docs/modules/callbacks/


http://www.niftyadmin.cn/n/5255976.html

相关文章

目标检测YOLO系列从入门到精通技术详解100篇-【目标检测】计算机视觉(基础篇)

目录 前言 几个高频面试题目 计算机视觉中常见的错误及解决方案 1.翻转图像和关键点

Error: Could not create the Java Virtual Machine(Linux启动tomcat成功后找不到进程8080端口)

文章目录 问题解决问题过程Tomcat版本要求 问题解决 版本冲突,我的jdk是1.8.x, tomcat 是 10.1.x的,要求jdk是11。 问题过程 运行 ./startup.sh 显示如下: 还以为运行成功呢, 使用命令一查,根本查不到进…

四十五----组件库设计

组件库设计主要考虑几点。 有意义: 命名准确,充分表意。参数准确,必要的类型检查。适当的注释 通用性:不要耦合特殊的业务功能。不要包含特定的代码处理逻辑。 ⽆状态,⽆副作⽤:状态向上层提取,尽量少⽤内部状态。解耦IO操作。 避免过度封装:合理冗余。避免过度抽象。 …

Kubernetes实战(十二)-使用kubeconfig文件管理多套kubernetes(k8s)集群

1 概述 在生产环境中可能不止有一套kubernetes(k8s)集群,面对多套集群,运维人员可以使用kubeconfig文件管理多套kubernetes(k8s)集群,使用 kubeconfig 文件,可以组织集群、用户和命名空间,还可以定义上下文&#xff0…

HP108w打印机出现Direct.....无线网,连接不上

本人用手机打印的,安卓 这种情况我也不知道为啥出现,如果出现上面的情况,可以 一直按住,会发蓝光的,无线信号样子的按钮,持续按20s,松手后观察自己的wifi列表,本人出现了&#xff…

kafka学习笔记--broker工作流程、重要参数

本文内容来自尚硅谷B站公开教学视频,仅做个人总结、学习、复习使用,任何对此文章的引用,应当说明源出处为尚硅谷,不得用于商业用途。 如有侵权、联系速删 视频教程链接:【尚硅谷】Kafka3.x教程(从入门到调优…

mysql数据库学习笔记(1)

今天开始学mysql数据库,为什么要学这个呢,因为数据库可结构化存储大量的数据信息,方便用户进行有效的检索和访问。数据库可有效地保持数据信息的一致性、完整性、降低数据冗余。数据库可满足应用的共享和安全方面的要求,把数据放在…

.NET 8 编写 LiteDB vs SQLite 数据库 CRUD 接口性能测试(准备篇)

WebAppDbTest 项目准备 项目准备1、.net cli 创建项目2、nuget 包引用和项目结构2.1、项目添加相关 nuget 包2.2、WebAppDbTest 项目结构 3、项目代码说明3.1、CSharp/C# 类文件说明3.2、json 配置文件说明 4、项目运行预览 数据库 .db 文件准备1、创建 SQLite 数据库1.1、在 W…