最近有一个工作问题需要花费太多的人工时间,就考虑是否可以用LangChain Prompt进行解决。经过对LangChain 里的几种 prompt 模板对比分析,觉得 Few-shot prompt 最符合需求,然后就着手开始搭建。因为网上对于Few-shot prompt的用法资料不多,或讲解不完整,故此在这里做一下记录;
import os
from langchain import PromptTemplate
from langchain import FewShotPromptTemplate
from langchain.chains import LLMChain
from langchain.chat_models import ChatOpenAI
from configs import openai_key
# 大模型配置初始化
os.environ['OPENAI_API_KEY'] = openai_key['api_key_2']
llm = ChatOpenAI(temperature=0.9, model_name='gpt-3.5-turbo')
def Question_classify():
"""
:return:
"""
examples = [
{
"question": """下面两个句话描述的是同一个问题吗?\n问题1:单纯疱疹病毒感染的诱因有哪些?\n问题2:单纯疱疹病毒感染的原因是什么?""",
"answer": "是"
},
{
"question": """下面两个句话描述的是同一个问题吗?\n问题1:指骨骨折需要吃什么药?\n问题2:骨折时需要用哪种药?""",
"answer": "不是"
},
{
"question": """下面两个句话描述的是同一个问题吗?\n问题1:范可尼贫血影响生育吗?\n问题2:范可尼是否会影响生育能力?""",
"answer": "不是"
},
{
"question": """下面两个句话描述的是同一个问题吗?\n问题1:霍乱能自己好吗?\n问题2:霍乱是否会自愈?""",
"answer": "是"
},
{
"question": """下面两个句话描述的是同一个问题吗?\n问题1:霍乱是否会自愈?\n问题2:霍乱能彻底治愈吗?""",
"answer": "不是"
},
]
example_template = """Question: {question}\n{answer}"""
example_prompt = PromptTemplate(
input_variables=["question", "answer"],
template=example_template
)
prefix = """假设你是一个中国高中语文老师,现在请你对两个问题的描述内容进行语义相似判断,如果它们表达内容含义一样,就判断为同一问题, 并回答'是',反之回答'不是'。\n下面是一些示例:"""
suffix = """
Question: {input}
"""
# print(example_prompt.format(**examples[0]))
prompt = FewShotPromptTemplate(
examples=examples,
example_prompt=example_prompt,
prefix=prefix,
suffix="Question: {input}",
input_variables=["input"]
)
input2 = """下面两个句话描述的是同一个问题吗?\n问题1:结节性多动脉炎会不会影响生育?\n问题2:结节性多动脉炎对生育会有什么影响吗?"""
input3 = """下面两个句话描述的是同一个问题吗?\n问题1:多发性硬化究竟是怎样一种疾病?\n问题2:多发性硬化会有些什么样的表现?"""
input4 = """下面两个句话描述的是同一个问题吗?\n问题1:乙状结肠癌的发病率高吗?\n问题2:乙状结肠癌的高发人群是哪些?"""
# print(prompt.format(input=input))
chain = LLMChain(llm=llm, prompt=prompt)
return chain
if __name__ == '__main__':
input5 = """下面两个句话描述的是同一个问题吗?\n问题1:乙状结肠癌的发病率高吗?\n问题2:乙状结肠癌的高发人群是哪些?"""
chain = Question_classfy()
print(chain.run(input5))