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 中使用以下形式进行表达:
而除此之外的外部整体输出结构和YAML转化为Python Dictionary字典格式后的结构一致。