通过学习,了解技能开发的基本步骤,下面开始折腾
目标:算24,告诉精灵四个数字,精灵反馈有解还是无解。不给答案,绝对不给答案,嗯不然我儿子就不动脑筋了。
先按步骤把框架搭好,这次我选了python代码(实在看不懂java)
默认的代码是这样的,什么都不改,直接预发部署发布。
测试通过。
下面开始修改:
首先是意图要带参数,我在系统实体里找到一个”任意长度数字"
就用这个了,我四个数字合并成一个参数输入吧
勾选了必选,开启精灵追问,提交。马上测试下
成功了。下面去编辑代码了
进入阿里云云开发平台名称,网址workbench.aliyun.com
先分析下示例代码
import logging
import json
import base64def handler(event, context):request = json.loads(event)logger = logging.getLogger()body = base64.b64decode(request['body']).decode()data = json.loads(body) #参数应该在这里logger.info(data)#这里是我要加入的代码,告诉精灵该返回什么response = {"isBase64Encoded": "false","statusCode": "200","headers": {"content-type": "application/json"},"body": {"returnCode": "0","returnErrorSolution": "","returnMessage": "","returnValue": {"reply": "欢迎使用",#这是返回"resultType": "RESULT","executeCode": "SUCCESS","msgInfo": ""}}}return response
修改 "reply": "欢迎使用"+body,测试看看传入的参数形式
好像好几个提供参数的地方啊,我先选 slotNorm吧
然后找了个算24的代码,改啊改啊,最后的代码如下
import logging
import json
import base64
import itertools
def twentyfour(cards):'''史上最短计算24点代码'''for nums in itertools.permutations(cards): # 四个数for ops in itertools.product('+-*/', repeat=3): # 三个运算符(可重复!)# 构造三种中缀表达式 (bsd)bds1 = '({0}{4}{1}){5}({2}{6}{3})'.format(*nums, *ops) # (a+b)*(c-d)bds2 = '(({0}{4}{1}){5}{2}){6}{3}'.format(*nums, *ops) # (a+b)*c-dbds3 = '{0}{4}({1}{5}({2}{6}{3}))'.format(*nums, *ops) # a/(b-(c/d))for bds in [bds1, bds2, bds3]: # 遍历try:if abs(eval(bds) - 24.0) < 1e-10: # eval函数#return bds#原来给答案,现在不给return '有解'except ZeroDivisionError: # 零除错误!continuereturn '无解'def handler(event, context):request = json.loads(event)logger = logging.getLogger()body = base64.b64decode(request['body']).decode()data = json.loads(body)logger.info(data)list_num=(list(data["slotEntities"][0]["slotNorm"]))#转数组,这里被坑了一下,主要是对json不熟悉replystr=twentyfour(list_num)response = {"isBase64Encoded": "false","statusCode": "200","headers": {"content-type": "application/json"},"body": {"returnCode": "0","returnErrorSolution": "","returnMessage": "","returnValue": {"reply": replystr,"resultType": "RESULT","executeCode": "SUCCESS","msgInfo": ""}}}return response
保存,部署,测试
搞定
这里遇到个坑,可能编辑时间太久了,技能已经退出了
如果遇到
可以重新用唤醒词,先进入技能,就正常了