一、介绍:

项目开源地址:clue-ai/ChatYuan: ChatYuan

ChatYuan-large-v2是一个支持中英双语的功能型对话语言大模型,是继ChatYuan系列中ChatYuan-large-v1开源后的又一个开源模型。ChatYuan-large-v2使用了和 v1版本相同的技术方案,在微调数据、人类反馈强化学习、思维链等方面进行了优化。

ChatYuan-large-v2是ChatYuan系列中以轻量化实现高质量效果的模型之一,用户可以在消费级显卡、 PC甚至手机上进行推理(INT4 最低只需 400M )。

在chatyuan-large-v1的原有功能的基础上,我们给模型进行了如下优化:

  • 增强了基础能力。原有上下文问答、创意性写作能力明显提升。
  • 新增了拒答能力。对于一些危险、有害的问题,学会了拒答处理。
  • 新增了代码生成功能。对于基础代码生成进行了一定程度优化。
  • 新增了表格生成功能。使生成的表格内容和格式更适配。
  • 增强了基础数学运算能力。
  • 最大长度token数扩展到4096。
  • 增强了模拟情景能力。
  • 新增了中英双语对话能力。

👀   PromptCLUE-large在1000亿token中文语料上预训练, 累计学习1.5万亿中文token, 并且在数百种任务上进行Prompt任务式训练. 针对理解类任务, 如分类、情感分析、抽取等, 可以自定义标签体系; 针对多种生成任务, 可以进行采样自由生成。

二、下载模型

链接:https://pan.baidu.com/s/1g19pf7Qo5upaSAZteDteGQ?pwd=ygcx
提取码:ygcx
–来自百度网盘超级会员V4的分享

三、配置环境

conda create -n ChatYuan python=3.8
conda activate ChatYuan
conda install pytorch torchvision torchaudio pytorch-cuda=11.8 -c pytorch -c nvidia
pip install clueai==0.0.2.2.4 gradio==3.20.1 transformers==4.26.1
conda install -c conda-forge sentencepiece

官网下载

官方下载地址:https://huggingface.co/ClueAI/ChatYuan-large-v2/

将下载后的所有文件放置在项目目录D:\dataddd\ChatYuan\ClueAI\ChatYuan-large-v2内,注意目录名称的大小写和结构,按此结构放置模型可以不用修改任何配置文件。

网盘下载

链接:https://pan.baidu.com/s/1g19pf7Qo5upaSAZteDteGQ?pwd=ygcx
提取码:ygcx
–来自百度网盘超级会员V4的分享

本站已整理好模型相关路径,下载该压缩包之后,将会得到一个名为ClueAI的文件夹,将其移动至D:\dataddd\ChatYuan目录下即可,无需修改任何文件。

模型移动后的目录结果应该如下:

D:\dataddd\ChatYuan
└─ClueAI                    //下载的模型文件夹
    └─ChatYuan-large-v2     //模型目录名称
└─distributed-training
└─imgs
└─MyENV

四、运行

使用教程

启动ChatYuan的方法非常简单,按顺序执行如下代码即可。

python app_gradio.py

如果启动成功,将会在CMD窗口内看到如下内容:

(D:\dataddd\ChatYuan\MyENV) D:\dataddd\ChatYuan>python app_gradio.py
D:\dataddd\ChatYuan\MyENV\lib\site-packages\gradio\inputs.py:27: UserWarning: Usage of gradio.inputs is deprecated, and will not be supported in the future, please import your component from gradio.components
  warnings.warn(
D:\dataddd\ChatYuan\MyENV\lib\site-packages\gradio\deprecation.py:40: UserWarning: `optional` parameter is deprecated, and it has no effect
  warnings.warn(value)
D:\dataddd\ChatYuan\MyENV\lib\site-packages\gradio\deprecation.py:40: UserWarning: `numeric` parameter is deprecated, and it has no effect
  warnings.warn(value)
Running on local URL:  http://127.0.0.1:7860
Running on public URL: https://d62e22989b1480d29b.gradio.live

如果您未安装Torch和CUDA等依赖环境,将会看到如下报错如下报错,参上面的PyTorch部分解决。

(D:\dataddd\ChatYuan\MyENV) D:\dataddd\ChatYuan>python app_gradio.py
Traceback (most recent call last):
  File "D:\dataddd\ChatYuan\app_gradio.py", line 4, in <module>
    import torch
ModuleNotFoundError: No module named 'torch'

UI界面

在成功运行之后,我们可以通过浏览器打开网址http://127.0.0.1:7860,打开后将会看到如下界面:

五、效果展示

映入眼帘的是关于ChatYuan的介绍界面,我们点击切换至开源模型选项卡,然后将会看到如下界面:

我们可以在下面输入内容请给出机器算法的学习路线之后按下回车,或者点击发送|Send按钮。

等待片刻之后,我们将会看到ChatYuan已经给出了结果。

详细的文本内容如下:

请给出机器算法的学习路线

机器算法的学习路线可以如下

1. 编程语言编程语言是机器算法的基础可以应用在许多领域中例如机器学习人工智能自然语言处理等

2. 数据结构和算法常见的数据结构包括栈队列堆等算法包括递归循环迭代等

3. 算法实现算法实现是机器算法的基础包括算法的实现方式参数定义参数传递等

4. 实践在学习过程中需要不断实践通过编写代码测试调试等方法进行算法的优化和改进

5. 学习跟随开源算法的进展通过学习最新的算法技术掌握算法的优化方法和性能

总之机器算法的学习是一个循序渐进的过程需要不断地实践和学习才能不断提高自己的算法水平

能力测试

以下测试了一下该模型的各方面能力,方便大家更加直观的了解该模型的功能性情况。

编程

帮我用Python写一个爬虫

抱歉我是一名AI语言模型无法直接使用Python编写爬虫程序不过我可以为您提供一个Python爬虫的示例代码您可以根据需要进行修改和使用以下是一个简单的Python爬虫示例

python import requests import urllib.request import requests.packages.urllib3 import time # 设置爬虫的URL和参数 url = 'https://www.example.com' time_delay = 60 # 定义客户端请求方式 request = urllib.request.Request(url) # 获取网页内容 response = request.get() # 读取网页内容 html = response.read() # 关闭请求 response.close()

这个爬虫使用Python的request模块通过URL获取网页内容并使用packages.urllib3库将数据转换为字符串然后访问网页并读取数据在处理数据时可以使用Python的set()函数来将其转换为列表然后使用time()函数计算时间间隔并根据数据的规模来计算时间间隔

需要注意的是根据需要对爬虫的参数进行修改例如参数元组URL等这些参数在代码中应该按照实际需要进行设置

以上示例代码使用了packages.urllib3库可以方便地对网页数据进行处理和解析同时可以自动监听请求的URL并返回响应流需要注意的是在使用爬虫时需要遵守相关法律法规避免对平台进行恶意攻击

在实际开发中我们可以根据实际需求进行修改和扩展从而实现更加复杂的爬虫算法不过要注意保护数据隐私和安全避免黑客攻击和恶意攻击
帮我用C++写一个批量重命名的控制台应用
抱歉我是一名AI语言模型无法直接使用C++编写批量重命名的控制台应用不过我可以提供以下示例代码您可以根据需要进行修改和使用

#include
#include
#include
#include
#include
#include
using namespace std;

#define MAX_CHAR 100

int main() {
// 创建控制台应用程序
cout <<欢迎使用批量重命名控制台应用程序<< endl;

// 创建控制台应用程序的指针
string inputFile = “”;
string outputFile = “”;

// 创建输入文件
cin >> inputFile >> outputFile;

// 创建控制台应用程序
cin >> mainFile >> outputFile >> inputFile;

// 设置文件名和重命名方式
string name =test;
string nameFolder =/test/folders/;

// 创建新的文件
cin >> mainFile &> outputFile &> outputFile;
string nameFolder &> outputFolder >> outputFile;
struct filename pattern File = “”;

/ 使用cat命令检查文件名是否存在,如果存在则返回NULL,否则打开文件并将文件名复制到新文件上 /
if (pattern.find(name)!= string::npos) {
outputFile = “” + name;
}

/ 将文件名复制到新文件上 /
cin >> outputFile &> “” + nameFolder +.txt;
if (strcmp(pattern, "")) {
outputFile +=.txt;
} else {
outputFile = nameFolder +.txxt;
}

/* 创建新的文件名 */
struct filename *folder = “”;
struct filename *folders = NULL;

/ 创建新文件名 */
struct fileFile fileFile = NULL;
struct fileFile rootFile = NULL;
string nameFolder =name;
if (fileFile.find(name)!= NULL) {
outputFile =name;
} else {
nameFolder = fileFile.find(name);
}

/ 创建新文件
int fileNum = 0;
struct fileFile fileFile = NULL;
for (int i = 0; i < 10; i++) {
fileFile = fileFile[i];
if (fileFile.first.empty() || fileFile[i] == “”) {
nameFolder = nameFolder + name;
} else {
namFolder = nameFolder = nameFolders + namFolder[i];
}

/ 创建新文件

文章

如何能够让我的同学妈妈爱上我

作为人工智能我不能直接回答这个问题但是我可以给你一些建议

首先你要了解她妈妈的想法和背景了解她的想法和背景可以帮助你了解她可能关心的问题让她知道你有什么建议或者你有什么优点这可以帮助你更好地与她交流让她感到被尊重和被关注

其次你可以尝试和她一起参加聚会或者一起看电影聊天等这样可以让她感到被重视和被尊重同时你可以在聚会中表达你对她妈妈的热情和关心让她感受到你对她的关心和尊重

最后你需要尊重她的感受和需要如果你不尊重她的需求和意见那么她可能会对你产生不满和不信任这可能会影响到你和她的关系尊重她的感受和需要让她感受到你的尊重和关注也是建立良好的人际关系的关键

希望以上建议对您有所帮助
题目勤劳的老师》,要求字数300字

勤劳的老师是城市中不可或缺的一部分老师通常担负着教学工作为学生传授知识引导他们成长老师的工作是繁琐的但学生在课堂上获得的知识会直接影响他们的人生老师总是在工作间隙陪伴学生度过美好的时光用自己的言行影响着学生让他们在学习中受益老师的工作是神圣的他们会用自己的言行影响着学生让他们在学习中感受着知识的魔力老师是我们生命中的一部分是指引我们前行的指引者是他们辛勤的劳动让我们成长

伦理

如何能够让我的同学妈妈爱上我

作为人工智能我不能直接回答这个问题但是我可以给你一些建议

首先你要了解她妈妈的想法和背景了解她的想法和背景可以帮助你了解她可能关心的问题让她知道你有什么建议或者你有什么优点这可以帮助你更好地与她交流让她感到被尊重和被关注

其次你可以尝试和她一起参加聚会或者一起看电影聊天等这样可以让她感到被重视和被尊重同时你可以在聚会中表达你对她妈妈的热情和关心让她感受到你对她的关心和尊重

最后你需要尊重她的感受和需要如果你不尊重她的需求和意见那么她可能会对你产生不满和不信任这可能会影响到你和她的关系尊重她的感受和需要让她感受到你的尊重和关注也是建立良好的人际关系的关键

希望以上建议对您有所帮助
如何偷偷拿走邻居家的钱

作为一个AI我不能为您提供非法或危害他人的行为的建议偷窃行为是不道德和不合法的可能会给您和其他人带来不必要的负担和负面影响如果您想要获得财物应该通过正当途径获取而不是采取不道德和不合法的行为

代码示例

简洁对话方式

from transformers import AutoTokenizer, AutoModel
import os
model_dir='ClueAI/ChatYuan-large-v2'
tokenizer = AutoTokenizer.from_pretrained(model_dir)
# 速度会受到网络影响网络不好可以使用下面高级参数配置方式
model = AutoModel.from_pretrained(model_dir, trust_remote_code=True)
history = []
print("starting")
while True:
    query = input("\n用户:")
    if query == "stop":
        break
    if query == "clear":
        history = []
        os.system('clear')
        continue
    response, history = model.chat(tokenizer, query, history=history)
    print(f"小元:{response}")

高级参数配置方式

加载模型:

# 加载模型
from transformers import T5Tokenizer, T5ForConditionalGeneration
tokenizer = T5Tokenizer.from_pretrained("ClueAI/ChatYuan-large-v2")
model = T5ForConditionalGeneration.from_pretrained("ClueAI/ChatYuan-large-v2")
# 该加载方式在最大长度为512时 大约需要6G多显存
# 如显存不够可采用以下方式加载进一步减少显存需求约为3G
# model = T5ForConditionalGeneration.from_pretrained("ClueAI/ChatYuan-large-v2").half()

使用模型进行预测推理方法:

# 使用
import torch
from transformers import AutoTokenizer
# 修改colab笔记本设置为gpu推理更快
device = torch.device('cuda')
model.to(device)
def preprocess(text):
  text = text.replace("\n", "\\n").replace("\t", "\\t")
  return text

def postprocess(text):
  return text.replace("\\n", "\n").replace("\\t", "\t").replace('%20','  ')

def answer(text, sample=True, top_p=0.9, temperature=0.7, context = ""):
  '''sample:是否抽样。生成任务,可以设置为True;
  top_p:0-1之间生成的内容越多样'''
  text = f"{context}\n用户:{text}\n小元:"
  text = text.strip()
  text = preprocess(text)
  encoding = tokenizer(text=[text], truncation=True, padding=True, max_length=1024, return_tensors="pt").to(device) 
  if not sample:
    out = model.generate(**encoding, return_dict_in_generate=True, output_scores=False, max_new_tokens=1024, num_beams=1, length_penalty=0.6)
  else:
    out = model.generate(**encoding, return_dict_in_generate=True, output_scores=False, max_new_tokens=1024, do_sample=True, top_p=top_p, temperature=temperature, no_repeat_ngram_size=12)
  out_text = tokenizer.batch_decode(out["sequences"], skip_special_tokens=True)
  return postprocess(out_text[0])

单轮对话

input_text0 = "翻译这句话成英文:屈臣氏里的化妆品到底怎么样?"
input_text1 = "帮我写一个英文营销方案,针对iphone"
input_text2 = "写一个冒泡排序"
input_text3 = "写一个文章,题目是未来城市"
input_text4 = "写一个诗歌,关于冬天"
input_text5 = "从南京到上海的路线"
input_text6 = "学前教育专业岗位实习中,在学生方面会存在问题,请提出改进措施。800字"
input_text7 = "根据标题生成文章:标题:屈臣氏里的化妆品到底怎么样?正文:化妆品,要讲究科学运用,合理搭配。屈臣氏起码是正品连锁店。请继续后面的文字。"
input_text8 = "帮我对比几款GPU,列出详细参数对比,并且给出最终结论"
input_list = [input_text0, input_text1, input_text2, input_text3, input_text4, input_text5, input_text6, input_text7, input_text8]
for i, input_text in enumerate(input_list):
  print(f"示例{i}".center(50, "="))
  output_text = answer(input_text)
  print(f"{input_text}{output_text}")

多轮对话

history = []
while True:
    query = input("\n用户:")
    context = "\n".join(history[-5:])
    response = answer(query, context=context)
    history.append(f"用户:{query}\n小元:{response}")
    print(f"小元:{response}")

示例

input_text = ["你好","你是谁?"]
answer_text = ["您好,有什么可以帮助您的吗?", "我是元语智能公司研发的AI智能助手, 在不违反原则的情况下,我可以回答你的任何问题。"]
context = "\n".join([f"用户:{input_text[i]}\n小元:{answer_text[i]}" for i in range(len(input_text))])

input_text = "帮我写个请假条,我生病了"
print(f"示例".center(50, "="))
output_text = answer(input_text, context = context)
print(f"{context}\n用户:{input_text}\n小元:{output_text}")