ai智能搜索生产实现(低门槛实现自然语言搜索)

自然语言搜索是一种搜索方式,用户可以以自然语言的形式提问或描述他们正在寻找的信息,而不是使用特定的查询语法或关键字。简单来说,就是用户可以用日常的对话方式来进行搜索。

这种搜索方式的优点是更加直观和用户友好,因为用户不需要担心如何准确地拼写关键词或掌握复杂的查询语法。

用户可以以提问的方式来搜索想要的数据,用于替代常规的Elasticsearch或者是数据搜索。

实现思路

原始数据预处理

首先根据需求确定搜索的数据范围,当数据有变动或者新增或者初始化的时候,把数据的需要向量搜索匹配的字段拼成字符串,然后用这个字符串去请求embeddings接口计算出向量,同时一些数字数据相关的有筛选需求的字段也一并与数据id和之前计算出的向量存入(更新)向量数据库。

自然语言处理

这一流程步骤主要的职责是把用户搜索输入的自然语言转换成业务代码可以理解的数据结构

这一块可以用已有的模型api,优点是性能好,缺点是api需要收费。如果自己部署模型的话,优点是免费,缺点是性能可能不太好,有一定的部署成本

这一块可以使用chatgpt接口来实现,通过话术,让chatgpt返回一个json,里面包含用户想要查询的信息的数据结构

话术示例:

Existing a database table, which has sale_count (sales) field, help me to generate the product filter conditions (if any), as well as product-related text information (I subsequently use this information to do vector matching). You need to return me directly to the json similar to mongodb query, do not return redundant fields. Such as {"sale_count":{"$gte":1000}, "text": "beauty category"}, which text is the product you extracted text information, in addition to the information outside the specified fields, you have to include in this, to try to perfect. You directly return json to me can, do not return non-json. now help me generate "help me find out the furniture category cumulative sales of more than 4000 pieces of goods, preferably the type of furniture in the kitchen, to be formaldehyde-free"

其中双引号部分替换成用户的输入,gpt返回就可以得到一个json:

kotlin 复制代码
{
"sale_count": {"$gte": 4000},//这部分是作为条件搜索
"text": "furniture category kitchen formaldehyde-free"
}

如果搜索的更复杂一些,gpt返回如

bash 复制代码
{
"sale_count": {"$gte": 4000},
"region":"US",
"price":{"$lte":5000}
"text": "furniture category kitchen formaldehyde-free"
}

其中除了text字段,其他字段为筛选字段,text字段为需要转化成向量的搜索字段。

业务处理

这里拿到前面自然语言处理后的查询json,分为两部分处理,模糊搜索用向量来搜索,涉及筛选项的直接组装筛选查询,最后合并查询条件并查询向量数据库,最后拿到数据id集合去回表查询业务数据库,最后返回数据给到用户前端

总体架构

调优

话术调优

  • 语言描述部分,使用话术让chatgpt需要更加准确、丰富的把用户想搜的描述出来,不能有歧义或者是漏了用户想要的部分意图。可以根据业务的实际要求,也可以让chatgpt把用户的描述部分同意转化成英文来输出,这样在进行向量搜索的时候英文部分的排行会高一些
  • 逻辑搜索部分,调优话术要让chatgpt准确的理解目前数据库有的字段,不能反回多余的字段或者是本该有的筛选没识别出来
  • 向量计算方面,源数据的字符串文字如果过长了,使用向量搜索的准确性不会很高,可以考虑按逻辑分割成多个小段,再进行向量计算。在用户输入的搜索文字里,也可以通过话术让chatgpt来帮忙归类分割不同的搜索向量字段
相关推荐
AI军哥6 分钟前
MySQL8的安装方法
人工智能·mysql·yolo·机器学习·deepseek
余弦的倒数20 分钟前
知识蒸馏和迁移学习的区别
人工智能·机器学习·迁移学习
Allen Bright20 分钟前
【机器学习-线性回归-2】理解线性回归中的连续值与离散值
人工智能·机器学习·线性回归
青松@FasterAI1 小时前
【程序员 NLP 入门】词嵌入 - 上下文中的窗口大小是什么意思? (★小白必会版★)
人工智能·自然语言处理
AIGC大时代1 小时前
高效使用DeepSeek对“情境+ 对象 +问题“型课题进行开题!
数据库·人工智能·算法·aigc·智能写作·deepseek
硅谷秋水1 小时前
GAIA-2:用于自动驾驶的可控多视图生成世界模型
人工智能·机器学习·自动驾驶
偶尔微微一笑1 小时前
AI网络渗透kali应用(gptshell)
linux·人工智能·python·自然语言处理·编辑器
深度之眼2 小时前
2025时间序列都有哪些创新点可做——总结篇
人工智能·深度学习·机器学习·时间序列
晓数2 小时前
【硬核干货】JetBrains AI Assistant 干货笔记
人工智能·笔记·jetbrains·ai assistant
jndingxin2 小时前
OpenCV 图形API(60)颜色空间转换-----将图像从 YUV 色彩空间转换为 RGB 色彩空间函数YUV2RGB()
人工智能·opencv·计算机视觉