应用场景 #
- 打通大模型+数据+图形+表单+触达
- 需要进行复杂的逻辑流程
- 以发票审核为例
函数说明 #
你可以在python数据集中调用执行
- 执行数据源查询【大模型、数据库、接口】
#通过数据源连接名称及SQL语句获取ds数据集
ds_sql(conn_name, sql)
#将数据写入数据源
ds_save(config,content,update=0)
-- config:{'conn':'连接名','table':'表名(字段,..)',...}
-- content:字典或二维数组
-- 成功返回{'status':200,'msg':'success'}
# 可获取大模型生成的结果
ds_gpt(conn_name, prompt,stream=False,his='',tool=False,remark={})
-- stream:开启流式, his:历史纪录,tool:是否输出工具调用,remark:模型参数
-- 成功返回{'status':200,'msg':'xxxx','token':'xx'}
# 如果tool为True
-- 成功返回 {'tool':'数据源名','sql':'xxxx'} 或 {'tool':'智能体名', 'msg':'xxxx'}
-- 或 {'tool':'智能体名','msg':'', 'param':{'xx':'xxx'}}
- 执行智能体【工具技能】
ds_tool('智能体名称',参数)
-- 如ds_tool('下单',{'帐号':'xxx','商品':'xxxx'})
-- 也可以直接执行ds_gpt返回的工具调用意图
ds_tool({'tool':'智能体名','param':{'xx':'xxx'}})
-- 会把msg当做prompt参数传递给相关智能体
ds_tool({'tool':'智能体名','msg':'xxxx'})
-- 也可以简写为
ds_tool('智能体名', 'prompt')
Tool也可以是数据源
- 执行智能返回值参考
#### SQL智能体
当数据源为数据库时,你可以通过sql的方式编写返回值为二维数组,
如[['省份','数量']['广东',123]]
#### 图形智能体
当智能体的名称使用VV开头,会返回图形和数据,格式如下:
{'msg': name,'ds':dataset,'chart':chart, 'token': 0,'status': 200}
#### LLM智能体
你可以使用大模型做为数据源,返回的格式如下:
{'msg': 'xxxxxx', 'token': 0,'status': 200}
#### Python智能体
你可以使用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"}
"""
def gen():
ds = ds_gpt('通义千问',prompt,his=history+p0,tool=True)
yield f"意图识别完成{ds},等待处理\n"
# ---------- 意图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 '没有可处理的智能体'
ds = gen()
- 在首页AI问答的模块使@,即可召唤“报销单审核”
智能体编排 #
- 我们也可以通过智能体编排来实得现复杂智能体开发,比如我们可以先建设几个智能体
- 数据总结
请基于以下数据:
$prompt
请总结相关参数,a:xxxx,b:xxxx
按以下格式回复
{"tool":"VV单据","param":{"a":"xxxx","b":"xxxx"}}
- VV单据
dataset={
"a":"$a",
"b":"$b"
}
- 在智能体编排中,这样我们可以写为
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()
- 如果需要大模型查询时也是流式输出,可以这样
res = ds_gpt('通义千问',prompt,his=history+prompt,stream=True)
for item in res:
yield item