Skip to content

工作流

薛宏伟 edited this page Sep 24, 2024 · 5 revisions

Runnable组件

Runnable组件是对话模型、团队智能体、工具等组件的基类,实现了许多标准属性和方法。

illufly 中实现的多智能体模式大多兼容 Runnable 组件,因此可以将多种类型的组件编排到工作流中。

illufly 的理念是「组件即应用」,单智能体应用或多智能体应用都通过对组件实例的配置实现。构建好后,可以像普通的 Runnable 一样使用。

但其内部的工作流程仍然具有一定复杂性,下面详细介绍几个典型组件的内部工作流程。

单智能体工作流

在 illufly 中,对话模型自身也是一个由 tools-calling 推理机制驱动的智能体,具有支持工具调用、私域知识检索增强、记忆等能力。

下面详细拆解其实现过程:

第1步 构建一个对话智能体

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
Loading

这部分的代码示例如下:

# 创建一个工具
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)

第2步 构造短期记忆,即提示工程

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
Loading

这里的流程图解释了代码 qwen("帮我写一首关于兔子的四句儿歌") 工作时,发送给大模型提示语的组装过程,我们称之为“短期记忆”。这包括了根据提示语模板组装系统提示语、背景知识,以及对话历史(如果有的话)。

第3步 使用 tools-calling 模式推理和调度工具

graph LR
    short[[短期记忆]]
    END((最终输出))
    T(工具)
    Chat(对话模型)

Chat
    Chat ==>|回调| tools ==>|执行| T ==>|反馈| Chat
    short ==>|发送到..推理| Chat
    Chat ==>|推理结束| END
Loading

最后,将整理好的短期记忆发送给对话模型进行推理。如果模型需要调用工具,就从tools中选择合适的工具,执行后反馈给模型继续推理,直到模型认为无需调用工具,可以给出最终输出。

多智能体工作流

管道

graph LR
    INPUT((用户输入))
    Chat1(单智能体1)
    Chat2(单智能体2)
    END((最终输出))

    INPUT ==>|映射到| Chat1 ==>|映射到| Chat2 ==>|结束| END
Loading

扩写

根据提纲扩写,是一种循环执行的多智能体结构。