AI知识库

53AI知识库

学习大模型的前沿技术与行业应用场景


AgentScope:可视化的多 Agent 平台
发布日期:2024-06-21 03:23:41 浏览次数: 1867


AgentScope 旨在帮助开发人员轻松、可靠、高性能地构建多智能体应用程序。该平台具有三种高级功能:

  • • 易于使用:采用纯 Python 编程,具有各种预构建的组件可立即使用,适合具有不同级别定制要求的开发人员或用户。

  • • 高稳健性:支持定制的容错控制和重试机制,增强应用程序的稳定性。

  • • 基于参与者的分布:使开发人员能够以集中式编程的方式构建分布式多代理应用程序,从而简化开发。

项目地址:https://github.com/modelscope/agentscope[1]

下面看一下 AgentScope 工作站的预览图:

AgentScope 核心概念

我们先来了解 AgentScope 的核心概念。

消息

消息 是 AgentScope 中通信的单位,是不同 Agent 之间进行信息交换的载体。

消息是 Python 中的字典对象,使用起来很简单,下属代码定义了两个消息:

from agentscope.message import Msg

message_from_alice = Msg("Alice""Hi!")

message_from_bob = Msg("Bob""What about this picture I took?", url="/path/to/picture.jpg")

智能体(代理)

智能体是系统中的活动实体,他负责负责处理信息做出决策采取行动

AgentScope 通过两个主要功能定义其行为:

回复:将消息作为输入并生成相应的响应,推动对话流程。观察:处理传入消息而不生成直接回复,允许代理被动收集信息并做出相应的反应。

下面展示如何定义智能体:

dialogAgent = DialogAgent(name="assistant", model_config_name="gpt-4", sys_prompt="You are a helpful ai assistant")
userAgent = UserAgent()

智能体对话

智能体对话很简单,只需要把消息传入智能体,函数返回值就是智能体的回答。

result = dialogAgent(message_from_alice)

下面展示两个智能体持续对话,用户输出 exit 退出:

x = None
while True:
    x = dialogAgent(x)
    x = userAgent(x)

    # 如果用户输入"exit",则终止对话
    if x.content == "exit":
        print("Exiting the conversation.")
        break

记忆 Memory

记忆(memory)用于存储历史消息,从而使智能体能够根据上下文提供更加连贯,更加自然的响应。

TemporaryMemory 是 AgentScope 一个基于内存的Memory实现,

工具(服务)

工具是智能体连接现实世界的通道,也称之为服务函数(Service Function)。

服务函数(Service function)是可以增强智能体能力工具,例如执行Python代码、网络搜索、 文件操作等。

AgentScope 内置了很多函数,通过 agentscope.service.{函数名} 可以快速调用。

创建新的函数

虽然内置的工具函数已经足够满足很多需求,但是免不了希望贴合自身业务来创建自定义工具函数。

AgentScope 提供了创建函数的功能,新的Service函数必须满足以下要求才能被正常使用:

  • • 具有格式化的函数说明(推荐Google风格),以便ServiceToolkit提取函数说明。

  • • 函数名称应该是自解释的,这样智能体可以理解函数并正确使用它。

  • • 在定义函数时应提供参数的类型(例如def func(a: int, b: str, c: bool)),以便大模型 能够给出类型正确的参数。

看一个示例:


def create_file(file_path: str, content: str = "") -> ServiceResponse:
    """
    创建文件并向其中写入内容。

    Args:
        file_path (str): 将要创建文件的路径。
        content (str): 要写入文件的内容。

    Returns:
        ServiceResponse: 其中布尔值指示成功与否,字符串包含任何错误消息(如果有),包括错误类型。
    """

    # ... [为简洁起见省略代码]

工作流(Pipeline)

但是对复杂应用来说,细致的描绘每一次信息交流对开发者来说是非常困难的。Pipeline 主要用于简化「描述消息传播」的编程工作。

Agent Scope Studio

AgentScope Studio 是一个开源的 Web UI 工具包,用于构建和监控多智能体应用程序。它提供以下功能:

  • • Dashboard:一个用户友好的界面,可以在其中监视正在运行的应用程序,并查看运行历史。

  • • Workstation:一个强大的界面,可通过拖拽的方式构建多智能体应用程序。

  • • Gallery:即将推出!

  • • Server Management:即将推出!

下面我们看一下如何运行 Studio。我直接在 Colab 上运行,速度更快一些,大家本地运行的的时候会更简单。

本地运行

先安装:

pip install agentscope --pre

然后执行下面 Python 代码,访问浏览器即可:

import agentscope

agentscope.studio.init()

Colab 运行

Colab 运行复杂一点,我这里单独讲一下。

仍然是先安装 agentscope 依赖:

!pip install --ignore-installed  agentscope --pre

获取 外网地址,有下面两种方法:

!pip install ipwhois

from ipwhois import IPWhois
from requests import get

ip = get('https://api.ipify.org').text
whois = IPWhois(ip).lookup_rdap(depth=1)
cidr = whois['network']['cidr']
name = whois['network']['name']

print('\n')
print('Provider:  ', name)
print('Public IP: ', ip)
print('CIDRs:     ', cidr)

# or
!curl https://loca.lt/mytunnelpassword

生成执行脚本,

!echo "import agentscope" > run.py
!echo  >> run.py
!echo "agentscope.studio.init()" >> run.py
!cat run.py

运行程序:

!python run.py & npx localtunnel --port 5000

访问即可看到如下界面:

打开工作站可以看到 示例工作流和具体的编辑画布

对话流程

打开对话 这个例子,填入必要的 ak,

你可以从工具栏里面投入你需要的元素,

当然也可以修改模板中的内容,比如两个智能体的提示语:

点击运行,可以看到运行成功的提示:

我们现在进入 Dashboard 页面,可以看到我们的程序已经运行了:

点击程序,默认打开程序的对话页面,我们随便问个问题:

由于这个流程很简单,就是和大模型对话没啥特别的。

多人对话

现在我们运行一个多人聊天的程序,

大致的流程如下:

再次来到聊天界面,我的身份是 King,先给大家放个假:

Boyu 竟然说英文,朕很生气,拖出去斩了:

话说,自己肯定不适合搞格局,上朝要是如此,我真的是能烦死。

对了,运行程序前,我们可以初始化自己的模型配置,这样就不用再到界面上维护大模型的配置了。

import agentscope
from agentscope.agents import DialogAgent
from agentscope.agents import UserAgent
from agentscope.pipelines.functional import sequentialpipeline

agentscope.init(
    model_configs=[
        {
            "model_type""gemini_chat",
            "config_name""gemini-pro",
            "model_name""gemini-pro",
            "api_key""xxx",  # Load from env if not provided
            "organization""xxxyyy",  # Load from env if not provided
            "generate_args": {
                "temperature"0.5,
            },
        },
        {
            "model_type""post_api_chat",
            "config_name""my_post_api",
            "api_url""https://xxx",
            "headers": {},
        },
    ],
)

RAG 智能体

RAG 智能体是可以基于检索到的知识生成答案的智能体。

可以在 Agent 初始化的时候传入一个 knowledge 的列表:

knowledge = knowledge_bank.get_knowledge(knowledge_id)
agent = LlamaIndexAgent(
    name="rag_worker",
    sys_prompt="{your_prompt}",
    model_config_name="{your_model}",
    knowledge_list=[knowledge], # provide knowledge object directly
    similarity_top_k=3,
    log_retrieval=False,
    recent_n_mem_for_retrieve=1,
)

Knowledge bank 构建也很简单,比如读取 ./doc/tutorial 目录下的所有 「.md」 文件作为知识库:

knowledge_bank.add_data_as_knowledge(
      knowledge_id="agentscope_tutorial_rag",
      emb_model_name="qwen_emb_config",
      data_dirs_and_types={
          "./docs/tutorial": [".md"],
      },
  )

而 Knowledge Bank 是一组 Knowledge 的组合,Knowledge 包含以下关键属性:

  • • knowledge_id: 每个knowledge模块的唯一标识符;

  • • emb_model_config_name: embedding模型的名称;

  • • chunk_size: 对文件分块的默认大小;

  • • chunk_overlap: 文件分块之间的默认重叠大小;

  • • data_processing: 一个list型的数据处理方法集合。

最后,知识模块目前只支持 LlamaIndex, 后续会提供对 LangChain 的支持。


--- END ---



53AI,企业落地应用大模型首选服务商

产品:大模型应用平台+智能体定制开发+落地咨询服务

承诺:先做场景POC验证,看到效果再签署服务协议。零风险落地应用大模型,已交付160+中大型企业

联系我们

售前咨询
186 6662 7370
预约演示
185 8882 0121

微信扫码

与创始人交个朋友

回到顶部

 
扫码咨询