Skip to content

AdditionalInfoPrompt 附加信息提示

介绍

AdditionalInfoPrompt 是一个基于用户输出的结构化的附加信息生成对应提示模板的类。

在TFRobot整个生命周期中,所有的消息(包括用户/系统/LLM/Tool)均使用同一数据基类,其中包含了一个 additional_info 字段,用于存储用户输出的结构化信息。AdditionalInfoPrompt 会根据这个字段的内容,动态生成提示模板,用于向 LLM 发送内容。关于消息结构的定义参考消息基类

Notes:

需要注意,在LLM的调用过程中,如果Chain明确约束了output_schema,则LLM的返回会在通过output_schema的校验后,以其对应的数据结构同步更新到user_input的additional_info中去。

使用方法

from tfrobot.brain.chain.prompt.additional_info_prompt import AdditionalInfoPrompt
from tfrobot.brain.chain.prompt.template.f_string_template import FStrPromptTemplate
from tfrobot.schema.brain.chain.prompt.context_vars import (
    PromptContext,
    UserInput,
)
from tfrobot.schema.types import Locale

template = FStrPromptTemplate(templates={Locale.DEFAULT: "Hello, {additional_info}"})
prompt = AdditionalInfoPrompt(template=template)
assert prompt.template.params_schema == {
    "properties": {
        "additional_info": {
            "anyOf": [{"type": "object"}, {"type": "null"}],
            "title": "Additional Info",
        }
    },
    "required": ["additional_info"],
    "title": "A",
    "type": "object",
}
user_input = UserInput(input="Hello, World", additional_info={"name": "JQQ"})
assert prompt.format_2_str(PromptContext(user_input=user_input)) == "Hello, {'name': 'JQQ'}"

如果FStrPromptTemplate无法满足需求,可以使用Jinja2PromptTemplate,在AdditionalInfoPrompt中,两种模板均被支持。

配置参数

参数 类型 说明 默认值
template BasePromptTemplate 提示模板,用于生成提示语句。
tips Optional[str] 引导用户或者大模型填写当前模板所需信息的引导提示。但需要注意,这个引导会在适当的时机提示给用户或者大模型,但对方不一定保证填写,也不保证填充错误。所以模板需要处理好用户不填或者填错的情况。故而:
要求尽量简单,最好不要有嵌套的复杂结构。
做好为空的判断与兼容,可以配合always_render参数进行工作。
None
always_render bool 是否总是渲染提示语句,即使没有填写提示信息。如果为False,当提示信息为空时,不会渲染提示语句。 False