10分钟掌握lm-format-enforcer:从安装到实战

📅 2026/7/3 8:28:33 👁️ 阅读次数 📝 编程学习
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),仅供参考