mirror of
https://github.com/OpenBMB/ChatDev.git
synced 2026-04-25 11:18:06 +00:00
54 lines
1.9 KiB
Python
Executable File
54 lines
1.9 KiB
Python
Executable File
from entity.configs import ReflectionThinkingConfig
|
|
from entity.messages import Message, MessageRole
|
|
from runtime.node.agent.thinking.thinking_manager import (
|
|
ThinkingManagerBase,
|
|
AgentInvoker,
|
|
ThinkingPayload,
|
|
)
|
|
|
|
|
|
class SelfReflectionThinkingManager(ThinkingManagerBase):
|
|
"""
|
|
A simple implementation of thinking manager, named self-reflection.
|
|
This part of the code is borrowed from ChatDev (https://github.com/OpenBMB/ChatDev) and adapted.
|
|
"""
|
|
|
|
def __init__(self, config: ReflectionThinkingConfig):
|
|
super().__init__(config)
|
|
self.before_gen_think_enabled = False
|
|
self.after_gen_think_enabled = True
|
|
self.base_prompt = """Here is a conversation between two roles: {conversations} {reflection_prompt}"""
|
|
|
|
self.reflection_prompt = config.reflection_prompt or "Reflect on the given information and summarize key points in a few words."
|
|
|
|
def _before_gen_think(
|
|
self,
|
|
agent_invoker: AgentInvoker,
|
|
input_payload: ThinkingPayload,
|
|
agent_role: str,
|
|
memory: ThinkingPayload | None,
|
|
) -> tuple[str, bool]:
|
|
...
|
|
|
|
def _after_gen_think(
|
|
self,
|
|
agent_invoker: AgentInvoker,
|
|
input_payload: ThinkingPayload,
|
|
agent_role: str,
|
|
memory: ThinkingPayload | None,
|
|
gen_payload: ThinkingPayload,
|
|
) -> tuple[str, bool]:
|
|
conversations = [
|
|
f"SYSTEM: {agent_role}",
|
|
f"USER: {input_payload.text}",
|
|
f"ASSISTANT: {gen_payload.text}",
|
|
]
|
|
if memory and memory.text:
|
|
conversations = [memory.text] + conversations
|
|
prompt = self.base_prompt.format(conversations="\n\n".join(conversations),
|
|
reflection_prompt=self.reflection_prompt)
|
|
|
|
reflection_message = agent_invoker(
|
|
[Message(role=MessageRole.USER, content=prompt)]
|
|
)
|
|
return reflection_message.text_content(), True |