本文为您介绍DashScope java SDK最佳实践。
查询SDK最新版本
https://oss.sonatype.org/#nexus-search;quick~dashscope
最佳实践
SDK API对象,例如Generation不是线程安全的,您不应该并发使用同一个对象。
因为每一个API对象都对应着一条网络链接,因此为了效率,您应尽可能复用已创建出来的API对象,例如Generation,避免不断创建造成的开销,通常可以通过资源池来管理,下面是一个简单的示例,供参考。
对象池示例(org.apache.commons:commons-pool2)
import org.apache.commons.pool2.BasePooledObjectFactory;
import org.apache.commons.pool2.PooledObject;
import org.apache.commons.pool2.impl.DefaultPooledObject;
import com.alibaba.dashscope.aigc.generation.Generation;
public class PooledDashScopeObjectFactory extends BasePooledObjectFactory<Generation> {
@Override
public Generation create() throws Exception {
return new Generation();
}
@Override
public PooledObject<Generation> wrap(Generation obj) {
return new DefaultPooledObject<>(obj);
}
}
对象池使用
import java.util.Arrays;
import org.apache.commons.pool2.impl.GenericObjectPool;
import org.apache.commons.pool2.impl.GenericObjectPoolConfig;
import com.alibaba.dashscope.aigc.generation.Generation;
import com.alibaba.dashscope.aigc.generation.GenerationParam;
import com.alibaba.dashscope.aigc.generation.GenerationResult;
import com.alibaba.dashscope.common.Message;
import com.alibaba.dashscope.common.Role;
public class PooledDashScopeObjectUsage {
public static void main(String[] args) throws Exception {
PooledDashScopeObjectFactory pooledDashScopeObjectFactory =
new PooledDashScopeObjectFactory();
GenericObjectPoolConfig<Generation> config = new GenericObjectPoolConfig<>();
config.setMaxTotal(32);
config.setMinIdle(32);
GenericObjectPool<Generation> generationPool =
new GenericObjectPool<>(pooledDashScopeObjectFactory, config);
Generation gen = null;
try {
Message systemMsg = Message.builder().role(Role.SYSTEM.getValue())
.content("You are a helpful assistant.").build();
Message userMsg = Message.builder().role(Role.USER.getValue()).content("你好").build();
GenerationParam param = GenerationParam.builder().model("qwen-plus")
.messages(Arrays.asList(systemMsg, userMsg))
.resultFormat(GenerationParam.ResultFormat.MESSAGE).topP(0.8).enableSearch(true)
.build();
gen = generationPool.borrowObject();
GenerationResult result = gen.call(param);
System.out.println(result);
} finally {
if (gen != null) {
generationPool.returnObject(gen);
}
}
System.out.println("completed");
generationPool.close();
}
}
连接配置
底层使用OkHttp库管理连接,您可以通过代码和环境变量来配置连接相关参数,通常情况下您不需要修改任何参数,请根据需求谨慎修改。
以下内容适用于java sdk 2.12.0及之后版本!
通过代码配置连接参数
Constants.connectionConfigurations = ConnectionConfigurations.builder()
.connectTimeout(Duration.ofSeconds(120)) // set connection timeout, default 120s
.readTimeout(Duration.ofSeconds(300)) // set read timeout, default 300s
.writeTimeout(Duration.ofSeconds(60)) // set read timeout, default 60s
.connectionIdleTimeout(Duration.ofSeconds(300)) // connection pool idle timeout, default 3000s
.connectionPoolSize(32) // idle connections in the okhttp connection pool.
.maximumAsyncRequests(32) // async requests limit.
.maximumAsyncRequestsPerHost(32) // async request host limit.
.proxyHost("The http proxy host") // set proxy host, if set will use proxy. default null.
.proxyPort(443) // set proxy port, default 443
.proxyAuthenticator(null) // you can customize you proxy authenticator. default null.
.build();
// 更多 connectionPoolSize and connectionIdleTimeout, 可以参考
// ref: https://square.github.io/okhttp/3.x/okhttp/okhttp3/ConnectionPool.html
// maximumAsyncRequests and maximumAsyncRequestsPerHost 只对streamCall, audio相关服务,以及您自行设置
// 的使用websocket连接对象,详细参考:https://square.github.io/okhttp/3.x/okhttp/okhttp3/Dispatcher.html
通过环境变量配置
详细信息参考代码说明。
环境变量 | 说明 |
DASHSCOPE_PROXY_HOST | 配置代理host |
DASHSCOPE_PROXY_PORT | 配置代理port |
DASHSCOPE_CONNECTION_POOL_SIZE | 配置connection pool中idle 连接数,根据您的负载情况配置,一般配置成流量低峰时并发数,最高并发数目前没有限制。超过idel数的空闲连接将在idel time后释放。 |
DASHSCOPE_CONNECTION_IDLE_TIME | 配置idle time。 |
DASHSCOPE_MAXIMUM_ASYNC_REQUESTS | 配置最大异步请求数,异步请求用于流式以及异步请求,例如语音服务,需要根据您的负载配置,一般设置成您的最大并发数。 |
DASHSCOPE_MAXIMUM_ASYNC_REQUESTS_PER_HOST | 配置单host最大异步请求数,host范围内异步请求数。 |
DASHSCOPE_WRITE_TIMEOUT | 配置write timeout |
DASHSCOPE_READ_TIMEOUT | 配置 read timeout |
DASHSCOPE_CONNECTION_TIMEOUT | 配置connection timeout |
更早版本配置
对于2.12.0之前版本,连接connectionPoolSize,maximumAsyncRequests,maximumAsyncRequestsPerHost统一通过环境变量DASHSCOPE_CONNECTION_POOL_SIZE配置。
- 本页导读 (0)