基于函数的装饰器方案
==========

#### 概述

在目标执行函数上添加@InsightIntentFunctionMethod装饰器，以及在目标执行函数所属Class上添加@InsightIntentFunction进行意图声明，实现目标函数的执行。

#### 约束说明

*   仅限无其他依赖，可以直接拉起调用的全局函数。
*   支持将函数参数作为意图参数进行声明，参数类型支持基本类型。
*   装饰器所在函数不应该参与混淆，否则无法调用。
*   仅支持在export的类上添加该装饰器。

#### 开发示例

以购买电影票的意图为例，详细说明如下：

1.  装饰器添加位置：在目标执行函数上添加@InsightIntentFunctionMethod装饰器，以及在目标执行函数所属Class上添加@InsightIntentFunction进行意图声明，且仅支持在静态方法上使用。
    
    import { insightIntent, InsightIntentFunction, InsightIntentFunctionMethod } from '@kit.AbilityKit';
    
    @InsightIntentFunction()
    export class PurchaseMovie {
    
      @InsightIntentFunctionMethod({
        intentName: 'PurchaseMovieTickets',
        domain: 'PurchaseTickets',
        intentVersion: '1.0.1',
        displayName: '购买电影票',
        llmDescription: '用于在线购买电影票，允许用户选择指定影院、电影和场次时间进行购票。在用户明确表达购票需求，且已提供所有必要信息（cinema, film, time）时使用。如果信息不全或者用户只是查询电影信息、放映时间或票价，不应调用此工具。',
        parameters: {
          'type': 'object',
          'properties': {
            'cinema': {
              'type': 'string',
              'description': '目标影院名称，仅支持平台合作的影院'
            },
            'film': {
              'type': 'string',
              'description': '目标电影名称，需为当前上映或即将上映且在影院排片列表中的电影'
            },
            'time': {
              'type': 'string',
              'description': '放映时间，必须为未来的场次，且需为影院当天有效排片时间；时间格式应为\\'YYYY-MM-DD HH:MM\\'（例如\\'2025-07-01 19:30\\'）'
            }
          },
          'required': \['cinema', 'film', 'time'\]
        }
      })
      static executePurchaseMovieIntent(cinema: string, film: string, time: string): insightIntent.ExecuteResult {
        const data: insightIntent.ExecuteResult = {
          code: 0, // 意图执行成功时code必须为0
          result: {
            orderNumber: 'XXXXXX',
            resultDesc: \`电影票${film}购买成功\`
          }
        }
        return data;
      }
    }
    
    函数返回结果必须为insightIntent.ExecuteResult结构，且该结构result对象中需增加resultDesc字段对结果进行描述，模型依据此描述生成该意图执行结果的小艺回复话术。请参考上述示例代码。
    
2.  装饰器的字段说明以及示例：@InsightIntentFunction不涉及参数，@InsightIntentFunctionMethod字段以及具体说明如下。
    
    | 字段名称 | 类型 | 必选 | 说明 |
    | :-- | :-- | :-- | :-- |
    | intentName | string | 是 | 意图名称，最大长度：64。 |
    | domain | string | 是 | 意图所属的功能垂域。 |
    | intentVersion | string | 是 | 意图的版本号，用于兼容性管理。 |
    | displayName | string | 是 | 意图的展示名称，用于界面显示，最大长度：64。 |
    | llmDescription | string | 否 | 意图的描述，详细描述该意图可实现的能力，便于大模型理解并调用。 |
    | parameters | Record<string, object> | 否 | 意图参数定义，描述参数类型以及含义。 |
    
    为便于大模型理解和调用，相关参数定义需要遵照[自定义意图相关信息定义规范](https://developer.huawei.com/consumer/cn/doc/harmonyos-guides/intents-skill-all-rec-specification)进行设定。
    
3.  装饰器的添加方式：装饰器可以直接手动添加，同时也支持一键生成装饰器，建议使用后者，此方式需要安装相应插件，详细步骤如下。
    
    1.  打开CodeGenie插件：在DevEco Studio右侧边栏点击CodeGenie或输入快捷键Alt/Option+U，可以进入DevEco CodeGenie。若使用非最新版本的DevEco Studio，可通过[下载中心](https://developer.huawei.com/consumer/cn/download/deveco-codegenie)获取并使用相关功能，具体请参考[插件获取及安装](https://developer.huawei.com/consumer/cn/doc/harmonyos-guides/ide-codegenie#section18337533718)。
        
        ![](https://contentcenter-vali-drcn.dbankcdn.cn/pvt_2/DeveloperAlliance_scene_100_1/63/v3/_6Jp68KkSkKtu6vJAQr3Zw/zh-cn_image_0000002625109145.png?HW-CC-KV=V1&HW-CC-Date=20260612T073801Z&HW-CC-Expire=86400&HW-CC-Sign=06DA267C92CDAAC54E8ED18176F483C3AC5D3AFFE68960FA3010529D21E9DAA2)
        
    2.  框选想要接入意图框架功能的代码。
        
        ![](https://contentcenter-vali-drcn.dbankcdn.cn/pvt_2/DeveloperAlliance_scene_100_1/19/v3/brnCR5SYScKpwtNGH67o-g/zh-cn_image_0000002594669628.png?HW-CC-KV=V1&HW-CC-Date=20260612T073801Z&HW-CC-Expire=86400&HW-CC-Sign=57708BB7E3D4E134E0D08386DE6FF7EE5606A753829CF0AEA97C35D20B2C6CA2)
        
    3.  在选中的代码块上右键CodeGenie > Insight Intent，选择适合的装饰器。
        
        ![](https://contentcenter-vali-drcn.dbankcdn.cn/pvt_2/DeveloperAlliance_scene_100_1/5f/v3/F274l6xSQO-PmcZWFu1zBg/zh-cn_image_0000002594829556.png?HW-CC-KV=V1&HW-CC-Date=20260612T073801Z&HW-CC-Expire=86400&HW-CC-Sign=B1D5E42F6662DCC5D8E6921FCFB9FE6570315FD44701B070F152DDFC0BDEACE7)
        
    4.  在DevEco CodeGenie对话框中对意图定义，功能，参数等进行描述。
        
        ![](https://contentcenter-vali-drcn.dbankcdn.cn/pvt_2/DeveloperAlliance_scene_100_1/f1/v3/tt6v4bceQ9u-cO7LqnpzNg/zh-cn_image_0000002625189003.png?HW-CC-KV=V1&HW-CC-Date=20260612T073801Z&HW-CC-Expire=86400&HW-CC-Sign=1C944D5F0D76F1389EF110B9841DF7CA0A5036A0C93C6F89354013EF4A05CFDE)
        
    5.  回车或者点击发送按钮，即可生成对应的装饰器内容。
        
        ![](https://contentcenter-vali-drcn.dbankcdn.cn/pvt_2/DeveloperAlliance_scene_100_1/6c/v3/WRyug6MgTbiWrVhAxd94uA/zh-cn_image_0000002625109147.png?HW-CC-KV=V1&HW-CC-Date=20260612T073801Z&HW-CC-Expire=86400&HW-CC-Sign=ED106E43C18F8DC4D646948734299B1E220EE471D34C36739A2C0E7CFF80A955)
        
    6.  将光标放置于要插入装饰器的位置，点击插入图标，即可在对应位置插入装饰器。
        
    
    插入前：
    
    ![](https://contentcenter-vali-drcn.dbankcdn.cn/pvt_2/DeveloperAlliance_scene_100_1/48/v3/88hm3XtkS3Stv08qW4_5ww/zh-cn_image_0000002594669630.png?HW-CC-KV=V1&HW-CC-Date=20260612T073801Z&HW-CC-Expire=86400&HW-CC-Sign=A3DA6D066DD711056A5429D267E34B5896AEB48AECCAC294435DED57E97A9298)
    
    插入后：
    
    ![](https://contentcenter-vali-drcn.dbankcdn.cn/pvt_2/DeveloperAlliance_scene_100_1/9b/v3/AhQ2TtGQRNCWnWdyiJOAiQ/zh-cn_image_0000002594829558.png?HW-CC-KV=V1&HW-CC-Date=20260612T073801Z&HW-CC-Expire=86400&HW-CC-Sign=6F46C5EDD314E5A4C077BB2ACBF8260F9A45A0F2BC62E0B2FC08D5A6FD39DB01)