-
Notifications
You must be signed in to change notification settings - Fork 9
工作流
薛宏伟 edited this page Sep 24, 2024
·
5 revisions
Runnable组件是对话模型、团队智能体、工具等组件的基类,实现了许多标准属性和方法。
illufly 中实现的多智能体模式大多兼容 Runnable 组件,因此可以将多种类型的组件编排到工作流中。
illufly 的理念是「组件即应用」,单智能体应用或多智能体应用都通过对组件实例的配置实现。构建好后,可以像普通的 Runnable 一样使用。
但其内部的工作流程仍然具有一定复杂性,下面详细介绍几个典型组件的内部工作流程。
在 illufly 中,对话模型自身也是一个由 tools-calling
推理机制驱动的智能体,具有支持工具调用、私域知识检索增强、记忆等能力。
下面详细拆解其实现过程:
graph LR
I((文档导入))
E(向量模型)
V(向量库)
P(提示语模板)
Chat(对话模型)
long[[memory]]
tools[[tools]]
knowledge[[knowledge]]
I -->|由..编码| E -->|属性| V
knowledge -->|属性| Chat
V -->|元素|knowledge
tools -->|属性| Chat
P -->|元素| long -->|属性| Chat
这部分的代码示例如下:
# 创建一个工具
from illufly.chat import ChatQwen
from illufly.types import ToolAgent, Template, TextBlock
def get_current_weather(location: str):
"""获取城市的天气情况"""
yield TextBlock("chunk", f"{location}今天是晴天。 ")
## 声明对话模型
qwen = ChatQwen(
tools=[ToolAgent(get_current_weather)],
knowledge=["这里的兔子是指嫦娥的宠物兔子"],
memory=[("system", "你是一个作家")]
)
## 调用
qwen("先查询广州天气,然后结合兔子的主人,帮我写一首关于兔子的四句打油诗", verbose=False)
graph LR
INPUT((用户输入))
V(向量库)
P(提示语模板)
task[[task]]
short[[短期记忆]]
long[[memory]]
knowledge[[knowledge]]
V ==>|召回| knowledge
knowledge ==>|补充到| short
INPUT ==>|填充到| task
task ==>|检索| V
long ==>|提取历史| short
task ==>|填充| P
P ==>|构造新的| short
这里的流程图解释了代码 qwen("帮我写一首关于兔子的四句儿歌")
工作时,发送给大模型提示语的组装过程,我们称之为“短期记忆”。这包括了根据提示语模板组装系统提示语、背景知识,以及对话历史(如果有的话)。
graph LR
short[[短期记忆]]
END((最终输出))
T(工具)
Chat(对话模型)
Chat
Chat ==>|回调| tools ==>|执行| T ==>|反馈| Chat
short ==>|发送到..推理| Chat
Chat ==>|推理结束| END
最后,将整理好的短期记忆发送给对话模型进行推理。如果模型需要调用工具,就从tools中选择合适的工具,执行后反馈给模型继续推理,直到模型认为无需调用工具,可以给出最终输出。
graph LR
INPUT((用户输入))
Chat1(单智能体1)
Chat2(单智能体2)
END((最终输出))
INPUT ==>|映射到| Chat1 ==>|映射到| Chat2 ==>|结束| END
根据提纲扩写,是一种循环执行的多智能体结构。