LangChain Blog更新于

使用托管式深度智能体构建开箱即用的出色用户体验

LangChain在Managed Deep Agents v0.9中推出Slack频道的reactions API和SDK,开发者可用if语句或Jev等决策模型为智能体动态分配表情回应,作为长时间运行任务的加载状态,并支持25%置信度阈值回退与自定义表情。这是开发者工具类发布,不含模型能力本身的验证结果。

配图来源 · LangChain Blog

要点

  • 新的 Slack 频道 reactions API 让构建加载状态和回执变得非常简单,用于 托管式深度智能体 使用简单的启发式方法或决策模型,如 Jev。
  • 这个新的 SDK 可帮助为与代理交互的用户构建友好的用户界面和加载状态。
  • 了解我们如何在自己的内部智能体和非开发人员用户中使用这种设计思维。

‍

在构建高效的智能体用户体验时,加载状态是最被低估(也最容易被遗忘)的设计要素之一。

根据我们的经验,当用户能够了解这些智能体实际在做什么时,他们就会信任这些智能体。这种行为越来越多地以拟物化UI的形式呈现,这是一种数字物体模仿现实世界对应物的设计理念。这位有远见的人 达美乐披萨追踪器 是可应用于智能体的拟物化设计最突出的例子之一。如今,数字加载状态(即使是那些 可能会对你撒谎)对于让任何用户体验变得清晰易懂和高效至关重要。用于Managed Deep Agents的全新agent reactions SDK是一个出色的工具,可以为与您的代理交互的用户构建令人愉悦的界面和加载状态。

Managed Deep Agents 中的新反应属性

在 v0.9,Managed Deep Agents 推出了一个新 API,用于管理分布式智能体的反应(reaktions),并提供了一套系统,可使用您选择的工具动态分配表情符号回应,例如决策模型、前沿模型,或老派的传统 if 声明。

该 new reactions 属性 Slack 频道 接受一个表示表情符号的字符串,或一个返回表情符号的可调用对象:

from managed_deepagents import channels

async def choose_emoji(context: dict) -> str:
    return "bug" if "broken" in context["text"].lower() else "eyes"

channel = channels.slack(name="Support Bot", reactions=choose_emoji)

在此示例中,我们默认使用 👀,但如果消息中包含“broken”一词,静态分析会分配 🐛。

我们希望 LangChain 开发者能够采用常见的用户愉悦模式来处理加载状态和等待状态,因为许多代理任务的运行时间可能很长。与代理交互的最终用户需要得到任务已被接收的确认。

例如,我们最近推出了一个用于创建视频内容的内部营销智能体。在等待该智能体回复时,让用户了解其进度会很有帮助。

以下是我们的智能体可以创建的视频和动态图形内容类型的示例:

https://x.com/ndrezn/status/2104962135730061688?ref_src=twsrc%5Etfw%7Ctwcamp%5Etweetembed%7Ctwterm%5E2104962135730061688%7Ctwgr%5E3fb82affc6e194f89989fadec1e2161b853b60b3%7Ctwcon%5Es1_&ref_url=https%3A%2F%2Fapp.notion.com%2Fp%2FBuild-great-out-of-the-box-user-experiences-with-Managed-Deepagents-3ed808527b178002bda9fc42f4db7213

仅仅用一个表情符号来回应一条消息往往是不够的。我们还需要代理告诉用户它是如何理解这个任务的,而符合语境的回应可以成为你的代理设计中的一个关键部分。

让我们进一步深入基础反应示例。我们可以设置一个 决策模型,如 Jev, 根据输入上下文从一组固定的表情符号词汇中进行选择。Jev 最多支持 255 个选项,但你可以通过多个问题构建决策矩阵(例如,先将表情符号分组为类别,让 Jev 选择一个类别,再选择一个表情符号),以查询更多表情符号:

from functools import lru_cache

from langchain_typesafe import Choice, TypeSafeClassifier
from managed_deepagents import channels

# The description is what the model matches on, so describe the situation
# rather than the picture. Keep an option for anything unremarkable.
VOCABULARY = Choice(
    instructions="Which emoji best acknowledges this message?",
    criteria={ 
        "bug": "A defect or incorrect behaviour.",
        "rotating_light": "A declared incident or outage.",
        "mag": "A code review, pull request, or diff to look at.",
        "hourglass": "Waiting on someone or something else; blocked.",
        "speech_balloon": "A question, or a request to explain something.",
        "wave": "A greeting or hello.",
        "eyes": "Anything that does not clearly fit another option.",
    },
)


@lru_cache(maxsize=1)
def classifier() -> TypeSafeClassifier:
    return TypeSafeClassifier(model="typesafe/jev-latest")


async def choose_emoji(context: dict) -> str:
    answer = await classifier().ainvoke(
        {"state": context["text"][:2000], "questions": {"emoji": VOCABULARY}}
    )
    emoji = answer.choices["emoji"]
    # Below this the model has no real view, so prefer a generic reaction.
    return emoji.choice if emoji.confidence >= 0.25 else "eyes"


channel = channels.slack(name="Support Bot", reactions=choose_emoji)

在这个示例中,我们使用了新的 TypeSafe Classifier 它是 LangChain 工具集的一部分。它是与 TypeSafe 兼容的决策模型交互的好方式,例如 Jev,但也可以在相同的端点上使用其他决策模型,例如托管在 LangSmith LLM Gateway上的 SemIf。或者,您可以在不同模型之间切换,以试验最佳选项。

同一个 emoji 可能会根据智能体的行为表达完全相反的含义。例如,来自值班智能体的 🔥 可能意味着生产环境正在“着火”,您应该被叫醒;而来自增长智能体的 🔥 可能意味着营销活动效果很好,您可以继续睡觉。这就是为什么 criteria 描述比 emoji 名称起更大作用。模型匹配的是您对情况的描述,因此同一个符号承载着您的 workspace 已赋予它的任何含义。

上面的示例还展示了您可以利用置信度阈值。如果决策模型对其首选结果的置信度低于 25%,我们将回退到 👀。如果词汇表中提供的 emoji 都不真正合适,您也可以回退为不作任何反应。

你可以说这种设计存在不诚实之处:由于评分回应的是另一个模型,而非作出回应的模型本身,二者在解读上可能存在细微差异。因此,重要的是要清晰地描述你期望每种反应如何被使用。如果某个反应的描述过于笼统,评分模型会过度依赖某些反应回应,即使在外行看来另一个反应并不会过拟合。

你可以通过 Slack shortcode 将自定义表情添加到词汇表中。针对我们的内部内容代理,应用 AI 团队创建了一组代理可在回复中使用的自定义表情。我喜欢 lc-no-em-dash,当被指示撰写内容时,代理会选择它:

尝试不同的方法。不同的表情描述(或完全不同的词汇表组织方式)会产生不同的结果。同样,可以扩展或缩减代理可用的表情集合。

Managed Deep Agents 旨在通过简单、富有表现力的 API,充分利用我们认为对代理普及至关重要的所有细微设计界面。开始为现有的 Managed Deep Agents 添加反应,请参阅 我们的文档。或者,如果你之前没有构建过 managed deep agent,最好的入门方式是 我们的快速入门指南.

‍

原始出处

LangChain Blog

内容说明

原始发布及相关权利归来源方。

机器翻译 · 请以原文为准