深度智能体-子智能体

     1.概述

        为了执行复杂多步任务,深度智能体可以创建专业的子智能体,并把相关任务委派给子智能体执行,一方面可以给子智能体设置专门的提示词,另一方面通过上下文隔离保持了主智能体上下文整洁性,从而解决上下文的膨胀问题。

        在如下场景下应该使用子智能体:

        1)复杂的多步任务生成很多的中间结果污染智能体的上下文

        2)特定的业务领域,需要与该领域匹配的工具和提示词

        3)需要根据实际需要选择使用不同的大模型

        4)使主智能体专注于高层的沟通和协调工具

        深度智能体自带一个通用子智能体。通用子智能体直接继承了深度智能体的大模型、工具和提示词。通用子智能体适合用于没有专业要求情况的上下文隔离,主智能体可以把一个复杂的多步任务委托给通用子智能体,并得到精简的应答,从而避免中间结果引起主智能体上下文的膨胀。

     2.配置子智能体

        在创建深度智能体时使用subagents配置子智能体。子智能体有两种形式,一种是字典格式定义,一种是用CompiledSubAgent,后者用于使用langgraph中的Graph。

      2.1字典格式 

        使用字典格式定义子智能体时,有5个必选键,3个可选键。5个必选键如下:

        1)name (str): 用于唯一标识子智能体。主智能体通过这个名字去调用task()
        2)description (str): 说明子智能体能做什么,主智能体基于描述选择子智能体
        3)system_prompt (str): 子智能体系统提示词,包括工具使用指南和输出格式说明
        4)tools (List[Callable]): 子智能体可用工具列表。注意保持该表的最小化,仅保留子智能体必须使用的工具

        3个可选键如下:
        1)model (str | BaseChatModel): 用户指定子智能体使用的大模型。如果不指定,则使用主智能体的大模型
        2)middleware (List[Middleware]): 子智能体中的中间件
        3)interrupt_on (Dict[str, bool]): 针对针对特定的工具配置人机回环

        以下示例用字典格式创建一个研究历史问题的子智能体,然后在创建深度智能体时传入。

        首先创建搜索工具和大模型:

import os
from tavily import TavilyClient
from typing import Literal

from langchain_openai import ChatOpenAI
os.environ["TAVILY_API_KEY"] = "tvly-*"
tavily_client = TavilyClient(api_key=os.environ["TAVILY_API_KEY"])
from langchain.tools import tool
@tool
def internet_search(
    query: str,
    max_results: int = 5,
    topic: Literal["general", "news", "finance"] = "general",
    include_raw_content: bool = False,
):
    """Run a web search"""
    return tavily_client.search(
        query,
        max_results=max_results,
        include_raw_content=include_raw_content,
        topic=topic,
    )


llm = ChatOpenAI(
    model = 'qwen-plus',
    api_key = "sk-*",
    base_url = "https://dashscope.aliyuncs.com/compatible-mode/v1")

        第二,创建子智能体:

research_subagent = {
    "name": "research-agent",
    "description": "Used to research more in depth in history  questions",
    "system_prompt": "你是一位史学研究专家。你的工作是进行对历史问题进行透彻的研究,然后写一份专业的报告。您可以借助搜索工具从互联网收集信息作为你的研究素材.",
    "tools": [internet_search],
    }
subagents = [research_subagent,]

        第三,创建深度智能体,并配置子智能体:

from deepagents import create_deep_agent
agent = create_deep_agent(
    model=llm,
    subagents=subagents
)

      2.2 使用CompiledSubAgent

        为了重用已经存在的实现了特定业务功能的工作流Graph或者智能体,则需要使用CompiledSubAgent对图进行封装,然后再创建深度智能体时传入。如下示例代码重用了一个现有的图:

from deepagents import create_deep_agent, CompiledSubAgent
 

your_subagent = CompiledSubAgent(
    name="history-analyzer",
    description="Specialized agent for complex history question analysis tasks",
    runnable=your_graph
)

subagents = [your_subagent]

agent = create_deep_agent(
    model=llm,
    subagents=subagents
)

     3.子智能体实践

        使用子智能体时需要遵循如下原则:

        1)保证子智能体描述清晰准确。因为主智能体根据子智能体描述去选择使用哪一个子智能体,模糊的说明导致子智能体选择错误,甚至找不到。比如:

Used to research more in depth in history  questions"

        2)保证系统提示词详细。必须包括如何使用工具以及输出的格式要求。比如:

research_subagent = {
    "name": "research-agent",
    "description": "Conducts in-depth research using web search and synthesizes findings",
    "system_prompt": """You are a thorough researcher. Your job is to:

    1. Break down the research question into searchable queries
    2. Use internet_search to find relevant information
    3. Synthesize findings into a comprehensive but concise summary
    4. Cite sources when making claims

    Output format:
    - Summary (2-3 paragraphs)
    - Key findings (bullet points)
    - Sources (with URLs)

    Keep your response under 500 words to maintain clean context.""",
    "tools": [internet_search],
}

        3)最小化可用工具集。仅保留必须使用的工具

        4)根据需要为子智能体配置最合适的大模型

        5)指示智能体返回汇总后的结果,不要返回原始数据。比如:

data_analyst = {
    "system_prompt": """Analyze the data and return:
    1. Key opinions (3-5)
    2. With  concise descrption
    3. Recommended next actions

    Do NOT include:
    - Raw data
    - Intermediate calculations
    - Detailed tool outputs

    Keep response under 300 words."""
}

     4.问题排查

        下面是一些在使用子智能体过程中的常见问题及解决办法。

        问题1:未调用子智能体

        原因分析:因为子智能体的描述步清晰,所以主智能找不到能够委托的智能体,所以努力自己去处理任务

        解决办法:

        1)把子智能体的描述写清晰和准确

        2)在深度智能体的提示词中明确要求智能体去把任务委托给子智能体,比如:

agent = create_deep_agent(
    system_prompt="""...your instructions...

    IMPORTANT: For complex tasks, delegate to your subagents using the task() tool.
    This keeps your context clean and improves results.""",
    subagents=[...]
)

        问题2:上下文持续膨胀

        原因分析:子智能体返回结果过多

        解决办法:

        1)如果子智能体中间结果无用,则明确要求子智能体返回简洁、紧凑的结果。比如:

system_prompt="""...

IMPORTANT: Return only the essential summary.
Do NOT include raw data, intermediate search results, or detailed tool outputs.
Your response should be under 200words."""

        2)如果子智能体中间结果用有,则需要使用持久化保存中间结果,比如:

system_prompt="""When you gather large amounts of data:
1. Save raw data to /data/interim_result.txt
2. Process and analyze the data
3. Return only the analysis summary

This keeps context clean."""

        问题3:子智能体选择错误,导致所托非人,不能完成预期的任务。

        原因分析:多个子智能体描述类似,子智能体不能区分

        解决办法:在保证子智能描述清晰的前提下,保证不同子智能体描述的差异最大化

        

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值