版本变更V3.31添加识图功能

This commit is contained in:
dxc
2026-05-22 11:40:35 +08:00
parent 8c635d6afe
commit 3ffcd35093
2 changed files with 42 additions and 37 deletions

View File

@ -77,40 +77,42 @@ def image_search():
query_vector_str = '[' + ','.join(str(v) for v in embedding) + ']'
sql = text("""
SELECT id, name, spec_model, image_url,
(1 - (vec <=> :query_vector)) AS similarity
FROM (
-- 1. 基础物料表
SELECT id, name, spec_model, product_image AS image_url, img_embedding AS vec
FROM material_base
WHERE img_embedding IS NOT NULL
UNION ALL
-- 2. 采购入库表 (通过 base_id 关联拿真实物料)
SELECT mb.id, mb.name, mb.spec_model, sb.arrival_photo AS image_url, sb.arrival_image_embedding AS vec
FROM stock_buy sb
JOIN material_base mb ON sb.base_id = mb.id
WHERE sb.arrival_image_embedding IS NOT NULL
UNION ALL
-- 3. 半成品入库表
SELECT mb.id, mb.name, mb.spec_model, ss.arrival_photo AS image_url, ss.arrival_image_embedding AS vec
FROM stock_semi ss
JOIN material_base mb ON ss.base_id = mb.id
WHERE ss.arrival_image_embedding IS NOT NULL
UNION ALL
-- 4. 成品入库表
SELECT mb.id, mb.name, mb.spec_model, sp.product_photo AS image_url, sp.arrival_image_embedding AS vec
FROM stock_product sp
JOIN material_base mb ON sp.base_id = mb.id
WHERE sp.arrival_image_embedding IS NOT NULL
) AS combined
ORDER BY vec <=> :query_vector LIMIT 10
""")
SELECT id, name, spec_model, image_url,
(1 - (vec <=> :query_vector)) AS similarity
FROM (
-- 1. 基础物料表
SELECT id, name, spec_model, product_image AS image_url, img_embedding AS vec
FROM material_base
WHERE img_embedding IS NOT NULL
UNION ALL
-- 2. 采购入库表 (通过 base_id 关联拿真实物料信息)
SELECT mb.id, mb.name, mb.spec_model, sb.arrival_photo AS image_url, sb.arrival_image_embedding AS vec
FROM stock_buy sb
JOIN material_base mb ON sb.base_id = mb.id
WHERE sb.arrival_image_embedding IS NOT NULL
UNION ALL
-- 3. 半成品入库表 (通过 base_id 关联拿真实物料信息)
SELECT mb.id, mb.name, mb.spec_model, ss.arrival_photo AS image_url, ss.arrival_image_embedding AS vec
FROM stock_semi ss
JOIN material_base mb ON ss.base_id = mb.id
WHERE ss.arrival_image_embedding IS NOT NULL
UNION ALL
-- 4. 成品入库表 (通过 base_id 关联拿真实物料信息)
SELECT mb.id, mb.name, mb.spec_model, sp.product_photo AS image_url, sp.arrival_image_embedding AS vec
FROM stock_product sp
JOIN material_base mb ON sp.base_id = mb.id
WHERE sp.arrival_image_embedding IS NOT NULL
) AS combined
-- 核心:计算余弦距离并排序,取最接近的前 50 个!
ORDER BY vec <=> :query_vector LIMIT 50
""")
# 执行查询
records = db.session.execute(sql, {"query_vector": query_vector_str}).fetchall()
@ -150,7 +152,7 @@ def image_search():
"similarity": round(float(row.similarity), 4)
})
# 【新增】只要凑够了 10 个完全不同的物料,就立刻结束循环
# 修改后:只要凑够了 10 个完全不同的物料,就立刻结束循环
if len(results) >= 10:
break