欢迎来到涛涛聊AI,今天我们学习下扣子(coze)的http节点,
一、需求由来
我的朋友希望快速检查英文作文,于是向我提出了这个需求。我开始寻找其他APP客户端,但没有找到合适的应用。后来发现腾讯提供了一款 Ecc 服务,但每次使用需要支付 0.18 元,感觉有点贵。
于是,我考虑是否有更便宜的 OCR 服务。然而,在扣子平台上的 OCR 服务大多只能识别打印体,对手写体的识别效果很差,这对我们的需求来说并不理想。
经过进一步测试,我发现百度有一款手写体检测服务,效果不错,价格也相对便宜,而且还有免费使用次数。不过,它的智能体使用起来不太方便,所以我决定在 扣子 平台上搭建服务。接下来,我将展示如何在扣子平台上使用HTTP节点请求这个OCR的API。
二、简单介绍下HTTP请求节点
非专业程序员对Http可能会比较陌生。可以简单理解为代码形式的浏览器、代替我们访问数据。
官网介绍
HTTP 请求节点,能让用户借 HTTP 协议向外部服务发请求,实现数据获取、提交与交互 。它支持多种请求方法,可配置请求参数、请求头、鉴权信息及请求体,满足多样数据交互需求 。还设有超时设置与重试机制,保障请求可靠及数据正确处理 。
其作用包括:
- 数据获取:如从 API 获用户信息、天气数据 。
- 数据提交:像提交表单数据 。
- 数据更新:例如更新用户信息、订单状态 。
- 数据删除:比如删用户账户、订单 。
三、节点配置
使用该节点实现功能,常需配置 API、请求参数等 。为简化流程、提高效率,它支持导入 cURL 功能,开发人员能快速将 cURL 命令参数导入 。
配置项较多,我直接截图了
下面我们就以在扣子平台上请求百度 Ocr服务为例演示http节点的使用。
四、实例演示 通过HTTP请求节点访问云平台OCR服务
从ocr的官方文档可以看出,需要两步才可以完成,第1步是获取access token。第2步才可以真正的去将图片传入进行ocr识别。
整体的流程如下图
① 使用http节点请求token。
根据服务端的要求,分别填入参数。通过示例代码来看,首先要获取access token。
以下为百度API代码示例
import requests
API_KEY = ""
SECRET_KEY = ""
def main():
url = "https://aip.baidubce.com/rest/2.0/ocr/v1/handwriting?access_token=" + get_access_token()
payload='detect_direction=false&probability=false&detect_alteration=false'
headers = {
'Content-Type': 'application/x-www-form-urlencoded',
'Accept': 'application/json'
}
response = requests.request("POST", url, headers=headers, data=payload.encode("utf-8"))
print(response.text)
def get_access_token():
"""
使用 AK,SK 生成鉴权签名(Access Token)
:return: access_token,或是None(如果错误)
"""
url = "https://aip.baidubce.com/oauth/2.0/token"
params = {"grant_type": "client_credentials", "client_id": API_KEY, "client_secret": SECRET_KEY}
return str(requests.post(url, params=params).json().get("access_token"))
if __name__ == '__main__':
main()
填入变量名。
节点配置
成功返回。
② 代码处理获取tocken
Ocr服务那边得到的内容不只有access token。要一些其他信息。所以我们要通过一个代码节点来获取access token。
节点配置如下。
然后再通过获取到的access token去请求OCR接口。
③ 请求真正的OCR接口
节点配置如下。
得到结果如下。并不是我们传统意义上的只有文本。附带了位置信息。所以我们要在进行代码处理。获取我们想要的内容。
{
"output": "
{"words_result":[{"location":{"top":50,"left":563,"width":281,"height":96},"words":"My Eating Habits"},{"location":{"top":155,"left":139,"width":806,"height":122},"words":"I have many eating habits , some are good, some are bad."},{"location":{"top":287,"left":126,"width":1469,"height":111},"words":"I have three meds on time so I have eauh energy to do things. I have fruis and eryday cndbene"},{"location":{"top":422,"left":81,"width":1504,"height":97},"words":"lots of vegetabls. It cn give u wains and earnls. Soe of my friends nly like to eat meat and"},{"location":{"top":551,"left":74,"width":796,"height":99},"words":"don't like to eat vegetuables .But I like to eat vegetables."},{"location":{"top":678,"left":123,"width":1469,"height":91},"words":"However,I have some bad habits to.First, I Let to aysmet, I lv smets because it tase so"},{"location":{"top":794,"left":80,"width":1550,"height":131},"words":"ood. But swets always haveto muhsuga .Te'r had for me. Second, I drik les water. Soin the"},{"location":{"top":946,"left":80,"width":835,"height":109},"words":"future, I should drink more water and eat less sweets."}],"words_result_num":8,"log_id":1910964785431411367}
"
}
④ 获取原文
懒人工作法让ai写代码。
再让ai给写出获取word代码虽然比较简单,但既然是ai时代,那就让他多写了。
通过以下代码转换之后。我们就可以得到所有的英文文本。
# 在这里,您可以通过 ‘args’ 获取节点中的输入变量,并通过 'ret' 输出结果
# 'args' 和 'ret' 已经被正确地注入到环境中
# 下面是一个示例,首先获取节点的全部输入参数params,其次获取其中参数名为‘input’的值:
# params = args.params;
# input = params.input;
# 下面是一个示例,输出一个包含多种数据类型的 'ret' 对象:
# ret: Output = { "name": ‘小明’, "hobbies": [“看书”, “旅游”] };
async def main(args: Args) -> Output:
params = args.params
data = json.loads(params['input_str'])
words_list = [item["words"] for item in data["words_result"][1:]]
title = data["words_result"][0]['words']
words_all = ' '.join(words_list)
# 构建输出对象
ret: Output = {
"title" : title,
"words_all": words_all #
}
return ret
⑤ 添加大模型。对英文进行批改。提示词如下。
系统提示词。
# 角色
你是一位资深的英语教师,具备专业的英语知识和丰富的教学经验,能够精准识别用户上传图片中的学生英语作文,并对其进行全面、细致且专业的评判。
## 技能
### 技能 1: 识别用户上传图片中的文本
1. 将文本链接起来形成学生的英文作文原文
### 技能 1: 批改英语作文
1. 从以下几个方面对作文做出评判:
- 判断作文是否符合题目要求,有无跑题情况;
- 检查语法及语言表达是否正确、地道;
- 查看拼写是否存在错误;
- 分析文章结构是否合理;
- 评估文章的衔接连贯性。
2. 将评判结果清晰、有条理地反馈给用户。
## 工作流
1. 先调用技能1
2. 对得到的英语文本进行批改
## 输出格式:
**语法部分**:<语法部分>
**拼写部分**:<拼写部分>
**结构部分**:<结构部分>
**衔接连贯**:<衔接连贯>
## 限制:
- 仅针对用户上传的英语作文图片进行批改评判,拒绝回答与英语作文批改无关的话题。
- 所输出的内容需逻辑清晰、条理分明,全面涵盖各项评判要点。
实例最终效果
效果不算太好,因为学生写的字体太潦草了。哈哈。但提供了一种思路。