大语言模型新框架guidance:AI开发的未来

【免费下载链接】guidance A guidance language for controlling large language models. 【免费下载链接】guidance 项目地址: https://gitcode.com/gh_mirrors/gu/guidance

你还在为大语言模型输出不可控而烦恼吗?还在为复杂的提示工程耗费精力吗?guidance框架的出现,彻底改变了这一局面。它不仅让AI生成内容的结构化控制变得简单,还能显著降低延迟和成本,比传统提示或微调更高效。读完本文,你将了解guidance的核心优势、安装方法、主要功能以及实际应用场景,轻松掌握这一AI开发新范式。

什么是guidance?

guidance是一种高效的大语言模型编程范式,它允许用户通过约束生成(如使用正则表达式和上下文无关文法)以及无缝交错控制(条件语句、循环、工具使用)和生成,来控制输出结构,获得高质量的结果。

guidance框架

guidance的核心理念是将语言模型的输出控制提升到编程层面,让开发者能够像编写代码一样精确地引导AI生成内容。这种方式不仅提高了输出质量,还大大降低了开发复杂度和运行成本。

安装指南

guidance可通过PyPI获取,并支持多种后端(Transformers、llama.cpp、OpenAI等)。如果你已经拥有模型所需的后端,只需运行以下命令即可安装:

pip install guidance

如果你需要从源码安装,可以克隆仓库:

git clone https://gitcode.com/gh_mirrors/gu/guidance
cd guidance
pip install .

更多安装细节和高级配置,请参考官方文档:docs/tutorials.rst

核心功能

Pythonic接口

使用guidance,你可以通过常见的Python语法与大语言模型交互:

from guidance import system, user, assistant, gen
from guidance.models import Transformers

# 加载模型
phi_lm = Transformers("microsoft/Phi-4-mini-instruct")
lm = phi_lm

with system():
    lm += "You are a helpful assistant"

with user():
    lm += "Hello. What is your name?"

with assistant():
    lm += gen(max_tokens=20)

print(lm)

在Jupyter笔记本中运行时,guidance还提供了丰富的交互组件:

guidance交互组件

这种直观的编程方式极大降低了使用门槛,让开发者可以快速上手。

输出语法约束

guidance提供了强大的语法来约束语言模型的输出。例如,可以使用正则表达式限制gen()调用的输出:

lm = phi_lm

with system():
    lm += "You are a teenager"

with user():
    lm += "How old are you?"

with assistant():
    lm += gen("lm_age", regex=r"\d+", temperature=0.8)

print(f"The language model is {lm['lm_age']} years old")

对于从已知列表中选择答案的场景,guidance提供了select()函数:

from guidance import select

lm = phi_lm

with system():
    lm += "You are a geography expert"

with user():
    lm += """What is the capital of Sweden? Answer with the correct letter.

    A) Helsinki
    B) Reykjavík 
    C) Stockholm
    D) Oslo
    """

with assistant():
    lm += select(["A", "B", "C", "D"], name="model_selection")

print(f"The model selected {lm['model_selection']}")

这些约束功能确保了AI输出的准确性和一致性,避免了传统提示工程中常见的格式错误。

自定义guidance函数

通过@guidance装饰器,你可以创建自己的guidance函数,实现复杂的逻辑和交互:

import guidance
from guidance.models import Model

ASCII_OFFSET = ord("a")

@guidance
def zero_shot_multiple_choice(
    language_model: Model,
    question: str,
    choices: list[str],
):
    with user():
        language_model += question + "\n"
        for i, choice in enumerate(choices):
            language_model += f"{chr(i+ASCII_OFFSET)} : {choice}\n"

    with assistant():
        language_model += select(
            [chr(i + ASCII_OFFSET) for i in range(len(choices))], name="string_choice"
        )

    return language_model

这种模块化的设计让代码复用和复杂逻辑构建变得简单,大大提高了开发效率。

HTML生成

guidance的上下文无关文法约束能力使其能够轻松生成结构化文档,如HTML:

@guidance(stateless=True)
def _gen_text(lm: Model):
    return lm + gen(regex="[^<>]+") 

@guidance(stateless=True)
def _gen_text_in_tag(lm: Model, tag: str):
    lm += f"<{tag}>"
    lm += _gen_text()
    lm += f"</{tag}>"
    return lm

# 更多函数定义...

@guidance(stateless=True)
def make_html(
    lm,
    name: str | None = None,
    *,
    temperature: float = 0.0,
):
    return lm + capture(
        with_temperature(_gen_html(), temperature=temperature),
        name=name,
    )

使用这些函数生成HTML时,guidance会自动进行令牌快进,跳过模型不需要生成的部分(如闭合标签),从而节省GPU资源并提高速度。

HTML生成示例

JSON生成

guidance特别支持JSON模式生成,这对于需要结构化输出的场景非常有用:

import json
from pydantic import BaseModel, Field
from guidance import json as gen_json

class BloodPressure(BaseModel):
    systolic: int = Field(gt=300, le=400)
    diastolic: int = Field(gt=0, le=20)
    location: str = Field(max_length=50)
    model_config = dict(extra="forbid")

lm = phi_lm

with system():
    lm += "You are a doctor taking a patient's blood pressure taken from their arm"

with user():
    lm += "Report the blood pressure"

with assistant():
    lm += gen_json(name="bp", schema=BloodPressure)

print(f"{lm['bp']=}")

这种方式确保生成的JSON严格符合指定的模式,避免了解析错误和数据不一致问题。

实际应用场景

guidance的应用场景非常广泛,包括但不限于:

  1. 智能问答系统:通过约束生成确保答案格式统一,便于后续处理。
  2. 代码生成:精确控制代码结构和风格,提高生成质量。
  3. 数据分析报告:自动生成结构化报告,包含图表和关键指标。
  4. 聊天机器人:实现复杂对话流程,确保交互的连贯性和可控性。
  5. 内容创作:辅助生成诗歌、故事等创意内容,同时保持特定格式。

更多实际案例和详细教程,请参考notebooks/tutorials/目录下的示例。

总结

guidance框架为大语言模型开发带来了革命性的变化,它通过强大的约束生成和流程控制能力,让AI开发变得更加高效、可靠和经济。无论是简单的问答系统还是复杂的结构化文档生成,guidance都能显著提升开发效率和输出质量。

现在就开始尝试guidance,体验AI开发的未来吧!更多详细文档和API参考,请访问docs/api_examples.rst

如果你有任何问题或建议,欢迎参与项目讨论和贡献代码,一起推动AI开发技术的进步。

【免费下载链接】guidance A guidance language for controlling large language models. 【免费下载链接】guidance 项目地址: https://gitcode.com/gh_mirrors/gu/guidance

Logo

Agent 垂直技术社区,欢迎活跃、内容共建。

更多推荐