| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198 |
- from config import load_config
- from utils import image_to_base, pil_image_to_base64, load_image_from_cos
- from zhipuai import ZhipuAI
- class Glm:
- _instance = None
- def __new__(cls):
- if not cls._instance:
- cls._instance = super(Glm, cls).__new__(cls)
- cls._instance._initialized = False
- return cls._instance
-
- def __init__(self):
- if not self._initialized:
- self.cfg = load_config()['glm']
- self.client = ZhipuAI(api_key=self.cfg["api_key"])
- self._initialized = True
-
- self.model_name = "glm-4-plus"
-
- def text_response(self, query):
- """文字问答"""
- resonse = self.client.chat.completions.create(
- model=self.model_name,
- messages=[
- {"role": "user", "content": query}
- ],
- response_format= {
- 'type': 'json_object'
- }
- )
- return resonse.choices[0].message
-
- def images_response(self, query, image_url_list):
- """多图像单轮问答"""
- content = [
- {
- "type": "text",
- "text": query
- }
- ]
- for image_url in image_url_list:
- # image = load_image_from_cos(image_url)
- # image_base = pil_image_to_base64(image)
- content.append(
- {
- "type": "image_url",
- "image_url": {"url": image_url}
- }
- )
- response = self.client.chat.completions.create(
- model="glm-4v-plus-0111",
- messages=[
- {
- "role": "user",
- "content": content
- }
- ],
- response_format={
- "type": "json_object"
- }
- )
-
- return response.choices[0].message
-
- def multi_images_similarity_judge(self, image_url_list1, image_url_list2, query):
- """多组图像中的产品图像相似度对比"""
- content1 = [
- {
- "text": '这是第一组图像,商品信息中的产品图像',
- "type": "text"
- }
- ]
-
- for image_url in image_url_list1:
- image = load_image_from_cos(image_url)
- image_base = pil_image_to_base64(image)
- content1.append(
- {
- "type": "image_url",
- "image_url": {"url": image_base}
- }
- )
-
- content2 = [
- {
- "text": query,
- "type": "text"
- }
- ]
-
- for image_url in image_url_list2:
- image = load_image_from_cos(image_url)
- image_base = pil_image_to_base64(image)
- content2.append(
- {
- "type": "image_url",
- "image_url": {"url": image_base}
- }
- )
-
- response = self.client.chat.completions.create(
- model=self.model_name,
- messages=[
- {
- "content": content1,
- "role": "user"
- },
- {
- "content": content2,
- "role": "user"
- }
- ],
- response_format = {
- "type": "json_object"
- }
- )
-
- return response.choices[0].message
-
- def image_response(self, query, image_url1, image_url2):
- """单图像问答"""
- image1 = load_image_from_cos(image_url1)
- image1_base = pil_image_to_base64(image1)
-
- image2 = load_image_from_cos(image_url2)
- image2_base = pil_image_to_base64(image2)
- response = self.client.chat.completions.create(
- model="glm-4v-plus-0111",
- messages=[
- {
- "role": "user",
- "content": [
- {
- "type": "text",
- "text": query
- },
- {
- "type": "image_url",
- "image_url": {"url": image1_base}
- },
- {
- "type": "image_url",
- "image_url": {"url": image2_base}
- }
- ]
- }
- ],
- response_format = {
- "type": "json_object"
- }
- )
-
- return response.choices[0].message
-
- def multi_epoch_image_response(self, logo_path, image_url, query):
- """多轮图像问答"""
- image_base = image_to_base(logo_path)
- response = self.client.chat.completions.create(
- model=self.model_name,
- messages=[
- {
- "content": [
- {
- "image_url": {"url": image_base},
- "type": "image_url"
- },
- {
- "text": "这是李宁的logo",
- "type": "text"
- }
- ],
- "role": "user"
- },
- {
- "content": [
- {
- "image_url": {"url": image_url},
- "type": "image_url"
- },
- {
- "text": query,
- "type": "text"
- }
- ],
- "role": "user"
- }
- ],
- response_format = {
- "type": "json_object"
- }
- )
-
- return response.choices[0].message
-
-
- def set_modelname(self, modelname):
- self.model_name = modelname
-
|