CP02大语言模型ChatGLM3-6B使用CLI代码进行多轮对话
大语言模型ChatGLM3 CLI代码进行多轮对话。
模型初始化
from transformers import AutoTokenizer, AutoModel
tokenizer = AutoTokenizer.from_pretrained("THUDM/chatglm3-6b", trust_remote_code=True)
model = AutoModel.from_pretrained("THUDM/chatglm3-6b", trust_remote_code=True, device='cuda')
model = model.eval()
welcome_prompt = "欢迎使用 ChatGLM3-6B 模型,输入内容即可进行对话"
print(welcome_prompt)
欢迎使用 ChatGLM3-6B 模型,输入内容即可进行对话
初始化参数
past_key_values = None
history = []
简单的命令行多轮对话
使用stream_chat方法构建一个while循环
while True:
query = input("\n用户:")
print("\nChatGLM:", end="")
current_length = 0
for response, history, past_key_values in model.stream_chat(tokenizer, query, history=history, top_p=1,
temperature=0.01,
past_key_values=past_key_values,
return_past_key_values=True):
print(response[current_length:], end="", flush=True)
current_length = len(response)
print("\n\nhistory:")
print(history)
用户: 你好
ChatGLM:你好!有什么我可以帮助你的吗?
history:
[{‘role’: ‘system’, ‘content’: ‘你是North-D智能助手,一个大语言模型LLM。根据用户的提问回答问题,使用markdown格式回答。’}, {‘role’: ‘user’, ‘content’: ‘你好’}, {‘role’: ‘assistant’, ‘metadata’: ‘’, ‘content’: ‘你好!有什么我可以帮助你的吗?’}]用户: 你是谁
ChatGLM:我是一个名为 ChatGLM3-6B 的人工智能助手,是基于清华大学 KEG 实验室和智谱 AI 公司于 2023 年共同训练的语言模型开发的。我的任务是针对用户的问题和要求提供适当的答复和支持。
history:
[{‘role’: ‘system’, ‘content’: ‘你是North-D智能助手,一个大语言模型LLM。根据用户的提问回答问题,使用markdown格式回答。’}, {‘role’: ‘user’, ‘content’: ‘你好’}, {‘role’: ‘assistant’, ‘metadata’: ‘’, ‘content’: ‘你好!有什么我可以帮助你的吗?’}, {‘role’: ‘user’, ‘content’: ‘你是谁’}, {‘role’: ‘assistant’, ‘metadata’: ‘’, ‘content’: ‘我是一个名为 ChatGLM3-6B 的人工智能助手,是基于清华大学 KEG 实验室和智谱 AI 公司于 2023 年共同训练的语言模型开发的。我的任务是针对用户的问题和要求提供适当的答复和支持。’}]用户: 你是North-D智能助手,一个大语言模型LLM。根据用户的提问回答问题,使用markdown格式回答。
ChatGLM:抱歉,我之前的回答可能让您产生了困惑。是的,我是一个名为 North-D 的人工智能助手,我是一个大语言模型 LLM。我的任务是根据用户的问题和要求提供适当的答复和支持。请问有什么我可以帮助您的吗?
history:
[{‘role’: ‘system’, ‘content’: ‘你是North-D智能助手,一个大语言模型LLM。根据用户的提问回答问题,使用markdown格式回答。’}, {‘role’: ‘user’, ‘content’: ‘你好’}, {‘role’: ‘assistant’, ‘metadata’: ‘’, ‘content’: ‘你好!有什么我可以帮助你的吗?’}, {‘role’: ‘user’, ‘content’: ‘你是谁’}, {‘role’: ‘assistant’, ‘metadata’: ‘’, ‘content’: ‘我是一个名为 ChatGLM3-6B 的人工智能助手,是基于清华大学 KEG 实验室和智谱 AI 公司于 2023 年共同训练的语言模型开发的。我的任务是针对用户的问题和要求提供适当的答复和支持。’}, {‘role’: ‘user’, ‘content’: ‘你是North-D智能助手,一个大语言模型LLM。根据用户的提问回答问题,使用markdown格式回答。’}, {‘role’: ‘assistant’, ‘metadata’: ‘’, ‘content’: ‘抱歉,我之前的回答可能让您产生了困惑。是的,我是一个名为 North-D 的人工智能助手,我是一个大语言模型 LLM。我的任务是根据用户的问题和要求提供适当的答复和支持。请问有什么我可以帮助您的吗?’}]用户: 你是谁
ChatGLM:我是一个名为 North-D 的人工智能助手,是基于清华大学 KEG 实验室和智谱 AI 公司于 2023 年共同训练的语言模型开发的。我的任务是针对用户的问题和要求提供适当的答复和支持。请问有什么我可以帮助您的吗?
history:
[{‘role’: ‘system’, ‘content’: ‘你是North-D智能助手,一个大语言模型LLM。根据用户的提问回答问题,使用markdown格式回答。’}, {‘role’: ‘user’, ‘content’: ‘你好’}, {‘role’: ‘assistant’, ‘metadata’: ‘’, ‘content’: ‘你好!有什么我可以帮助你的吗?’}, {‘role’: ‘user’, ‘content’: ‘你是谁’}, {‘role’: ‘assistant’, ‘metadata’: ‘’, ‘content’: ‘我是一个名为 ChatGLM3-6B 的人工智能助手,是基于清华大学 KEG 实验室和智谱 AI 公司于 2023 年共同训练的语言模型开发的。我的任务是针对用户的问题和要求提供适当的答复和支持。’}, {‘role’: ‘user’, ‘content’: ‘你是North-D智能助手,一个大语言模型LLM。根据用户的提问回答问题,使用markdown格式回答。’}, {‘role’: ‘assistant’, ‘metadata’: ‘’, ‘content’: ‘抱歉,我之前的回答可能让您产生了困惑。是的,我是一个名为 North-D 的人工智能助手,我是一个大语言模型 LLM。我的任务是根据用户的问题和要求提供适当的答复和支持。请问有什么我可以帮助您的吗?’}, {‘role’: ‘user’, ‘content’: ‘你是谁’}, {‘role’: ‘assistant’, ‘metadata’: ‘’, ‘content’: ‘我是一个名为 North-D 的人工智能助手,是基于清华大学 KEG 实验室和智谱 AI 公司于 2023 年共同训练的语言模型开发的。我的任务是针对用户的问题和要求提供适当的答复和支持。请问有什么我可以帮助您的吗?’}]
设置bad word的多轮对话
past_key_values = None
history = [{"role": "system", "content":"你是North-D智能助手,一个大语言模型LLM。根据用户的提问回答问题,使用markdown格式回答。"}]
bad_words = ["Langchain","你好"]
bad_words_ids = [tokenizer.encode(bad_word,add_special_tokens=False) for bad_word in bad_words]
while True:
query = input("\n用户:")
print("\nChatGLM:", end="")
current_length = 0
try:
for response, history, past_key_values in model.stream_chat(tokenizer, query, history=history, top_p=1,
temperature=0.01,
past_key_values=past_key_values,
return_past_key_values=True,
bad_words_ids=bad_words_ids
):
print(response[current_length:], end="", flush=True)
current_length = len(response)
print("\n\nhistory:")
print(history)
except RuntimeError as e:
print(f"生成文本时发生错误:{e},这可能是涉及到设定的敏感词汇")
#print("\npast_key_values:")
#print(past_key_values)
用户: 你好
ChatGLM:生成文本时发生错误:probability tensor contains eitherinf
,nan
or element < 0,这可能是涉及到设定的敏感词汇用户: langchain
ChatGLM:生成文本时发生错误:probability tensor contains eitherinf
,nan
or element < 0,这可能是涉及到设定的敏感词汇用户: langchain
ChatGLM:“Langchain” 是一个区块链平台,专注于为语言学习提供支持。它使用区块链技术来存储和共享语言学习资源,并提供一种方式来验证和认证这些资源。Langchain 平台旨在提供一个透明、去中心化和高效的方式,帮助学习者更轻松地获取高质量的语言学习资源,同时也为语言学习者提供一种方式来验证和认证这些资源。
此外,Langchain 还提供了一种新的经济模型,让用户可以通过贡献自己的学习资源来获得奖励,从而激励更多的人参与到语言学习中来。这种经济模型可以帮助生成文本时发生错误:probability tensor contains eitherinf
,nan
or element < 0,这可能是涉及到设定的敏感词汇