localChatModel模块是Data Augmentation Kit中的端侧问答组件,提供接入端侧问答模型的方法,适用于需要在设备本地进行智能问答的应用场景,实现数据本地化处理。
开发者可通过localChatModel模块提供的方法init、chat实现上述能力。
起始版本: 6.0.0(20)
是否支持流式问答的配置项。
模型约束: 此接口仅可在Stage模型下使用。
系统能力: SystemCapability.DataAugmentation.LocalChatModel
起始版本: 6.0.0(20)
| 名称 | 类型 | 只读 | 可选 | 说明 |
|---|---|---|---|---|
| isStream | boolean | 否 | 否 | 表示是否支持流式问答。 设置为true时,支持流式返回结果,适用于需要实时响应的场景; 设置为false时,一次性返回完整结果,适用于对结果完整性要求较高且可接受延迟的场景。 |
示例:
import { localChatModel } from '@kit.DataAugmentationKit';
let localConfig: localChatModel.Config = {
isStream: true
} 与端侧问答模型交互的问题信息。
模型约束: 此接口仅可在Stage模型下使用。
系统能力: SystemCapability.DataAugmentation.LocalChatModel
起始版本: 6.0.0(20)
| 名称 | 类型 | 只读 | 可选 | 说明 |
|---|---|---|---|---|
| questionId | number | 否 | 否 | 表示与端侧问答模型交互的问题ID,ID取值范围为[0,65535],若超过范围,则上报某些参数不符合指定约束条件的错误码1021900005。在同一应用运行时,questionId应保持唯一性。建议使用递增序列生成唯一ID,以防止在并发请求中出现重复ID导致的问题。 |
| content | string | 否 | 否 | 表示与端侧问答模型交互的问题内容,由于受到端侧性能的限制,为保证模型处理效率,建议控制问题内容在4500字节以内,并尽量精简表达,避免冗余信息。若问题过长,部分设备可能面临性能下降,甚至导致模型异常。 |
示例:
import { localChatModel } from '@kit.DataAugmentationKit';
let questionInfo: localChatModel.QuestionInfo = {
questionId: 1,
content: "问题内容"
} 与端侧问答模型交互的返回结果。
模型约束: 此接口仅可在Stage模型下使用。
系统能力: SystemCapability.DataAugmentation.LocalChatModel
起始版本: 6.0.0(20)
| 名称 | 类型 | 只读 | 可选 | 说明 |
|---|---|---|---|---|
| questionId | number | 否 | 否 | 表示问答模型返回结果对应的问题ID,与请求中的questionId保持一致。 |
| content | string | 否 | 否 | 表示问答模型对于questionId对应的问题的问答结果。 |
| isFinished | boolean | 否 | 否 | 表示问答结果是否完整,true表示所有结果已完整返回,本轮问答结束;false表示还有后续结果,当前回调返回的是增量内容。 |
示例:
import { localChatModel } from '@kit.DataAugmentationKit';
let answer: localChatModel.Answer = {
questionId: 1,
content: "回答内容",
isFinished: true
} init(): Promise<boolean>
初始化端侧问答模型,负责拉起模型管理应用,使用Promise异步回调。
模型约束: 此接口仅可在Stage模型下使用。
系统能力: SystemCapability.DataAugmentation.LocalChatModel
起始版本: 6.0.0(20)
返回值:
| 类型 | 说明 |
|---|---|
| Promise<boolean> | Promise对象,返回模型初始化结果,true表示初始化成功,模型已就绪;false表示初始化失败,模型不可用。 |
示例:
import { localChatModel } from '@kit.DataAugmentationKit';
async function init() {
try {
const result = await localChatModel.init();
console.info('init result: ', result);
} catch (err) {
console.error('init err: ', err);
}
} chat(info: QuestionInfo, config: Config, callback: AsyncCallback<Answer>): Promise<void>
chat方法用于向端侧问答模型发送问题并获取回答,适用于本地智能问答场景,使用Promise异步回调。
模型约束: 此接口仅可在Stage模型下使用。
系统能力: SystemCapability.DataAugmentation.LocalChatModel
起始版本: 6.0.0(20)
参数:
| 参数名 | 类型 | 必填 | 说明 |
|---|---|---|---|
| info | QuestionInfo | 是 | 表示与端侧问答模型问答的问题信息。 |
| config | Config | 是 | 表示问题的配置选项。 |
| callback | AsyncCallback<Answer> | 是 | 回调函数,返回问答的结果。 |
返回值:
| 类型 | 说明 |
|---|---|
| Promise<void> | Promise对象,无返回结果。 |
错误码:
以下错误码的详细介绍请参见ArkTS API错误码。
| 错误码ID | 错误信息 |
|---|---|
| 1021900001 | A timeout occurs when the local chat model is called. |
| 1021900002 | A loading failure occurs when the local chat model is called. |
| 1021900003 | A request failure occurs when the local chat model is called. |
| 1021900004 | The local chat model is busy. |
| 1021900005 | Some parameters do not meet the specified constraints. |
示例:
import { BusinessError } from "@kit.BasicServicesKit";
import { localChatModel } from '@kit.DataAugmentationKit';
async function chat() {
// `questionId`用于标识问题ID,`content`用于设置问题内容。
let questionInfo: localChatModel.QuestionInfo = {
questionId: 1,
content: "你是一个翻译助手,可以翻译多国语言,请将以下内容翻译成36国语言:PC模型管家"
}
// `isStream: true`表示启用流式返回结果,适用于实时响应场景。
let localConfig: localChatModel.Config = {
isStream: true
}
let localChatCallback = async (err: BusinessError, ans: localChatModel.Answer): Promise<void> => {
if (err) {
// 模型运行相关错误码
console.error('errCode: ' + err.code + ', errMessage: ' + err.message);
return;
}
if (!ans) {
console.error('Received null or undefined answer. Skipping processing.');
return;
}
// `questionId`用于标识问题ID,`content`问题回答内容,`isFinished`表示问答结果是否完整,true表示所有结果已完整返回。
console.info('questionId: ' + ans.questionId + ', content: ' + ans.content + ', isFinished: ' + ans.isFinished);
};
try {
await localChatModel.chat(questionInfo, localConfig, localChatCallback);
} catch (err) {
// 入参相关错误码
console.error('errCode: ' + err.code + ', errMessage: ' + err.message);
}
}