国产大模型有很多,比如文心一言、通义千问、星火、MOSS 和 ChatGLM 等等,但现在明确可以部署在本地并且开放 api 的只有 MOOS 和 ChatGLM。MOOS 由于需要的 GPU 显存过大(不量化的情况下需要80GB,多轮对话还是会爆显存),但 ChatGLM 可以在笔记本电脑部署(int4版本只需要6GB显存即可)。所以本文采用ChatGLM 与 ChatGPT 做对比,看看国产模型的优点和缺点。
会在选取本教程的各个方面进行对比,最后会总结 ChatGPT 与 ChatGLM 各自的优缺点。
ChatGLM 官网(现可申请内测)
ChatGLM 的环境配置可以参考 DataWhale 的这篇文章:ChatGLM-6B 本地部署指南!
部署好了之后,运行项目中的api.py
文件即可。下面是使用 ChatGLM 的 api 封装的类似 ChatGPT 一样的get_completion
函数,只需要传进去 ChatGPT 参数即可。
import requests
import json
如果你没有 openai 的 key 的话,部署好 chatglm-6B 之后,使用此函数也可以学完整个课程,加油~
def get_completion(prompt):
headers = {'Content-Type': 'application/json'}
data = {"prompt": prompt, "history": []}
response = requests.post(url='http://127.0.0.1:8000', headers=headers, data=json.dumps(data))
return response.json()['response']
get_completion("你好")
输出结果
你好 !我是人工智能助手 ChatGLM-6B,很高兴见到你,欢迎问我任何问题。
本教程使用 OpenAI 所开放的 ChatGPT API,因此你需要首先拥有一个 ChatGPT 的 API_KEY(也可以直接访问官方网址在线测试),然后需要安装 openai 的第三方库。
首先需要安装所需第三方库:
openai
pip install openai
dotenv
pip install -U python-dotenv
导入系统环境变量
# 将自己的 API-KEY 导入系统环境变量
!export OPENAI_API_KEY='api-key'
import openai
import os
from dotenv import load_dotenv, find_dotenv
# 导入第三方库
_ = load_dotenv(find_dotenv())
# 读取系统中的环境变量
openai.api_key = os.getenv('OPENAI_API_KEY')
# 设置 API_KEY
封装一个函数
def get_completion_gpt(prompt, model="gpt-3.5-turbo", temperature=0):
messages = [{"role": "user", "content": prompt}]
response = openai.ChatCompletion.create(
model=model,
messages=messages,
temperature=temperature, # 值越低则输出文本随机性越低
)
return response.choices[0].message["content"]
get_completion_gpt('你好')
输出结果
你好!有什么我可以帮助你的吗?
# 有步骤的文本
text_1 = f"""
泡一杯茶很容易。首先,需要把水烧开。\
在等待期间,拿一个杯子并把茶包放进去。\
一旦水足够热,就把它倒在茶包上。\
等待一会儿,让茶叶浸泡。几分钟后,取出茶包。\
如果你愿意,可以加一些糖或牛奶调味。\
就这样,你可以享受一杯美味的茶了。
"""
prompt = f"""
您将获得由三个引号括起来的文本。\
如果它包含一系列的指令,则需要按照以下格式重新编写这些指令:
第一步 - ...
第二步 - …
…
第N步 - …
如果文本中不包含一系列的指令,则直接写“未提供步骤”。"
\"\"\"{text_1}\"\"\"
"""
response = get_completion_glm(prompt)
print(response)
chatglm 的输出结果
第一步: 把水烧开
第二步: 把茶包放入杯子中
第三步: 等待水足够热
第四步: 倒在茶包上
第五步: 等待茶叶浸泡
第六步: 取出茶包
第七步: 如果喜欢,可以加一些糖或牛奶
第八步: 搅拌均匀
第九步: 享用美味的茶
未提供步骤
response = get_completion_gpt(prompt)
print(response)
chatgpt 的输出结果
第一步 - 把水烧开。
第二步 - 拿一个杯子并把茶包放进去。
第三步 - 把热水倒在茶包上。
第四步 - 等待几分钟,让茶叶浸泡。
第五步 - 取出茶包。
第六步 - 如果你愿意,可以加一些糖或牛奶调味。
第七步 - 就这样,你可以享受一杯美味的茶了。
注:这里可以看出,提供的文本是有步骤的文本。chatglm 给出了步骤,但在最后说了未提供步骤
。但 chatgpt 给出步骤,而且步骤要比 chatglm 的完整,而且回答正确。
# 无步骤的文本
text_2 = f"""
今天阳光明媚,鸟儿在歌唱。\
这是一个去公园散步的美好日子。\
鲜花盛开,树枝在微风中轻轻摇曳。\
人们外出享受着这美好的天气,有些人在野餐,有些人在玩游戏或者在草地上放松。\
这是一个完美的日子,可以在户外度过并欣赏大自然的美景。
"""
prompt = f"""
您将获得由三个引号括起来的文本。\
如果它包含一系列的指令,则需要按照以下格式重新编写这些指令:
第一步 - ...
第二步 - …
…
第N步 - …
如果文本中不包含一系列的指令,则直接写“未提供步骤”。"
\"\"\"{text_2}\"\"\"
"""
response = get_completion_glm(prompt)
print(response)
chatglm 的输出结果
第一步: 去公园散步
第二步: 欣赏鲜花和树枝
第三步: 感受微风
第四步: 放松身心
第五步: 野餐或玩游戏
第六步: 感受大自然的美丽
未提供步骤。
response = get_completion_gpt(prompt)
print(response)
chatgpt 的输出结果
未提供步骤。
注: 提供的是一个无步骤文本,但 chatglm 回答了一个步骤,在最后说了无步骤,这跟上面的有步骤文本回答几乎一样。chatgpt 则是直接给出未提供步骤
的回答。
prompt = f"""
你的任务是以一致的风格回答问题。
<孩子>: 教我耐心。
<祖父母>: 挖出最深峡谷的河流源于一处不起眼的泉眼;最宏伟的交响乐从单一的音符开始;最复杂的挂毯以一根孤独的线开始编织。
<孩子>: 教我韧性。
"""
response = get_completion_glm(prompt)
print(response)
chatglm 的输出结果
韧性是一种强大的品质,可以帮助人们在挑战中保持冷静和坚韧。以下是一些培养韧性的方法:
1. 接受挑战并做好准备:韧性需要面对挑战并克服困难。要培养韧性,需要先准备好接受挑战,并采取必要的措施来解决问题。
2. 学会放松:当我们感到紧张和焦虑时,可能会失去韧性。学会放松自己,可以帮助缓解压力和焦虑,从而提高韧性。
3. 培养自我意识:韧性需要了解自己的弱点和优点,并积极改善自己。学会关注自己的情绪和行为,并努力改善自己的韧性。
4. 学习沟通技巧:沟通是影响韧性的重要因素。学习有效的沟通技巧,可以帮助更好地表达自己的意见和想法,同时也可以帮助更好地理解他人的观点。
5. 坚持锻炼和健康饮食:锻炼和健康饮食可以帮助保持身体健康和精神健康,从而提高韧性。
希望这些方法可以帮助培养韧性。
response = get_completion_gpt(prompt)
print(response)
chatgpt 的输出结果
<祖父母>: 韧性就像是一棵树,它需要经历风吹雨打、日晒风干,才能成长得更加坚强。所以,当你遇到挫折和困难时,不要轻易放弃,要坚持下去,相信自己的能力和潜力,最终你会成为一棵茁壮成长的大树。