背景:
AI识别单据并且生成一个固定的json数据。但这只是识别并生成了AI的数据,没有人工标注和评测AI模型的基准数据,所以就做了一个对接钉钉并自动生成标注任务的能力。使用的平台为dify。
实现步骤:
工作流如下:

1. 上传单据
由于上传到dify的单据有加签和时效,在一定时间后就会过期。所以智能体的开始步骤我选择了上传图片以及图片的URL;该工作流后期是会对接业务线自己的API,并且图片都会传到公司自己的文件服务器,所以增加一个file_url作为接收公司自己的文件url。

2.识别
识别这一步就忽略不计了,就是调用大模型,编写一系列提示词。。
3.代码执行
增加”代码执行“的节点,用于拼接各类参数以及markdown数据。

代码如下:
代码中有输出很多没用的字段,这是因为在调试过程中不断增加导致的,用不到的删除就行。
import json
import time
import hashlib
from datetime import datetime
import pytz
def main(machine_json: str, image_url: str, file_url: str):
task_id = hashlib.md5(str(time.time()).encode()).hexdigest()[:8]
machine_json_str = machine_json
try:
machine_json = json.loads(machine_json)
except:
machine_json = machine_json
doc_url = "https://alidocs.dingtalk.com/i/nodes/xxxxxxxxxxxx"
beijing_tz = pytz.timezone('Asia/Shanghai')
beijing_time = datetime.now(beijing_tz)
current_time = beijing_time.strftime('%Y-%m-%d %H:%M:%S')
markdown_text = f"""### 🔔 <font color=#FF0000>新的人工标注任务</font>\n\n**任务ID**:`{task_id}`\n\n**图片链接**:`{file_url}`\n\n**图片**:[点击查看图片]({file_url})\n\n**机器识别结果**:\n```json\n{machine_json}\n```\n**请操作**:\n1. 打开钉钉文档:[点击进入标注表格]({doc_url})\n2. 找到任务ID为 `{task_id}` 的行\n3. 在“人工JSON”列输入你的识别结果\n4. 将状态改为“已完成”\n*生成时间:{current_time}*"""
img_html = f""
dingtalk_message = {
"msgtype": "markdown",
"markdown": {
"title": "测试消息",
"text": markdown_text
}
}
row_data = {
"任务ID": task_id,
"图片链接": image_url,
"机器JSON": machine_json,
"状态": "待人工",
"创建时间": current_time
}
return {
"dingtalk_message": json.dumps(dingtalk_message,ensure_ascii=False),
"task_id": task_id,
"machine_json": machine_json,
"doc_url": doc_url,
"markdown_text": markdown_text,
"row_data": row_data,
"file_url": file_url,
"machine_json_str": machine_json_str,
"img_html": img_html
}
4.发送钉钉消息
在工作流中添加一个”钉钉“工具。
在钉钉群里添加一个”自定义机器人“,添加的机器人会有access_token和加签秘钥,分别填写到该节点中去。
由于我是要发送markdown的内容,所以webhook类型选择为markdown。
消息内容就直接引用”代码执行“中所输出的markdown_text变量。

执行后,钉钉群里就会收到消息。

5.记录数据到表格
接下来就是自动将需要标注的数据到表格了。
首先创建一个钉钉的”AI表格“,切换到”数据“这一个tab,表头这些任意定义。

接下来切换到”自动化“tab。

点开第一步,切换触发条件为”接收到数据时“webhook,会生成一个固定的webhook链接,复制。
并且需要写一个标准的参数示例。

增加第二步”新增记录“,这一步中的需要设置记录内容,这个里面的key就是从上一步的参数示例中提取并自动生成的。”选择数据表“就是选择刚刚新建的这一个表。

接下来就是在工作流中增加一个 ”http请求“节点,选择post请求,url就是刚刚复制得到的webhook链接,json内容就自己拼接,但key一定要要跟前面定义的一样否则钉钉表格无法正确接收字段。

最后,执行工作流,就会发现群里有钉钉消息了,并且文档也自动增加了一行数据。