第七课

89 阅读3分钟

在编程世界中,回调函数和异步编程是非常重要的概念,它们为程序的灵活性和效率提供了强大的支持。 一、回调函数的本质与作用 回调函数是一种编程模式,将函数 A 作为参数传给函数 B,在 B 完成某些操作后调用 A。它常见于处理异步操作,如事件监听、定时任务和网络请求等。例如,在第一个示例中,通过将print_result和square_result作为回调函数传入compute函数,展示了回调函数的基本用法。然而,回调函数本身并不一定意味着异步,它只是一种允许在特定操作完成时执行特定代码的方式。 二、异步编程的特点与优势 异步编程指代码无需等待某个操作完成就可继续执行,与同步编程形成鲜明对比。异步机制利用事件循环、任务队列等底层机制,实现多操作同时进行,提高程序效率。在 Python 中,asyncio库是实现异步编程的强大工具。如第二个示例中,compute函数遇到await asyncio.sleep时暂停,将控制权交回事件循环,使得another_task可以同时执行,充分体现了异步编程的优势。 三、LangChain 中的回调机制

  1. Callback 处理器:LangChain 的回调机制通过CallbackHandler实现。BaseCallbackHandler是基本的回调处理器,可以继承它创建自定义处理器。内置的处理器如StdOutCallbackHandler和FileCallbackHandler分别将事件记录到标准输出和指定文件。
  2. 组件中的使用方法:LangChain 的各个组件提供构造函数回调和请求回调两种设置方法。初始化时传入回调处理器可在整个链的请求中进行监控和操作,如日志记录;在特定请求中传入回调则可针对单个请求进行定制。
  3. 自定义回调函数:通过BaseCallbackHandler和AsyncCallbackHandler可以自定义回调函数。在鲜花店客服程序中,同步回调MyFlowerShopSyncHandler在新 Token 生成时立即输出,而异步回调MyFlowerShopAsyncHandler通过模拟延时操作展示了异步的优势,更好地处理客户请求。 四、构造令牌计数器 利用get_openai_callback上下文管理器可以构造令牌计数器,监控与大语言模型交互时的 Token 数量。在程序中,通过进入和退出上下文来跟踪和统计 Token 的使用情况。结合asyncio库,可以在多个并发交互中计算 Tokens,提高程序的效率和灵活性。 五、总结 回调函数和异步编程在编程中有着广泛的应用场景。回调函数在异步编程、事件处理和定时器等方面发挥着重要作用。在 LangChain 中,回调机制为用户提供了灵活控制和响应程序不同阶段的能力,增强了程序的可扩展性和定制性。通过深入理解和应用回调函数与异步编程,可以编写出更加高效、灵活的程序。