简介 #
智能体编排是 SmartChart 中处理多步骤、多工具协作复杂 AI 场景的能力。通过 Python 数据集,你可以像写脚本一样串联多个智能体、大模型调用、数据库查询和数据写入,实现完整的 AI 业务流程。
应用场景 #
- 打通大模型+数据+图形+表单+触达
- 需要进行复杂的逻辑流程
- 以发票审核为例
关键函数说明 #
你可以在python数据集中调用以下函数:
数据读取函数 #
# 通过数据源连接名称及SQL语句获取ds数据集
ds_sql(conn_name, sql)
# 可读取任意文件或网页
ds_read(文件名或网页地址, encoding="utf-8", clean=True, max_length=None, as_base64=False, selector='')
# 当selector不为空时,如body,则会调用浏览器获取数据
# 将markdown写入word
ds_save_doc(markdown字符串, 文件名)
数据写入函数 #
# 将数据写入数据源
ds_save(config, content, update=0)
# config: {'conn':'连接名','table':'表名(字段,..)'}
# content: 字典或二维数组
# 成功返回 {'status':200,'msg':'success'}
大模型调用函数 #
# 获取大模型生成的结果
ds_gpt(conn_name, prompt, system='', stream=False, his='', tool=False, remark={}, files='')
# system: 系统提示词
# stream: 开启流式输出
# his: 历史记录
# tool: 是否输出工具调用意图(True时返回 {'tool':..., 'sql'/'msg'/...})
# files: 文件列表(图片等多模态输入)
智能体工具调用函数 #
# 执行智能体
ds_tool('智能体名', param=None, deep=0, safe=False)
# deep: 可循环调用智能体次数
# safe: 安全执行模式
# 示例
ds_tool('下单', {'帐号': 'xxx', '商品': 'xxxx'})
ds_tool({'tool': '智能体名', 'param': {'xx': 'xxx'}}) # 执行 ds_gpt 返回的工具意图
ds_tool({'tool': '智能体名', 'msg': 'xxxx'}) # 把msg作为prompt传入
ds_tool('智能体名', 'prompt字符串') # 简写方式
智能体返回值格式 #
| 智能体类型 | 返回格式 |
|---|---|
| SQL智能体 | [['省份','数量'],['广东',123]] |
| 组件智能体 | {'msg': name, 'ds': dataset, 'chart': chart, 'token': 0, 'status': 200} |
| LLM智能体 | {'msg': 'xxxxxx', 'token': 0, 'status': 200} |
| Python智能体 | {'msg': 'xxxxxx', 'token': 0, 'status': 200} |
复杂智能体开发示例(发票审核) #
- 新建一个大模型数据源,本次采用dashAI,以调用阿里dashscope的能力为例
dashAI可选择qwen模型,当有图片上传时会自动切换使用vl模型,默认是qwen-vl,你可以在参数中变更,如
{"vmodel":"qwen-vl-max"}
- 新建智能体数据集,选择python数据源,取名为"报销单审核":
import json
gpt_dict = json.loads("""$gpt_dict""")
history = gpt_dict['his']
prompt = """$prompt"""
p0 = """
请判断用户的意图,
1.发票审核回答{"status":1}
2.数据提交,请回答{"status":2}
3.查询或统计数据回答{"status":3}
4.如果都不涉及请询问用户的意图
"""
p1=f"""
如果用户需审核发票,请识别附件内容后进行审核
你需要参考规则:金额不能超过150元;发票信息属实,非虚假报销。
如果审核通过,你需要询问用户确认是否提交
如果不通过,需要给出原因
请输出格式如下:
识别的内容:xxxxx
是否通过:是或否
原因: xxx
以下是我的问题:
{prompt}
"""
p2="""
请基于最后一次的审核的结果判断,忽略之前的审核结果,如果审核未通过,不允许提交,请给出原因;
如果审核通过,请用以下格式输出相应的insert sql的json
{"tool":"local","sql":"INSERT INTO fpshjl (是否通过, 原因) VALUES ('是或否', '替换成你的原因')"}
"""
p3="""
数据存储在sqlite的表中,表结构如下:
create table fpshjl(是否通过 varchar(100), 原因 text, create_time DATETIME DEFAULT (datetime(CURRENT_TIMESTAMP,'localtime')))
请输出以下json格式
{"tool":"local","sql":"你的查询sql"}
"""
ds = ds_gpt('通义千问',prompt,his=history+p0,tool=True)
yield f"意图识别完成{ds},等待处理<br>"
# ---------- 意图1处理,有上传文件即调用dashAI识别发票 -----------
if ds['status']==1:
if gpt_dict['files']:
# 流式输出结果
res = ds_gpt('dashAI',p1,files=gpt_dict['files'],stream=1)
for item in res:
yield item
else:
yield '请上传图片格式的发票'
# ---------- 意图2处理,调用插入sql,写入数据 -----------
elif ds['status']==2:
ds = ds_gpt('通义千问',prompt,his=history+p2)
yield ds_tool(ds)
# ---------- 意图3处理,调用通义千问处理查询数据意图并执行查数要求 -----------
elif ds['status']==3:
ds = ds_gpt('通义千问',prompt,his=history+p3)
yield ds_tool(ds)
else:
yield '没有可处理的智能体'
- 在首页AI问答的模块使@,即可召唤"报销单审核"
智能体编排(多智能体协作) #
通过智能体编排实现多步骤协作:
import json
gpt_dict = json.loads("""$gpt_dict""")
history = gpt_dict['his']
prompt = """$prompt"""
def gen():
know = ds_sql('知识库','xxxx')
info = ds_sql('API','xxxx')
yield f"已获取相关数据,正在进行总结\n"
ds = ds_tool('数据总结',f'{know}{info}{history}{prompt}')
yield f"数据总结完成,准备显示单据\n"
yield f"请确认数据是否正确,并提交\n"
yield ds_tool(ds)
ds = gen()
- 相关智能体
- 数据总结【智能体】
请基于以下数据:
$prompt
请总结相关参数,a:xxxx,b:xxxx
按以下格式回复
{"tool":"单据","param":{"a":"xxxx","b":"xxxx"}}
- 单据【组件智能体】,开发数据集+图形
dataset={
"a":"$a",
"b":"$b"
}
如果需要大模型查询流式输出 #
res = ds_gpt('通义千问', prompt, his=history, stream=True)
for item in res:
yield item