Y-Agent Studio

提示词编写指南

为了帮您更快的理解Y-Agent框架的使用方法,需要您了解以下概念。

本系统 不依赖 任何模型的 Function Calling 能力,只需要按照提示词模板填写,即可调用工具。

提示词的构成

提示词模板与系统内置提示词。

Sidebar

  • 提示词模板:在此区域,用户可以根据具体需求,自主编写指导大模型执行任务的指令。用户可以利用系统提供的各种模板格式进行填写,系统将自动识别并替换相应的内容,以实现个性化的任务处理。这一设计极大地提升了大模型节点的灵活性和用户操作的便捷性。
  • 系统内置提示词:这一部分涵盖了丰富的功能提示词,包括但不限于工具调用、选择下游流程、变量存储、React推理以及任务分身等操作。这些提示词是固定的,由系统程序预先设定,确保了流程的稳定性和可靠性,用户无法对其进行编辑。

系统模板规则

调用系统内置函数可以使用以下关键字,会自动触发提示下拉框,方便您使用:

提示词模板使用 jinja模板,更多语法参考 jinja官方文档

效果

系统函数 sys.

角色函数 role.

代码块 [空格]

常用提示词案例:

sys:

系统保留字段,集合里包含了系统默认的静态函数

获取系统时间:

  当前时间是:{{sys.time()}}

判断变量是否null或者为空

is_null_or_empty() (包括数组长度为0的情况)

{% if  sys.is_null_or_empty(变量名) %}
    变量名是null或者为空
{% else %}
    变量名不为null或者不为空
{% endif %}

space:

工作空间变量提取

  变量的值是:{{sys.space.变量名称}}

知识库文档内容获取 get_document(),根据文档多个id提取对应内容

{{sys.get_document(sys.space.ids)}}

返回的是文档的标题和内容:文本形式

chat_room:

聊天室消息提取函数

提取聊天室对话文本内容:(常用)

  {{sys.chat_room.get_talks("发送者","接收者").message}}

返回的是聊天室对话内容 ["你好","今日阳光明媚"] 提取发送者为张三的全部消息:

  {{sys.chat_room.get_talks("张三","").message}}

提取接收者为张三的第一条消息:

  {{sys.chat_room.get_talks("","张三").message.first[1]}}

提取接收者为张三的最后一条消息:

  {{sys.chat_room.get_talks("","张三").message.last[1]}}

提取聊天室对话json格式内容:(不常用)

返回聊天室中所有消息,包括发送者、接收者、消息内容、发送时间、消息id。 聊天室中消息字段:sender,receiver,message ,send_time,id

  {{sys.chat_room.get_talks("张三","").message}}

返回的聊天室消息的json格式数据:

  [{"id":"id","from_role":"发送者","to_role":"接收者","message":"消息内容","send_time""时间"}]

高级案例:

{{sys.chat_room.get_talks()}}

循环以上数据

{% for item in sys.chat_room.get_talks() %} 
{{item.from_role}}{{item.to_role}} : {{item.message}}
{% endfor %}

【其他客服的回答】:

{% if sys.chat_room.get_talks("参数客服","human")|length != 0 %}
# 另一种写法 if sys.is_null_or_empty(sys.chat_room.get_talks("参数客服","human"))
{{chat_room.get_talks("参数客服","human").message}}
{% endif %}

role:

获取 开始/input 节点 用户输入:

  {{role.input.user_input}} 

获取 开始/input 节点 自定义输入变量值:

  {{role.input.自定义输入变量名称.二级变量名称.三级变量名称}}

exist()

用于判断角色有没有输出内容,防止直接调用出错的情况

判断角色是否有输出内容,有输出内容返回true,没有输出内容返回false

{% if role.exist("知识补充员")%}
{% endif %}

提取角色内【工具】返回值的内容,格式:

{{role.角色名称.工具名称}}

注意工具返回值的类型: 知识库返回可循环的json列表,可以使用以下模板内容:

{% for doc in role.文档查询.product_retrieve  %}
{"id":"{{doc.id}}","title":"{{doc.title}}"}
{% endfor %}

知识库返回单个json对象格式:

  {"id":"xxxxxx","score":0.50,"title":"这个是知识标题","content":"知识内容markdown格式"}

如果知识库返回的文本:

  {{role.文档查询.product_retrieve}} #文档查询为角色名

提取角色特殊的输出,如果角色没有执行任何工具,仅仅输出了一段文本,可以使用以下方式提取输出的内容

  {{role.角色名称.output}}

提取角色特殊的输出,如果变量存储到了角色自身,可以使用以下格式提取

  {{role.角色名称.output.变量名称}}

其他案例

# 判断变量是否null或者为空(包括数组长度为0的情况)
{% if sys.is_null_or_empty(变量名) %}
{% if space.ids|length == 0 or space.get_document(space.ids)|length ==0 %}
{% if space.ids is empty or space.get_document(space.ids) is empty %}
{% if space.ids is not empty and space.get_document(space.ids) is not_empty %}

执行器

直接执行内部函数:

command=|<|notify(message="你好,这是自动回复,但是流程还在运行")|>|
command=|<|terminate(message="你好,这是自动回复,收到回复后流程终止运行")|>|
command=|<|write_var(ids=[{{}}])|>|
command=|<|assignment(next_roles=[{"role":"角色1","message":"消息1"},{"role":"角色2","message":"消息2"}]) |>|
command=|<|send_message(receiver="填写角色名称",message="填写消息的内容")|>|  

向用户发送消息

  • notify:给用户发送消息的函数,发送后流程继续执行:

  • terminate:给用户发送结束消息的函数,发送后流程不在继续执行未开始的节点:

notify 工具介绍:这个工具可以把答案发送给用户
notify 工具指令:command=|<|notify(message="填写回答的内容") |>|    

terminate 工具介绍:和notify工具类似,除此之外,此工具触发后,流程不再执行任何节点,等同于流程结束(已经在运行的节点,会运行到完毕)。
terminate 工具指令:command=|<|terminate(message="填写回答的内容") |>|    
  • 手动触发下游角色执行的函数,指定某个下游角色执行后续流程:
assignment 工具介绍:用于指定某个下游角色执行后续流程。
assignment 工具指令:command=|<|assignment(next_roles=[{"role":"角色1","message":"消息1"},{"role":"角色2","message":"消息2"}]) |>|  
  • 给其他角色发送消息的函数,仅向聊天室给指定用户发送了一条消息:**
send_message 工具介绍:用于向指定角色发送消息。
send_message 工具指令:command=|<| send_message(receiver="填写角色名称",message="填写消息的内容") |>|  

测试相关提示词

为了方便测试,可以使用大模型为测试结果打分,此时需要编写提示词模板,需要用到以下变量:

## 本次测试的输入内容

{{input}}

## 参考答案

{{right_answer}}

## 测试结果

{{answer}}

## 评分准则

{{test_standard}}

编辑系统内置默认提示词

修改的时候需要严格遵循默认提示词的格式,否则会导致系统报错。

ReAct推理提示词:在ReAct推理开启后可编辑

{
"prompt_step_part":"以下是推理过程:\n\n{step}\n\n",
"prompt_think_part":"第{react_times}轮推理过程:\n\n{think}\n【工具执行结果】:{return_value}\n\n",
"prompt_guide_part":"分析以上信息并进行思考,按照以下格式输出:\n【思考】:填写你的分析过程\n【工具指令】:填写你使用的工具指令,工具指令必须以\"command=|<|\"开始,以\"|>|\"结束\n",
"prompt_end_guide_part":"请停止推理查询,使用以上信息回答问题,按照以下格式输出:\n【思考】:填写你分析的问题答案\n【工具指令】:填写最终回答工具指令,工具指令必须以\"command=|<|\"开始,以\"|>|\"结束\n"
}

注意:里面的关键字,例如,prompt_step_part {step} 还有JSON格式,不要改动,否则会导致系统报错。

自动选择下游角色提示词:在 下游角色 自动选择 开启后可编辑

assignment 工具介绍:用于从“可选角色列表”中筛选出适宜的角色,进行处理下一步任务。
assignment 工具指令:command=|<|assignment(next_roles=[{"role":"填写选择的角色","message":"填写角色的任务内容"},{"role":"填写选择的角色","message":"填写角色的任务内容"}])|>|

存储变量提示词

write_var 工具介绍:用于将答案/结果/输出内容存储到特殊的位置。
write_var 工具指令:command=|<|write_var({variables_json})|>|

variables_json 是系统保留关键字,会自动渲染成需要存储的变量的json格式数据,请不要修改。

如何恢复默认提示词?

重置按钮可以恢复默认。

注意修改后的提示词,不会自动记录版本,恢复默认后只能在流程日志里找找看了。

How is this guide?

最后更新

京ICP备2025145222号-1     © Copyright 向量感知(北京)智能科技有限公司 YAFO 2025.