39 lines
1.3 KiB
Python
39 lines
1.3 KiB
Python
from urllib.parse import urlparse, urlunparse
|
|
from sqlalchemy import create_engine, MetaData, Table, select, update, and_
|
|
# backend/llm_service.py
|
|
import dashscope
|
|
from http import HTTPStatus
|
|
from .config import settings
|
|
|
|
# 初始化 Dashscope
|
|
dashscope.api_key = settings.DASHSCOPE_API_KEY
|
|
|
|
def get_embeddings(texts: list[str]):
|
|
"""调用通义千问 embedding 模型"""
|
|
resp = dashscope.TextEmbedding.call(
|
|
model=dashscope.TextEmbedding.Models.text_embedding_v3, # 或其他模型
|
|
input=texts
|
|
)
|
|
if resp.status_code == HTTPStatus.OK:
|
|
return [item['embedding'] for item in resp.output['embeddings']]
|
|
else:
|
|
print(f"Embedding Error: {resp}")
|
|
return []
|
|
def normalize_url(url: str) -> str:
|
|
if not url: return ""
|
|
url = url.strip()
|
|
parsed = urlparse(url)
|
|
scheme = parsed.scheme.lower()
|
|
netloc = parsed.netloc.lower()
|
|
path = parsed.path.rstrip('/')
|
|
if not path: path = ""
|
|
return urlunparse((scheme, netloc, path, parsed.params, parsed.query, ""))
|
|
|
|
def make_response(code: int, msg: str = "Success", data: any = None):
|
|
"""
|
|
统一响应格式
|
|
:param code: 1 成功, 0 失败, 其他自定义
|
|
:param msg: 提示信息
|
|
:param data: 返回数据
|
|
"""
|
|
return {"code": code, "msg": msg, "data": data} |