| pre_prompt = PromptBuilder.process_template(pre_prompt) if pre_prompt else pre_prompt | pre_prompt = PromptBuilder.process_template(pre_prompt) if pre_prompt else pre_prompt | ||||
| if mode == 'completion': | if mode == 'completion': | ||||
| prompt_template = OutLinePromptTemplate.from_template( | prompt_template = OutLinePromptTemplate.from_template( | ||||
| template=("Use the following pieces of [CONTEXT] to answer the question at the end. " | |||||
| "If you don't know the answer, " | |||||
| "just say that you don't know, don't try to make up an answer. \n" | |||||
| "```\n" | |||||
| "[CONTEXT]\n" | |||||
| "{context}\n" | |||||
| "```\n" if chain_output else "") | |||||
| template=("""Use the following CONTEXT as your learned knowledge: | |||||
| [CONTEXT] | |||||
| {context} | |||||
| [END CONTEXT] | |||||
| When answer to user: | |||||
| - If you don't know, just say that you don't know. | |||||
| - If you don't know when you are not sure, ask for clarification. | |||||
| Avoid mentioning that you obtained the information from the context. | |||||
| And answer according to the language of the user's question. | |||||
| """ if chain_output else "") | |||||
| + (pre_prompt + "\n" if pre_prompt else "") | + (pre_prompt + "\n" if pre_prompt else "") | ||||
| + "{query}\n" | + "{query}\n" | ||||
| ) | ) | ||||
| else: | else: | ||||
| messages: List[BaseMessage] = [] | messages: List[BaseMessage] = [] | ||||
| system_message = None | |||||
| if pre_prompt: | if pre_prompt: | ||||
| # append pre prompt as system message | # append pre prompt as system message | ||||
| system_message = PromptBuilder.to_system_message(pre_prompt, inputs) | system_message = PromptBuilder.to_system_message(pre_prompt, inputs) | ||||
| messages.append(system_message) | |||||
| human_inputs = { | |||||
| "query": query | |||||
| } | |||||
| human_message_prompt = "{query}" | |||||
| if chain_output: | if chain_output: | ||||
| # append context as system message, currently only use simple stuff prompt | |||||
| context_message = PromptBuilder.to_system_message( | |||||
| """Use the following pieces of [CONTEXT] to answer the users question. | |||||
| If you don't know the answer, just say that you don't know, don't try to make up an answer. | |||||
| ``` | |||||
| human_inputs['context'] = chain_output | |||||
| human_message_prompt = """Use the following CONTEXT as your learned knowledge. | |||||
| [CONTEXT] | [CONTEXT] | ||||
| {context} | {context} | ||||
| ```""", | |||||
| {'context': chain_output} | |||||
| ) | |||||
| if not system_message: | |||||
| system_message = context_message | |||||
| else: | |||||
| system_message.content = context_message.content + "\n\n" + system_message.content | |||||
| [END CONTEXT] | |||||
| if system_message: | |||||
| messages.append(system_message) | |||||
| When answer to user: | |||||
| - If you don't know, just say that you don't know. | |||||
| - If you don't know when you are not sure, ask for clarification. | |||||
| Avoid mentioning that you obtained the information from the context. | |||||
| And answer according to the language of the user's question. | |||||
| human_inputs = { | |||||
| "query": query | |||||
| } | |||||
| Q:{query} | |||||
| A:""" | |||||
| # construct main prompt | # construct main prompt | ||||
| human_message = PromptBuilder.to_human_message( | human_message = PromptBuilder.to_human_message( | ||||
| prompt_content="{query}", | |||||
| prompt_content=human_message_prompt, | |||||
| inputs=human_inputs | inputs=human_inputs | ||||
| ) | ) | ||||