本文档说明不同模型的输入参数和输出格式标准,帮助开发者正确使用各个模型。
所有模型都使用统一的
interface ModelRequestOptions {
/**
* 异步模式(可选)
* 注意:仅图片生成模型(QwenImage等)支持,文本模型不支持
* 生效:❌ 文本模型忽略此参数
*/
async?: boolean;
/**
* 模型名称(SDK会自动设置)
* 注意:用户调用 streamText/generateText 时不需要传递此字段
* SDK 会自动从模型实例中获取并设置,用户传入的值会被覆盖
* 生效:❌ 会被 SDK 覆盖
*/
model: ModelName | string;
/**
* 最大生成token数(可选)
* 默认值:1000(DefaultSimpleModel),2000(QwenVlMax),2000(QwenDocTurbo)
* 范围:1 - 8000(QwenDocTurbo),1 - 无限制(其他模型)
* 生效:✅ 所有模型都支持
*/
max_tokens?: number;
/**
* 温度参数,控制生成文本的随机性(可选)
* 默认值:0.7(DefaultSimpleModel),1.0(QwenVlMax/QwenDocTurbo)
* 范围:0.0 - 2.0
* 值越大,输出越随机;值越小,输出越确定
* 生效:✅ 所有模型都支持
*/
temperature?: number;
/**
* 核采样参数,控制词汇选择的多样性(可选)
* 默认值:1.0
* 范围:0.0 - 1.0
* 生效:✅ 所有模型都支持
*/
top_p?: number;
/**
* 生成候选数量限制(可选)
* 默认值:1
* 范围:1 - 10(QwenDocTurbo),1 - 无限制(其他模型)
* 生效:✅ 所有模型都支持
*/
n?: number;
/**
* 会话ID(可选)
* 注意:仅 DefaultSimpleModel 会发送到后端,是否生效取决于后端支持
* 生效:⚠️ 部分模型/后端支持
*/
conversation_id?: string;
/**
* 频率惩罚,减少重复内容(可选)
* 默认值:0.0
* 范围:-2.0 - 2.0
* 生效:✅ 所有模型都支持
*/
frequency_penalty?: number;
/**
* 存在惩罚,鼓励新话题(可选)
* 默认值:0.0
* 范围:-2.0 - 2.0
* 生效:✅ 所有模型都支持
*/
presence_penalty?: number;
/**
* 是否流式输出(可选)
* 默认值:true
* 注意:调用 streamText 方法时,此参数会被强制设置为 true
* 生效:❌ streamText 强制为 true,generateText 可以设置为 false
*/
stream?: boolean;
/**
* 平台工具列表(可选)
* 注意:仅 DefaultSimpleModel 会发送到后端,是否生效取决于后端支持
* 生效:⚠️ 部分模型/后端支持
*/
platform_tools?: Array<{
plantform_tool_id: string;
payload: any;
}>;
/**
* 消息数组(必需)
* 包含对话历史,支持 system、user、assistant 角色
* 支持文本和多模态内容(图片、文档等)
* 生效:✅ 所有模型都支持,必需参数
*/
messages?: Array<{
role: string;
content: string | MultiModalContent[];
}>;
/**
* 知识库检索配置(可选)
* 注意:仅 DefaultSimpleModel 会发送到后端,是否生效取决于后端支持
* 生效:⚠️ 部分模型/后端支持
*/
knowledge_base?: Array<{
knowledge_base_id: string;
search_mode?: "vector" | "full_text" | "hybrid";
limit?: number;
score_threshold?: number;
}>;
/**
* 数据库操作配置(可选)
* 注意:仅 DefaultSimpleModel 会发送到后端,是否生效取决于后端支持
* 生效:⚠️ 部分模型/后端支持
*/
db_base?: any[];
/**
* 是否启用思考模式(可选)
* 默认值:false
* 适用于:deepseek-r1 等推理模型
* 生效:✅ DefaultSimpleModel 和 QwenVlMax 支持,QwenDocTurbo 不支持
*/
enable_thinking?: boolean;
/**
* 是否启用联网搜索功能(可选)
* 默认值:false
* 生效:✅ DefaultSimpleModel 和 QwenVlMax 支持,QwenDocTurbo 不支持
*/
enable_search?: boolean;
/**
* 额外参数对象(可选)
* 注意:仅 QwenDocTurbo 支持,用于传递模型特定的额外参数
* 生效:✅ QwenDocTurbo 支持,其他模型忽略
*/
parameters?: any;
}
所有模型的流式输出都遵循统一的
interface ChatCompletion {
id: string; // 响应ID
log_id: string; // 日志ID
object: string; // 对象类型,如 "chat.completion.chunk"
created: number; // 创建时间戳
model: string; // 模型名称
code: number; // 错误码,0表示成功
error: string; // 错误信息
choices: Array<{ // 选择项数组
index: number;
message?: { // 完整消息(非流式或最后一个chunk)
id: string;
role: "assistant";
type: MessageType; // 消息类型
content?: string; // 内容
reasoning_content?: string; // 推理内容(deepseek-r1特有)
};
delta?: { // 增量内容(流式响应)
content?: string; // 增量文本
reasoning_content?: string; // 增量推理内容
role?: "assistant";
};
finish_reason: string | null; // 完成原因:STOP、error等
}>;
usage: { // Token使用统计
prompt_tokens: number;
completion_tokens: number;
knowledge_tokens: number;
reasoning_tokens: number;
total_tokens: number;
};
}
模型类型:文本生成模型
适用场景:通用对话、文本生成、问答
const model = this.createModel('qwen-turbo');
const messages = [
{
role: 'system',
content: '你是一个AI助手'
},
{
role: 'user',
content: '你好' // 纯文本内容
}
];
const response = await model.streamText({
messages,
max_tokens: 1000,
temperature: 0.7,
});
流式响应(streamText):
for await (const chunk of response) {
// 流式内容在 message 中
const content = chunk?.choices?.[0]?.message?.content;
// 发送给客户端
this.sseSender.send({ data: chunk });
}
典型 chunk 结构:
{
"id": "674147096081051648",
"model": "qwen-turbo",
"object": "chat.completion.chunk",
"created": 1762239593037,
"choices": [{
"index": 0,
"message": {
"content": "AI",
"role": "assistant"
},
"finish_reason": null
}]
}
最后一个 chunk(finish):
{
"choices": [{
"message": {
"id": "674147096081051648",
"role": "assistant",
"type": "answer",
"content": ""
},
"finish_reason": "STOP"
}],
"usage": {
"prompt_tokens": 43,
"completion_tokens": 8,
"total_tokens": 51
}
}
模型类型:多模态模型
适用场景:图片理解、图文对话、视觉问答
const model = this.createModel('qwen-vl-max');
const messages = [
{
role: 'user',
content: [
{
type: 'text',
text: '请描述这张图片'
},
{
type: 'image_url',
image_url: {
url: 'https://example.com/image.jpg',
detail: 'high' // 可选:auto, low, high
}
}
]
}
];
const response = await model.streamText({
messages,
max_tokens: 2000,
temperature: 1.0,
});
流式响应格式:
{
"id": "...",
"model": "qwen-vl-max",
"choices": [{
"index": 0,
"delta": {
"content": "这是一张..."
},
"finish_reason": null
}]
}
特点:
模型类型:文档处理模型
适用场景:PDF解析、文档理解、文档问答
const model = this.createModel('qwen-doc-turbo');
const messages = [
{
role: 'user',
content: [
{
type: 'text',
text: '请分析这份文档'
},
{
type: 'doc_url',
doc_url: ['https://example.com/doc.pdf'],
file_parsing_strategy: 'auto' // auto 或 text_only
}
]
}
];
const response = await model.streamText({
messages,
max_tokens: 2000,
});
流式响应格式:
{
"id": "...",
"model": "qwen-doc-turbo",
"choices": [{
"index": 0,
"message": {
"role": "assistant",
"type": "answer",
"content": "文档内容..."
}
}]
}
特点:
模型类型:推理模型
适用场景:复杂推理、数学计算、逻辑分析
const model = this.createModel('deepseek-r1');
const messages = [
{
role: 'system',
content: '你是一个推理专家'
},
{
role: 'user',
content: '解决这个数学问题:...'
}
];
const response = await model.streamText({
messages,
max_tokens: 1000,
enable_thinking: true, // 启用思考模式
});
流式响应格式(带推理内容):
{
"id": "...",
"model": "deepseek-r1",
"choices": [{
"index": 0,
"message": {
"role": "assistant",
"type": "answer",
"content": "最终答案",
"reasoning_content": "思考过程:..." // 特有字段
}
}]
}
特点:
function extractContent(chunk) {
const choice = chunk?.choices?.[0];
if (!choice) return { content: '', reasoning_content: '' };
// 优先使用 delta(流式响应)
if (choice.delta) {
return {
content: choice.delta.content || '',
reasoning_content: choice.delta.reasoning_content || ''
};
}
// 其次使用 message(完整消息)
if (choice.message) {
return {
content: choice.message.content || '',
reasoning_content: choice.message.reasoning_content || ''
};
}
return { content: '', reasoning_content: '' };
}
// 使用示例
for await (const chunk of modelResponse) {
const { content, reasoning_content } = extractContent(chunk);
if (content) {
// 处理文本内容
this.sseSender.send({ data: chunk });
}
if (reasoning_content) {
// 处理推理内容(deepseek-r1)
console.log('思考过程:', reasoning_content);
}
}
for await (const chunk of modelResponse) {
// 检查错误
if (chunk.code || chunk.message || chunk?.choices?.[0]?.finish_reason === 'error') {
const errorMsg = chunk.message || '未知错误';
console.error('模型错误:', errorMsg);
// 发送错误信息给客户端
this.sseSender.send({
data: {
choices: [{
message: {
content: `错误: ${errorMsg}`,
type: 'error'
},
finish_reason: 'error'
}]
}
});
return;
}
// 正常处理
this.sseSender.send({ data: chunk });
}
模型 | 流式内容位置 | 推理内容 | 多模态支持 | 特殊说明 |
|---|---|---|---|---|
| qwen-turbo | delta.content | ❌ | ❌ | 标准文本模型 |
| qwen-vl-max | delta.content | ❌ | ✅ 图片 | 支持图片输入 |
| qwen-doc-turbo | message.content | ❌ | ✅ 文档 | SDK已处理增量 |
| deepseek-r1 | message.content | ✅ | ❌ | 需启用 enable_thinking |
for await (const chunk of modelResponse) {
console.log('完整chunk结构:', JSON.stringify(chunk, null, 2));
this.sseSender.send({ data: chunk });
}
const chunk = /* ... */;
console.log('模型:', chunk.model);
console.log('错误码:', chunk.code);
console.log('Delta内容:', chunk?.choices?.[0]?.delta?.content);
console.log('Message内容:', chunk?.choices?.[0]?.message?.content);
console.log('完成原因:', chunk?.choices?.[0]?.finish_reason);