cot_completion_agent_runner.py 2.7 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273
  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 = (
  13. first_prompt.replace("{{instruction}}", self._instruction)
  14. .replace("{{tools}}", json.dumps(jsonable_encoder(self._prompt_messages_tools)))
  15. .replace("{{tool_names}}", ", ".join([tool.name for tool in self._prompt_messages_tools]))
  16. )
  17. return system_prompt
  18. def _organize_historic_prompt(self, current_session_messages: list[PromptMessage] = None) -> str:
  19. """
  20. Organize historic prompt
  21. """
  22. historic_prompt_messages = self._organize_historic_prompt_messages(current_session_messages)
  23. historic_prompt = ""
  24. for message in historic_prompt_messages:
  25. if isinstance(message, UserPromptMessage):
  26. historic_prompt += f"Question: {message.content}\n\n"
  27. elif isinstance(message, AssistantPromptMessage):
  28. historic_prompt += message.content + "\n\n"
  29. return historic_prompt
  30. def _organize_prompt_messages(self) -> list[PromptMessage]:
  31. """
  32. Organize prompt messages
  33. """
  34. # organize system prompt
  35. system_prompt = self._organize_instruction_prompt()
  36. # organize historic prompt messages
  37. historic_prompt = self._organize_historic_prompt()
  38. # organize current assistant messages
  39. agent_scratchpad = self._agent_scratchpad
  40. assistant_prompt = ""
  41. for unit in agent_scratchpad:
  42. if unit.is_final():
  43. assistant_prompt += f"Final Answer: {unit.agent_response}"
  44. else:
  45. assistant_prompt += f"Thought: {unit.thought}\n\n"
  46. if unit.action_str:
  47. assistant_prompt += f"Action: {unit.action_str}\n\n"
  48. if unit.observation:
  49. assistant_prompt += f"Observation: {unit.observation}\n\n"
  50. # query messages
  51. query_prompt = f"Question: {self._query}"
  52. # join all messages
  53. prompt = (
  54. system_prompt.replace("{{historic_messages}}", historic_prompt)
  55. .replace("{{agent_scratchpad}}", assistant_prompt)
  56. .replace("{{query}}", query_prompt)
  57. )
  58. return [UserPromptMessage(content=prompt)]