cot_completion_agent_runner.py 2.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869
  1. import json
  2. from core.agent.cot_agent_runner import CotAgentRunner
  3. from core.model_runtime.entities.message_entities import AssistantPromptMessage, PromptMessage, UserPromptMessage
  4. from core.model_runtime.utils.encoders import jsonable_encoder
  5. class CotCompletionAgentRunner(CotAgentRunner):
  6. def _organize_instruction_prompt(self) -> str:
  7. """
  8. Organize instruction prompt
  9. """
  10. prompt_entity = self.app_config.agent.prompt
  11. first_prompt = prompt_entity.first_prompt
  12. system_prompt = first_prompt.replace("{{instruction}}", self._instruction) \
  13. .replace("{{tools}}", json.dumps(jsonable_encoder(self._prompt_messages_tools))) \
  14. .replace("{{tool_names}}", ', '.join([tool.name for tool in self._prompt_messages_tools]))
  15. return system_prompt
  16. def _organize_historic_prompt(self, current_session_messages: list[PromptMessage] = None) -> str:
  17. """
  18. Organize historic prompt
  19. """
  20. historic_prompt_messages = self._organize_historic_prompt_messages(current_session_messages)
  21. historic_prompt = ""
  22. for message in historic_prompt_messages:
  23. if isinstance(message, UserPromptMessage):
  24. historic_prompt += f"Question: {message.content}\n\n"
  25. elif isinstance(message, AssistantPromptMessage):
  26. historic_prompt += message.content + "\n\n"
  27. return historic_prompt
  28. def _organize_prompt_messages(self) -> list[PromptMessage]:
  29. """
  30. Organize prompt messages
  31. """
  32. # organize system prompt
  33. system_prompt = self._organize_instruction_prompt()
  34. # organize historic prompt messages
  35. historic_prompt = self._organize_historic_prompt()
  36. # organize current assistant messages
  37. agent_scratchpad = self._agent_scratchpad
  38. assistant_prompt = ''
  39. for unit in agent_scratchpad:
  40. if unit.is_final():
  41. assistant_prompt += f"Final Answer: {unit.agent_response}"
  42. else:
  43. assistant_prompt += f"Thought: {unit.thought}\n\n"
  44. if unit.action_str:
  45. assistant_prompt += f"Action: {unit.action_str}\n\n"
  46. if unit.observation:
  47. assistant_prompt += f"Observation: {unit.observation}\n\n"
  48. # query messages
  49. query_prompt = f"Question: {self._query}"
  50. # join all messages
  51. prompt = system_prompt \
  52. .replace("{{historic_messages}}", historic_prompt) \
  53. .replace("{{agent_scratchpad}}", assistant_prompt) \
  54. .replace("{{query}}", query_prompt)
  55. return [UserPromptMessage(content=prompt)]