You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在OpenAI Assistant本地正确处理code_interpreter工具(.NET)

OpenAI .NET客户端中Code Interpreter工具的正确处理方式

背景

我用OpenAI的.NET客户端开发自定义助理,配置了三个工具:自己实现的getNameOfFamilyMemberTool,以及OpenAI系统自带的file_search和code_interpreter。其中系统自带的工具无法自主定制或控制执行逻辑。

处理助理更新时,碰到code_interpreter的RequiredActionUpdate有两种问题情况:

  • 完全不处理它:会直接报错“Expected tool outputs for call_ids”
  • 返回占位ToolOutput:能避免报错,但得不到有实际作用的结果

疑问:既然code_interpreter是OpenAI内部逻辑,正确的处理方式是什么?

正确处理方法

如果你的助理开启了code_interpreter工具,触发该工具调用后,不能用占位输出应付,必须交由OpenAI的内部逻辑完成代码解释操作。简单来说,你不需要自己实现代码运行逻辑,只需等待OpenAI处理完调用并返回Run的状态更新,再继续后续流程即可。

在.NET客户端中的核心处理逻辑是:识别到code_interpreter(或file_search这类系统工具)的调用时,不需要手动生成工具输出,直接继续监听Run的状态变化,直到OpenAI完成内部执行并返回结果。

修改后的代码示例

if (update is RequiredActionUpdate requiredActionUpdate)
{
    if (requiredActionUpdate.FunctionName == "code_interpreter" || requiredActionUpdate.FunctionName == "file_search")
    {
        // 系统自带工具无需自定义输出,等待OpenAI内部处理完成即可
        // 若使用流式更新,持续监听Run状态直到OpenAI返回处理结果
    }
    else
    {
        // 处理本地自定义工具,例如getNameOfFamilyMemberTool
        var result = await _mediator.Send(requiredActionUpdate.GetCommand(), cancellationToken);
        outputsToSubmit.Add(new ToolOutput(requiredActionUpdate.ToolCallId, result?.ToString()));
    }
}

// 仅提交自定义工具的输出,系统工具的输出由OpenAI自行处理
if (outputsToSubmit.Count > 0)
{
    asyncUpdates = _client.SubmitToolOutputsToRunStreamingAsync(currentRun.ThreadId, currentRun.Id, outputsToSubmit, cancellationToken);
}

关键要点

  • code_interpreter和file_search这类系统工具的执行逻辑完全由OpenAI托管,你的代码只需监听Run的状态更新,无需手动生成工具输出。
  • 只有自定义工具才需要实现执行逻辑并提交输出,给系统工具添加自定义ToolOutput反而会干扰OpenAI的内部执行流程。
  • 若使用流式更新,需持续监听Run状态,直到其进入completed或其他终止状态,期间OpenAI会自行处理系统工具的执行并返回中间结果。

内容的提问来源于stack exchange,提问作者Ali Ajouz

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.15 21:52:39