Google文件极客手机版
17.98MB · 2025-10-21
您的企业是否曾面临这样的困境?
企业产品品类繁多,单个产品的参数常达数十上百个,类型各异(部分为数字类型,部分为文字类型),且参数重要性存在差异(例如发电机的 "输出功率" 权重远高于 "占地面积")。
客户下单渠道分散(个人微信、企微外部用户、邮件、Excel 文件等),需求描述完整性不一 ------ 部分描述详尽,部分仅为简洁表述。此时,员工需基于对全量产品的深度理解,从多渠道需求中筛选匹配度最高的产品推荐给客户,操作难度极大。
在大模型技术普及前,这类问题通常依赖经验丰富的员工手动处理:员工需投入大量时间响应多渠道需求,提供的推荐仅基于个人判断,无法确保综合考量企业所有产品及各参数权重,推荐结果的客观性与全面性难以保障。
2025 年作为 AI Agent 元年,我们可通过开发专属 AI Agent 解决这一场景,实现产品推荐的自动化与精准化。
如同学生写作需区分议论文、说明文、记叙文的 "套路",AI Agent 开发也存在可遵循的标准范式(随技术迭代持续扩充)。以下重点介绍两类核心范式,并匹配业务场景选择最优方案。
适用场景:需查询多份非结构化材料(如行业专业文献、企业只读规章、产品说明书),或解答 SOP(标准作业流程)、FAQ(常见问题)类知识问题,且匹配需求为 "非严格匹配" 时,优先选择 RAG 范式。
核心流程:
适用场景:业务需通过自然语言触发系统操作,或需将模糊需求转换为系统操作参数,且操作可枚举、高频场景覆盖率高(多数用户需求可明确归类)时,适用意图识别范式。
核心流程:
① 对用户输入进行意图识别,关联外部数据库 / 知识库匹配特定 API;
② 调用大语言模型填充参数(需与外部数据库 / 知识库通信);
③ 权限控制下执行查询(含业务数据处理);
④ 后续业务逻辑处理;
⑤ 输出用户分析结论。
结合 "产品参数推荐" 场景特性,无需完整意图识别环节,仅需提取产品参数即可实现需求,因此简化后的意图识别范式为最优选择。
葡萄城市场是葡萄城官方的生态聚集平台,其中活字格开发实验室店铺里面有两个插件是我们需要使用到的。
向量计算
对象与集合操作工具
向量归一化、哈达玛积(逐元素乘法)、欧几里得距离、余弦相似度、向量缩放(标量乘法)。
我们当下需要用到的是哈达玛积和余弦相似度。
对于两个维度相等的向量A=[ai]和B=[bi],向量[ai*bi]为A和B的哈达玛积。
我们以这个向量计算插件举个例子
结果是
描述的是两个向量的方向接近程度,取值范围是-1到1,-1表示完全相反,1表示完全相同,0表示互相没有关系。越接近1表示,方向越接近。
同样的,我们用向量计算插件举例子
显然,这两个向量是大小相等,方向相同的,那么计算出来的余弦相似度是多少呢?
这两个向量是互相垂直的,它们的余弦相似度是多少呢?
这两个向量互相相反,那么相似度是多少呢?
是用来处理数组、对象和字典等数据结构的。我们这个场景主要用的是数组操作、数组排序和在数组中查询
我们来看下distinct、select和slice等。
其中引用到的上下文变量arr是["1","2","3","1","2","333",""],处理完成后的array是["1","2","3","333",""],注意我的""是空串,不是空值,因此是没有去除的。
其中引用到的上下文变量数据表数据为
[
{
"ID": 1,
"文本": "AB",
"整数": 1,
"小数": 1.5,
"日期": 44927.75,
"是_否": 0
},
{
"ID": 2,
"文本": "BC",
"整数": 2,
"小数": 2.5,
"日期": 44927.99998842592,
"是_否": 1
},
{
"ID": 3,
"文本": "CD",
"整数": 3,
"小数": 3.5,
"日期": 44928,
"是_否": 0
},
{
"ID": 4,
"文本": "DE",
"整数": 4,
"小数": 4.5,
"日期": 44929,
"是_否": 1
},
{
"ID": 5,
"文本": "EF",
"整数": 5,
"小数": 5.5,
"日期": 44929,
"是_否": 0
},
{
"ID": 6,
"文本": "EF",
"整数": 6,
"小数": 6.5,
"日期": 45022,
"是_否": 1
}
经过select操作,抽取ID数组为[1,2,3,4,5,6]。
test3为 [{"ping":"pong"},"2A","2B"],slice后数组为["2A"]
排序前数组为
[
{
"ID": 6,
"文本": "EF",
"整数": 6,
"小数": 6.5,
"日期": 45022,
"是_否": 1
},
{
"ID": 5,
"文本": "EF",
"整数": 5,
"小数": 5.5,
"日期": 44929,
"是_否": 0
},
{
"ID": 4,
"文本": "DE",
"整数": 4,
"小数": 4.5,
"日期": 44929,
"是_否": 1
},
{
"ID": 3,
"文本": "CD",
"整数": 3,
"小数": 3.5,
"日期": 44928,
"是_否": 0
},
{
"ID": 2,
"文本": "BC",
"整数": 2,
"小数": 2.5,
"日期": 44927.99998842592,
"是_否": 1
},
{
"ID": 1,
"文本": "AB",
"整数": 1,
"小数": 1.5,
"日期": 44927.75,
"是_否": 0
}
]
排序后数组为
[
{
"ID": 1,
"文本": "AB",
"整数": 1,
"小数": 1.5,
"日期": 44927.75,
"是_否": 0
},
{
"ID": 2,
"文本": "BC",
"整数": 2,
"小数": 2.5,
"日期": 44927.99998842592,
"是_否": 1
},
{
"ID": 3,
"文本": "CD",
"整数": 3,
"小数": 3.5,
"日期": 44928,
"是_否": 0
},
{
"ID": 4,
"文本": "DE",
"整数": 4,
"小数": 4.5,
"日期": 44929,
"是_否": 1
},
{
"ID": 6,
"文本": "EF",
"整数": 6,
"小数": 6.5,
"日期": 45022,
"是_否": 1
},
{
"ID": 5,
"文本": "EF",
"整数": 5,
"小数": 5.5,
"日期": 44929,
"是_否": 0
}
]
支持where、first和last三个操作。
数组为
[
{
"ID": 1,
"文本": "AB",
"整数": 1,
"小数": 1.5,
"日期": 44927.75,
"是_否": 0
},
{
"ID": 2,
"文本": "BC",
"整数": 2,
"小数": 2.5,
"日期": 44927.99998842592,
"是_否": 1
},
{
"ID": 3,
"文本": "CD",
"整数": 3,
"小数": 3.5,
"日期": 44928,
"是_否": 0
},
{
"ID": 4,
"文本": "DE",
"整数": 4,
"小数": 4.5,
"日期": 44929,
"是_否": 1
},
{
"ID": 5,
"文本": "EF",
"整数": 5,
"小数": 5.5,
"日期": 44929,
"是_否": 0
},
{
"ID": 6,
"文本": "EF",
"整数": 6,
"小数": 6.5,
"日期": 45022,
"是_否": 1
}
]
经过查询,多个查询条件组合为[{"ID":1,"文本":"AB","整数":1,"小数":1.5,"日期":44927.75,"是_否":0}]
经过查询,第一个{"ID":1,"文本":"AB","整数":1,"小数":1.5,"日期":44927.75,"是_否":0}
经过查询,最后一个{"ID":5,"文本":"EF","整数":5,"小数":5.5,"日期":44929.0,"是_否":0}
在AI Agent中,prompt是一个很关键的环节。在活字格自带的AI对话单元格、AI助手命令中,prompt是可以手动写入的,比较便捷。
但是这带来了一个比较麻烦的问题,就是如果应用已经发布,现在需要修改prompt,那么开发者需要打开设计器改动prompt,然后重新发布应用,比较繁琐而且容易出现发布失败。
因此更好的实践是把prompt存储到数据库,加入版本管理,并且给提示词编辑配置一个前端页面。如此,届时只需在前端页面里面改动即可生效,高效且相对安全。
一般提示词模块ER图如下
暂时无法在飞书文档外展示此内容
操作层面,必须熟练掌握两个工具:设置变量命令和SUBSTITUTE公式。设置变量命令可以用于页面的命令和服务端命令,详见www.grapecity.com.cn/solutions/h…
SUBSTITUE公式用法和excel保持一致,可以用于页面的单元格、命令和服务端命令。
前端页面部分,一般是根据项目需求,利用页面引擎进行定制,下图是AI筛选简历的样式
在AI Agent中,经常会用到一个关键值,最接近的数量,习惯上我们命名为TopK,这个值在各种地方频繁使用,如果我们都是直接写3或者5这种固定值的话,那么后期如果要更改起来很容易遗漏而且工作量不小。
因此,活字格提供了全局变量功能,可以为项目进行设置。
这是一个示例
由于前面已经分析了prompt底层表结构,我们此处仅仅展示业务数据表的ER图
暂时无法在飞书文档外展示此内容
我们需要开发一个服务端命令把数据库里面每个产品的每个参数根据其维度的上下限进行归一化处理,即映射到-1到1区间内,方便后续的距离运算。
在此之前,需要开发一个私有的服务端命令normalize,来进行给定维度ID和值后,进行归一化。显然normalize私有服务端命令的入参有两个:维度ID和值,出参是一个:同一值。
内部逻辑为:
=2*(LN(1+MIN(MAX(值,量程下限),量程上限)-量程下限)/LN(1+(量程上限-量程下限)))-1
接下来,我们需要开发重置同一值服务端命令,入参和出参都不需要。
内部逻辑为:
这样子,我们只需要调用下重置同一值服务端命令即可完成数据库里面各个产品的各个参数同一化了。
我们需要对用户输入的查询条件进行同一化处理,并且由于我们的各个维度都是有权重的,因此需要按照各自的权重生成一个蒙版向量来体现权重区别。
入参为查询条件数组,出参有两个:查询向量和规格模板向量。
内部逻辑为:
我们需要根据查询向量、规格蒙版向量和TopK,来为用户查询匹配的产品信息。
内部逻辑为:
这个服务端命令用来根据参数数组生成产品清单。
内部逻辑为
入参为用户输入,出参为产品清单和查询条件参数。
内部逻辑为
[
{"id": 1, "value": 200},
{"id": 2, "value": null},
{"id": 3, "value": null},
{"id": 4, "value": 77},
{"id": 6, "value": null}
]
在页面侧,我们需要AI调用服务端命令来完成前后端联调。具体过程如下:
敏捷构建企业级应用及AI智能体
十铨推出 NV10000 固态硬盘:M.2 2280 PCIe 5.0×4 NVMe,10G 顺序读取
卢伟冰宣布陈奕迅成为 REDMI 声学大使,K90 Pro Max 手机搭载 2.1 立体声系统