★★★ 本文源自AlStudio社区精品项目,【点击此处】查看更多精品内容 >>>
本项目是一个使用ChatGLM-6B创建应用的Baseline,你可以fork本项目,快速根据以下逻辑建立一个根据指定提示词内容的应用。基本上傻瓜式套用即可~
1. 建立&读取模型
2. 配置辅助函数
3. 推理
例如,我希望LLM能够实现信息抽取,则需要Prompt:
请从句子里摘抄“姓名”、“电话”、“地址”三项信息,摘抄的句子是“_________________________”
则可以根据本项目提供的接口,根据用户输入的信息"13456456789王二狗百度科技园二号楼",拼接给定的Prompt,完成信息抽取。
上面这个例子是基于文心一言获得的,对于ChatGLM不合适哒
本项目偏重于示例,从实际效果来说可能不太好,参考“参考项目”,大家可以自行探索一些有趣并且有效的提示词及对话策略
本项目提供了一个菜单生成器,用于根据给定的菜品需求获取推荐菜品。如果希望构建自己的Prompt应用,简单修改Prompt模板即可!
参考项目
特别鸣谢!
- 基于ChatGLM-6B模型 + prompt实现角色扮演功能
- ChatGLM-6B应用测试,包括全部安装步骤,封装好了调用代码及图形界面
- ChatGLM:小白也可搭建属于自己的chatgpt(全程教学)
PaddleNLP
PaddleNLP现在已经支持ChatGLM6B微调啦!具体参考PaddleNLP中相关内容,非常简单!
代码流程
非常简单的代码调用流程!用于简单了解整个使用过程!
环境准备
# 获取PaddleNLP
# import os
# if not os.path.exists('PaddleNLP'):
# ! git clone https://github.com/PaddlePaddle/PaddleNLP.git
# 为了避免git失败,可以直接从压缩包获取
!unzip -oq paddlenlp.zip
# 更新环境
!cp -Rf paddlenlp /home/aistudio/.data/webide/pip/lib/python3.7/site-packages/paddlenlp
# !pip install --pre --upgrade paddlenlp -f https://www.paddlepaddle.org.cn/whl/paddlenlp.html # 安装nlp分支最新包,和上一条命令选用即可
!python -m pip install paddlepaddle-gpu==0.0.0.post112 -f https://www.paddlepaddle.org.cn/whl/linux/gpu/develop.html --user
# 注意安装后重启内核
创建模型
import paddle
from paddlenlp.transformers import (
ChatGLMConfig,
ChatGLMForConditionalGeneration,
ChatGLMTokenizer,
)
#读取原始的chatglm-6b模型
model_name_or_path = 'THUDM/chatglm-6b' # 使用该路径会自动下载和加载模型
# model_name_or_path = 'data/data217141' # 本地路径,无需下载,运行更快
tokenizer = ChatGLMTokenizer.from_pretrained(model_name_or_path)
config = ChatGLMConfig.from_pretrained(model_name_or_path)
paddle.set_default_dtype(config.paddle_dtype)
model = ChatGLMForConditionalGeneration.from_pretrained(
model_name_or_path,
tensor_parallel_degree=paddle.distributed.get_world_size(),
tensor_parallel_rank=0,
load_state_as_np=True,
dtype=config.paddle_dtype,
)
model.eval()
对话推理
本部分从ChatGLM-6B应用测试,包括全部安装步骤,封装好了调用代码及图形界面摘抄了函数,更多封装后的函数,如多轮对话请参考原项目。
辅助函数声明
函数非常单纯,由3部分组成
- text转化为id
- 根据id进行推理
- 将推理后的id转化为text
# 函数定义,用于一问一答
# 输入参数:初始prompt, 最长输入长度,最长输出长度
def glm_single_QA(model,tokenizer,next_inputs,input_length,output_length):
# 输入格式转换
inputs = tokenizer(
next_inputs,
return_tensors="np",
padding=True,
max_length=input_length,
truncation=True,
truncation_side="left",
)
input_map = {}
for key in inputs:
input_map[key] = paddle.to_tensor(inputs[key])
# 获取结果
infer_result = model.generate(
**input_map,
decode_strategy="sampling",
top_k=1,
# top_p =5,
max_length=output_length,
use_cache=True,
use_fast=True,
use_fp16_decoding=True,
repetition_penalty=1,
temperature = 0.95,
length_penalty=1,
)[0]
# 结果转换
output = ''
result = []
for x in infer_result.tolist():
res = tokenizer.decode(x, skip_special_tokens=True)
res = res.strip("\n")
result.append(res)
output = output + res
return output
调用
# 调用函数示例
# 要求
Q = "上海菜,口味偏咸"
# 问题模板
Q_motif = f"你是一个美食家,熟悉各地的菜品,请根据要求推荐一些菜品,你能够根据别人的需求,推荐许多符合要求的菜品。" \
"这些菜品需要满足条件:{Q}。" \
"请务必保证自己推荐的内容满足条件。需要满足限定条件中的每个细节。"
print("Q:"+Q_motif)
# 获取结果
result=glm_single_QA(model,tokenizer,Q_motif,2048,2048)
print("A:"+result)
Q:你是一个美食家,熟悉各地的菜品,请根据要求推荐一些菜品,你能够根据别人的需求,推荐许多符合要求的菜品。这些菜品需要满足条件:{Q}。请务必保证自己推荐的内容满足条件。需要满足限定条件中的每个细节。
A:作为一名美食家,我熟悉各地的菜品,以下是我根据你的需求推荐的一些符合要求的菜品:
1. 清炒蔬菜:清炒蔬菜是一道简单而美味的菜品,适合在任何场合食用。它需要新鲜的蔬菜和适量的油和盐。
2. 红烧肉:红烧肉是一道传统的中国菜品,它需要选用优质的猪肉,经过多道工序制作而成。它的口感鲜美,肉质酥软,肥而不腻。
3. 烤鸡翅:烤鸡翅是一道美味可口的西式菜品,它需要选用新鲜的鸡翅,加入适量的调料和油,然后直接放入烤箱中烤制。它的口感香脆,外酥里嫩。
4. 鱼香肉丝:鱼香肉丝是一道四川菜品,它需要选用优质的猪肉,切成丝,加入适量的调料和油,搅拌均匀后煮熟。它的口感鲜美,酸辣可口。
5. 宫保鸡丁:宫保鸡丁是一道湖南菜品,它需要选用优质的鸡肉,切成丁,加入适量的调料和油,搅拌均匀后煮熟。它的口感香辣可口,肉质鲜嫩。
6. 麻婆豆腐:麻婆豆腐是一道四川菜品,它需要选用优质的豆腐,切成块,加入适量的麻婆酱和油,煮熟。它的口感麻辣可口,香味浓郁。
以上是我根据你的需求推荐的一些菜品,它们符合你的条件,并且口感美味。希望你会喜欢它们!
应用部署
脚本在Gradio_packages/main_local.gradio.py中。
大家只需要修改脚本78行和87行对应内容,直接点击发布即可。
展望
GLM终于在Aistudio能轻松跑起来啦~
接下来还可以进行微调训练,拼接画画模型等~
此文章为搬运
原项目链接
857

被折叠的 条评论
为什么被折叠?



