模型¶
本指南介绍 AgentScope Java 支持的 LLM 模型及其配置方法。
支持的模型¶
提供商 |
类 |
流式 |
工具 |
视觉 |
推理 |
|---|---|---|---|---|---|
DashScope |
|
✅ |
✅ |
✅ |
✅ |
OpenAI |
|
✅ |
✅ |
✅ |
|
Anthropic |
|
✅ |
✅ |
✅ |
✅ |
Gemini |
|
✅ |
✅ |
✅ |
✅ |
Ollama |
|
✅ |
✅ |
✅ |
✅ |
注意:
OpenAIChatModel兼容 OpenAI API 规范,可用于 vLLM、DeepSeek 等提供商
GeminiChatModel同时支持 Gemini API 和 Vertex AI
获取 API Key¶
提供商 |
获取地址 |
环境变量 |
|---|---|---|
DashScope |
|
|
OpenAI |
|
|
Anthropic |
|
|
Gemini |
|
|
DeepSeek |
- |
DashScope¶
阿里云 LLM 平台,提供通义千问系列模型。
DashScopeChatModel model = DashScopeChatModel.builder()
.apiKey(System.getenv("DASHSCOPE_API_KEY"))
.modelName("qwen3-max")
.build();
配置项¶
配置项 |
说明 |
|---|---|
|
DashScope API 密钥 |
|
模型名称,如 |
|
自定义 API 端点(可选) |
|
是否启用流式输出,默认 |
|
启用思考模式,模型会展示推理过程 |
|
启用联网搜索,获取实时信息 |
思考模式¶
DashScopeChatModel model = DashScopeChatModel.builder()
.apiKey(System.getenv("DASHSCOPE_API_KEY"))
.modelName("qwen3-max")
.enableThinking(true) // 自动启用流式输出
.defaultOptions(GenerateOptions.builder()
.thinkingBudget(5000) // 思考 token 预算
.build())
.build();
OllamaChatModel model =
OllamaChatModel.builder()
.modelName("qwen3-max")
.baseUrl("http://localhost:11434")
.defaultOptions(OllamaOptions.builder()
.thinkOption(ThinkOption.ThinkBoolean.ENABLED)
.temperature(0.8)
.build())
.build();
OpenAI¶
OpenAI 模型及兼容 API。
OpenAIChatModel model = OpenAIChatModel.builder()
.apiKey(System.getenv("OPENAI_API_KEY"))
.modelName("gpt-4o")
.build();
兼容 API¶
适用于 DeepSeek、vLLM 等兼容提供商:
OpenAIChatModel model = OpenAIChatModel.builder()
.apiKey("your-api-key")
.modelName("deepseek-chat")
.baseUrl("https://api.deepseek.com")
.build();
配置项¶
配置项 |
说明 |
|---|---|
|
API 密钥 |
|
模型名称,如 |
|
自定义 API 端点(可选) |
|
是否启用流式输出,默认 |
Anthropic¶
Anthropic 的 Claude 系列模型。
AnthropicChatModel model = AnthropicChatModel.builder()
.apiKey(System.getenv("ANTHROPIC_API_KEY"))
.modelName("claude-sonnet-4-5-20250929") // 默认值
.build();
配置项¶
配置项 |
说明 |
|---|---|
|
Anthropic API 密钥 |
|
模型名称,默认 |
|
自定义 API 端点(可选) |
|
是否启用流式输出,默认 |
Gemini¶
Google 的 Gemini 系列模型,支持 Gemini API 和 Vertex AI。
Gemini API¶
GeminiChatModel model = GeminiChatModel.builder()
.apiKey(System.getenv("GEMINI_API_KEY"))
.modelName("gemini-2.5-flash") // 默认值
.build();
Vertex AI¶
GeminiChatModel model = GeminiChatModel.builder()
.modelName("gemini-2.0-flash")
.project("your-gcp-project")
.location("us-central1")
.vertexAI(true)
.credentials(GoogleCredentials.getApplicationDefault())
.build();
配置项¶
配置项 |
说明 |
|---|---|
|
Gemini API 密钥 |
|
模型名称,默认 |
|
GCP 项目 ID(Vertex AI) |
|
GCP 区域(Vertex AI) |
|
是否使用 Vertex AI |
|
GCP 凭证(Vertex AI) |
|
是否启用流式输出,默认 |
Ollama¶
自托管开源 LLM 平台,支持多种模型。
OllamaChatModel model = OllamaChatModel.builder()
.modelName("qwen3-max")
.baseUrl("http://localhost:11434") // 默认值
.build();
配置项¶
配置项 |
说明 |
|---|---|
|
模型名称,如 |
|
Ollama 服务器端点(可选,默认 |
|
默认生成选项 |
|
消息格式化器(可选) |
|
HTTP 传输配置(可选) |
高级配置¶
高级模型加载和生成参数:
OllamaOptions options = OllamaOptions.builder()
.numCtx(4096) // 上下文窗口大小
.temperature(0.7) // 生成随机性
.topK(40) // Top-K 采样
.topP(0.9) // 核采样
.repeatPenalty(1.1) // 重复惩罚
.build();
OllamaChatModel model = OllamaChatModel.builder()
.modelName("qwen3-max")
.baseUrl("http://localhost:11434")
.defaultOptions(options) // 内部转换为 OllamaOptions
.build();
GenerateOptions 支持¶
Ollama 也支持 GenerateOptions 进行标准配置:
GenerateOptions options = GenerateOptions.builder()
.temperature(0.7) // 映射到 Ollama 的 temperature
.topP(0.9) // 映射到 Ollama 的 top_p
.topK(40) // 映射到 Ollama 的 top_k
.maxTokens(2000) // 映射到 Ollama 的 num_predict
.seed(42L) // 映射到 Ollama 的 seed
.frequencyPenalty(0.5) // 映射到 Ollama 的 frequency_penalty
.presencePenalty(0.5) // 映射到 Ollama 的 presence_penalty
.additionalBodyParam(OllamaOptions.ParamKey.NUM_CTX.getKey(), 4096) // 上下文窗口大小
.additionalBodyParam(OllamaOptions.ParamKey.NUM_GPU.getKey(), -1) // 将所有层卸载到 GPU
.additionalBodyParam(OllamaOptions.ParamKey.REPEAT_PENALTY.getKey(), 1.1) // 重复惩罚
.additionalBodyParam(OllamaOptions.ParamKey.MAIN_GPU.getKey(), 0) // 主 GPU 索引
.additionalBodyParam(OllamaOptions.ParamKey.LOW_VRAM.getKey(), false) // 低显存模式
.additionalBodyParam(OllamaOptions.ParamKey.F16_KV.getKey(), true) // 16位 KV 缓存
.additionalBodyParam(OllamaOptions.ParamKey.NUM_THREAD.getKey(), 8) // CPU 线程数
.build();
OllamaChatModel model = OllamaChatModel.builder()
.modelName("qwen3-max")
.baseUrl("http://localhost:11434")
.defaultOptions(OllamaOptions.fromGenerateOptions(options)) // 内部转换为 OllamaOptions
.build();
可用参数¶
Ollama 支持超过 40 个参数进行精细调整:
模型加载参数¶
numCtx: 上下文窗口大小(默认:2048)numBatch: 提示处理的批处理大小(默认:512)numGPU: 卸载到 GPU 的层数(-1 表示全部)lowVRAM: 为有限 GPU 内存启用低显存模式useMMap: 使用内存映射加载模型useMLock: 锁定模型在内存中以防止交换
生成参数¶
temperature: 生成随机性(0.0-2.0)topK: Top-K 采样(标准:40)topP: 核采样(标准:0.9)minP: 最小概率阈值(默认:0.0)numPredict: 生成的最大 token 数(-1 表示无限)repeatPenalty: 重复惩罚(默认:1.1)presencePenalty: 基于 token 存在性的惩罚frequencyPenalty: 基于 token 频率的惩罚seed: 可重现结果的随机种子stop: 立即停止生成的字符串
采样策略¶
mirostat: Mirostat 采样(0=禁用,1=Mirostat v1,2=Mirostat v2)mirostatTau: Mirostat 目标熵(默认:5.0)mirostatEta: Mirostat 学习率(默认:0.1)tfsZ: 尾部自由采样(默认:1.0 禁用)typicalP: 典型概率采样(默认:1.0)
生成选项¶
通过 GenerateOptions 配置生成参数:
GenerateOptions options = GenerateOptions.builder()
.temperature(0.7) // 随机性 (0.0-2.0)
.topP(0.9) // 核采样
.topK(40) // Top-K 采样
.maxTokens(2000) // 最大输出 token 数
.seed(42L) // 随机种子
.toolChoice(new ToolChoice.auto()) // 工具选择策略
.build();
DashScopeChatModel model = DashScopeChatModel.builder()
.apiKey(System.getenv("DASHSCOPE_API_KEY"))
.modelName("qwen3-max")
.defaultOptions(options)
.build();
OllamaChatModel model = OllamaChatModel.builder()
.modelName("qwen3-max")
.baseUrl("http://localhost:11434")
.defaultOptions(OllamaOptions.fromGenerateOptions(options))// 内部转换为 OllamaOptions
.build();
参数说明¶
参数 |
类型 |
说明 |
|---|---|---|
|
Double |
控制随机性,0.0-2.0 |
|
Double |
核采样阈值,0.0-1.0 |
|
Integer |
限制候选 token 数量 |
|
Integer |
最大生成 token 数 |
|
Integer |
思考 token 预算 |
|
Long |
随机种子 |
|
ToolChoice |
工具选择策略 |
工具选择策略¶
ToolChoice.auto() // 模型自行决定(默认)
ToolChoice.none() // 禁止工具调用
ToolChoice.required() // 强制调用工具
ToolChoice.specific("tool_name") // 强制调用指定工具
扩展参数¶
支持传递提供商特有的参数:
GenerateOptions options = GenerateOptions.builder()
.additionalHeader("X-Custom-Header", "value")
.additionalBodyParam("custom_param", "value")
.additionalQueryParam("version", "v2")
.build();
超时和重试¶
ExecutionConfig execConfig = ExecutionConfig.builder()
.timeout(Duration.ofMinutes(2))
.maxAttempts(3)
.initialBackoff(Duration.ofSeconds(1))
.maxBackoff(Duration.ofSeconds(10))
.backoffMultiplier(2.0)
.build();
GenerateOptions options = GenerateOptions.builder()
.executionConfig(execConfig)
.build();
Formatter¶
Formatter 负责将 AgentScope 的统一消息格式转换为各 LLM 提供商的 API 格式。每个提供商有两种 Formatter:
提供商 |
单智能体 |
多智能体 |
|---|---|---|
DashScope |
|
|
OpenAI |
|
|
Anthropic |
|
|
Gemini |
|
|
Ollama |
|
|
默认行为¶
不指定 Formatter 时,模型使用对应的 ChatFormatter,适用于单智能体场景。
多智能体场景¶
在多智能体协作(如 Pipeline、MsgHub)中,需要使用 MultiAgentFormatter。它会:
将多个智能体的消息合并为对话历史
使用
<history></history>标签结构化历史消息区分当前智能体和其他智能体的发言
// DashScope 多智能体
DashScopeChatModel model = DashScopeChatModel.builder()
.apiKey(System.getenv("DASHSCOPE_API_KEY"))
.modelName("qwen3-max")
.formatter(new DashScopeMultiAgentFormatter())
.build();
// OpenAI 多智能体
OpenAIChatModel model = OpenAIChatModel.builder()
.apiKey(System.getenv("OPENAI_API_KEY"))
.modelName("gpt-4o")
.formatter(new OpenAIMultiAgentFormatter())
.build();
// Anthropic 多智能体
AnthropicChatModel model = AnthropicChatModel.builder()
.apiKey(System.getenv("ANTHROPIC_API_KEY"))
.formatter(new AnthropicMultiAgentFormatter())
.build();
// Gemini 多智能体
GeminiChatModel model = GeminiChatModel.builder()
.apiKey(System.getenv("GEMINI_API_KEY"))
.formatter(new GeminiMultiAgentFormatter())
.build();
// Ollama 多智能体
OllamaChatModel model = OllamaChatModel.builder()
.modelName("qwen3-max")
.formatter(new OllamaMultiAgentFormatter())
.build();
自定义历史提示¶
可以自定义对话历史的提示语:
String customPrompt = "# 对话记录\n以下是之前的对话内容:\n";
DashScopeChatModel model = DashScopeChatModel.builder()
.apiKey(System.getenv("DASHSCOPE_API_KEY"))
.modelName("qwen3-max")
.formatter(new DashScopeMultiAgentFormatter(customPrompt))
.build();
何时使用 MultiAgentFormatter¶
场景 |
推荐 Formatter |
|---|---|
单智能体对话 |
|
Pipeline 顺序执行 |
|
MsgHub 群聊 |
|
多智能体辩论 |
|