guidance 是一个 Python 库,相比提示词方式或链式调用方式,可以更有效地控制和利用大型语言模型(如 GPT、BART 等)。 简单直观的语法,基于 Handlebars 模板,丰富的输出结构,具有函数调用、逻辑判断、控制流等功能,它的主要作用和优点包括:
1. ** 简单直观的语法**:使用户能够轻松编写和理解代码,提高开发效率。
2. ** 基于Handlebars模板**:Handlebars是一种流行的模板语言,允许用户在生成文本时嵌入逻辑和控制结构。
3. ** 丰富的输出结构**:支持多种数据结构的输出,如JSON,XML等,使得生成的文本可以很容易地与其他系统或应用集成。
4. ** 函数调用**:允许用户在生成文本的过程中调用自定义函数,增加了生成过程的灵活性。
5. ** 逻辑判断**:支持if-else等逻辑判断语句,使得文本生成可以根据条件进行分支处理。
6. ** 控制流**:支持循环和迭代等控制流结构,可以生成复杂的文本模式。
具体的实现办法
1. **导入`guidance`库**:
pythonimport guidance
pythonguidance.llm = guidance.llms.OpenAI("text-davinci-003")
pythonprogram = guidance("""...""")
##定义模板, 使用`guidance`函数定义了一个模板字符串。这个模板包含了Handlebars语法,用于控制文本的生成。
2. **模板内容**:
* `{{proverb}}`: 一个变量占位符,用于插入传入的谚语。
* `{{book}} {{chapter}}:{{verse}}`: 用于显示书籍、章节和经文的占位符。
* `{{gen 'rewrite' stop="\n-"}}`: 这是一个生成逻辑的占位符,用于生成文本,其中`'rewrite'`可能是一个自定义的生成函数,`stop="\n-"`指定了生成文本的结束条件。
* `{{#select 'chapter'}}...{{/or}}...{{/select}}`: 这是一个Handlebars的逻辑助记符,用于在多个选项中选择一个,这里用于选择章节号。
3. **执行模板**:
```python
pythonexecuted_program = program(
proverb="Where there is no guidance, a people falls,\nbut in an abundance of counselors there is safety.",
book="Proverbs",
chapter=11,
verse=14
)
```
通过调用之前定义的`program`函数,并传入具体的值,来执行模板。这里传入了谚语、书籍名称、章节和经文的值。
4. **生成文本**: 执行上述代码后,`executed_program`将包含根据模板和传入的值生成的文本。根据模板中的指示,生成的文本可能会修改原始谚语,以适应模型指令的上下文,并在指定的章节和经文中插入生成的文本。
## 更简单易懂的示例
可以提供一个更简单易懂的示例来展示如何在guidance库中使用模板和生成函数。在这个例子中,我们将创建一个简单的模板,用于生成一段鼓励新手摄影师的文本。
import guidance
guidance.llm = guidance.llms.OpenAI("text-davinci-003")
# 定义一个简单的模板,用于生成鼓励新手摄影师的文本
template = """
新手摄影师,不要害怕犯错。记住,每位伟大的摄影师都是从基础开始的。
{{gen 'encouragement'}}
继续探索,不断学习,你的摄影之旅才刚刚开始。
"""
# 定义一个生成函数,用于生成鼓励话语
def encouragement():
# 这里可以根据需要编写生成逻辑,例如随机选择一句鼓励话语
encouragements = [
"每一次快门的点击都是你成长的一部分。",
"不要担心设备,创意才是摄影的灵魂。",
"光线和角度可以改变一切,多尝试不同的视角。",
"摄影是发现美的眼睛,保持好奇心,去发现那些被忽略的细节。"
]
# 随机选择一句鼓励话语
import random
return random.choice(encouragements)
# 创建Guidance实例,传入模板和生成函数
program = guidance(template, functions={"encouragement": encouragement})
# 执行生成文本
executed_program = program()
# 打印生成的文本
print(executed_program)
运行输出:
新手摄影师,不要害怕犯错。记住,每位伟大的摄影师都是从基础开始的。
每一次快门的点击都是你成长的一部分。
继续探索,不断学习,你的摄影之旅才刚刚开始。