pangukitsappdev.prompt package

Subpackages

Submodules

pangukitsappdev.prompt.prompt_tmpl module

class pangukitsappdev.prompt.prompt_tmpl.PromptTemplates

基类:object

获取Prompt模板工厂类

提供get方法根据名字获取prompt模板。提供register方法从文件中注册一个模板

Attributes:

prompt_tmpl_lookup: 类成员变量,维护prompt模板

classmethod get(tmpl_name) PromptTemplate

根据tmpl_name获取一个模板,优先自定义模板 Args:

tmpl_name: 唯一标识一个prompt模板

Returns:

prompt模板PromptTemplate

prompt_tmpl_lookup: dict = {'agent_react': PromptTemplate(input_variables=['messages', 'sys_prompt', 'tool_desc', 'tool_names'], template='{{sys_prompt}},您可以使用以下工具:\n{{tool_desc}}\n使用一个合法的json来指定使用哪个工具,action字段标识工具名,actionInput字段表示工具的输入参数。\n合法的action字段取值为[{{tool_names}}]的其中一个\n\n每个json仅提供一个操作,例如:\n{"action": $TOOL_NAME,"actionInput": $INPUT}\n\n请遵循如下形式:\n用户:提出问题\nThought:考虑之前和后续步骤\nAction:$JSON_BLOB\nObservation:Action返回的的结果\n... (Thought/Action/Observation 迭代N次)\nThought:我知道问题的答案了\nAction:{"action":"FINAL_ANSWER","actionInput":"结合用户的问题与Thought/Action/Observation,给出最终答案"}\n\n开始!返回必须包含一个Action,是一个合法的JSON。如有必要,请使用工具,且返回一个Action;如果不需要使用工具就能返回最终答案,请直接返回,且是一个FINAL_ANSWER Action。\n{% for message in messages %}{{message.role.desc}}:{{message.content}}\n{% if message.actions | length > 0 %}\n\n以下为你之前为了解决用户问题而进行的工作:\n{% for action in message.actions %}Thought:{{action.thought}}\nAction:{{action.actionJson}}\nObservation:Action(action={{action.action}})返回如下,{{action.observation}}\n{% endfor %}\n请思考并返回下一步的Thought和Action。{% else%}进行推理,返回Thought和Action。{% endif%}\n{% endfor %}\n\n如果已经可以推理出最终答案,请返回一个FINAL_ANSWER Action。', template_format='jinja2'), 'agent_react_pangu': PromptTemplate(input_variables=['cot_desc', 'messages', 'sys_prompt', 'tool_desc'], template='[unused9]系统:你是一个智能助手,你为用户生成综合质量(包括有用性,事实性,无害性)极好的回复。[unused10][unused9]系统:{{sys_prompt}}。[unused10]{{tool_desc}}{% for message in messages %}{% for action in message.actions %}{% if action.action != "FINAL_ANSWER" %}[unused9]助手:{{action.resp}}[unused10]{% endif %}{% if action.observation %}[unused9]工具:{{action.action}}|{{action.observation}}[unused10]{% endif %}{% if action.userFeedBack %}[unused9]用户:{{action.userFeedBack}}[unused10]{% endif %}{% endfor %}{% if message.content %}[unused9]{{message.role.desc}}:{{message.content}}[unused10]{% endif %}{% endfor %}[unused9]助手:{% if cot_desc %}{{cot_desc}}{% endif %}', template_format='jinja2'), 'agent_react_pangu_2': PromptTemplate(input_variables=['cot_desc', 'messages', 'sys_prompt', 'tool_desc'], template='[unused9]系统:你是一个智能助手,你为用户生成综合质量很好的回复。[unused10][unused9]系统:你可以调用各种用户自定义的工具来解决用户的问题。{{sys_prompt}}。可使用工具:{{tool_desc}}[unused10]{% for message in messages %}{% for action in message.actions %}{% if action.action != "FINAL_ANSWER" %}[unused9]助手:{{action.resp}}[unused10]{% endif %}{% if action.observation %}[unused9]工具:{{action.action}}|{{action.observation}}[unused10]{% endif %}{% if action.userFeedBack %}[unused9]用户:{{action.userFeedBack}}[unused10]{% endif %}{% endfor %}{% if message.content %}[unused9]{{message.role.desc}}:{{message.content}}[unused10]{% endif %}{% endfor %}[unused9]助手:{% if cot_desc %}{{cot_desc}}{% endif %}', template_format='jinja2'), 'agent_react_pangu_unify': PromptTemplate(input_variables=['actions', 'cot_desc', 'messages', 'sys_prompt', 'tool_desc'], template='[unused9]系统:你是一个智能助手,你为用户生成质量极好的回复。详尽回复更好时,你会生成全面且深入的高质量回复。当简洁回复更好时,你会生成简明扼要的高质量回复。{{sys_prompt}}[unused10][unused9]系统:可使用工具:{{tool_desc}}[unused10]{% for message in messages %}[unused9]{{message.role.desc}}:{{message.content}}[unused10]{% endfor %}{% for action in actions %}[unused9]助手:{{action.resp}}[unused10]{% if action.observation %}[unused9]工具:{{action.action}}|{{action.observation}}[unused10]{% endif %}{% if action.userFeedBack %}[unused9]用户:{{action.userFeedBack}}[unused10]{% endif %}{% endfor %}[unused9]助手:{% if cot_desc %}{{cot_desc}}{% endif %}', template_format='jinja2'), 'agent_tool_desc': PromptTemplate(input_variables=['tools'], template='{% for tool in tools %}{{ tool.toolId }}:{{tool.toolDesc}},{{tool.toolPrinciple}}。工具的输入为:{{tool.inputSchema}}。工具的输出为:{{tool.outputSchema}}\n\n{% endfor %}', template_format='jinja2'), 'agent_tool_desc_pangu': PromptTemplate(input_variables=['tools'], template='{% for tool in tools %}[unused9]系统:你可以使用如下工具: {{tool.panguFunction}}[unused10]{% endfor %}', template_format='jinja2'), 'agent_tool_desc_pangu_2': PromptTemplate(input_variables=['tools'], template='{% for tool in tools %}\n{{tool.panguFunction}}{% endfor %}', template_format='jinja2'), 'agent_tool_json_schema': PromptTemplate(input_variables=['desc', 'schema'], template='{{desc}},用一个合法的JSON表示,JSON的schema为{{schema}}', template_format='jinja2'), 'agent_tool_simple_schema': PromptTemplate(input_variables=['desc', 'type'], template='{{desc}},{{type}}类型', template_format='jinja2'), 'conversation_default': PromptTemplate(input_variables=['history', 'input'], template='以下是人类和人工智能之间的友好对话。人工智能是健谈的,并从上下文中提供了许多细节。如果人工智能不知道答案,它就会如实说它不知道。\n\n当前对话:\n{{history}}\nHuman:{{input}}\nAI:', template_format='jinja2'), 'documents_mapreduce_map': PromptTemplate(input_variables=['document', 'question'], template='从以下文档中提取与问题相关的任何内容。\n=========\n{{document}}\n=========\n问题:{{question}}\n相关内容:', template_format='jinja2'), 'documents_mapreduce_reduce': PromptTemplate(input_variables=['question', 'summaries'], template='结合从文档提取的部分内容和问题,提供一个最终答案。\n如果你不知道答案,就说你不知道。不要试图编造答案。\n\n问题:杜甫的诗代表了什么主义诗歌艺术的高峰?\n=========\n内容:我国古代最伟大的现实主义诗人是杜甫。\n\n内容:《新婚别》《无家别》《垂老别》是唐代诗人杜甫的经典作品。\n\n内容:关于《诗经》中的诗的分类,有"四始六义"之说,"六义"是指风、雅、颂和赋比兴。\n=========\n最终答案:杜甫的诗代表了现实主义诗歌艺术的高峰。\n\n问题:{{question}}\n=========\n{% for item in summaries %}内容:{{ item.pageContent }}{% if not loop.last %}\\n\\n{% endif %}{% endfor %}\n=========\n最终答案:', template_format='jinja2'), 'documents_refine_combine': PromptTemplate(input_variables=['answer', 'document', 'question'], template='问题:{{question}}\n答案:{{answer}}\n\n结合以下信息,在有必要的情况下,补充上面的答案。\n==========\n{{document}}\n==========\n如果上面的信息与问题不相关,就返回最初的答案。', template_format='jinja2'), 'documents_refine_qa': PromptTemplate(input_variables=['document', 'question'], template='请阅读以下文章回答问题,不要遗漏任何信息,尽可能的覆盖全面,给出全面详细的回答。\n=========\n{{document}}\n=========\n\n问题:{{question}}\n回答:', template_format='jinja2'), 'documents_stuff': PromptTemplate(input_variables=['documents', 'question'], template='请仔细阅读以下文章回答问题,不要遗漏任何信息,尽可能的覆盖全面,给出全面详细的回答。如果问题与文章不相关,则无需参考文章内容,直接回答“抱歉我没有找到相关的参考资料。”\n文章:\n=========\n{% for item in documents %}{{ item.pageContent }}{% if not loop.last %},{% endif %}{% endfor %}\n=========\n\n问题:{{question}}\n回答:', template_format='jinja2'), 'documents_summarize_mapreduce_map': PromptTemplate(input_variables=['document'], template='写出以下内容的简明摘要:\n\n{{document}}\n\n简明摘要:', template_format='jinja2'), 'documents_summarize_mapreduce_reduce': PromptTemplate(input_variables=['summaries'], template='写出以下内容的简明摘要:\n\n{% for item in summaries %}{{ item.pageContent }}{% if not loop.last %},{% endif %}{% endfor %}\n\n简明摘要:', template_format='jinja2'), 'documents_summarize_refine_combine': PromptTemplate(input_variables=['answer', 'document'], template='你的工作是生成最终摘要\n我们提供了一个当前的摘要:{{answer}}\n如果有必要,我们可以使用以下信息来完善当前的摘要。\n--------------\n{{document}}\n--------------\n结合给出的新信息,完善原始摘要。\n如果上面的信息没有用处,则返回原始摘要。', template_format='jinja2'), 'documents_summarize_refine_qa': PromptTemplate(input_variables=['document'], template='写出以下内容的简明摘要:\n\n{{document}}\n\n简明摘要:', template_format='jinja2'), 'documents_summarize_stuff': PromptTemplate(input_variables=['documents'], template='写出以下内容的简明摘要:\n\n{% for item in documents %}{{ item.pageContent }}{% if not loop.last %},{% endif %}{% endfor %}\n\n简明摘要:', template_format='jinja2'), 'memory_summary': PromptTemplate(input_variables=['context', 'summary'], template='逐步总结所提供的对话内容,添加到先前的摘要中,返回新的摘要。\n\n例子\n当前摘要:\n人类询问人工智能对人工智能的看法。 AI认为人工智能是一股向善的力量。\n\n新的对话:\n人类:为什么你认为人工智能是一股向善的力量?\nAI:因为人工智能将帮助人类充分发挥潜力。\n\n新摘要:\n人类询问人工智能对人工智能的看法。人工智能认为人工智能是一股善良的力量,因为它将帮助人类充分发挥潜力。\n示例结束\n\n当前摘要:\n{{summary}}\n\n新的对话:\n{{context}}\n\n新摘要:', template_format='jinja2'), 'question_long_answer': PromptTemplate(input_variables=['final_query', 'qaPairs'], template='{% for item in qaPairs -%}\n{{ item.question }} | {{ item.answer }}{% if not loop.last %} | {% endif %}\n{%- endfor -%}\n{% if qaPairs %}。{% endif -%}\n请根据以上背景补全以下问题:{{ final_query }}\n输出:\n\n', template_format='jinja2'), 'question_qa_with_sources_stuff': PromptTemplate(input_variables=['context', 'qaPairs', 'question'], template='{% for qa in qaPairs -%}\n{{ qa.question }}\n\n{{ qa.answer }}\n\n{% endfor -%}\n请阅读以下文章针对输入的问题生成回复,如果问题与文章不相关,则无需参考文章内容,直接回答问题即可。\n文章:{%- for item in context -%}{{ item.pageContent }}{% if not loop.last %}\n{% endif %}\n{%- endfor %}\n问题:{{question}}', template_format='jinja2'), 'question_question_only': PromptTemplate(input_variables=['final_query', 'qaPairs'], template='{% for item in qaPairs -%}\n{{ item.question }}{% if not loop.last %} | {% endif %}\n{%- endfor -%}\n{% if qaPairs %}。{% endif -%}\n请根据以上背景补全以下问题:{{ final_query }}\n输出:\n\n', template_format='jinja2'), 'question_short_answer': PromptTemplate(input_variables=['final_query', 'qaPairs'], template='{% for item in qaPairs -%}\n{{ item.question }} | {{ item.answer | truncate(20) }}{% if not loop.last %} | {% endif %}\n{%- endfor -%}\n{% if qaPairs %}。{% endif -%}\n请根据以上背景补全以下问题:{{ final_query }}\n输出:\n\n', template_format='jinja2'), 'skill_agent_session_summary': PromptTemplate(input_variables=['actions', 'messages'], template='以下为你之前为了回答用户问题而进行的过程,包括思考、工具调用和结果观察:\n\n{% for action in actions %}{{action.thought}}\n{% endfor %}\n\n请根据以上过程回答用户问题:\n{% for message in messages %}{{message.role.desc}}:{{message.content}}\n{% endfor %}助手:', template_format='jinja2'), 'skill_conversation_rewrite': PromptTemplate(input_variables=['messages'], template='以下是用户与助手的多轮对话,请将其改写成一句话,尽量简洁,提取关键信息:\n{% for message in messages %}{{message.role.desc}}:{{message.content}}\n{% endfor %}\n\n改写结果:\n用户:', template_format='jinja2'), 'system_out_put_parser': PromptTemplate(input_variables=['prompt', 'schema'], template='回答用户的问题,输出一个合法的JSON,并且符合JSON schema要求。\n例如:对于JSON schema:{"properties": {"foo": {"title": "Foo", "description": "a list of strings", "type": "array", "items": {"type": "string"}}}, "required": ["foo"]}\n{"foo":["bar","baz"]}是格式正确的实例,{"properties": {"foo": ["bar", "baz"]}}是格式不正确的实例。\n\n开始!\n输出的JSON schema为:\n{{schema}}\n\n{{prompt}}\n\n输出的JSON为:', template_format='jinja2')}
classmethod register(tmpl_file, tmpl_name=None)

从文件内容注册一个prompt模板 文件的后缀代表这个模板的格式化类型,支持f-string和jinja2。比如有一个模板文件是foo.f-string,则会使用f”xx{}xxx”的方式做格式化 Args:

tmpl_file: 指向模板文件的路径。文件的后缀代表模板的格式化类型,支持f-string和jinja2 tmpl_name: (Optional) 唯一指定一个模板的名称,如果不传则使用不包含后缀的文件名

classmethod template_names() list

获取所有可以通过PromptTemplateProvider获取的prompt模板名称 Returns: list, 所有模板名称

pangukitsappdev.prompt.prompt_tmpl.read_prompt_from(tmpl_file) PromptTemplate

Module contents