send_data_to_vector.py 2.5 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455
  1. import asyncio
  2. from grpclib.client import Channel
  3. import os
  4. import sys
  5. sys.path.append(os.path.dirname(os.path.dirname(__file__)))
  6. from config import logger,GRPC_VECTOR_HOST,GRPC_VECTOR_PORT
  7. from grpc_m.vector import vector_pb2, vector_grpc
  8. from db.docs import DocumentsRepository,Documents,DocStatus
  9. def send_to_grpc_vetcor(category_id,doc_model:Documents):
  10. loop = asyncio.get_running_loop()
  11. loop.create_task(load_user_docs_async(category_id,doc_model))
  12. async def load_user_docs_async(category_id: str, doc_model:Documents):
  13. user_doc_relative_path = DocumentsRepository.get_user_file_relpath_from_docmodel(doc_model)
  14. try:
  15. async with Channel(GRPC_VECTOR_HOST, GRPC_VECTOR_PORT) as channel:
  16. stub = vector_grpc.VectorServiceStub(channel)
  17. logger.info(f"send to vector: category_id={category_id} user_doc_relative_path={user_doc_relative_path}")
  18. request = vector_pb2.SaveDocToVectorRequest(
  19. user_doc_relative_path=user_doc_relative_path,
  20. category_id=str(category_id) # 将 uuid 类型转为字符串,使其符合 proto 文件定义的协议
  21. )
  22. response:vector_pb2.SaveDocToVectorResponse = await stub.SaveDocToVector(request)
  23. # send_to_grpc_vetcor(category_id, doc_model)
  24. # 输出响应结果
  25. if response.status == vector_pb2.ErrorCode.SUCCESS:
  26. doc_model.status = DocStatus.COMPLETED
  27. DocumentsRepository().update(doc_model)
  28. logger.info(f"Document conver to vector sucess. category_id:{category_id} doc_id:{doc_model.id} path:{doc_model.path}")
  29. else:
  30. logger.error(f"Response: status = {response.status}, {doc_model}")
  31. return response.status
  32. except Exception:
  33. logger.exception(f"vector server {GRPC_VECTOR_HOST, GRPC_VECTOR_PORT} error:{response.status}")
  34. async def langchain_chat(collection_name:str, prompt:str):
  35. async with Channel(GRPC_VECTOR_HOST, GRPC_VECTOR_PORT) as channel:
  36. vector = vector_grpc.VectorServiceStub(channel)
  37. request = vector_pb2.DocChatRequest(collection_name=collection_name, prompt=prompt)
  38. res = await vector.DocChat(request)
  39. logger.debug(f"{collection_name, res.reply, prompt}")
  40. return res.reply
  41. async def simarity_search():
  42. pass
  43. async def main():
  44. dm = Documents(open_id="user123", path="思维链-文档说明.md")
  45. # send_to_grpc_vetcor("123", dm)
  46. await langchain_chat("123")
  47. if __name__ == "__main__":
  48. asyncio.run(main())