メインマシンは何時も起動しているとは限らないのでvalidateも入れた。
Commons Poolが2になっていて、今までのObjectPoolと名前衝突するから、全部2に書き換えた。
…と結構手間がかかったが、多分、今宵からは1時間位で済むんじゃないかな…。たださっきちょっと動かした限りでは一番強力なこのメインマシン上へのOllamaアクセスが少なかったような気がする。
こんなに面倒な事になったのも、Google AI StudioのAPIが、Gemma本体とは別にまた検閲するからである。
public class TestFactory extends BasePooledObjectFactory<IFClient> {
private AtomicInteger counter = new AtomicInteger(0);
private final int SERVICE_COUNT = 2; // A, B... の2サービス
@Override
public IFClient create() throws Exception {
// ラウンドロビンで0, 1…を順番に生成
int index = (counter.getAndIncrement() & Integer.MAX_VALUE) % SERVICE_COUNT;
String created = RandomStringUtils.randomAlphanumeric(5);
System.out.println("index="+index+" created:" + created);
// インデックスに応じて異なる実装クラスを生成して返す
switch (index) {
case 0:
System.out.println("created Aを作る"+index);
return new ClientA(created);
case 1:
System.out.println("created Bを作る"+index);
return new ClientB(created);
default:
throw new IllegalStateException("Unexpected index: " + index);
}
}
結論から申し上げますと、GeminiのWeb画面と、Google AI Studio(API経由)とでは、コンテンツフィルタリングの基準や仕組みが異なります。 特に今回「OpenAI互換API」をご利用されている点に、このエラーの直接的な原因が潜んでいます。詳細な原因と、その背景について解説します。1. Web画面とAPIでのセーフティ基準の違いWeb画面(一般ユーザー向け):文脈を総合的に判断する、対話向けの柔軟なセーフティシステムが組み込まれています。多少センシティブな単語が含まれていても、全体の文脈が安全であれば回答を生成する傾向があります。Google AI Studio API(開発者向け):「ハラスメント」「ヘイトスピーチ」「性的表現」「危険なコンテンツ」という4つのカテゴリに対して、厳格でプログラム的な閾値(デフォルトでは「中程度以上の確率でブロック」など)が設定されています。システム的な安全性を担保するため、特定の単語や表現に敏感に反応し、弾きやすい傾向があります。2. OpenAI互換API特有の制限(最大の原因)今回 PROHIBITED_CONTENT が出てしまう最大の理由は、OpenAI互換のAPIリクエストでは、Google特有のセーフティ設定(Safety Settings)を緩和できないという仕様にあります。Googleの純正SDK(Google Gen AI SDK)を使用する場合、開発者は以下のようにセーフティフィルターの閾値を「ブロックしない(BLOCK_NONE)」や「高い確率の場合のみブロック(BLOCK_ONLY_HIGH)」に変更できます。しかし、OpenAIのSDKやAPIフォーマットはGoogleのセーフティ設定パラメータをサポートしていないため、常にAI Studioの「厳格なデフォルト設定」が適用された状態でリクエストが送信されてしまいます。その結果、Web画面では通るプロンプトが、API側では弾かれてしまうという現象が起きます。
モデル [gemma-3-27b-it] で要約を生成中...【警告】コンテンツフィルターにより生成が中断・ブロックされました。終了理由: PROHIBITED_CONTENT

org.apache.commons.dbcp.SQLNestedException: Cannot load JDBC driver class 'org.sqlite.JDBC'at org.apache.commons.dbcp.BasicDataSource.createConnectionFactory(BasicDataSource.java:1429)at org.apache.commons.dbcp.BasicDataSource.createDataSource(BasicDataSource.java:1371)at org.apache.commons.dbcp.BasicDataSource.getLogWriter(BasicDataSource.java:1098)at org.apache.commons.dbcp.BasicDataSourceFactory.createDataSource(BasicDataSourceFactory.java:350)at ほげほげ.initConnectionPool(Utils.java:145)at ほげほげ.exec(ふがふが.java:183)at ほげほげ.main(ふがふが.java:65)Caused by: java.lang.NoClassDefFoundError: Could not initialize class org.sqlite.JDBCat java.base/java.lang.Class.forName0(Native Method)at java.base/java.lang.Class.forName(Class.java:467)at java.base/java.lang.Class.forName(Class.java:458)at org.apache.commons.dbcp.BasicDataSource.createConnectionFactory(BasicDataSource.java:1415)... 6 moreCaused by: java.lang.ExceptionInInitializerError: Exception java.lang.NoClassDefFoundError: org/apache/logging/log4j/Logger [in thread "main"]at org.apache.logging.slf4j.SLF4JServiceProvider.initialize(SLF4JServiceProvider.java:56)at org.slf4j.LoggerFactory.bind(LoggerFactory.java:199)at org.slf4j.LoggerFactory.performInitialization(LoggerFactory.java:186)at org.slf4j.LoggerFactory.getProvider(LoggerFactory.java:496)at org.slf4j.LoggerFactory.getILoggerFactory(LoggerFactory.java:482)at org.slf4j.LoggerFactory.getLogger(LoggerFactory.java:431)at org.slf4j.LoggerFactory.getLogger(LoggerFactory.java:457)at org.sqlite.util.LoggerFactory$SLF4JLogger.<init>(LoggerFactory.java:78)at org.sqlite.util.LoggerFactory.getLogger(LoggerFactory.java:32)at org.sqlite.JDBC.<clinit>(JDBC.java:26)at java.base/jdk.internal.misc.Unsafe.ensureClassInitialized0(Native Method)at java.base/jdk.internal.misc.Unsafe.ensureClassInitialized(Unsafe.java:1169)at java.base/jdk.internal.reflect.MethodHandleAccessorFactory.ensureClassInitialized(MethodHandleAccessorFactory.java:341)at java.base/jdk.internal.reflect.MethodHandleAccessorFactory.newConstructorAccessor(MethodHandleAccessorFactory.java:104)at java.base/jdk.internal.reflect.ReflectionFactory.newConstructorAccessor(ReflectionFactory.java:138)at java.base/java.lang.reflect.Constructor.acquireConstructorAccessor(Constructor.java:546)at java.base/java.lang.reflect.Constructor.newInstanceWithCaller(Constructor.java:496)at java.base/java.lang.reflect.Constructor.newInstance(Constructor.java:483)at java.base/java.util.ServiceLoader$ProviderImpl.newInstance(ServiceLoader.java:707)at java.base/java.util.ServiceLoader$ProviderImpl.get(ServiceLoader.java:672)at java.base/java.util.ServiceLoader$2.next(ServiceLoader.java:1256)at java.sql/java.sql.DriverManager.ensureDriversInitialized(DriverManager.java:553)at java.sql/java.sql.DriverManager.getDrivers(DriverManager.java:382)at org.apache.commons.dbcp.BasicDataSource.<clinit>(BasicDataSource.java:57)at org.apache.commons.dbcp.BasicDataSourceFactory.createDataSource(BasicDataSourceFactory.java:167)