route.py 2.8 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576
  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 = f"""解析文件中的表格内容:要求准确识别金额等小数的位数,去掉金额单位、英文和多余的空格,结果用字典返回;
  11. 检查所有字段是否完整,确保没有遗漏或错误,可能需要多次校对,以确保生成的字典准确无误。"""
  12. @app.get("/upload-filepath")
  13. async def create_upload_file(filepath: str = None,
  14. file_id: str = None,
  15. user_msg: str = DEFAULT_USER_MSG):
  16. # 读取文件内容(可选)
  17. # contents = await file.read()
  18. # 这里可以对文件进行进一步处理,比如保存到服务器上
  19. # with open(f"./{file.filename}", "wb") as f:
  20. # f.write(contents)
  21. if file_id is None:
  22. file_object = client.files.create(file=Path(filepath), purpose="file-extract")
  23. file_id = file_object.id
  24. # 初始化messages列表
  25. completion = client.chat.completions.create(
  26. model="qwen-long",
  27. temperature=0.1,
  28. presence_penalty=1,
  29. messages=[
  30. {'role': 'system', 'content': 'You are a helpful assistant.'},
  31. {'role': 'system', 'content': f'fileid://{file_id}'},
  32. {'role': 'user', 'content': user_msg}
  33. ],
  34. )
  35. return {"file_id": file_id, "content": completion.choices[0].message.content}
  36. @app.post("/upload-file")
  37. async def create_upload_file(file: UploadFile = File(...),
  38. file_id: str = None,
  39. user_msg: str = DEFAULT_USER_MSG):
  40. if file_id is None:
  41. # 读取文件内容(可选)
  42. contents = await file.read()
  43. # 这里可以对文件进行进一步处理,比如保存到服务器上
  44. with open(f"./uploads/{file.filename}", "wb") as f:
  45. f.write(contents)
  46. file_object = client.files.create(file=Path(f"./uploads/{file.filename}"), purpose="file-extract")
  47. file_id = file_object.id
  48. # 初始化messages列表
  49. completion = client.chat.completions.create(
  50. model="qwen-long",
  51. temperature=0.1,
  52. presence_penalty=1,
  53. messages=[
  54. {'role': 'system', 'content': 'You are a helpful assistant.'},
  55. {'role': 'system', 'content': f'fileid://{file_id}'},
  56. {'role': 'user', 'content': user_msg}
  57. ],
  58. )
  59. return {"file_id": file_id, "content": completion.choices[0].message.content}