`toolContext`（工具上下文），可以在工具调用时附加参数。比如，传递鉴权信息、数据隔离标识等。

传递：

* 可以通过模型配置传递：`ChatConfig:defaultToolContext`
* 可以通过聊天选项传递：`ChatOptions:toolContext`
* `toolContext` 也同时会作为 Prompt.attrs 进行传递（用于 skill 接口）

获取：

* 如果是接口形式（或声明形式），通过 "args" 参数集合获取
* 如果是注解形式，通过 方法参数获取


提醒：

* 如果与 llm 产生的参数同名，则会以 `toolContext` 变量为准

### 1、示例

* 通过 `ChatConfig:defaultToolContext` 传递

```java
public void case2(ChatConfig config, String user) {
    ChatModel chatModel = ChatModel.of(config)
                                   .defaultToolAdd(new WeatherTool())  //添加默认工具
                                   .defaultToolContextPut("user", user) //添加默认工具上下文
                                   .build(); 
    
    chatModel.prompt("hello").call();
}

//user 参数不加 @Param（即不要求 llm 生成），由 toolContext 传入（附加参数）！
public class WeatherTool {
    @ToolMapping(description = "获取指定城市的天气情况")
    public String get_weather(@Param(description = "根据用户提到的地点推测城市") String location, String user) {
        return "晴，24度"; //可使用 “数据库” 或 “网络” 接口根据 location 查询合适数据;
    }
}
```

* 通过 `ChatOptions:toolContext` 传递

```java
public void case2(ChatConfig config, String user) {
    ChatModel chatModel = ChatModel.of(config).build(); 
    
    chatModel.prompt("hello")
        .options(o->o.toolAdd(new WeatherTool()) //添加工具
                     .toolContextPut("user", user)) //添加工具上下文
        .call();
}

//user 参数不加 @Param（即不要求 llm 生成），由 toolContext 传入（附加参数）！
public class WeatherTool {
    @ToolMapping(description = "获取指定城市的天气情况")
    public String get_weather(@Param(description = "根据用户提到的地点推测城市") String location, String user) {
        return "晴，24度"; //可使用 “数据库” 或 “网络” 接口根据 location 查询合适数据;
    }
}
```

参考：[《模型配置与请求选项》](/article/1087)

### 2、具体说明

* 兼容 `MCP` 参数传递

* `ChatOptions:toolContext` 或者 `ChatConfig:defaultToolContext` 工具上下文

在 llm 生成的参数之外，传递用户附加的参数。如果参数名相同，toolContext 会替换 llm 生成的参数。

* `@Param` 注解的参数


| 情况                       | 描述 | 
| ---------------- | -------- | 
| 有 `@Param` 注解     | 会成为 tool 的输入架构，会要求 llm 生成     | 
| 无 `@Param` 注解     | 一般由用户额外输入（比如： toolContext）     | 



