gpt.py 3.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103
  1. # -*- coding:utf-8 -*-
  2. if __name__ == '__main__':
  3. import os
  4. os.chdir("..")
  5. import requests
  6. import random
  7. import time
  8. from tools.loglog import logger,simple_logger
  9. from tools.new_mysql import MySQLUploader
  10. m = MySQLUploader()
  11. def insert_ip_token(ip,demo_name,gpt_content,prompt_tokens,completion_tokens,total_tokens):
  12. sql = "insert into consumer_token (ip,demo_name,gpt_content,prompt_tokens,completion_tokens,total_tokens) values (%s,%s,%s,%s,%s,%s)"
  13. m.execute_(sql,(ip,demo_name,str(gpt_content),prompt_tokens,completion_tokens,total_tokens))
  14. def get_answer_from_gpt(question,real_ip="localhost",demo_name="无",model="gpt-4o",max_tokens=3500,temperature:float=0,json_resp=False,n=1,sys_prompt=None):
  15. if "3.5" in model or "3.5-turbo" in model or "3.5turbo" in model:
  16. model = "gpt-3.5-turbo"
  17. elif "4o" in model or "gpt4o" in model:
  18. model = "gpt-4o"
  19. elif "4turbo" in model or "4-turbo" in model:
  20. model = "gpt-4-turbo"
  21. d2 = {
  22. "model": model,
  23. "messages": [],
  24. "max_tokens": max_tokens,
  25. "temperature": temperature,
  26. 'n': n}
  27. if sys_prompt:
  28. d2['messages'].append({"role": "system", "content": sys_prompt})
  29. d2['messages'].append({"role": "user", "content": question})
  30. if json_resp is True:
  31. d2["response_format"] = {"type": "json_object"}
  32. elif json_resp is False:
  33. pass
  34. else:
  35. d2["response_format"] = json_resp
  36. for _ in range(3):
  37. try:
  38. response = requests.post(f'http://170.106.108.95/v1/chat/completions', json=d2)
  39. r_json = response.json()
  40. if r2:= r_json.get("choices",None):
  41. if n>1:
  42. gpt_res = []
  43. for i in r2:
  44. gpt_res.append(i["message"]["content"])
  45. else:
  46. gpt_res= r2[0]["message"]["content"]
  47. gpt_content = str(gpt_res)
  48. prompt_tokens = r_json["usage"]["prompt_tokens"]
  49. completion_tokens = r_json["usage"]["completion_tokens"]
  50. total_tokens = r_json["usage"]["total_tokens"]
  51. insert_ip_token(real_ip,demo_name,gpt_content,prompt_tokens,completion_tokens,total_tokens)
  52. simple_logger.info(f"问题日志:\n{question}\n回答日志:\n{gpt_res}")
  53. return gpt_res
  54. elif r_json.get("message") == "IP address blocked":
  55. print("IP address blocked")
  56. raise Exception("IP address blocked")
  57. else:
  58. print(f"小错误:{question[:10]}")
  59. logger.error(response.text)
  60. except Exception as e:
  61. logger.info(f"小报错忽略{e}")
  62. time.sleep(10)
  63. logger.critical("get_answer_from_gpt 严重错误,3次后都失败了")
  64. def parse_gpt_phon_to_tuplelist(text:str) -> list:
  65. """解析gpt返回的音标数据"""
  66. result = []
  67. if not text:
  68. return []
  69. for i in text.split("\n"):
  70. ii = i.split("***")
  71. if len(ii)>=3:
  72. result.append((ii[0].strip(),ii[1].strip(),ii[2].strip()))
  73. return result
  74. if __name__ == '__main__':
  75. pass
  76. resp = get_answer_from_gpt("hello",temperature=0.8,model='gpt-4o')
  77. print(resp)