|
|
|
@ -59,7 +59,6 @@ milvus_pool = MilvusConnectionPool(host=MS_HOST, port=MS_PORT, max_connections=M
|
|
|
|
|
collection_name = MS_COLLECTION_NAME
|
|
|
|
|
collection_manager = MilvusCollectionManager(collection_name)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
# 将文本转换为嵌入向量
|
|
|
|
|
def text_to_embedding(text):
|
|
|
|
|
words = jieba.lcut(text) # 使用 jieba 分词
|
|
|
|
@ -74,7 +73,6 @@ def text_to_embedding(text):
|
|
|
|
|
print("未找到有效词,返回零向量")
|
|
|
|
|
return [0.0] * model.vector_size
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
# 使用 Lifespan Events 处理应用启动和关闭逻辑
|
|
|
|
|
@asynccontextmanager
|
|
|
|
|
async def lifespan(app: FastAPI):
|
|
|
|
@ -86,7 +84,6 @@ async def lifespan(app: FastAPI):
|
|
|
|
|
milvus_pool.close()
|
|
|
|
|
print("Milvus 连接池已关闭。")
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
# 初始化 FastAPI 应用
|
|
|
|
|
app = FastAPI(lifespan=lifespan)
|
|
|
|
|
|
|
|
|
@ -99,10 +96,6 @@ client = OpenAI(
|
|
|
|
|
# 设置相似度阈值
|
|
|
|
|
SIMILARITY_THRESHOLD = 0.5 # 距离小于 0.5 的结果被认为是高相似度
|
|
|
|
|
|
|
|
|
|
# 在 /reply 接口中优化查询逻辑和提示词构建方式
|
|
|
|
|
# 在 /reply 接口中优化提示词传递和系统提示词
|
|
|
|
|
# 在 /reply 接口中优化提示词传递和系统提示词
|
|
|
|
|
# 在 /reply 接口中优化查询逻辑和提示词构建方式
|
|
|
|
|
@app.post("/reply")
|
|
|
|
|
async def reply(session_id: str = Form(...), prompt: str = Form(...)):
|
|
|
|
|
"""
|
|
|
|
@ -123,7 +116,7 @@ async def reply(session_id: str = Form(...), prompt: str = Form(...)):
|
|
|
|
|
print(f"提取的关键词: {keywords}")
|
|
|
|
|
|
|
|
|
|
# 构建查询条件
|
|
|
|
|
expr = f"session_id == '{session_id}'" # 只过滤 session_id
|
|
|
|
|
expr = build_query_expr(session_id, keywords)
|
|
|
|
|
print(f"查询条件: {expr}")
|
|
|
|
|
|
|
|
|
|
# 查询与当前对话最相关的五条历史交互
|
|
|
|
@ -140,9 +133,6 @@ async def reply(session_id: str = Form(...), prompt: str = Form(...)):
|
|
|
|
|
)
|
|
|
|
|
end_time = time.time()
|
|
|
|
|
|
|
|
|
|
# 调试:输出查询结果
|
|
|
|
|
print(f"查询结果: {results}")
|
|
|
|
|
|
|
|
|
|
# 构建历史交互提示词
|
|
|
|
|
history_prompt = ""
|
|
|
|
|
if results:
|
|
|
|
@ -192,12 +182,12 @@ async def reply(session_id: str = Form(...), prompt: str = Form(...)):
|
|
|
|
|
collection_manager.insert_data(entities)
|
|
|
|
|
print("用户输入和大模型反馈已记录到向量数据库。")
|
|
|
|
|
|
|
|
|
|
# 调用tts进行生成mp3
|
|
|
|
|
# 调用 TTS 生成 MP3
|
|
|
|
|
uuid_str = str(uuid.uuid4())
|
|
|
|
|
tts_file = "audio/" + uuid_str + ".mp3"
|
|
|
|
|
t = TTS(tts_file)
|
|
|
|
|
t.start(result)
|
|
|
|
|
# 文件上传到oss
|
|
|
|
|
# 文件上传到 OSS
|
|
|
|
|
upload_mp3_to_oss(tts_file, tts_file)
|
|
|
|
|
# 删除临时文件
|
|
|
|
|
try:
|
|
|
|
@ -205,7 +195,7 @@ async def reply(session_id: str = Form(...), prompt: str = Form(...)):
|
|
|
|
|
print(f"临时文件 {tts_file} 已删除")
|
|
|
|
|
except Exception as e:
|
|
|
|
|
print(f"删除临时文件失败: {e}")
|
|
|
|
|
# 完整的url
|
|
|
|
|
# 完整的 URL
|
|
|
|
|
url = 'https://ylt.oss-cn-hangzhou.aliyuncs.com/' + tts_file
|
|
|
|
|
return {
|
|
|
|
|
"success": True,
|
|
|
|
@ -221,9 +211,8 @@ async def reply(session_id: str = Form(...), prompt: str = Form(...)):
|
|
|
|
|
# 释放连接
|
|
|
|
|
milvus_pool.release_connection(connection)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
# 运行 FastAPI 应用
|
|
|
|
|
if __name__ == "__main__":
|
|
|
|
|
import uvicorn
|
|
|
|
|
|
|
|
|
|
uvicorn.run(app, host="0.0.0.0", port=5600)
|
|
|
|
|
uvicorn.run(app, host="0.0.0.0", port=5600)
|