官方文档地址:
https://help.aliyun.com/zh/model-studio/qwen-function-calling?spm=a2c4g.11186623.help-menu-2400256.d_0_1_4.6cc920b91Ab0jd&scm=20140722.H_2862208._.OR_help-T_cn~zh-V_1

下面是claud模型的分析过程:
根据代码分析,模型生成包含工具调用响应的过程如下:

  1. 模型配置和初始化:
// 1. 配置模型参数
GenerationParam param = GenerationParam.builder()
    .model("qwen-max")  // 使用通义千问增强版模型
    .apiKey(System.getenv("DASHSCOPE_API_KEY"))
    .messages(messages)  // 对话历史
    .resultFormat(ResultFormat.MESSAGE)  // 指定返回格式为消息格式
    .tools(Arrays.asList(  // 注册可用的工具
        ToolFunction.builder().function(fdWeather).build(),
        ToolFunction.builder().function(fdTime).build()
    )).build();

// 2. 创建模型实例
Generation gen = new Generation();
  1. 工具定义和描述:
// 1. 生成工具的JSON Schema
ObjectNode jsonSchemaWeather = generateSchema(GetWeatherTool.class);

// 2. 定义工具函数
FunctionDefinition fdWeather = FunctionDefinition.builder()
    .name("get_current_weather")  // 工具名称
    .description("获取指定地区的天气")  // 工具描述
    .parameters(JsonUtils.parseString(jsonSchemaWeather.toString()).getAsJsonObject())  // 参数定义
    .build();
  1. 对话上下文设置:
// 1. 系统提示,引导模型使用工具
Message systemMsg = Message.builder()
    .role(Role.SYSTEM.getValue())
    .content("You are a helpful assistant. When asked a question, use tools wherever possible.")
    .build();

// 2. 用户输入
Message userMsg = Message.builder()
    .role(Role.USER.getValue())
    .content(userInput)
    .build();

// 3. 构建消息历史
List<Message> messages = new ArrayList<>(Arrays.asList(systemMsg, userMsg));
  1. 模型调用和响应生成:
// 1. 调用模型
GenerationResult result = gen.call(param);

// 2. 处理模型响应
for (Choice choice : result.getOutput().getChoices()) {
    Message message = choice.getMessage();
    if (message.getToolCalls() != null) {
        // 处理工具调用
        for (ToolCallBase toolCall : message.getToolCalls()) {
            if (toolCall.getType().equals("function")) {
                // 获取工具调用信息
                String functionName = ((ToolCallFunction) toolCall).getFunction().getName();
                String functionArgument = ((ToolCallFunction) toolCall).getFunction().getArguments();
                // ...
            }
        }
    }
}
  1. 工具调用结果处理:
// 1. 执行工具调用
GetWeatherTool weatherTool = new GetWeatherTool(functionArgument);
String weather = weatherTool.callWeather();

// 2. 构建工具调用结果消息
Message toolResultMessage = Message.builder()
    .role("tool")
    .content(weather)
    .toolCallId(toolCall.getId())
    .build();

// 3. 添加到消息历史
messages.add(toolResultMessage);

// 4. 继续对话
if (needToolCall) {
    param.setMessages(messages);
    result = gen.call(param);
}

模型生成工具调用响应的关键因素:

  1. 模型能力:

    • 使用 qwen-plus 模型,支持函数调用能力
    • 能够理解工具定义和参数要求
    • 可以生成符合规范的工具调用请求
  2. 工具定义:

    • 清晰的工具名称和描述
    • 规范的参数定义(JSON Schema)
    • 完整的功能说明
  3. 上下文引导:

    • 系统提示鼓励使用工具
    • 完整的消息历史
    • 工具调用结果反馈
  4. 交互流程:

    • 模型理解用户需求
    • 选择合适的工具
    • 生成正确的参数
    • 处理工具返回结果
    • 继续对话直到完成任务

这种实现方式使模型能够:

  1. 理解用户意图
  2. 选择合适的工具
  3. 正确构造工具调用
  4. 处理工具返回结果
  5. 生成连贯的对话响应
Logo

有“AI”的1024 = 2048,欢迎大家加入2048 AI社区

更多推荐