feat: +knowledge

This commit is contained in:
莘权 马 2023-08-26 20:18:47 +08:00
parent 2c83921aee
commit 6e10cbb73b
3 changed files with 13 additions and 4 deletions

View file

@ -4,18 +4,21 @@ from metagpt.logs import logger
class TalkAction(Action):
def __init__(self, options, name: str = '', talk='', history_summary='', context=None, llm=None, **kwargs):
def __init__(self, options, name: str = '', talk='', history_summary='', knowledge='', context=None, llm=None, **kwargs):
context = context or {}
context["talk"] = talk
context["history_summery"] = history_summary
context["knowledge"] = knowledge
super(TalkAction, self).__init__(options=options, name=name, context=context, llm=llm)
self._talk = talk
self._history_summary = history_summary
self._knowledge = knowledge
self._rsp = None
@property
def prompt(self):
prompt = f"{self._history_summary}\n\n"
prompt = f"{self._knowledge}\n\n"
prompt += f"{self._history_summary}\n\n"
if self._history_summary != "":
prompt += "According to the historical conversation above, "
language = self.options.get("language", "Chinese")

View file

@ -17,6 +17,7 @@ class BrainMemory(pydantic.BaseModel):
history: List[Message] = []
stack: List[Message] = []
solution: List[Message] = []
knowledge: List[Message] = []
def add_talk(self, msg: Message):
@ -27,6 +28,10 @@ class BrainMemory(pydantic.BaseModel):
msg.add_tag(MessageType.Answer.value)
self.history.append(msg)
def get_knowledge(self) -> str:
texts = [k.content for k in self.knowledge]
return "\n".join(texts)
@property
def history_text(self):
if len(self.history) == 0:

View file

@ -87,7 +87,8 @@ class Assistant(Role):
return await handler(text, **kwargs)
async def talk_handler(self, text, **kwargs) -> bool:
action = TalkAction(options=self.options, talk=text, llm=self._llm, **kwargs)
action = TalkAction(options=self.options, talk=text, knowledge=self.memory.get_knowledge(), llm=self._llm,
**kwargs)
self.add_to_do(action)
return True
@ -136,7 +137,7 @@ class Assistant(Role):
async def main():
options = Config().runtime_options
cost_manager = CostManager(**options)
topic = "draw an apple"
topic = "what's apple"
role = Assistant(options=options, cost_manager=cost_manager, language="Chinese")
await role.talk(topic)
while True: