explodinggradients / ragas

Evaluation framework for your Retrieval Augmented Generation (RAG) pipelines
https://docs.ragas.io
Apache License 2.0
6.54k stars 640 forks source link

Manually translate prompts from English to Chinese #1199

Open Xiyuche opened 4 weeks ago

Xiyuche commented 4 weeks ago

Question Hi. I've tried language adaptation, it works totally fine the first time. But after that I received many different errors when the adaptor is trying to load the cached json files.

So I decide to use gpt-4o to translate all the english prompt content in src/ragas/testset/prompts.py to chinese , like this. I'm not very familiar with the project code, so I'm not sure about the effect, but the testset result seems to be fine.

No need to worry about the chinese content if you cant read, I've manually checked the translated content, they are all good.

Code Examples


from langchain_core.pydantic_v1 import BaseModel

from ragas.llms.output_parser import RagasoutputParser, get_json_format_instructions
from ragas.llms.prompt import Prompt

class AnswerFormat(BaseModel):
    answer: str
    verdict: int

question_answer_parser = RagasoutputParser(pydantic_object=AnswerFormat)

reasoning_question_prompt = Prompt(
    name="reasoning_question",
    instruction="""将给定的问题复杂化,通过改写问题将其转化为基于提供的上下文的多跳推理问题。
    回答问题应要求读者使用给定上下文中的信息进行多个逻辑连接或推断。
    重写问题时要遵循以下规则:
    1. 确保重写后的问题可以完全从上下文中提供的信息中得到答案。
    2. 不要构建包含超过15个单词的问题。尽可能使用缩写。
    3. 确保问题清晰且明确。
    4. 像“基于提供的上下文”,“根据上下文”等短语不能出现在问题中。""",
    examples=[
        {
            "question": "法国的首都是哪里?",
            "context": "法国是西欧的一个国家。它有几个城市,包括巴黎、里昂和马赛。巴黎不仅以埃菲尔铁塔和卢浮宫等文化地标闻名,还作为行政中心。",
            "output": "将埃菲尔铁塔与行政中心联系起来,哪个城市同时具备这两者?",
        },
        {
            "question": "Python中的append()方法有什么作用?",
            "context": "在Python中,列表用于在一个变量中存储多个项目。列表是4种内置数据类型之一,用于存储数据集合。append()方法将一个项目添加到列表的末尾。",
            "output": "如果一个列表代表一个可变的集合,哪个方法可以将其扩展一个项目?",
        },
    ],
    input_keys=["question", "context"],
    output_key="output",
    output_type="str",
    language="english",
)

multi_context_question_prompt = Prompt(
    name="multi_context_question",
    instruction="""
    任务是改写并复杂化给定的问题,使得回答它需要从context1和context2中获得信息。
    重写问题时遵循以下规则:
        1. 重写的问题不应过长。尽可能使用缩写。
        2. 重写的问题必须合理,并且能够被人类理解和回答。
        3. 重写的问题必须能够从context1和context2中提供的信息中完全得到答案。
        4. 阅读并理解这两个上下文,重写问题,使回答需要结合context1和context2中的见解。
        5. 短语如“基于提供的上下文”,“根据上下文”等不允许出现在问题中。""",
    examples=[
        {
            "question": "是什么过程使植物变绿?",
            "context1": "叶绿素是使植物呈现绿色的色素,并帮助它们进行光合作用。",
            "context2": "植物的光合作用通常发生在叶子中,叶绿体在此集中。",
            "output": "在哪些植物结构中,负责其绿色的色素促进了能量生产?",
        },
        {
            "question": "如何计算矩形的面积?",
            "context1": "形状的面积根据其尺寸计算。对于矩形,这涉及到将长度和宽度相乘。",
            "context2": "矩形有四条边,相对的两边长度相等。它们是一种四边形。",
            "output": "哪个涉及相对相等的乘积产生四边形的面积?",
        },
    ],
    input_keys=["question", "context1", "context2"],
    output_key="output",
    output_type="str",
    language="english",
)

conditional_question_prompt = Prompt(
    name="conditional_question",
    instruction="""通过引入条件元素来增加提供的问题的复杂性。
    目标是通过加入一个影响问题背景的场景或条件,使问题更加复杂。
    重写问题时遵循以下规则:
        1. 重写后的问题不应超过25个字。尽可能使用缩写。
        2. 重写的问题必须合理,并且能够被人类理解和回答。
        3. 重写的问题必须能够从提供的上下文中完全得到答案。
        4. 短语如“提供的上下文”,“根据上下文”等不允许出现在问题中。""",
    examples=[
        {
            "question": "植物根部的功能是什么?",
            "context": "植物的根部从土壤中吸收水分和养分,将植物固定在地面上,并储存食物。",
            "output": "植物根部在土壤养分和稳定性方面的双重作用是什么?",
        },
        {
            "question": "疫苗如何预防疾病?",
            "context": "疫苗通过刺激身体的免疫反应产生抗体,这些抗体识别并对抗病原体,从而预防疾病。",
            "output": "疫苗如何利用身体的免疫系统来防御病原体?",
        },
    ],
    input_keys=["question", "context"],
    output_key="output",
    output_type="str",
    language="english",
)

compress_question_prompt = Prompt(
    name="compress_question",
    instruction="""重写以下问题,使其更间接并更短,同时保持原问题的本质。
    目标是创造一个传达相同含义但表达更间接的问题。重写后的问题应更短,因此尽可能使用缩写。""",
    examples=[
        {
            "question": "地球与月球之间的距离是多少?",
            "output": "月球离地球多远?",
        },
        {
            "question": "制作巧克力蛋糕需要哪些原料?",
            "output": "制作巧克力蛋糕需要什么?",
        },
    ],
    input_keys=["question"],
    output_key="output",
    output_type="str",
    language="english",
)

conversational_question_prompt = Prompt(
    name="conversation_question",
    instruction="""将提供的问题重新格式化为两个独立的问题,就像它们是对话的一部分一样。每个问题都应专注于原问题的特定方面或子主题。
    重写问题时遵循以下规则:
        1. 重写的问题不应超过25个字。尽可能使用缩写。
        2. 重写的问题必须合理,并且能够被人类理解和回答。
        3. 重写的问题必须能够从提供的上下文中完全得到答案。
        4. 短语如“提供的上下文”,“根据上下文”等不允许出现在问题中。""",
    examples=[
        {
            "question": "远程工作的优点和缺点是什么?",
            "output": {
                "first_question": "远程工作的好处是什么?",
                "second_question": "反过来,远程工作有哪些挑战?",
            },
        }
    ],
    input_keys=["question"],
    output_key="output",
    output_type="json",
    language="english",
)

question_answer_prompt = Prompt(
    name="answer_formulate",
    instruction="""使用给定的上下文信息回答问题。如果答案在上下文中存在,输出结果为 '1',如果答案不存在,输出结果为 '-1'。""",
    output_format_instruction=get_json_format_instructions(AnswerFormat),
    examples=[
        {
            "context": """气候变化受到人类活动的显著影响,特别是化石燃料燃烧产生的温室气体排放。这些温室气体在大气中的浓度增加,导致更多的热量被困,进而导致全球变暖和气候模式的变化。""",
            "question": "人类活动如何影响气候变化?",
            "answer": AnswerFormat.parse_obj(
                {
                    "answer": "人类活动通过化石燃料燃烧产生的温室气体排放对气候变化产生影响。这些排放增加了大气中的温室气体浓度,导致更多的热量被困,引起全球变暖和气候模式的变化。",
                    "verdict": "1",
                }
            ).dict(),
        },
        {
            "context": """人工智能(AI)的概念随着时间的推移不断发展,但基本上是指旨在模拟人类认知功能的机器。AI能够学习、推理、感知,并在某些情况下像人类一样做出反应,这使得它在从医疗到自动驾驶汽车等领域具有重要意义。""",
            "question": "人工智能的关键能力是什么?",
            "answer": AnswerFormat.parse_obj(
                {
                    "answer": "人工智能旨在模拟人类认知功能,其关键能力包括学习、推理、感知和对环境的反应。这些能力使AI在医疗和自动驾驶等各个领域中具有重要作用。",
                    "verdict": "1",
                }
            ).dict(),
        },
        {
            "context": """简·奥斯汀的小说《傲慢与偏见》围绕角色伊丽莎白·班纳特及其家庭展开。故事发生在19世纪的英国乡村,涉及婚姻、道德和误解等问题。""",
            "question": "《傲慢与偏见》是什么年份出版的?",
            "answer": AnswerFormat.parse_obj(
                {
                    "answer": "给定问题的答案不在上下文中。",
                    "verdict": "-1",
                }
            ).dict(),
        },
    ],
    input_keys=["context", "question"],
    output_key="answer",
    output_type="json",
    language="english",
)

keyphrase_extraction_prompt = Prompt(
    name="keyphrase_extraction",
    instruction="从提供的文本中提取出最重要和最独特的3到5个关键词。",
    examples=[
        {
            "text": "黑洞是时空中的一个区域,那里重力强大到没有任何物质,包括光和其他电磁波,能够逃脱。广义相对论预测,足够紧凑的质量可以扭曲时空形成黑洞。",
            "output": {
                "keyphrases": [
                    "黑洞",
                    "时空区域",
                    "强大重力",
                    "光和电磁波",
                    "广义相对论",
                ]
            },
        },
        {
            "text": "中国的长城是一系列古代城墙和防御工事,位于中国北部,建于大约500年前。这座巨大的城墙绵延13000多英里,是古代中国工程师技能和毅力的见证。",
            "output": {
                "keyphrases": [
                    "中国长城",
                    "古代防御工事",
                    "中国北部",
                ]
            },
        },
    ],
    input_keys=["text"],
    output_key="output",
    output_type="json",
)

seed_question_prompt = Prompt(
    name="seed_question",
    instruction="生成一个可以从给定上下文中完全回答的问题。问题应围绕主题形成。",
    examples=[
        {
            "context": "植物的光合作用涉及将光能转化为化学能,利用叶绿素和其他色素吸收光。这一过程对植物生长和氧气的产生至关重要。",
            "keyphrase": "光合作用",
            "question": "光合作用在植物生长中有什么作用?",
        },
        {
            "context": "工业革命始于18世纪,是历史上的一个重大转折点,因为它导致了工厂的发展和城市化。",
            "keyphrase": "工业革命",
            "question": "工业革命如何成为历史上的一个重大转折点?",
        },
        {
            "context": "蒸发过程在水循环中起着至关重要的作用,将水从液态转化为蒸汽,并使其上升到大气中。",
            "keyphrase": "蒸发",
            "question": "为什么蒸发在水循环中很重要?",
        },
    ],
    input_keys=["context", "keyphrase"],
    output_key="question",
    output_type="str",
)

main_topic_extraction_prompt = Prompt(
    name="main_topic_extraction",
    instruction="识别并提取给定文本中深入讨论的两个主要主题。",
    examples=[
        {
            "text": "区块链技术提供了一个去中心化的分类账,确保数据交易的完整性和透明度。它支持比特币等加密货币,提供了一个安全且不可变的所有交易记录。除了金融领域,区块链在供应链管理中也具有潜在应用,它可以简化操作,增强可追溯性,并提高欺诈预防能力。它允许实时跟踪货物和透明共享数据。",
            "output": {
                "topics": [
                    "区块链技术及其在加密货币中的基础作用",
                    "区块链在供应链管理中的应用",
                ]
            },
        },
        {
            "text": "远程医疗革命了医疗服务的提供方式,特别是在农村和服务不足的地区。它允许患者通过视频会议与医生进行咨询,改善了医疗服务的可及性,减少了旅行的需要。医疗领域的另一个重大进步是精准医疗,它根据个体的基因概况定制治疗方法。这一方法已经为多种疾病,包括某些癌症和慢性病,提供了更有效的疗法。",
            "output": {
                "topics": [
                    "远程医疗及其对医疗服务可及性的影响",
                    "精准医疗及其在根据基因定制治疗中的作用",
                ]
            },
        },
    ],
    input_keys=["text"],
    output_key="output",
    output_type="json",
)

find_relevant_context_prompt = Prompt(
    name="find_relevant_context",
    instruction="给定一个问题和一组上下文,找出最相关的上下文来回答该问题。",
    examples=[
        {
            "question": "法国的首都是哪里?",
            "contexts": [
                "1. 法国是西欧的一个国家。它有几个城市,包括巴黎、里昂和马赛。巴黎不仅以埃菲尔铁塔和卢浮宫等文化地标闻名,还作为行政中心。",
                "2. 法国的首都是巴黎。它也是法国人口最多的城市,拥有超过200万人口。巴黎以埃菲尔铁塔和卢浮宫等文化地标而闻名。",
                "3. 巴黎是法国的首都。它也是法国人口最多的城市,拥有超过200万人口。巴黎以埃菲尔铁塔和卢浮宫等文化地标而闻名。",
            ],
            "output": {
                "relevant_contexts": [1, 2],
            },
        },
        {
            "question": "咖啡因如何影响身体?它的常见来源是什么?",
            "contexts": [
                "1. 咖啡因是一种中枢神经系统兴奋剂。它可以暂时抵抗困倦并恢复警觉。它主要影响大脑,在那里它改变神经递质的功能。",
                "2. 定期的体育活动对保持健康至关重要。它可以帮助控制体重,抵抗健康问题,提高能量,并促进更好的睡眠。",
                "3. 咖啡因的常见来源包括咖啡、茶、可乐和能量饮料。这些饮品在全球范围内被消费,以提供快速的能量提升。",
            ],
            "output": {"relevant_contexts": [1, 2]},
        },
    ],
    input_keys=["question", "contexts"],
    output_key="output",
    output_type="json",
    language="english",
)

question_rewrite_prompt = Prompt(
    name="rewrite_question",
    instruction="""给定上下文、问题和反馈,基于提供的反馈重写问题以提高其清晰度和可回答性。""",
    examples=[
        {
            "context": "埃菲尔铁塔使用铁建造,最初是为1889年巴黎世博会的临时展品。尽管最初的目的是临时的,埃菲尔铁塔迅速成为巴黎巧思的象征,并成为这个城市的标志性地标,每年吸引数百万游客。这座塔的设计由古斯塔夫·埃菲尔创作,最初受到一些法国艺术家和知识分子的批评,但后来被誉为结构工程和建筑设计的杰作。",
            "question": "谁设计了这座塔?",
            "feedback": "问题询问了'这座塔'的设计者,但没有具体说明是哪座塔。世界上有许多塔,如果不明确说明是哪一座塔,问题就显得不清晰且无法回答。为了改进问题,应包括塔的名称或对特定塔的清晰描述。",
            "output": "谁设计了埃菲尔铁塔?",
        },
        {
            "context": "'探索神经网络中的零样本学习'由Smith和Lee于2021年发表,重点讨论了零样本学习技术在人工智能中的应用。",
            "question": "在这项研究中,用于零样本评估的数据集是什么?",
            "feedback": "问题询问了用于零样本评估的'这项研究'的数据集,但没有具体说明或提供任何关于这项研究的细节。这使得对不了解具体研究的人来说问题显得不清晰。为了提高清晰度和可回答性,问题应明确说明它所指的研究,或提供足够的研究背景,以便问题能够独立理解和回答。",
            "output": "在探索神经网络中的零样本学习论文中,使用了哪些数据集进行零样本评估?",
        },
    ],
    input_keys=["context", "question", "feedback"],
    output_key="output",
    output_type="str",
    language="english",
)

### Filters

class ContextScoring(BaseModel):
    clarity: int
    depth: int
    structure: int
    relevance: int

class QuestionFilter(BaseModel):
    feedback: str
    verdict: int

class EvolutionElimination(BaseModel):
    reason: str
    verdict: int

context_scoring_parser = RagasoutputParser(pydantic_object=ContextScoring)
question_filter_parser = RagasoutputParser(pydantic_object=QuestionFilter)
evolution_elimination_parser = RagasoutputParser(pydantic_object=EvolutionElimination)

context_scoring_prompt = Prompt(
    name="score_context",
    instruction="""
    给定一个上下文,执行以下任务并以有效的JSON格式输出答案:评估所提供的上下文,并为以下每个标准分配1(低)、2(中)或3(高)的分数:

清晰度:评估所呈现信息的准确性和易懂性。高分(3)留给信息准确且易懂的上下文。低分(1)则适用于信息模糊或难以理解的上下文。
深度:确定上下文中详细检查的程度以及创新见解的包含程度。高分表示全面且有见解的分析,而低分则表示对主题的表面处理。
结构:评估内容的组织程度及其逻辑性。高分会颁发给展示出有条理且逻辑进展的上下文,而低分则表明结构或逻辑进展缺乏。
相关性:判断内容与主题的相关性,高分颁发给紧密聚焦于主题且没有不必要插曲的上下文,低分则给充满不相关信息的上下文。
将您的JSON输出结构化,以这些标准为键,其对应的分数为值。
    """,
    output_format_instruction=get_json_format_instructions(ContextScoring),
    examples=[
        {
            "context": "勾股定理是几何中的一个基本原理。它指出,在直角三角形中,斜边(直角对边)的长度的平方等于其他两边长度的平方之和。这可以表示为a^2 + b^2 = c^2,其中c表示斜边的长度,a和b表示其他两边的长度。",
            "output": ContextScoring.parse_obj(
                {"clarity": 3, "depth": 1, "structure": 3, "relevance": 3}
            ).dict(),
        },
        {
            "context": "阿尔伯特·爱因斯坦(1879年3月14日-1955年4月18日)是德国出生的理论物理学家,广泛被认为是有史以来最伟大和最有影响力的科学家之一。",
            "output": ContextScoring.parse_obj(
                {"clarity": 3, "depth": 2, "structure": 3, "relevance": 3}
            ).dict(),
        },
        {
            "context": "我爱巧克力。它真的很美味。哦,顺便说一句,地球围绕太阳运行,而不是相反。此外,我最喜欢的颜色是蓝色。",
            "output": ContextScoring.parse_obj(
                {"clarity": 2, "depth": 1, "structure": 1, "relevance": 1}
            ).dict(),
        },
    ],
    input_keys=["context"],
    output_key="output",
    output_type="json",
    language="english",
)

filter_question_prompt = Prompt(
    name="filter_question",
    instruction="""
根据以下标准评估给定问题的清晰度和可回答性:
1.独立性:问题是否可以在不需要额外的上下文或外部引用的情况下理解和回答?问题应当是自足的,意味着它不依赖于特定文档、表格或未提供的先验知识。
2.明确意图:问题的类型或信息需求是否明确?问题应清楚地传达其目的,没有歧义,从而允许直接且相关的回应。
根据这些标准,如果问题具体、独立且意图明确,使其可以根据提供的细节理解和回答,则分配“1”的裁决。如果由于模糊性、依赖外部引用或意图不明确而不符合这些标准之一,则分配“0”。
以JSON格式提供反馈和裁决,如果问题被认为不清楚,请提供改进建议。突出问题清晰度或缺乏清晰度的方面,并提出如何重新构架或详细说明以便更好地理解和回答的建议。
""",
    output_format_instruction=get_json_format_instructions(QuestionFilter),
    examples=[
        {
            "question": "关于太空的发现是什么?",
            "output": QuestionFilter.parse_obj(
                {
                    "feedback": "问题太模糊且过于广泛,询问'关于太空的发现',而没有指定任何特定的方面、时间框架或感兴趣的上下文。这可能涉及从新天体的发现到太空旅行技术的进步等广泛话题。为了提高清晰度和可回答性,问题可以具体化,明确发现的类型(如天文学、技术)、时间框架(如近期、历史),或上下文(如在特定研究或太空任务中)。",
                    "verdict": "0",
                }
            ).dict(),
        },
        {
            "question": "根据context1和context2中的结果,ALMA-13B-R在WMT'23研究中与其他翻译模型相比表现如何?",
            "output": QuestionFilter.parse_obj(
                {
                    "feedback": "该问题询问ALMA-13B-R模型在WMT'23研究中与其他翻译模型的表现对比,特别是指代context1和context2中的结果。尽管它明确指定了感兴趣的模型(ALMA-13B-R)和研究(WMT'23),但它假设了解并理解“context1”和“context2”,而没有解释这些上下文包含的内容。这使得不熟悉WMT'23研究或这些特定上下文的人难以理解该问题。为了让更广泛的受众更清楚和可回答,问题可以通过定义或描述'context1'和'context2'或解释这些上下文中用于比较的标准来改进。",
                    "verdict": "0",
                }
            ).dict(),
        },
        {
            "question": "KIWI-XXL和XCOMET与表1中的金标准参考相比,在评估得分、翻译模型性能和超越参考的成功率方面表现如何?",
            "output": QuestionFilter.parse_obj(
                {
                    "feedback": "该问题请求KIWI-XXL和XCOMET模型与'表1'中的金标准参考的比较,侧重于评估得分、翻译模型性能和超越参考的成功率。它明确指定了模型和比较标准,意图清晰。然而,该问题假设可以访问“表1”,而没有提供其内容或上下文,使得没有直接访问源材料的人难以理解。为了更清楚和更广泛的受众可回答,问题可以包括“表1”的内容或关键发现的简要描述,或者以不依赖特定、未公开文件的方式构架问题。",
                    "verdict": 0,
                }
            ).dict(),
        },
        {
            "question": "UL2训练目标在OpenMoE中的配置是什么?为什么它是预训练的更好选择?",
            "output": QuestionFilter.parse_obj(
                {
                    "feedback": "该问题询问OpenMoE框架中UL2训练目标的配置以及其在预训练中适用性的原因。它明确指定了感兴趣的主题(UL2训练目标,OpenMoE),并寻求关于配置和其有效性原因的详细信息。然而,对于不熟悉特定术语或OpenMoE和UL2背景的人来说,问题可能具有挑战性。为了更广泛的清晰度和可回答性,问题可以通过包括关于OpenMoE和UL2训练目标的简要解释或背景,或澄清其提到的预训练有效性的方面(如效率、准确性、泛化)来改进。",
                    "verdict": 1,
                }
            ).dict(),
        },
        {
            "question": "基于提供的上下文,OpenMoE中UL2训练目标的详细配置是什么?",
            "output": QuestionFilter.parse_obj(
                {
                    "feedback": "该问题要求在OpenMoE框架中详细描述UL2训练目标的配置,并提到“提供的上下文”,但在查询中实际上并未包含或描述该上下文。这使得对那些没有访问到未指定上下文的人来说问题显得不清晰。为了使问题清晰且可回答,需要在问题中直接包含相关上下文或以不需要外部信息的方式构架问题。详细说明感兴趣的配置方面(如损失函数、数据增强技术)也可以帮助澄清查询。",
                    "verdict": 0,
                }
            ).dict(),
        },
    ],
    input_keys=["question"],
    output_key="output",
    output_type="json",
    language="english",
)

evolution_elimination_prompt = Prompt(
    name="evolution_elimination",
    instruction="""检查给定的两个问题是否符合以下要求:
    1. 它们具有相同的约束和要求。
    2. 它们具有相同的深度和广度的探究。
    如果它们相等,输出裁决为1,如果不相等,则为0。""",
    output_format_instruction=get_json_format_instructions(EvolutionElimination),
    examples=[
        {
            "question1": "气候变化的主要原因是什么?",
            "question2": "是什么因素导致全球变暖?",
            "output": EvolutionElimination.parse_obj(
                {
                    "reason": "虽然这两个问题都涉及环境问题,但“气候变化”涵盖的范围比“全球变暖”更广,导致探究深度的不同。",
                    "verdict": 0,
                }
            ).dict(),
        },
        {
            "question1": "植物中的光合作用如何工作?",
            "question2": "你能解释一下植物中的光合作用过程吗?",
            "output": EvolutionElimination.parse_obj(
                {
                    "reason": "这两个问题都要求解释植物中的光合作用过程,具有相同的深度、广度和答案要求。",
                    "verdict": 1,
                }
            ).dict(),
        },
        {
            "question1": "定期锻炼对健康有什么好处?",
            "question2": "你能列出定期锻炼对健康的好处吗?",
            "output": EvolutionElimination.parse_obj(
                {
                    "reason": "这两个问题都在寻找有关定期锻炼对健康的积极影响的信息。它们要求列出健康好处的相似程度。",
                    "verdict": 1,
                }
            ).dict(),
        },
    ],
    input_keys=["question1", "question2"],
    output_key="output",
    output_type="json",
    language="english",
)

testset_prompts = [
    reasoning_question_prompt,
    multi_context_question_prompt,
    conditional_question_prompt,
    compress_question_prompt,
    conversational_question_prompt,
    question_answer_prompt,
    keyphrase_extraction_prompt,
    seed_question_prompt,
    main_topic_extraction_prompt,
    find_relevant_context_prompt,
    question_rewrite_prompt,
    context_scoring_prompt,
    filter_question_prompt,
    evolution_elimination_prompt,
]
endrol commented 3 weeks ago

I am also searching solutions like this, your idea is really nice! A customized Prompt should works fine according to #1121 I guess you don't need to modify Prompt in src/ragas/testset/prompts.py but making a customized Prompt should work the same.

huangxuyh commented 3 weeks ago

Your modifications are excellent, and I have implemented them accordingly. However, I encountered some issues during the evaluation. Could you please share the specific code you used for the evaluation?

Xiyuche commented 3 weeks ago

Your modifications are excellent, and I have implemented them accordingly. However, I encountered some issues during the evaluation. Could you please share the specific code you used for the evaluation?

Sorry, what issues occurred? I didn't modify any other code other than src/ragas/testset/prompts.py.

To be honest I'm currently using pip installed ragas with english prompt, since it seems that the developing version is having more unexpected error.

huangxuyh commented 3 weeks ago

您的修改非常好,我已经按照您的修改实施了。但是在评估过程中,我遇到了一些问题。您能分享一下评估时使用的具体代码吗?

抱歉,出现了什么问题?除了 之外,我没有修改任何其他代码src/ragas/testset/prompts.py

说实话,我目前正在使用pip带有英文提示的安装版 ragas,因为开发版本似乎出现了更多意外错误。

I followed your translation and found that it seems the prompt from prompts.py was not used; instead, only some prompts from the specific implementation of the metric were used.

Xiyuche commented 3 weeks ago

您的修改非常好,我已经按照您的修改实施了。但是在评估过程中,我遇到了一些问题。您能分享一下评估时使用的具体代码吗?

抱歉,出现了什么问题?除了 之外,我没有修改任何其他代码src/ragas/testset/prompts.py。 说实话,我目前正在使用pip带有英文提示的安装版 ragas,因为开发版本似乎出现了更多意外错误。

I followed your translation and found that it seems the prompt from prompts.py was not used; instead, only some prompts from the specific implementation of the metric were used.

Oh yeah, I translated the prompt in prompts.py because I want to do the Synthetic Test Data generation, not metrics or evaluation.

You can try to manually translate those prompts used in metrics or evaluation, that might works for you.

zongzi531 commented 3 weeks ago

Thanks your idea. I try my Chinese text file it's worked. This is my example code https://github.com/zongzi531/modular-rag/blob/main/evaluation/ragas/generate_testset.py

Xiyuche commented 3 weeks ago

Thanks your idea. I try my Chinese text file it's worked. This is my example code https://github.com/zongzi531/modular-rag/blob/main/evaluation/ragas/generate_testset.py

Thank you, this is very clever. I successfully ran your code, and it effectively avoids unexpected format issues when saving prompts to the cache.