跳转至

Prompt-YAML 配置化表达

通过 Agently-YAML 我们提供了一套全新的YAML语法表达方式,来帮助您更好地管理单次Agent请求,除了方便开发人员将不同模块进行解耦外,我们也希望通过这种方式,将 Agently AI应用开发框架提供的能力用一种标准化配置的方式进行跨语种表达,或是将这种表达方式提供给非开发人员使用。

如何使用

  • YAML文件/YAML文本内容:
input: ${user_input}
use_public_tools:
  - browse
set_tool_proxy: http://127.0.0.1:7890
instruct:
  输出语言: 中文
output:
  page_topic:
    $type: str
    $desc: ""
  summary:
    $type: str
    $desc: ""
  • Python文件:

    import Agently
    
    agent_factory = (
        Agently.AgentFactory()
            .set_settings("model.Google.auth.api_key", "")
            .set_settings("current_model", "Google")
    )
    
    agent = agent_factory.create_agent()
    
    print(
        agent
            .load_yaml_prompt(
                path="./yaml_prompt.yaml",
                # 你也可以用下面方式直接传递YAML格式的字符串
                #yaml=yaml_str
                variables = {
                    "user_input": "http://Agently.tech",
                }
            )
            .start()
    )
    

  • 运行结果:

    {
        "page_topic": "易用、灵活、高效的开源大模型应用开发框架",
        "summary": "Agently是一个开源的大模型应用开发框架,它可以让开发者轻松地使用大模型来构建应用程序。Agently的特点包括:\n\n* 语法简单易学,5分钟开始使用\n* 安装简单,使用pip install -U Agently即可\n* 使用灵活,可以通过几行代码指定大模型、鉴权信息等信息\n* 支持链式调用,像调用函数一样和Agent实例交互\n* 为工程开发者设计,应用开发灵活性高\n* 支持传递结构化数据灵活表达请求,管理Agent实例设定信息,提供自定义函数\n* 支持监听流式输出,使用Agently Workflow将复杂任务切分成块\n* 架构设计深度,解构了大模型驱动的Agent结构,维护了模型请求前后置信息流处理工作流等基础原子要件\n* 提供能力插件、工作流管理方案等增强开发者在应用层的表达丰富度"
    }
    

如何理解这项能力?

仔细观察上面的YAML内容,不难发现,它其实等价于使用 Agently AgenticRequest 提供的操作指令(Alias)对模型进行请求。

上面的YAML内容等价于下面的代码指令:

import Agently

agent_factory = (
    Agently.AgentFactory()
        .set_settings("model.Google.auth.api_key", "")
        .set_settings("current_model", "Google")
)

agent = agent_factory.create_agent()

user_input = "http://Agently.tech"

print(
    agent
        .input(user_input)
        .use_public_tools(["browse"])
        .set_tool_proxy("http://127.0.0.1:7890")
        .instruct({ "输出语言": "中文" })
        .output({
          "page_topic": ("str", ),
          "summary": ("str", ),
        })
        .start()
)

其中: - 变量的传递在 Agently-YAML 中通过.load_yaml_prompt()方法的variables参数传递,字典中的每一个字段被视作一个变量,在YAML中通过${变量名}的方式替换使用,如果在YAML中使用了${变量名}的表达,但是没有在variables参数中传入对应的键值,则YAML中的这个表达会被保留原样,不会被替换成实际的变量值。 - 在 Agently AgenticRequest 中,.output()使用的元组输出格式表达(如("str", "在这里输出3个单词")),在 Agently-YAML 中使用以下形式进行表达:

  $type: str
  $desc: ""

而除此之外的外部整体输出结构和YAML转化为Python Dictionary字典格式后的结构一致。