10分钟掌握lm-format-enforcer:从安装到实战
10分钟掌握lm-format-enforcer:从安装到实战
【免费下载链接】lm-format-enforcerEnforce the output format (JSON Schema, Regex etc) of a language model项目地址: https://gitcode.com/gh_mirrors/lm/lm-format-enforcer
lm-format-enforcer是一款强大的工具,能够强制语言模型输出符合特定格式(如JSON Schema、正则表达式等)的内容,同时最大程度保留语言模型的生成自由度。本文将带你快速掌握从安装到实战应用的全过程,让你轻松解决语言模型输出格式不规范的问题。
为什么选择lm-format-enforcer?
在使用语言模型时,我们常常需要其输出特定格式的内容,例如JSON数据或符合某种模式的文本。然而,即使通过精心设计提示词,语言模型也未必能始终如一地生成符合要求格式的内容。lm-format-enforcer通过在每个生成步骤过滤允许的令牌,确保输出格式的准确性,同时对语言模型的限制最小化。
这款工具具有诸多优势:
- 适用于任何Python语言模型和分词器,已支持transformers、LangChain、LlamaIndex、llama.cpp、vLLM等多种集成
- 支持批量生成和 beam 搜索,每个输入或 beam 在每个时间步可以有不同的令牌过滤
- 支持JSON Schema、JSON模式(无模式)和正则表达式格式
- 允许语言模型控制JSON模式中的空格和字段顺序,减少幻觉
快速安装步骤
安装lm-format-enforcer非常简单,只需使用pip命令即可:
pip install lm-format-enforcer如果你需要从源代码安装,可以先克隆仓库:
git clone https://gitcode.com/gh_mirrors/lm/lm-format-enforcer cd lm-format-enforcer pip install .基础使用教程
下面我们通过一个简单的例子来展示如何使用lm-format-enforcer强制语言模型输出特定格式的JSON数据。
定义输出格式
首先,我们使用Pydantic定义一个数据模型,指定我们期望的输出格式:
from pydantic import BaseModel class AnswerFormat(BaseModel): first_name: str last_name: str year_of_birth: int num_seasons_in_nba: int创建解析器和前缀函数
接下来,我们创建一个JSON Schema解析器,并构建一个适用于transformers库的前缀允许令牌函数:
from lmformatenforcer import JsonSchemaParser from lmformatenforcer.integrations.transformers import build_transformers_prefix_allowed_tokens_fn # 创建JSON Schema解析器 parser = JsonSchemaParser(AnswerFormat.schema()) # 构建前缀允许令牌函数 prefix_function = build_transformers_prefix_allowed_tokens_fn(hf_pipeline.tokenizer, parser)使用管道生成文本
最后,我们使用transformers管道生成文本,并应用我们创建的前缀函数:
from transformers import pipeline # 创建transformers管道 hf_pipeline = pipeline('text-generation', model='TheBloke/Llama-2-7b-Chat-GPTQ', device_map='auto') prompt = f'Here is information about Michael Jordan in the following json schema: {AnswerFormat.schema_json()} :\n' # 调用管道生成文本 output_dict = hf_pipeline(prompt, prefix_allowed_tokens_fn=prefix_function) # 提取结果 result = output_dict[0]['generated_text'][len(prompt):] print(result) # {'first_name': 'Michael', 'last_name': 'Jordan', 'year_of_birth': 1963, 'num_seasons_in_nba': 15}高级应用:vLLM服务器集成
lm-format-enforcer还可以与vLLM推理服务器集成,通过OpenAI兼容的API使用。只需在启动vLLM服务器时添加相应的命令行参数:
python -m vllm.entrypoints.openai.api_server \ --model mistralai/Mistral-7B-Instruct-v0.2 \ --guided-decoding-backend lm-format-enforcer然后,在发送请求时添加相应的参数:
completion = client.chat.completions.create( model="mistralai/Mistral-7B-Instruct-v0.2", messages=[ {"role": "user", "content": "Classify this sentiment: LMFE is wonderful!"} ], extra_body={ "guided_regex": "[Pp]ositive|[Nn]egative", "guided_decoding_backend": "lm-format-enforcer" } )常见问题解答
lm-format-enforcer能保证输出的语义正确性吗?
lm-format-enforcer保证输出格式正确,但不保证语义正确性。强制语言模型符合特定格式可能会增加幻觉。通过提示工程引导模型仍然可能提高结果质量。
支持哪些格式约束?
目前支持JSON Schema、JSON模式(无模式)和正则表达式格式。其中,JSON Schema支持必填和可选字段,以及嵌套字段、数组和字典。
可以与哪些库集成?
lm-format-enforcer可以与transformers、LangChain、LlamaIndex、llama.cpp、vLLM、Haystack、NVIDIA TensorRT-LLM和ExLlamaV2等多种库集成。
总结
lm-format-enforcer是一款功能强大的工具,能够有效解决语言模型输出格式不规范的问题。通过本文的介绍,你已经了解了如何安装和使用这款工具,以及它的一些高级特性。无论是在研究还是生产环境中,lm-format-enforcer都能为你提供可靠的输出格式保障。
如果你想深入了解更多细节,可以查看项目的单元测试或官方文档。祝你使用愉快!
【免费下载链接】lm-format-enforcerEnforce the output format (JSON Schema, Regex etc) of a language model项目地址: https://gitcode.com/gh_mirrors/lm/lm-format-enforcer
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
