1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556 |
- import diskcache
- import threading
- from pqai_agent import chat_service
- from pqai_agent.chat_service import VOLCENGINE_MODEL_DOUBAO_1_5_VISION_PRO
- from pqai_agent.logging_service import logger
- from pqai_agent.toolkit.base import BaseToolkit
- from pqai_agent.toolkit.function_tool import FunctionTool
- # 不同实例间复用cache,但不是很好的实践
- _image_describer_caches = {}
- _cache_mutex = threading.Lock()
- class ImageDescriber(BaseToolkit):
- def __init__(self, cache_dir: str = None):
- self.model = VOLCENGINE_MODEL_DOUBAO_1_5_VISION_PRO
- self.llm_client = chat_service.OpenAICompatible.create_client(self.model)
- if not cache_dir:
- cache_dir = 'image_descriptions_cache'
- if cache_dir not in _image_describer_caches:
- with _cache_mutex:
- _image_describer_caches[cache_dir] = diskcache.Cache(cache_dir, size_limit=100*1024*1024)
- self.cache = _image_describer_caches[cache_dir]
- super().__init__()
- def analyse_image(self, image_url: str):
- """Takes an image URL as input and returns a detailed description of the image.
- Args:
- image_url (str): The URL of the image to be described.
- Returns:
- str: A detailed description of the image.
- """
- if image_url in self.cache:
- logger.debug(f"Cache hit for image URL: {image_url}")
- return self.cache[image_url]
- system_prompt = "你是一位图像分析专家。请提供输入图像的详细描述,包括图像中的文本内容(如果存在)"
- messages = [
- {'role': 'system', 'content': system_prompt},
- {'role': 'user', 'content': [
- {
- 'type': 'image_url',
- 'image_url': image_url
- }
- ]}
- ]
- response = self.llm_client.chat.completions.create(messages=messages, model=self.model)
- response_content = response.choices[0].message.content
- logger.debug(f"ImageDescriber response: {response_content}")
- self.cache[image_url] = response_content
- return response_content
- def get_tools(self):
- return [FunctionTool(self.analyse_image)]
|