model_generate.py 1.6 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253
  1. # !/usr/bin/ python
  2. # -*- coding: utf-8 -*-
  3. '''
  4. @Project : lq-agent-api
  5. @File :model_generate.py
  6. @IDE :PyCharm
  7. @Author :
  8. @Date :2025/7/14 14:22
  9. '''
  10. from langchain_core.prompts import ChatPromptTemplate
  11. from foundation.utils.utils import get_models
  12. from foundation.logger.loggering import server_logger as logger
  13. class GenerateModelClient:
  14. """
  15. 主要是生成式模型
  16. """
  17. def __init__(self):
  18. # 获取部署的模型列表
  19. llm, chat, embed = get_models()
  20. self.llm = llm
  21. self.chat = chat
  22. async def get_model_generate_invoke(self, trace_id, task_prompt_info: dict):
  23. """
  24. 模型非流式生成(异步)
  25. """
  26. prompt_template = task_prompt_info["task_prompt"]
  27. # 直接格式化消息,不需要额外的invoke步骤
  28. messages = prompt_template.format_messages()
  29. # 使用异步方法调用模型,避免阻塞事件循环
  30. import asyncio
  31. loop = asyncio.get_event_loop()
  32. response = await loop.run_in_executor(None, self.llm.invoke, messages)
  33. # logger.info(f"[模型生成结果]: {response.content}")
  34. return response.content
  35. def get_model_generate_stream(self, trace_id, task_prompt_info: dict):
  36. """
  37. 模型流式生成(异步)
  38. """
  39. prompt_template = task_prompt_info["task_prompt"]
  40. # 直接格式化消息,不需要额外的invoke步骤 stream
  41. messages = prompt_template.format_messages()
  42. response = self.llm.stream(messages)
  43. for chunk in response:
  44. yield chunk.content
  45. generate_model_client = GenerateModelClient()