| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163 |
- # @description:
- # @author: licanglong
- # @date: 2025/11/20 14:22
- import uuid
- from typing import List
- from qdrant_client.models import VectorParams, Distance, PointStruct
- from app.routes.vector_store import vector_store_router
- from app.client.VectorStoreClient import vector_store_client
- from app.constants.vector_store import VectorStoreCollection
- from app.models.Result import SysResult
- from app.models.dto import RiskRuleList, RiskDecisionCaseList, IndustryProfileList, RiskSignalList
- @vector_store_router.put('/risk/rule')
- async def put_risk_rule(data: dict):
- risk_rules = RiskRuleList(risk_rules=data).risk_rules
- collection_name = VectorStoreCollection.RULE_EMBED_STORE
- await vector_store_client.create_collection(
- collection_name=collection_name,
- vectors_config=VectorParams(
- size=1792,
- distance=Distance.COSINE,
- ),
- )
- points: List[PointStruct] = []
- for item in risk_rules:
- vector = vector_store_client.embedding.encode(item.embedding_text)
- point_id = str(uuid.uuid4())
- item.rule_id = point_id
- points.append(
- PointStruct(
- id=point_id,
- vector=vector.tolist(),
- payload=item.dict(),
- )
- )
- await vector_store_client.client.upsert(
- collection_name=collection_name,
- points=points,
- )
- return SysResult.success()
- @vector_store_router.put('/risk/case')
- async def put_case_rule(data: dict):
- decision_cases = RiskDecisionCaseList(decision_cases=data).decision_cases
- collection_name = VectorStoreCollection.CASE_EMBED_STORE
- await vector_store_client.create_collection(
- collection_name=collection_name,
- vectors_config=VectorParams(
- size=1792,
- distance=Distance.COSINE,
- ),
- )
- points: List[PointStruct] = []
- for item in decision_cases:
- vector = vector_store_client.embedding.encode(item.embedding_text)
- point_id = str(uuid.uuid4())
- item.case_id = point_id
- points.append(
- PointStruct(
- id=point_id,
- vector=vector.tolist(),
- payload=item.dict(),
- )
- )
- await vector_store_client.client.upsert(
- collection_name=collection_name,
- points=points,
- )
- return SysResult.success()
- @vector_store_router.put('/risk/industry')
- async def put_industry_rule(data: dict):
- industry_profiles = IndustryProfileList(industry_profiles=data).industry_profiles
- collection_name = VectorStoreCollection.MERCHANTS_EMBED_STORE
- await vector_store_client.create_collection(
- collection_name=collection_name,
- vectors_config=VectorParams(
- size=1792,
- distance=Distance.COSINE,
- ),
- )
- points: List[PointStruct] = []
- for item in industry_profiles:
- vector = vector_store_client.embedding.encode(item.embedding_text)
- point_id = str(uuid.uuid4())
- item.merchant_industry_id = point_id
- points.append(
- PointStruct(
- id=point_id,
- vector=vector.tolist(),
- payload=item.dict(),
- )
- )
- await vector_store_client.client.upsert(
- collection_name=collection_name,
- points=points,
- )
- return SysResult.success()
- @vector_store_router.put('/risk/signal')
- async def put_signal_rule(data: dict):
- signals = RiskSignalList(signals=data).signals
- collection_name = VectorStoreCollection.RULE_EMBED_STORE
- await vector_store_client.create_collection(
- collection_name=collection_name,
- vectors_config=VectorParams(
- size=1792,
- distance=Distance.COSINE,
- ),
- )
- points: List[PointStruct] = []
- for item in signals:
- vector = vector_store_client.embedding.encode(item.embedding_text)
- point_id = str(uuid.uuid4())
- item.signal_id = point_id
- points.append(
- PointStruct(
- id=point_id,
- vector=vector.tolist(),
- payload=item.dict(),
- )
- )
- await vector_store_client.client.upsert(
- collection_name=collection_name,
- points=points,
- )
- return SysResult.success()
- @vector_store_router.get('/risk/rule')
- async def get_risk_rule(data: dict):
- vector = vector_store_client.embedding.encode(data.get('query', ""))
- query_response = await vector_store_client.client.query_points(
- collection_name=VectorStoreCollection.RULE_EMBED_STORE,
- query=vector.tolist(),
- limit=5,
- score_threshold=0.5
- )
- rules = []
- for point in query_response.points:
- rules.append({
- "id": point.id,
- "score": point.score,
- "payload": point.payload,
- })
- return SysResult.success(data=rules)
|