Lemur:开放式语言代理基础模型
Lemur是一个公开可访问的语言模型,针对自然语言和编码能力进行了优化,可作为多功能语言代理的基础。 随着语言模型从对话聊天机器人发展为能够在现实世界中采取行动的功能性代理,它们需要强大的语言理解能力和执行操作的能力。Lemur平衡了自然语言和编码技能,使代理能够遵循指令、推理任务并采取有根据的行动。
请参阅我们的论文和代码以获取更多详细信息:
🔥 新闻
- [2023年10月18日]: 🎉 我们开源了OpenAgents的代码:一个用于现实世界语言代理的开放平台。
- [2023年10月11日]: 🎉 我们发布了研究论文和代码库。我们将继续更新这个仓库。
- [2023年8月23日]: 🎉 我们发布了
OpenLemur/lemur-70b-v1
和OpenLemur/lemur-70b-chat-v1
的权重!请在HuggingFace Hub查看。
模型
我们在HuggingFace Hub上发布了我们的模型:
目录
为什么选择Lemur?
大多数现有的开源模型专注于自然语言或代码。Lemur通过以下方式结合了两者的优势:
- 在90B token语料库上预训练Llama-2-70B,代码与文本比例为10:1,得到Lemur-70B-v1
- 在涵盖文本和代码的300K示例上对Lemur-70B-v1进行指令微调,得到Lemur-70B-Chat-v1
这种两阶段训练在各种语言和编码基准测试中产生了最先进的平均性能,超过了其他可用的开源模型,并缩小了开源模型与商业模型在代理能力方面的差距。
快速开始
设置
首先,我们必须安装requirements.txt
中列出的所有库
conda create -n xchat python=3.10
conda activate xchat
conda install pytorch==2.0.1 pytorch-cuda=11.8 -c pytorch -c nvidia
conda install -c "nvidia/label/cuda-11.8.0" cuda-nvcc
然后,安装xchat包:
git clone git@github.com:OpenLemur/Lemur.git
cd Lemur
pip install -e .
Lemur-70B
对于基础模型lemur-70b-v1,你可以这样使用:
点击我
from transformers import AutoTokenizer, AutoModelForCausalLM
tokenizer = AutoTokenizer.from_pretrained("OpenLemur/lemur-70b-v1")
model = AutoModelForCausalLM.from_pretrained("OpenLemur/lemur-70b-v1", device_map="auto", load_in_8bit=True)
# 文本生成示例
prompt = "The world is "
input = tokenizer(prompt, return_tensors="pt")
output = model.generate(**input, max_length=50, num_return_sequences=1)
generated_text = tokenizer.decode(output[0], skip_special_tokens=True)
print(generated_text)
# 代码生成示例
prompt = """
def factorial(n):
if n == 0:
return 1
"""
input = tokenizer(prompt, return_tensors="pt")
output = model.generate(**input, max_length=200, num_return_sequences=1)
generated_code = tokenizer.decode(output[0], skip_special_tokens=True)
print(generated_code)
Lemur-70B-Chat
我们使用ChatML格式对lemur-70b-v1模型进行指令微调,得到lemur-70b-chat-v1。你可以这样使用lemur-70b-chat-v1:
点击我
from transformers import AutoTokenizer, AutoModelForCausalLM
tokenizer = AutoTokenizer.from_pretrained("OpenLemur/lemur-70b-chat-v1")
model = AutoModelForCausalLM.from_pretrained("OpenLemur/lemur-70b-chat-v1", device_map="auto", load_in_8bit=True)
# 文本生成示例
prompt = """<|im_start|>system
你是一个乐于助人、尊重他人且诚实的助手。
<|im_end|>
<|im_start|>user
狐猴最喜欢的水果是什么?<|im_end|>
<|im_start|>assistant
"""
input = tokenizer(prompt, return_tensors="pt")
output = model.generate(**input, max_length=50, num_return_sequences=1)
generated_text = tokenizer.decode(output[0], skip_special_tokens=True)
print(generated_text)
# 代码生成示例
prompt = """<|im_start|>system
以下是描述一个任务的指令。请编写一个恰当完成该请求的回应。
<|im_end|>
<|im_start|>user
编写一个Python函数,将两个已排序的列表合并成一个排序列表,不使用任何内置排序函数。<|im_end|>
<|im_start|>assistant
"""
input = tokenizer(prompt, return_tensors="pt")
output = model.generate(**input, max_length=200, num_return_sequences=1)
generated_code = tokenizer.decode(output[0], skip_special_tokens=True)
print(generated_code)
训练
评估
我们在以下方面对Lemur进行了评估:
- 8个语言和代码数据集,如MMLU、BBH、GSM8K、HumanEval和Spider,以验证平衡的能力
- 13个交互式代理数据集,用于测试工具使用、适应环境或人类反馈以及探索部分可观察的数字或物理环境等技能。
基础能力
我们基于open-instruct构建评估套件。我们将持续更新更多任务和模型。
目前,我们支持以下任务:
交互式代理技能
我们使用MINT、InterCode和WebArena提供的评估框架来评估交互式代理技能。
部署
我们使用vLLM来提供Lemur模型服务。然而,官方FastChat代码库尚未支持Lemur-Chat。因此,我们提供了一个Docker来为Lemur提供vLLM服务。请参考vllm_lemur.sh以获取更详细的信息。
bash scripts/deploy/vllm_lemur.sh
MINT
我们fork了MINT代码库以共享我们使用的配置。请参考此配置文件夹以获取更多详细信息。请使用vllm_lemur.sh
脚本运行vllm。
WebArena
我们fork了WebArena代码库以启用vLLM评估。要在WebArena上运行评估,请参考我们fork的WebArena代码库。
InterCode
我们fork了InterCode代码库并进行了修改以启用Lemur评估。请参考此脚本文件夹以获取更多详细信息。请使用tgi_lemur.sh
脚本运行text-generation-inference
。
引用
如果您发现我们的工作有帮助,请引用我们:
@misc{xu2023lemur,
title={Lemur: Harmonizing Natural Language and Code for Language Agents},
author={Yiheng Xu and Hongjin Su and Chen Xing and Boyu Mi and Qian Liu and Weijia Shi and Binyuan Hui and Fan Zhou and Yitao Liu and Tianbao Xie and Zhoujun Cheng and Siheng Zhao and Lingpeng Kong and Bailin Wang and Caiming Xiong and Tao Yu},
year={2023},
eprint={2310.06830},
archivePrefix={arXiv},
primaryClass={cs.CL}
}
致谢
Lemur项目是XLang Lab和Salesforce Research之间的开放合作研究努力。我们感谢以下机构的支持: