智能体编排

应用场景 #

  • 打通大模型+数据+图形+表单+触达
  • 需要进行复杂的逻辑流程
  • 以发票审核为例

使用方法 #

  • 新建一个大模型数据源,本次采用dashAI,以调用阿里dashscope的能力为列

dashAI可选择qwen模型,当有图片上传时会自动切换使用vl模型,默认是qwen-vl,你可以在参数中变更,如{“vmodel”:“qwen-vl-max”}

  • 新建智能体数据集,选择python数据源,取名为"报销单审核"
import json
gpt_dict = $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},isjson=1)
# ---------- 意图1处理,有上传文件即调用dashAI识别发票 -----------
if ds['status']==1:
    if gpt_dict['files']:
        ds = ds_gpt('dashAI',p1,{'files':gpt_dict['files']})
    else:
        ds ={'msg': '请上传图片格式的发票', 'token': 0, 'status': 200}
# ---------- 意图2处理,调用插入sql,写入数据 -----------
elif ds['status']==2:
    ds = ds_gpt('通义千问',prompt,{'his':history+p2},1)
    if ds.get('tool'):
        ds = ds_sql(ds['tool'],ds['sql'])
# ---------- 意图3处理,调用通义千问处理查询数据意图并执行查数要求 -----------
elif ds['status']==3:
    ds = ds_gpt('通义千问',prompt,{'his':history+p3},1)
    ds = ds_sql(ds['tool'],ds['sql'])

    
  • 如果需要流式返回可以改写
# ---------- 意图识别 -----------
history = gpt_dict['his']
stream = gpt_dict['stream']
def gen():
    ds = ds_gpt('通义千问',prompt,{'his':history+p0},isjson=1)
    if stream:
        yield f'{{"msg": "意图识别完成{ds},等待处理\n", "token": 0, "status": 200,"think":1}}//.'
    # ---------- 意图1处理,有上传文件即调用dashAI识别发票 -----------
    if ds['status']==1:
        if gpt_dict['files']:
            if stream:
                yield f'{{"msg": "正在处理上传的文件,请等待", "token": 0, "status": 200,"think":1}}//.'
            ds = ds_gpt('dashAI',p1,{'files':gpt_dict['files']})
        else:
            ds ={'msg': '请上传图片格式的发票', 'token': 0, 'status': 200}
    # ---------- 意图2处理,调用插入sql,写入数据 -----------
    elif ds['status']==2:
        ds = ds_gpt('通义千问',prompt,{'his':history+p2},1)
        if ds.get('tool'):
            ds = ds_sql(ds['tool'],ds['sql'])
    # ---------- 意图3处理,调用通义千问处理查询数据意图并执行查数要求 -----------
    elif ds['status']==3:
        ds = ds_gpt('通义千问',prompt,{'his':history+p3},1)
        ds = ds_sql(ds['tool'],ds['sql'])
    if stream:
        yield json.dumps(ds)
    else:
        return ds

ds = gen()
  • 在首页AI问答的模块使@,即可召唤“报销单审核”