返回资源广场

Skills 资源 / 技能包

swapping-agent-models

把同一套智能体架构代码切到另一个大模型上——两种 model 入参写法、OpenAI 兼容端点接法、集成包依赖边界,以及主智能体与子智能体各跑不同模型的混用。Use when 要把智能体从旗舰闭源模型换到国产便宜模型、接一个新的 OpenAI 兼容端点、字符串写法报 ImportError、换完模型后工具不再被触发、或要做「主贵规划、子便宜干活」的成本分层时。涵盖两条 model 解析路径的差异、换模型的最小改动面、换完后的验收清单;不含按型号调优的配置档注册(见 configuring-model-profiles)。

SKILL.md 技能文档

能力目标

在不改动任何架构代码的前提下,把一个智能体从一个模型切到另一个模型并验证整套装具在新模型上仍真实运转;同时能给主智能体与子智能体分别配不同模型,做能力与成本分层。

前置

  • 已能构造并跑通一个智能体(见 bootstrapping-deepagents-env)。
  • 底层模型必须支持工具调用,否则整套工具都不会被触发。
  • 准备两个模型来源(两个不同厂商的凭证,或同一厂商的两个型号),才能真正验证「换模型不改架构」。

实操流程

  1. 定一条固定任务当基线,两个模型都跑它、并排比对输出,例如「用一句话解释什么是智能体装具,并列出 3 个要点」。

  2. 用预配置实例写法接第一个模型。绝大多数国产模型都提供 OpenAI 兼容端点,用这一条路即可:

    import os
    from langchain_openai import ChatOpenAI
    from deepagents import create_deep_agent
    
    model_a = ChatOpenAI(
        model="deepseek-chat",
        base_url=os.environ.get("DEEPSEEK_BASE_URL", "https://api.deepseek.com"),
        api_key=os.environ["DEEPSEEK_API_KEY"],
    )
    agent = create_deep_agent(model=model_a)
    result = agent.invoke({"messages": [{"role": "user", "content": TASK}]})
    
  3. 换第二个模型:只改 model= 指向的那个实例,架构代码一字不动:

    model_b = ChatOpenAI(
        model="qwen-plus",
        base_url=os.environ["QWEN_BASE_URL"],       # 兼容端点地址
        api_key=os.environ["QWEN_API_KEY"],
    )
    agent_b = create_deep_agent(model=model_b)
    result_b = agent_b.invoke({"messages": [{"role": "user", "content": TASK}]})
    
  4. 需要走提供方字符串写法时,先装对应集成包再用。字符串路径由框架按前缀动态导入集成包,没装就抛带安装指引的 ImportError:

    pip install langchain-deepseek
    
    agent = create_deep_agent(model="deepseek:deepseek-chat")
    

    两条路径的差别要心里有数:传实例时框架原样透传该对象;传字符串时框架会另行构造一个该提供方的专属模型类。同样是接一家模型,两条路径用的是不同的 Python 类。

  5. 迁到自己的模型时只替换三个值,其余不动:

    model_b = ChatOpenAI(
        model="你的模型名",
        base_url="你的 OpenAI 兼容端点",
        api_key=os.environ["你的_KEY_环境变量"],
    )
    agent = create_deep_agent(model=model_b)
    
  6. 做主子分层:主智能体用强模型编排、子智能体用便宜模型干批量活。子智能体的模型字段接受模型名字符串或已构造的模型对象:

    sub_agents = [{
        "name": "quick_answer_agent",
        "model": model_b,
        "system_prompt": "你是一个简洁回答专家,用一句话回答所有问题。",
        "description": "简洁回答子 Agent,适合快速总结。",
    }]
    agent = create_deep_agent(model="deepseek:deepseek-chat", subagents=sub_agents)
    

校验回路

  • 两个模型各跑同一固定任务、各留一份输出,两边都答出可用结果,即「换模型跑得通」成立。
  • 换模型后再跑一个明确要求先规划的任务,检查消息列表里出现 write_todos 的工具调用与对应回执——装具在新模型上真干活,不是摆设。
  • 做分层时用事件流拦截模型调用结束事件,从返回元数据里读实际命中的模型标识、按事件里的智能体名字段区分主脑子脑,确认两侧确实命中不同模型。
  • 算账:把两个模型同一任务的用量元数据打出来对比。注意有缓存命中的一侧提示词 token 数虽高、实际成本却低,看数字前先分清是否命中缓存。价格属高速演变信息,落地前回各厂商官网核当时牌价。

常见陷阱

  • 给 OpenAI 兼容端点写错提供方前缀:把某家兼容端点模型写成 "openai:该模型名" 会让请求走 OpenAI 的 Responses API,而该端点不支持,报 404 NotFoundError。接兼容端点用预配置实例写法。
  • 以为「换模型不改架构」等于零依赖变更:架构代码确实不改,但字符串写法要求装对应集成包。报错文案会直接告诉你装哪个包,按提示装即可。
  • 换了个不支持工具调用的模型:不报错,只是工具永远不被触发、任务安静地做不成。选型先确认该型号支持工具调用。
  • 拿官方文档截图里的型号名直接用:型号名属高速演变信息,落地前回对应厂商官网核当时可用型号。
  • 在流式输出里找消息:流式片段的键是中间件与节点名(如包裹在模型调用前后的那些节点),不是消息键,直接找消息会取空。要分析工具调用就用一次性调用拿完整消息列表,或按节点名解析片段。
  • 忽略兼容端点的提供方标识:用通用 OpenAI 客户端类包装的模型,框架看到的提供方标识一律是 openai,无论它背后接的是哪家。这会影响按型号命中的配置档,详见 configuring-model-profiles。

适用范围与前置条件

  • 已能构造并跑通一个智能体(见 bootstrapping-deepagents-env)。
  • 底层模型必须支持工具调用,否则整套工具都不会被触发。
  • 准备两个模型来源(两个不同厂商的凭证,或同一厂商的两个型号),才能真正验证「换模型不改架构」。

怎么使用

使用步骤

  1. 定一条固定任务当基线,两个模型都跑它、并排比对输出,例如「用一句话解释什么是智能体装具,并列出 3 个要点」。

  2. 用预配置实例写法接第一个模型。绝大多数国产模型都提供 OpenAI 兼容端点,用这一条路即可:

    import os
    from langchain_openai import ChatOpenAI
    from deepagents import create_deep_agent
    
    model_a = ChatOpenAI(
        model="deepseek-chat",
        base_url=os.environ.get("DEEPSEEK_BASE_URL", "https://api.deepseek.com"),
        api_key=os.environ["DEEPSEEK_API_KEY"],
    )
    agent = create_deep_agent(model=model_a)
    result = agent.invoke({"messages": [{"role": "user", "content": TASK}]})
    
  3. 换第二个模型:只改 model= 指向的那个实例,架构代码一字不动:

    model_b = ChatOpenAI(
        model="qwen-plus",
        base_url=os.environ["QWEN_BASE_URL"],       # 兼容端点地址
        api_key=os.environ["QWEN_API_KEY"],
    )
    agent_b = create_deep_agent(model=model_b)
    result_b = agent_b.invoke({"messages": [{"role": "user", "content": TASK}]})
    
  4. 需要走提供方字符串写法时,先装对应集成包再用。字符串路径由框架按前缀动态导入集成包,没装就抛带安装指引的 ImportError:

    pip install langchain-deepseek
    
    agent = create_deep_agent(model="deepseek:deepseek-chat")
    

    两条路径的差别要心里有数:传实例时框架原样透传该对象;传字符串时框架会另行构造一个该提供方的专属模型类。同样是接一家模型,两条路径用的是不同的 Python 类。

  5. 迁到自己的模型时只替换三个值,其余不动:

    model_b = ChatOpenAI(
        model="你的模型名",
        base_url="你的 OpenAI 兼容端点",
        api_key=os.environ["你的_KEY_环境变量"],
    )
    agent = create_deep_agent(model=model_b)
    
  6. 做主子分层:主智能体用强模型编排、子智能体用便宜模型干批量活。子智能体的模型字段接受模型名字符串或已构造的模型对象:

    sub_agents = [{
        "name": "quick_answer_agent",
        "model": model_b,
        "system_prompt": "你是一个简洁回答专家,用一句话回答所有问题。",
        "description": "简洁回答子 Agent,适合快速总结。",
    }]
    agent = create_deep_agent(model="deepseek:deepseek-chat", subagents=sub_agents)
    

继续探索

全部资源
Skills 资源 / 技能包

bootstrapping-deepagents-env

在一台干净机器上装好 DeepAgents 运行环境、接入一个 OpenAI 兼容大模型凭证,并跑通第一个 create_deep_agent 工具调用闭环。Use when 需要初始化 DeepAgents 开发环境、系统 Python 版本不达标装不上包、不确定装到了哪个版本、接 DeepSeek 之类国产模型报 ImportError 或 404 这类环境层故障时。涵盖解释器版本核对、虚拟环境置备、主包与提供方包安装、版本核验、凭证注入、最小示例验收;不含 Agent 各项能力的用法(见 tracking-task-progress-with-todos 等能力型 skill)。

Skills 资源 / 技能包

inspecting-agent-graph-and-tools

把一个 create_deep_agent 建出来的智能体拆开看:列出执行图节点、列出实际挂载的工具、捕获框架预装的中间件清单、抓取每轮真正发给模型的工具集。Use when 需要确认某项能力是否真的挂上了、排查「我的工具去哪了 / 这些工具哪来的 / 内置工具到底几个」、验证自定义中间件是否进了图、或要在改配置前后做结构对照时。涵盖图节点自省、工具清单反查、中间件清单捕获、编译期与运行期工具集差异;不含具体能力的用法。

Skills 资源 / 技能包

tracking-task-progress-with-todos

让智能体把多步任务拆成结构化待办清单写进状态,并从调用结果里取出清单、渲染成实时进度、兜底检测「勾完清单却没给答案」的失败形态。Use when 需要给长任务做进度面板、想稳定触发 write_todos、发现规划没被触发、或要把 todos 推给前端 UI 与日志时。涵盖稳定触发写法、取清单的两条路径、三态进度渲染、失败形态检测;不含子任务委派(见 delegating-subtasks-to-subagents)。