From 471f5d68ea0943f91372b8ae8b5500423ee35003 Mon Sep 17 00:00:00 2001 From: unknown <10066332@qq.com> Date: Tue, 12 Sep 2023 22:04:07 +0800 Subject: [PATCH 1/3] adding an action --- metagpt/actions/detail_mining.py | 51 ++++++++++++++++++++++++++++++++ 1 file changed, 51 insertions(+) create mode 100644 metagpt/actions/detail_mining.py diff --git a/metagpt/actions/detail_mining.py b/metagpt/actions/detail_mining.py new file mode 100644 index 000000000..8452ae2aa --- /dev/null +++ b/metagpt/actions/detail_mining.py @@ -0,0 +1,51 @@ +#!/usr/bin/env python +# -*- coding: utf-8 -*- +""" +@Time : 2023/9/12 17:45 +@Author : fisherdeng +@File : detail_mining.py +""" + +from metagpt.actions import Action, ActionOutput +from metagpt.logs import logger + +PROMPT_TEMPLATE = """ +##讨论目标 +{topic} + +##讨论记录 +{record} + +##Format example +{format_example} +----- + +任务: 参考 ##讨论目标 和 ##讨论记录 进一步询问你感兴趣的细节,字数不多于150字 +特别注意1:你只是单纯地询问,不要赞同或否定任何人的任何观点 +特别注意2:本次输出,仅包含 ##OUTPUT 这一主题,不要增加、减少或改变主题。输出时,以'##OUTPUT'开头,然后马上换行,再正式输出内容,仔细参考"##Format example"中的格式。 +""" +FORMAT_EXAMPLE = """ + +## + +##OUTPUT +...(请在这里输出你想询问的细节) + +## + +## +""" +OUTPUT_MAPPING = { + "OUTPUT": (str, ...), +} + + +class DetailMining(Action): + def __init__(self, name="", context=None, llm=None): + super().__init__(name, context, llm) + + async def run(self, topic, record) -> ActionOutput: + + prompt = PROMPT_TEMPLATE.format(topic,record,format_example=FORMAT_EXAMPLE) + rsp = await self._aask_v1(prompt, "detail_mining", OUTPUT_MAPPING) + return rsp From 307ff817901b6f5050c67a430c3184d3c89020d0 Mon Sep 17 00:00:00 2001 From: unknown <10066332@qq.com> Date: Tue, 12 Sep 2023 23:39:36 +0800 Subject: [PATCH 2/3] adding an action --- metagpt/actions/detail_mining.py | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/metagpt/actions/detail_mining.py b/metagpt/actions/detail_mining.py index 8452ae2aa..5751b86d2 100644 --- a/metagpt/actions/detail_mining.py +++ b/metagpt/actions/detail_mining.py @@ -5,31 +5,30 @@ @Author : fisherdeng @File : detail_mining.py """ - from metagpt.actions import Action, ActionOutput from metagpt.logs import logger PROMPT_TEMPLATE = """ -##讨论目标 +##TOPIC {topic} -##讨论记录 +##RECORD {record} ##Format example {format_example} ----- -任务: 参考 ##讨论目标 和 ##讨论记录 进一步询问你感兴趣的细节,字数不多于150字 -特别注意1:你只是单纯地询问,不要赞同或否定任何人的任何观点 -特别注意2:本次输出,仅包含 ##OUTPUT 这一主题,不要增加、减少或改变主题。输出时,以'##OUTPUT'开头,然后马上换行,再正式输出内容,仔细参考"##Format example"中的格式。 +Task: Refer to the "##TOPIC" (discussion objectives) and "##RECORD" (discussion records) to further inquire about the details that interest you, within a word limit of 150 words. +Special Note 1: Your intention is solely to ask questions without endorsing or negating any individual's viewpoints. +Special Note 2: This output should only include the topic "##OUTPUT". Do not add, remove, or modify the topic. Begin the output with '##OUTPUT', followed by an immediate line break, and then proceed to provide the content in the specified format as outlined in the "##Format example" section. """ FORMAT_EXAMPLE = """ ## ##OUTPUT -...(请在这里输出你想询问的细节) +...(Please provide the specific details you would like to inquire about here.) ## @@ -41,11 +40,12 @@ OUTPUT_MAPPING = { class DetailMining(Action): + """This class allows LLM to further mine noteworthy details based on specific "##TOPIC"(discussion topic) and "##RECORD" (discussion records), thereby deepening the discussion. + """ def __init__(self, name="", context=None, llm=None): super().__init__(name, context, llm) async def run(self, topic, record) -> ActionOutput: - - prompt = PROMPT_TEMPLATE.format(topic,record,format_example=FORMAT_EXAMPLE) + prompt = PROMPT_TEMPLATE.format(topic, record, format_example=FORMAT_EXAMPLE) rsp = await self._aask_v1(prompt, "detail_mining", OUTPUT_MAPPING) return rsp From b5aa86cc450490aad036fdc20a75b045fce8db14 Mon Sep 17 00:00:00 2001 From: unknown <10066332@qq.com> Date: Fri, 15 Sep 2023 00:05:43 +0800 Subject: [PATCH 3/3] Adding an action --- metagpt/actions/detail_mining.py | 3 ++- tests/metagpt/actions/test_detail_mining.py | 23 +++++++++++++++++++++ 2 files changed, 25 insertions(+), 1 deletion(-) create mode 100644 tests/metagpt/actions/test_detail_mining.py diff --git a/metagpt/actions/detail_mining.py b/metagpt/actions/detail_mining.py index 5751b86d2..e29d6911b 100644 --- a/metagpt/actions/detail_mining.py +++ b/metagpt/actions/detail_mining.py @@ -22,6 +22,7 @@ PROMPT_TEMPLATE = """ Task: Refer to the "##TOPIC" (discussion objectives) and "##RECORD" (discussion records) to further inquire about the details that interest you, within a word limit of 150 words. Special Note 1: Your intention is solely to ask questions without endorsing or negating any individual's viewpoints. Special Note 2: This output should only include the topic "##OUTPUT". Do not add, remove, or modify the topic. Begin the output with '##OUTPUT', followed by an immediate line break, and then proceed to provide the content in the specified format as outlined in the "##Format example" section. +Special Note 3: The output should be in the same language as the input. """ FORMAT_EXAMPLE = """ @@ -46,6 +47,6 @@ class DetailMining(Action): super().__init__(name, context, llm) async def run(self, topic, record) -> ActionOutput: - prompt = PROMPT_TEMPLATE.format(topic, record, format_example=FORMAT_EXAMPLE) + prompt = PROMPT_TEMPLATE.format(topic=topic, record=record, format_example=FORMAT_EXAMPLE) rsp = await self._aask_v1(prompt, "detail_mining", OUTPUT_MAPPING) return rsp diff --git a/tests/metagpt/actions/test_detail_mining.py b/tests/metagpt/actions/test_detail_mining.py new file mode 100644 index 000000000..c9d5331f9 --- /dev/null +++ b/tests/metagpt/actions/test_detail_mining.py @@ -0,0 +1,23 @@ +#!/usr/bin/env python +# -*- coding: utf-8 -*- +""" +@Time : 2023/9/13 00:26 +@Author : fisherdeng +@File : test_detail_mining.py +""" +import pytest + +from metagpt.actions.detail_mining import DetailMining +from metagpt.logs import logger + +@pytest.mark.asyncio +async def test_detail_mining(): + topic = "如何做一个生日蛋糕" + record = "我认为应该先准备好材料,然后再开始做蛋糕。" + detail_mining = DetailMining("detail_mining") + rsp = await detail_mining.run(topic=topic, record=record) + logger.info(f"{rsp.content=}") + + assert '##OUTPUT' in rsp.content + assert '蛋糕' in rsp.content +