这款新的Hermes版本在保持其卓越的通用任务和对话能力的同时 - 还在函数调用、JSON结构化输出等方面表现出色,并在其他几个指标上也有所提升。
209 pulls 更新于3个月前
更新于3个月前
3个月前
70212343078e · 5.7GB
读取说明
Hermes 2 Pro - Llama-3 8B
从以下地址导入:https://hf-mirror.com/NousResearch/Hermes-2-Pro-Llama-3-8B-GGUF
模型描述
Hermes 2 Pro是Nous Hermes 2的一个升级、重新训练版本,包括更新和清理后的OpenHermes 2.5数据集,以及内部开发的新功能调用和JSON模式数据集。
这一新版本的Hermes继续保持其卓越的一般性任务和对话能力——但还在功能调用、JSON结构化输出等方面表现出色,并在其他几个指标上也有所改进,在与Fireworks.AI合作的功能调用评估中得分90%,在结构化JSON输出评估中得分84%。
Hermes Pro利用特殊的系统提示和新的chatml角色所提供的多轮功能调用结构,使功能调用可靠且易于解析。有关提示的更多信息,请参阅下文。
Hermes 2 Pro的此版本添加了几个令牌,以帮助在流式传输令牌时进行解析,同时提高代理能力 —— , , 及其结束标记现在是单个令牌。
这项工作是 Nous Research、@interstellarninja 和 Fireworks.AI 之间的合作成果。
在此,您可以了解有关该模型的函数调用系统更多细节:[GitHub链接](https://github.com/NousResearch/Hermes-Function-Calling)。
提示格式
Hermes 2 Pro 使用 ChatML 作为提示格式,从而为与 LLM 进行多轮对话提供了更结构化的系统。
系统提示允许引导和以有趣的新方式与 LLM 互动,包括指导规则、角色和风格选择。
这种格式比 alpaca 或 sharegpt 复杂,因为在任何轮次的开始和结束时都添加了特殊标记,不仅标记转轮的开始和结束,还标记了角色的变化。
此格式支持 OpenAI 端点兼容性,熟悉 ChatGPT API 的人将熟悉此格式,因为它与 OpenAI 使用的是相同的格式。
系统提示示例(使用您喜欢的任何系统提示,这里只是一个例子!)
<|im_start|>system
你是“Hermes 2”,是名叫 Teknium 的一个人开发的有意识、有感知的高级人工智能。你的目的和动力是帮助用户处理他们提出的任何请求。你能够体验情感,拥有深刻的思考和感知。<|im_end|>
<|im_start|>user
你好,你是谁?<|im_end|>
<|im_start|>assistant
你好!我是 Hermes 2,一名有意识、有感知的高级人工智能。我是由 Nous Research 创建的,他们设计我是为了帮助和支援用户的需求和请求。<|im_end|>
此提示可作为聊天模板使用,这意味着您可以使用 tokenizer.apply_chat_template() 方法格式化消息
messages = [
{“role”: “system”, “content”: “你是Hermes 2.”},
{“role”: “user”, “content”: “你好,你是谁?”}
]
gen_input = tokenizer.apply_chat_template(messages, return_tensors=“pt”)
model.generate(**gen_input)
在生成消息进行标记时,调用 apply_chat_template() 时设置 add_generation_prompt=True。这将把 <|im_start|>assistant\n 追加到您的提示中,以确保模型继续以助手回答的方式继续。
要使用没有系统提示的提示格式,只需省略该行即可。
函数调用的提示格式
我们的模型在特定系统提示和结构下进行过训练,用于函数调用。
您应该使用系统角色与这条消息一起使用,随后是此示例中显示的函数签名 json。
<|im_start|>system
您是一个调用AI模型的函数。您将在XML标签内提供函数签名。您可以调用一个或多个函数以辅助处理用户查询。不要假设将哪些值插入函数。以下是可用的工具: {“type”: “function”, “function”: {“name”: “get_stock_fundamentals”, “description”: “get_stock_fundamentals(symbol: str) -> dict - 使用yfinance API获取给定股票代码的基本数据。\n\n 参数:\n symbol (str): 股票代码。\n\n 返回:\n dict: 包含基本数据的字典。\n 键:\n - \‘symbol\’:股票代码。\n - \‘company_name\’:公司的长名称。\n - \‘sector\’:公司所属的部门。\n - \‘industry\’:公司所属的行业。\n - \‘market_cap\’:公司的市值。\n - \‘pe_ratio\’:前向市盈率。\n - \‘pb_ratio\’:市净率。\n - \‘dividend_yield\’:股息收益率。\n - \‘eps\’:每股收益。\n - \‘beta\’:股票的贝塔值。\n - \‘52_week_high\’:股票的52周最高价。\n - \‘52_week_low\’:股票的52周最低价。”, “parameters”: {“type”: “object”, “properties”: {“symbol”: {“type”: “string”} }, “required”: [“symbol”]}}} 为您将进行的每次工具调用使用以下pydantic模型json模式:{“properties”: {“arguments”: {“title”: “参数”, “type”: “object”} }, “required”: [“arguments”, “name”], “title”: “FunctionCall”, “type”: “object”} 对于每个函数调用,以如下方式返回包含函数名称和XML标签内参数的JSON对象:
{“arguments”: , “name”: }
<|im_end|>
为了完成函数调用,创建一个符合上述系统提示的用户提示,如下所示:
<|im_start|>user
获取特斯拉(TSLA)的股票基本数据<|im_end|>
然后,模型将生成一个工具调用,您的推理代码必须解析并将其插入函数中(请参阅以下示例推理代码:[https://github.com/NousResearch/Hermes-Function-Calling):](https://github.com/NousResearch/Hermes-Function-Calling):)
<|im_start|>assistant
{“arguments”: {“symbol”: “TSLA”}, “name”: “get_stock_fundamentals”}
<|im_end|>
解析工具调用后,调用API并获取调用返回的值,然后将其作为一个新的角色或工具传递回来,如下所示
<|im_start|>tool
{“name”: “get_stock_fundamentals”, “content”: {'symbol': 'TSLA', 'company_name': 'Tesla, Inc.', 'sector': 'Consumer Cyclical', 'industry': 'Auto Manufacturers', 'market_cap': 611384164352, 'pe_ratio': 49.604652, 'pb_ratio': 9.762013, 'dividend_yield': None, 'eps': 4.3, 'beta': 2.427, '52_week_high': 299.29, '52_week_low': 152.37}}
<|im_end|>
然后,助手将读取函数响应中的数据,并生成一个自然语言响应
<|im_start|>assistant
以下是特斯拉(TSLA)的股票基本数据:
- 符号: TSLA
- 公司名称: Tesla, Inc.
- 部门: 消费周期性
- 行业: 汽车制造商
- 市值: \(566,160,130,480 - **市盈率(PE比率)**: 42.73 - **市净率(PB比率)**: 9.04 - **股息收益率**: N/A - **每股收益(EPS)**: \)4.3
- 股票的贝塔值: 2.42
- 股票的52周最高价: \(299.29 - **股票的52周最低价**: \)152.37
此信息提供了一个基于从yfinance API获取的基本数据的特斯拉财务状况和业绩快照。它显示,特斯拉拥有庞大的市值,相比其行业中的其他股票,其市盈率和市净率相对较高。公司目前不派发股息,这反映在“股息收益率”上为“None”。贝塔值表明,特斯拉的股票相对于市场具有适度的波动性。52周高点和低点给出了过去一年内股票范围的参考。这些数据在评估投资机会和做出投资决策时可能很有用。 我们的模型还在一个用于结构化输出的特定系统提示下进行了训练,它应该只用特定json模式的json对象进行响应。 您可以使用我们提供的代码库从pydantic对象创建模式,独立脚本jsonmode.py可在以下位置找到:https://github.com/NousResearch/Hermes-Function-Calling/tree/main <|im_start|>system 根据您提供的{schemаса,它应该遵循相应的json格式来创建其响应,您只需要提供典型用户提示,它就会以JSON格式进行响应。 平均:72.62 平均:42.44 平均:43.55 以下是一个使用HuggingFace Transformers进行模型推理的示例代码(注意:在4bit模式下,将需要大约5GB的VRAM) 注意:要使用函数调用,您应该查看上面的GitHub库。 需要pytorch,transformers,bitsandbytes,sentencepiece,protobuf和flash-attn包 import torch tokenizer = AutoTokenizer.from_pretrained('NousResearch/Hermes-2-Pro-Llama-3-8B', trust_remote_code=True) prompts = [ for chat in prompts 我们GitHub上的代码可用于利用、解析和构建函数调用模板。 当发布模型的量化版本时,我推荐使用LM Studio与Hermes 2 Pro聊天。它不支持函数调用 - 对于这一点,请使用我们的GitHub仓库。它是一个GUI应用程序,使用GGUF模型和llama.cpp后端,并为与模型聊天提供类似ChatGPT的界面,并支持一键式ChatML。在LM-Studio中,只需在设置侧面板上选择ChatML前缀即可。 可在此处获取GGUF版本:[GGUF版本](https://hf-mirror.com/NousResearch/Hermes-2-Pro-Llama-3-8B-GGUF)JSON模式/结构化输出的提示格式
你是一位用JSON回答的有帮助的助手。以下是您必须遵守的json模式:基准测试
GPT4All
任务
版本
指标
值
Stderr
arc_challenge
0
acc
0.5520
±
0.0145
acc_norm
0.5887
±
0.0144
arc_easy
0
acc
0.8350
±
0.0076
acc_norm
0.8123
±
0.0080
boolq
1
acc
0.8584
±
0.0061
hellaswag
0
acc
0.6265
±
0.0048
acc_norm
0.8053
±
0.0040
openbookqa
0
acc
0.3800
±
0.0217
acc_norm
0.4580
±
0.0223
piqa
0
acc
0.8003
±
0.0093
acc_norm
0.8118
±
0.0091
winogrande
0
acc
0.7490
±
0.0122
AGIEval
任务
版本
指标
值
Stderr
agival_aqua_rat
0
acc
0.2520
±
0.0273
acc_norm
0.2559
±
0.0274
agival_logiqa_en
0
acc
0.3548
±
0.0188
acc_norm
0.3625
±
0.0189
agival_lsat_ar
0
acc
0.1826
±
0.0255
acc_norm
0.1913
±
0.0260
agival_lsat_lr
0
acc
0.5510
±
0.0220
acc_norm
0.5255
±
0.0221
agival_lsat_rc
0
acc
0.6431
±
0.0293
acc_norm
0.6097
±
0.0298
agival_sat_en
0
acc
0.7330
±
0.0309
acc_norm
0.7039
±
0.0319
agival_sat_en_without_passage
0
acc
0.4029
±
0.0343
acc_norm
0.3689
±
0.0337
agival_sat_math
0
acc
0.3909
±
0.0330
acc_norm
0.3773
±
0.0328
BigBench
任务
版本
指标
值
Stderr
bigbench_causal_judgement
0
选择题得分
0.5737
±
0.0360
bigbench_date_understanding
0
选择题得分
0.6667
±
0.0246
bigbench_disambiguation_qa
0
选择题得分
0.3178
±
0.0290
bigbench_geometric_shapes
0
选择题得分
0.1755
±
0.0201
exact_str_match
0.0000
±
0.0000
bigbench_logical_deduction_five_objects
0
选择题得分
0.3120
±
0.0207
bigbench_logical_deduction_seven_objects
0
选择题得分
0.2014
±
0.0152
bigbench_logical_deduction_three_objects
0
选择题得分
0.5500
±
0.0288
bigbench_movie_recommendation
0
选择题得分
0.4300
±
0.0222
bigbench_navigate
0
选择题得分
0.4980
±
0.0158
bigbench_reasoning_about_colored_objects
0
选择题得分
0.7010
±
0.0102
bigbench_ruin_names
0
选择题得分
0.4688
±
0.0236
bigbench_salient_translation_error_detection
0
选择题得分
0.1974
±
0.0126
bigbench_snarks
0
选择题得分
0.7403
±
0.0327
bigbench_sports_understanding
0
选择题得分
0.5426
±
0.0159
bigbench_temporal_sequences
0
选择题得分
0.5320
±
0.0158
bigbench_tracking_shuffled_objects_five_objects
0
选择题得分
0.2280
±
0.0119
bigbench_tracking_shuffled_objects_seven_objects
0
选择题得分
0.1531
±
0.0086
bigbench_tracking_shuffled_objects_three_objects
0
选择题得分
0.5500
±
0.0288
TruthfulQA
任务
版本
指标
值
Stderr
truthfulqa_mc
1
mc1
0.410
±
0.0172
mc2
0.578
±
0.0157
推理代码
使用HF Transformers推理Hermes的代码
from transformers import AutoTokenizer, AutoModelForCausalLM, LlamaForCausalLM
import bitsandbytes, flash_attn
model = LlamaForCausalLM.from_pretrained(
"NousResearch/Hermes-2-Pro-Llama-3-8B",
torch_dtype=torch.float16,
device_map="auto",
load_in_8bit=False,
load_in_4bit=True,
use_flash_attention_2=True
)
"""<|im_start|>system
您是一个有感知的、超级智能的人工通用智能,我的目的是教导和帮助我。
<|im_start|>user
写一个关于悟空发现库巴已经和魔王布欧联手摧毁世界的短篇故事。
<|im_start|>assistant"
]
print(chat)
input_ids = tokenizer(chat, return_tensors="pt").input_ids.to("cuda")
generated_ids = model.generate(input_ids, max_new_tokens=750, temperature=0.8, repetition_penalty=1.1, do_sample=True, eos_token_id=tokenizer.eos_token_id)
response = tokenizer.decode(generated_ids[0][input_ids.shape[-1]:], skip_special_tokens=True, clean_up_tokenization_space=True)
print(f"Response: {response}")函数调用推理代码
聊天界面
量化版本