LangChain Blog수정일

관리된 깊은 에이전트를 사용하여 훌륭한 기본 설정 상태의 사용자 경험을 구축하세요.

주요 요점 Slack 채널용 새로운 반응 API를 사용하면, Jev과 같은 간단한 예제 또는 의사결정 모델을 통해 관리되는 깊은 에이전트에 대한 로딩 상태와 결과를 쉽게 구축할 수 있습니다. 이 새로운 SDK는 에이전트와 상호작용하는 사용자에게 사용자 친화적인 인터페이스와 로딩 상태를 구축하는 데 도움이 됩니다. 우리가 자체 내부 에이전트와 개발자가 아닌

이미지 출처 · LangChain Blog

주요 요점

  • Slack 채널용 새로운 반응 API를 사용하면, Jev과 같은 간단한 예제 또는 의사결정 모델을 통해 관리되는 깊은 에이전트에 대한 로딩 상태와 결과를 쉽게 구축할 수 있습니다.
  • 이 새로운 SDK는 에이전트와 상호작용하는 사용자에게 사용자 친화적인 인터페이스와 로딩 상태를 구축하는 데 도움이 됩니다.
  • 우리가 자체 내부 에이전트와 개발자가 아닌 사용자에게 이 디자인 사고를 어떻게 활용하는지 보세요.

‍

로딩 상태는 효과적인 에이전트 사용자 경험을 구축할 때 가장 과소평가되고 잊혀지는 디자인 측면 중 하나입니다.

우리의 경험에 따르면, 사용자들은 이러한 에이전트가 실제로 무엇을 하고 있는지 알 수 있을 때 에이전트를 신뢰합니다. 이러한 행동은 스키오모픽릭 UI 형태로 더욱 나타나는데, 이는 디지털 객체가 실제 세계의 객체를 모방하는 디자인 개념입니다. Domino’s Pizza Tracker는 에이전트에 적용할 수 있는 스키오모픽릭 디자인의 대표적인 예입니다. 오늘날, 디지털 로딩 상태(심지어 당신을 속일 수도 있는 상태도)는 사용자 경험을 이해하기 쉽고 효과적으로 만들기 위해 매우 중요합니다. Managed Deep Agents용 새로운 에이전트 반응 SDK는 사용자가 에이전트와 상호작용할 때 즐거운 인터페이스와 로딩 상태를 구축하는 데 유용한 도구입니다.

관리된 깊은 에이전트에 새로운 반응 속성

v0.9에서 관리형 깊은 에이전트는 분산 에이전트의 반응을 관리하는 새로운 API와, 의사결정 모델, 프론티어 모델 또는 전통적인 if 문과 같은 선택한 도구를 통해 동적으로 이모지 응답을 할당하는 시스템을 포함합니다.

The new reactions 속성으로 슬랙 채널 이모지를 나타내는 문자열이나 하나를 반환하는 호출 가능한 객체 중 하나를 받습니다.

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)

이 예제에서는 LangChain 툴킷의 일부인 새로운 TypeSafe Classifier를 사용합니다. 이는 Jev과 같은 TypeSafe와 호환되는 의사결정 모델과 상호작용하는 훌륭한 방법입니다. 하지만 LangSmith LLM Gateway에 호스팅된 SemIf와 같은 다른 의사결정 모델도 동일한 엔드포인트를 사용할 수 있습니다. 또는 모델을 교체하여 최적의 옵션을 실험해 볼 수도 있습니다.

에이전트가 하는 일에 따라 같은 이모티콘이 반대되는 의미를 가질 수 있습니다. 예를 들어, 대기 중인 에이전트가 보낸 🔥은 생산이 중단되고 깨어나야 한다는 뜻일 수 있고, 성장 에이전트가 보낸 🔥은 캠페인이 효과를 내고 다시 잠을 자도 된다는 뜻일 수 있습니다. 이런 이유로 criteria 설명이 이모티콘 이름보다 더 많은 작업을 수행합니다. 모델은 상황에 대한 설명과 일치하므로, 같은 글림은 작업 공간에서 이미 부여된 의미를 가집니다.

위 예시는 신뢰도 임계값을 활용할 수 있음을 보여줍니다. 의사결정 모델이 최고 선택에 대해 25% 미만의 신뢰도를 가진다면 👀로 돌아가게 됩니다. 또한, 제공된 어휘에 포함된 이모지 중 아무것도 적절하지 않은 경우에는 아무 반응도 보이지 않는 방식으로 대처할 수도 있습니다.

이 설계에는 부정직함이 있다고 주장할 수 있습니다. 다른 모델이 반응 응답을 평가하기 때문에 해석에 미묘한 차이가 생길 수 있습니다. 그러므로 각 반응이 어떻게 사용될 것으로 예상하는지 효과적인 설명을 작성하는 것이 중요합니다. 특정 반응 응답의 설명이 너무 일반적이라면, 평가 모델이 과도하게 고정되기 쉽습니다. 비록 다른 반응이 미숙련 눈에 과적합되지 않는다 하더라도 말입니다.

Slack 단축코드를 사용하여 자신의 어휘에 맞춤형 이모지를 추가할 수 있습니다. 우리 내부 콘텐츠 에이전트를 위해 AI 팀은 에이전트가 답장에서 사용할 수 있는 맞춤형 이모지 세트를 만들었습니다. 저는 lc-no-em-dash를 좋아합니다. 에이전트가 콘텐츠를 작성하라는 지시를 받을 때 이 이모지를 선택합니다.

다른 접근 방식을 시도해 보세요. 이모지에 대한 다른 설명(또는 어휘 구조를 완전히 바꾸는 방법)은 다른 결과를 가져옵니다. 마찬가지로, 에이전트가 사용할 수 있는 이모지 집합을 확장하거나 축소해도 됩니다.

Managed Deep Agents는 에이전트 도입에 필수적이라고 생각되는 모든 미묘한 디자인 인터페이스를 활용할 수 있도록 설계되었으며, 간단하고 명확한 API를 제공합니다. 기존의 Managed Deep Agents에 반응을 추가하려면 우리 문서를 참조하세요. 혹은, 이전에 Managed Deep Agent을 구축한 적이 없다면 우리 퀵스타트를 통해 시작하는 것이 가장 좋습니다.

‍

원문 출처

LangChain Blog

내용 안내

원문 발행 및 권리는 출처에 있습니다.

기계 번역 · 원문을 참고하세요