本页目录
Profiles / 模型配置Note 74

03 ProviderProfile:模型构造参数

它是什么

它是什么

ProviderProfile 只管模型构造参数,比如 temperaturetimeoutbase_url 或构造前校验。provider-level profile 先应用,model-level profile 再覆盖同名字段。它不改变系统提示词、工具描述或 subagent 行为。

它生效的位置比 HarnessProfile 更早:当 create_deep_agent(model="provider:model") 收到字符串模型 spec 时,Deep Agents 会先解析模型并应用 ProviderProfile,再创建 Agent。

最小代码

文件:deepagent_src/profiles_teach/03_provider_profile.py

register_provider_profile(
    "profiledemo",
    ProviderProfile(init_kwargs={"temperature": 0, "timeout": 30}),
)
register_provider_profile(
    "profiledemo:tiny",
    ProviderProfile(init_kwargs={"timeout": 5}),
)

运行

uv run python deepagent_src/profiles_teach/03_provider_profile.py

预期输出末尾:

provider profile merge plus real agent ok

验证方式

脚本用 apply_provider_profile("profiledemo:tiny", run_pre_init=False) 断言合并结果是 temperature=0timeout=5,同时真实调用项目模型创建的 Agent,并要求它调用 provider_profile_note 工具。

常见误区

不要指望 ProviderProfile 改工具或 prompt。那些属于 HarnessProfile,Provider profile 只发生在模型构造阶段。

相关资源

  • 查看示例代码:deepagent_src/profiles_teach/03_provider_profile.py
    from __future__ import annotations
    
    from deepagents import ProviderProfile, create_deep_agent, register_provider_profile
    from deepagents.profiles.provider.provider_profiles import apply_provider_profile
    from langchain.tools import tool
    
    from _model import get_real_model
    from deepagent_src.agent_output import invoke_and_pretty_print
    
    
    DEMO_PROVIDER_KEY = "profiledemo"
    DEMO_MODEL_SPEC = "profiledemo:tiny"
    
    
    @tool
    def provider_profile_note() -> str:
        """Return the ProviderProfile lesson note."""
        return "ProviderProfile controls model construction kwargs."
    
    
    def main() -> None:
        register_provider_profile(
            DEMO_PROVIDER_KEY,
            ProviderProfile(init_kwargs={"temperature": 0, "timeout": 30}),
        )
        register_provider_profile(
            DEMO_MODEL_SPEC,
            ProviderProfile(init_kwargs={"timeout": 5}),
        )
    
        merged_kwargs = apply_provider_profile(DEMO_MODEL_SPEC, run_pre_init=False)
    
        agent = create_deep_agent(model=get_real_model(), tools=[provider_profile_note])
        result = invoke_and_pretty_print(
            agent,
            {
                "messages": [
                    {
                        "role": "user",
                        "content": (
                            "必须调用 provider_profile_note,"
                            "然后用一句中文复述工具返回值。"
                        ),
                    }
                ]
            },
        )
        tool_outputs = [
            getattr(message, "content", "")
            for message in result["messages"]
            if message.__class__.__name__ == "ToolMessage"
        ]
    
        assert merged_kwargs["temperature"] == 0
        assert merged_kwargs["timeout"] == 5
        assert any("model construction kwargs" in output for output in tool_outputs)
        print("provider profile merge plus real agent ok")
    
    
    if __name__ == "__main__":
        main()