route.py 2.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475
  1. import os
  2. from pathlib import Path
  3. from fastapi import FastAPI, File, UploadFile
  4. from openai import OpenAI
  5. app = FastAPI()
  6. client = OpenAI(
  7. api_key=os.getenv("DASHSCOPE_API_KEY"), # 如果您没有配置环境变量,请在此处替换您的API-KEY
  8. base_url="https://dashscope.aliyuncs.com/compatible-mode/v1", # 填写DashScope服务base_url
  9. )
  10. DEFAULT_USER_MSG = "解析文件中的表格内容:要求准确识别金额等小数的位数,日期用yyyy-MM-dd的格式返回,去掉金额单位、英文和多余的空格,结果用字典返回"
  11. @app.get("/upload-filepath")
  12. async def create_upload_file(filepath: str = None,
  13. file_id: str = None,
  14. user_msg: str = DEFAULT_USER_MSG):
  15. # 读取文件内容(可选)
  16. # contents = await file.read()
  17. # 这里可以对文件进行进一步处理,比如保存到服务器上
  18. # with open(f"./{file.filename}", "wb") as f:
  19. # f.write(contents)
  20. if file_id is None:
  21. file_object = client.files.create(file=Path(filepath), purpose="file-extract")
  22. file_id = file_object.id
  23. # 初始化messages列表
  24. completion = client.chat.completions.create(
  25. model="qwen-long",
  26. temperature=0.1,
  27. presence_penalty=1,
  28. messages=[
  29. {'role': 'system', 'content': 'You are a helpful assistant.'},
  30. {'role': 'system', 'content': f'fileid://{file_id}'},
  31. {'role': 'user', 'content': user_msg}
  32. ],
  33. )
  34. return {"file_id": file_id, "content": completion.choices[0].message.content}
  35. @app.post("/upload-file")
  36. async def create_upload_file(file: UploadFile = File(...),
  37. file_id: str = None,
  38. user_msg: str = DEFAULT_USER_MSG):
  39. if file_id is None:
  40. # 读取文件内容(可选)
  41. contents = await file.read()
  42. # 这里可以对文件进行进一步处理,比如保存到服务器上
  43. with open(f"./uploads/{file.filename}", "wb") as f:
  44. f.write(contents)
  45. file_object = client.files.create(file=Path(f"./uploads/{file.filename}"), purpose="file-extract")
  46. file_id = file_object.id
  47. # 初始化messages列表
  48. completion = client.chat.completions.create(
  49. model="qwen-long",
  50. temperature=0.1,
  51. presence_penalty=1,
  52. messages=[
  53. {'role': 'system', 'content': 'You are a helpful assistant.'},
  54. {'role': 'system', 'content': f'fileid://{file_id}'},
  55. {'role': 'user', 'content': user_msg}
  56. ],
  57. )
  58. return {"file_id": file_id, "content": completion.choices[0].message.content}