本次目的是编写一个简单的聊天机器人,该聊天机器人可以使用OpenAI的聊天机器人模型进行交互。在这个学习中,我们将创建了一个简单的聊天模板,用户可以输入任何文本,聊天机器人会根据预定义的提示消息模板生成回复,通过提示模板来指导聊天机器人的响应。提示模板用于将原始用户输入转换为更好的 LLM 输入。
效果对比:
我们先来直观感受使用提示模版和没有提示模版的回复内容
- 没有提示模版
content=‘当我们违反交通规则时,不仅会影响自己的安全,也会危害到他人的生命。例如,闯红灯可能导致交通事故,不系安全带可能造成受伤,超速行驶可能引发交通事故等等。遵守交通规则是保护自己和他人安全的重要举措,希望你能意识到这些危害,遵守交通规则,保护自己和他人的生命。’ response_metadata={‘token_usage’: {‘completion_tokens’: 153, ‘prompt_tokens’: 49, ‘total_tokens’: 202}, ‘model_name’: ‘gpt-3.5-turbo’, ‘system_fingerprint’: ‘fp_3bc1b5746c’, ‘finish_reason’: ‘stop’, ‘logprobs’: None}
- 使用了提示模版
content=‘小朋友,违反交通规则是非常危险的行为,可能会给自己和他人带来严重的危害。比如,闯红灯会导致交通事故发生,不仅会受伤,还可能造成其他人的伤亡。不遵守交通信号灯和交通标志也会导致交通混乱,给道路上的其他车辆和行人带来危险。\n\n此外,酒驾、超速和不系安全带等行为也会增加发生交通事故的风险,给自己和他人的生命安全造成严重威胁。所以,我们一定要遵守交通规则,保护自己和他人的安全,让道路变得更加安全和有序。希望你能认真听从交通规则,不要做危险的事情。’ response_metadata={‘token_usage’: {‘completion_tokens’: 265, ‘prompt_tokens’: 30, ‘total_tokens’: 295}, ‘model_name’: ‘gpt-3.5-turbo’, ‘system_fingerprint’: ‘fp_3bc1b5746c’, ‘finish_reason’: ‘stop’, ‘logprobs’: None}
从上面的结果对比,还是能够看出当我们使用了提示模版之后,回答的的时候,机器人会有角色身份,会根据当前的身份角色回答更为符合场景的话语。
代码内容
#首先,从langchain_openai库中导入ChatOpenAI类,该类负责与OpenAI的聊天机器人进行交互。
from langchain_openai import ChatOpenAI
from langchain_core.prompts import ChatPromptTemplate
#创建一个ChatOpenAI对象llm,传入所需的API密钥、基础URL和预训练的聊天机器人模型(在本例中为gpt-3.5-turbo)。
llm = ChatOpenAI(
openai_api_key='替换为你的API密钥',
base_url='https://api.chatanywhere.tech/v1',
model='gpt-3.5-turbo',
)
#创建一个ChatPromptTemplate对象prompt_template,从用户输入和系统回复中构建一个提示消息。本例中,我们使用了一个预定义的提示消息模板,该模板包含用户和系统的消息。
prompt_template = ChatPromptTemplate.from_messages([
("system", "你是一个很出色的交通警察."),
("user", "{input}")
])
#使用|操作符将prompt_template和llm连接在一起,创建一个chain对象。
chain =prompt_template | llm
#使用invoke方法调用chain对象,传入用户的输入,并获取响应。
response = chain.invoke(input="请你给违反交通规则的小朋友讲解危害!")
print(response)
注意事项:
- 请确保已安装langchain_openai和langchain_core库。如果尚未安装,请使用以下命令安装:
pip install langchain_openai
pip install langchain_core
- 请将openai_api_key替换为你的OpenAI API密钥。如果没有,请在这里获取