📘 **TELUS Agriculture & Consumer Goods** 如何通过 **Haystack Agents** 转变促销交易

集成:Burr

从 Haystack 组件构建一个代理

作者
DAGWorks

目录

概述

Burr 是一个开源的 Python 框架,用于构建进行决策的应用程序(聊天机器人、代理、模拟等)。Burr UI 是其开源、免费且本地优先的伴侣应用程序,用于监控、调试、注释等。

此扩展允许您使用 Haystack 组件(原生、集成和自定义)来创建 Burr 代理。Burr 提供灵活性来管理代理的状态(即内存)并定义条件逻辑来选择其下一步操作。

此版本 博客文章 进一步详细介绍了 Haystack + Burr 集成的优势。请参阅此笔记本教程以了解完整示例( GitHubGoogle Colab

Burr UI

安装

pip install "burr[haystack]"

使用

创建 action

在 Burr 中,您的代理或 Applicationactions 和 transitions 构成。定义 action 的默认方法是使用 @action 装饰器。readswrites 参数指定可以从状态读取和写入状态的值。此外,装饰的函数必须将 State 作为第一个参数,并返回一个带有更新值的 State

from burr.core import action, State

@action(reads=["documents"], writes=["prompt"])
def build_prompt(state: State, user_input: str) -> State:
    documents = state["documents"]
    # build prompt
    prompt = ...
    return state.update(prompt=prompt)

使用 HaystackAction

Haystack + Burr 集成添加了 HaystackAction 类,以简化从 Haystack Component 定义 action。您可以通过传递组件、action 名称以及 readswrites 参数来实例化它。由于 HaystackAction 支持自定义 Component,这为您提供了极大的灵活性。

from burr.integrations.haystack import HaystackAction
from haystack.components.builders import PromptBuilder

build_prompt = HaystackAction(
    component=PromptBuilder(
        template="Document: {{documents}} Question: {{question}}"
    ),
    name="build_prompt",
    reads=["documents"],
    writes=["prompt"],
)

构建 Application(即代理)

要创建 Application,您需要将所有 action 在 .with_actions() 子句中传递给 ApplicationBuilder,并指定 action 之间的转换作为 action 名称的元组。您可以在同一个应用程序中混合搭配常规的 @actionHaystackAction。然后,您需要设置一个入口点,即应用程序的启动位置。使用带有停止条件的 .run() 来启动应用程序。

from burr.core import ApplicationBuilder
from burr.integrations.haystack import HaystackAction

embed_text = HaystackAction(name="embed_text", ...)
retrieve_documents = HaystackAction(name="retrieve_documents", ...)
build_prompt = HaystackAction(name="build_prompt", ...)
generate_answer = HaystackAction(name="generate_answer", ...)
display_answer = HaystackAction(name="display_answer", ...)

app = (
    ApplicationBuilder()
    .with_actions(
        embed_text,
        retrieve_documents,
        build_prompt,
        generate_answer,
        display_answer,
    )
    .with_transitions(
        ("embed_text", "retrieve_documents"),
        ("retrieve_documents", "build_prompt"),
        ("build_prompt", "generate_answer"),
        ("generate_answer", "display_answer"),
    )
    .with_entrypoint("embed_text")
    .build()
)

app.run(halt_after=["display_answer"])

转换 Haystack Pipeline

如果您想使用 Burr 运行现有的 Haystack Pipeline,可以使用函数 haystack_pipeline_to_burr_graph() 一次性进行转换。这将创建一个 Burr Graph,您可以将其传递给 ApplicationBuilder,而不是单独指定 action 和转换。

from haystack import Pipeline
from burr.integrations.haystack import haystack_pipeline_to_burr_graph

# define your Haystack Pipeline
pipeline = Pipeline()

# add components
pipeline.add_component(...)
pipeline.add_component(...)

# connect components
pipeline.connect(...)

# ...

graph = haystack_pipeline_to_burr_graph(pipeline)
app = (
    ApplicationBuilder()
    .with_graph(graph)
    .with_entrypoint("embed_text")
    .build()
)

添加遥测和监控

通过 ApplicationBuilder,您可以仪器化您的应用程序,为生产做好准备。以下是一些关键功能:

  • .with_tracker():将执行日志记录到 Burr UI。这与 OpenTelemetry 兼容,包括 Haystack 集成(OpenLLMetry、OpenInference)以及所有其他支持的 LLM 相关库(LLM API、向量数据库等)。
  • .with_state_persister():将应用程序的 State 存储在磁盘上并稍后恢复。这有助于构建您的产品(例如,创建用户会话),也有助于开发、调试和测试您的应用程序。
  • .with_hooks():在 action 执行时添加自定义逻辑(例如,在某些条件下发送 Slack 通知)。

通过启用跟踪器,您还可以注释跟踪数据以整理数据集、创建测试等。