集成:Burr
从 Haystack 组件构建一个代理
目录
概述
Burr 是一个开源的 Python 框架,用于构建进行决策的应用程序(聊天机器人、代理、模拟等)。Burr UI 是其开源、免费且本地优先的伴侣应用程序,用于监控、调试、注释等。
此扩展允许您使用 Haystack 组件(原生、集成和自定义)来创建 Burr 代理。Burr 提供灵活性来管理代理的状态(即内存)并定义条件逻辑来选择其下一步操作。
此版本 博客文章 进一步详细介绍了 Haystack + Burr 集成的优势。请参阅此笔记本教程以了解完整示例( GitHub、Google Colab )
安装
pip install "burr[haystack]"
使用
创建 action
在 Burr 中,您的代理或 Application 由 actions 和 transitions 构成。定义 action 的默认方法是使用 @action 装饰器。reads 和 writes 参数指定可以从状态读取和写入状态的值。此外,装饰的函数必须将 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 名称以及 reads 和 writes 参数来实例化它。由于 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 名称的元组。您可以在同一个应用程序中混合搭配常规的 @action 和 HaystackAction。然后,您需要设置一个入口点,即应用程序的启动位置。使用带有停止条件的 .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 通知)。
通过启用跟踪器,您还可以注释跟踪数据以整理数据集、创建测试等。
