glm.py 3.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899
  1. from config import load_config
  2. from utils import image_to_base
  3. from zhipuai import ZhipuAI
  4. class Glm:
  5. _instance = None
  6. def __new__(cls):
  7. if not cls._instance:
  8. cls._instance = super(Glm, cls).__new__(cls)
  9. cls._instance._initialized = False
  10. return cls._instance
  11. def __init__(self):
  12. if not self._initialized:
  13. self.cfg = load_config()['glm']
  14. self.client = ZhipuAI(api_key=self.cfg["api_key"])
  15. self._initialized = True
  16. self.model_name = "glm-4-plus"
  17. def text_response(self, query):
  18. """文字问答"""
  19. resonse = self.client.chat.completions.create(
  20. model=self.model_name,
  21. messages=[
  22. {"role": "user", "content": query}
  23. ],
  24. response_format= {
  25. 'type': 'json_object'
  26. }
  27. )
  28. return resonse.choices[0].message
  29. def image_response(self, query):
  30. """单图像问答"""
  31. response = self.client.chat.completions.create(
  32. model="glm-4v-plus-0111",
  33. messages=[
  34. {
  35. "role": "user",
  36. "content": [
  37. {
  38. "type": "text",
  39. "text": query
  40. },
  41. {
  42. "type": "image_url",
  43. "image_url": {"url": "http://h2.appsimg.com/a.appsimg.com/upload/merchandise/pdcvis/613214/2024/1120/88/9b9027dd-95b7-4024-b71e-fb7cbfde16a1.jpg"}
  44. }
  45. ]
  46. }
  47. ]
  48. )
  49. return response.choices[0].message
  50. def multi_epoch_image_response(self, logo_path):
  51. """多轮图像问答"""
  52. image_base = image_to_base(logo_path)
  53. response = self.client.chat.completions.create(
  54. model="glm-4v-plus-0111",
  55. messages=[
  56. {
  57. "content": [
  58. {
  59. "image_url": {"url": image_base},
  60. "type": "image_url"
  61. },
  62. {
  63. "text": "这是李宁的logo",
  64. "type": "text"
  65. }
  66. ],
  67. "role": "user"
  68. },
  69. {
  70. "content": [
  71. {
  72. "image_url": {"url": "http://h2.appsimg.com/a.appsimg.com/upload/merchandise/pdcvis/2023/04/14/79/d75fa3db-3bec-45c4-b7a6-54332d42e373.jpg"},
  73. "type": "image_url"
  74. },
  75. {
  76. "text": "第二张图像中的产品是否包含logo,如果包含的话是否是第一张的logo?",
  77. "type": "text"
  78. }
  79. ],
  80. "role": "user"
  81. }
  82. ]
  83. )
  84. return response.choices[0].message
  85. def set_modelname(self, modelname):
  86. self.model_name = modelname
  87. if __name__ == '__main__':
  88. glm = Glm()
  89. response = glm.multi_epoch_image_response("./logo/lining.jpg")
  90. print(response)