Metadata-Version: 2.4
Name: agentscope
Version: 0.1.6
Summary: AgentScope: A Flexible yet Robust Multi-Agent Platform.
Home-page: https://github.com/modelscope/agentscope
Download-URL: https://github.com/modelscope/agentscope/archive/v0.1.6.tar.gz
Author: SysML team of Alibaba Tongyi Lab 
Author-email: gaodawei.gdw@alibaba-inc.com
License: Apache License 2.0
Keywords: deep-learning,multi agents,agents
Classifier: Development Status :: 4 - Beta
Classifier: Programming Language :: Python :: 3
Classifier: Programming Language :: Python :: 3.9
Classifier: License :: OSI Approved :: Apache Software License
Classifier: Operating System :: OS Independent
Requires-Python: >=3.9
Description-Content-Type: text/markdown
License-File: LICENSE
Requires-Dist: json5
Requires-Dist: jsonschema
Requires-Dist: networkx
Requires-Dist: black
Requires-Dist: docstring_parser
Requires-Dist: pydantic
Requires-Dist: loguru==0.6.0
Requires-Dist: tiktoken
Requires-Dist: Pillow
Requires-Dist: requests
Requires-Dist: inputimeout
Requires-Dist: numpy
Requires-Dist: flask_sqlalchemy
Requires-Dist: python-socketio
Requires-Dist: flake8
Requires-Dist: psutil
Requires-Dist: shortuuid
Requires-Dist: scipy
Requires-Dist: openai>=1.3.0
Requires-Dist: dashscope>=1.19.0
Requires-Dist: nest_asyncio
Provides-Extra: ollama
Requires-Dist: ollama>=0.1.7; extra == "ollama"
Provides-Extra: litellm
Requires-Dist: litellm==1.65; extra == "litellm"
Provides-Extra: zhipuai
Requires-Dist: zhipuai; extra == "zhipuai"
Provides-Extra: gemini
Requires-Dist: google-generativeai>=0.4.0; extra == "gemini"
Provides-Extra: anthropic
Requires-Dist: anthropic; extra == "anthropic"
Provides-Extra: service
Requires-Dist: docker; extra == "service"
Requires-Dist: pymongo; extra == "service"
Requires-Dist: pymysql; extra == "service"
Requires-Dist: bs4; extra == "service"
Requires-Dist: beautifulsoup4; extra == "service"
Requires-Dist: feedparser; extra == "service"
Requires-Dist: notebook; extra == "service"
Requires-Dist: nbclient; extra == "service"
Requires-Dist: nbformat; extra == "service"
Requires-Dist: playwright; extra == "service"
Requires-Dist: markdownify; extra == "service"
Requires-Dist: mcp<1.10.0,>=1.8.0; python_version >= "3.10" and extra == "service"
Provides-Extra: distribute
Requires-Dist: grpcio==1.60.0; extra == "distribute"
Requires-Dist: grpcio-tools==1.60.0; extra == "distribute"
Requires-Dist: protobuf==4.25.0; extra == "distribute"
Requires-Dist: expiringdict; extra == "distribute"
Requires-Dist: cloudpickle; extra == "distribute"
Requires-Dist: redis; extra == "distribute"
Provides-Extra: dev
Requires-Dist: pytest; extra == "dev"
Requires-Dist: pytest-cov; extra == "dev"
Requires-Dist: pre-commit; extra == "dev"
Requires-Dist: sphinx; extra == "dev"
Requires-Dist: sphinx-autobuild; extra == "dev"
Requires-Dist: sphinx_rtd_theme; extra == "dev"
Requires-Dist: myst-parser; extra == "dev"
Requires-Dist: sphinxcontrib-mermaid; extra == "dev"
Requires-Dist: sphinx-gallery; extra == "dev"
Requires-Dist: sphinx-autobuild; extra == "dev"
Requires-Dist: matplotlib; extra == "dev"
Requires-Dist: transformers; extra == "dev"
Provides-Extra: full
Requires-Dist: grpcio==1.60.0; extra == "full"
Requires-Dist: grpcio-tools==1.60.0; extra == "full"
Requires-Dist: protobuf==4.25.0; extra == "full"
Requires-Dist: expiringdict; extra == "full"
Requires-Dist: cloudpickle; extra == "full"
Requires-Dist: redis; extra == "full"
Requires-Dist: docker; extra == "full"
Requires-Dist: pymongo; extra == "full"
Requires-Dist: pymysql; extra == "full"
Requires-Dist: bs4; extra == "full"
Requires-Dist: beautifulsoup4; extra == "full"
Requires-Dist: feedparser; extra == "full"
Requires-Dist: notebook; extra == "full"
Requires-Dist: nbclient; extra == "full"
Requires-Dist: nbformat; extra == "full"
Requires-Dist: playwright; extra == "full"
Requires-Dist: markdownify; extra == "full"
Requires-Dist: mcp<1.10.0,>=1.8.0; python_version >= "3.10" and extra == "full"
Requires-Dist: pytest; extra == "full"
Requires-Dist: pytest-cov; extra == "full"
Requires-Dist: pre-commit; extra == "full"
Requires-Dist: sphinx; extra == "full"
Requires-Dist: sphinx-autobuild; extra == "full"
Requires-Dist: sphinx_rtd_theme; extra == "full"
Requires-Dist: myst-parser; extra == "full"
Requires-Dist: sphinxcontrib-mermaid; extra == "full"
Requires-Dist: sphinx-gallery; extra == "full"
Requires-Dist: sphinx-autobuild; extra == "full"
Requires-Dist: matplotlib; extra == "full"
Requires-Dist: transformers; extra == "full"
Requires-Dist: gradio==4.44.1; extra == "full"
Requires-Dist: modelscope_studio==0.0.5; extra == "full"
Requires-Dist: llama-index==0.10.30; extra == "full"
Requires-Dist: llama-index-retrievers-bm25==0.2.0; extra == "full"
Requires-Dist: google-generativeai>=0.4.0; extra == "full"
Requires-Dist: litellm==1.65; extra == "full"
Requires-Dist: zhipuai; extra == "full"
Requires-Dist: ollama>=0.1.7; extra == "full"
Requires-Dist: anthropic; extra == "full"
Provides-Extra: online
Requires-Dist: grpcio==1.60.0; extra == "online"
Requires-Dist: grpcio-tools==1.60.0; extra == "online"
Requires-Dist: protobuf==4.25.0; extra == "online"
Requires-Dist: expiringdict; extra == "online"
Requires-Dist: cloudpickle; extra == "online"
Requires-Dist: redis; extra == "online"
Requires-Dist: docker; extra == "online"
Requires-Dist: pymongo; extra == "online"
Requires-Dist: pymysql; extra == "online"
Requires-Dist: bs4; extra == "online"
Requires-Dist: beautifulsoup4; extra == "online"
Requires-Dist: feedparser; extra == "online"
Requires-Dist: notebook; extra == "online"
Requires-Dist: nbclient; extra == "online"
Requires-Dist: nbformat; extra == "online"
Requires-Dist: playwright; extra == "online"
Requires-Dist: markdownify; extra == "online"
Requires-Dist: mcp<1.10.0,>=1.8.0; python_version >= "3.10" and extra == "online"
Requires-Dist: pytest; extra == "online"
Requires-Dist: pytest-cov; extra == "online"
Requires-Dist: pre-commit; extra == "online"
Requires-Dist: sphinx; extra == "online"
Requires-Dist: sphinx-autobuild; extra == "online"
Requires-Dist: sphinx_rtd_theme; extra == "online"
Requires-Dist: myst-parser; extra == "online"
Requires-Dist: sphinxcontrib-mermaid; extra == "online"
Requires-Dist: sphinx-gallery; extra == "online"
Requires-Dist: sphinx-autobuild; extra == "online"
Requires-Dist: matplotlib; extra == "online"
Requires-Dist: transformers; extra == "online"
Requires-Dist: gradio==4.44.1; extra == "online"
Requires-Dist: modelscope_studio==0.0.5; extra == "online"
Requires-Dist: llama-index==0.10.30; extra == "online"
Requires-Dist: llama-index-retrievers-bm25==0.2.0; extra == "online"
Requires-Dist: google-generativeai>=0.4.0; extra == "online"
Requires-Dist: litellm==1.65; extra == "online"
Requires-Dist: zhipuai; extra == "online"
Requires-Dist: ollama>=0.1.7; extra == "online"
Requires-Dist: anthropic; extra == "online"
Requires-Dist: oss2; extra == "online"
Requires-Dist: flask_babel; extra == "online"
Requires-Dist: babel==2.15.0; extra == "online"
Requires-Dist: gunicorn; extra == "online"
Dynamic: author
Dynamic: author-email
Dynamic: classifier
Dynamic: description
Dynamic: description-content-type
Dynamic: download-url
Dynamic: home-page
Dynamic: keywords
Dynamic: license
Dynamic: license-file
Dynamic: provides-extra
Dynamic: requires-dist
Dynamic: requires-python
Dynamic: summary

[**中文主页**](https://github.com/modelscope/agentscope/blob/main/README_ZH.md) | [**日本語のホームページ**](https://github.com/modelscope/agentscope/blob/main/README_JA.md) | [**Tutorial**](https://doc.agentscope.io/) | [**Roadmap**](https://github.com/modelscope/agentscope/blob/main/docs/ROADMAP.md) | [**FAQ**](https://doc.agentscope.io/tutorial/faq.html)

<p align="center">
  <img
    src="https://img.alicdn.com/imgextra/i1/O1CN01nTg6w21NqT5qFKH1u_!!6000000001621-55-tps-550-550.svg"
    alt="AgentScope Logo"
    width="200"
  />
</p>

<h2 align="center">AgentScope: Agent-Oriented Programming for Building LLM Applications</h2>

<p align="center">
    <a href="https://arxiv.org/abs/2402.14034">
        <img
            src="https://img.shields.io/badge/cs.MA-2402.14034-B31C1C?logo=arxiv&logoColor=B31C1C"
            alt="arxiv"
        />
    </a>
    <a href="https://pypi.org/project/agentscope/">
        <img
            src="https://img.shields.io/badge/python-3.9+-blue?logo=python"
            alt="pypi"
        />
    </a>
    <a href="https://pypi.org/project/agentscope/">
        <img
            src="https://img.shields.io/badge/dynamic/json?url=https%3A%2F%2Fpypi.org%2Fpypi%2Fagentscope%2Fjson&query=%24.info.version&prefix=v&logo=pypi&label=version"
            alt="pypi"
        />
    </a>
    <a href="https://doc.agentscope.io/">
        <img
            src="https://img.shields.io/badge/Docs-English%7C%E4%B8%AD%E6%96%87-blue?logo=markdown"
            alt="docs"
        />
    </a>
    <a href="https://agentscope.io/">
        <img
            src="https://img.shields.io/badge/Drag_and_drop_UI-WorkStation-blue?logo=html5&logoColor=green&color=dark-green"
            alt="workstation"
        />
    </a>
    <a href="./LICENSE">
        <img
            src="https://img.shields.io/badge/license-Apache--2.0-black"
            alt="license"
        />
    </a>
</p>

<p align="center">
<img src="https://trendshift.io/api/badge/repositories/10079" alt="modelscope%2Fagentscope | Trendshift" style="width: 250px; height: 55px;" width="250" height="55"/>
</p>

## ✨ Why AgentScope?

Easy for beginners, powerful for experts.

- **Transparent to Developers**: Transparent is our **FIRST principle**. Prompt engineering, API invocation, agent building, workflow orchestration, all are visible and controllable for developers. No deep encapsulation or implicit magic.
- **Model Agnostic**: Programming once, run with all models. More than **17+** LLM API providers are supported.
- **LEGO-style Agent Building**: All components are **modular** and **independent**. Use them or not, your choice.
- **Multi-Agent Oriented**: Designed for **multi-agent**, **explicit** message passing and workflow orchestration, NO deep encapsulation.
- **Native Distribution/Parallelization**: Centralized programming for distributed application, and **automatic parallelization**.
- **Highly Customizable**: Tools, prompt, agent, workflow, third-party libs & visualization, customization is encouraged everywhere.
- **Developer-friendly**: Low-code development, visual tracing & monitoring. From developing to deployment, all in one place.

## 📢 News
- **[2025-07-01]** A new version AgentScope is under development. In this new version, AgentScope will be more powerful and flexible, with a new architecture and more features. Refer to our [Roadmap](https://github.com/modelscope/agentscope/blob/main/docs/ROADMAP.md) for more details!
- **[2025-04-27]** A new 💻 AgentScope Studio is online now. Refer [here](https://doc.agentscope.io/build_tutorial/visual.html) for more details.
- **[2025-03-21]** AgentScope supports hooks functions now. Refer to our [tutorial](https://doc.agentscope.io/build_tutorial/hook.html) for more details.
- **[2025-03-19]** AgentScope supports 🔧 tools API now. Refer to our [tutorial](https://doc.agentscope.io/build_tutorial/tool.html).
- **[2025-03-20]** Agentscope now supports [MCP Server](https://github.com/modelcontextprotocol/servers)! You can learn how to use it by following this [tutorial](https://doc.agentscope.io/build_tutorial/MCP.html).
- **[2025-03-05]** Our [🎓 AgentScope Copilot](applications/multisource_rag_app/README.md), a multi-source RAG application is open-source now!
- **[2025-02-24]** [🇨🇳 Chinese version tutorial](https://doc.agentscope.io/zh_CN) is online now!
- **[2025-02-13]** We have released the [📁 technical report](https://doc.agentscope.io/tutorial/swe.html) of our solution in [SWE-Bench(Verified)](https://www.swebench.com/)!
- **[2025-02-07]** 🎉🎉 AgentScope has achieved a **63.4% resolve rate** in [SWE-Bench(Verified)](https://www.swebench.com/).
- **[2025-01-04]** AgentScope supports Anthropic API now.

👉👉 [**Older News**](https://github.com/modelscope/agentscope/blob/main/docs/news_en.md)

## 💬 Contact

Welcome to join our community on

| [Discord](https://discord.gg/eYMpfnkG8h)                                                                                         | DingTalk                                                                                                                          |
|----------------------------------------------------------------------------------------------------------------------------------|-----------------------------------------------------------------------------------------------------------------------------------|
| <img src="https://gw.alicdn.com/imgextra/i1/O1CN01hhD1mu1Dd3BWVUvxN_!!6000000000238-2-tps-400-400.png" width="100" height="100"> | <img src="https://img.alicdn.com/imgextra/i1/O1CN01LxzZha1thpIN2cc2E_!!6000000005934-2-tps-497-477.png" width="100" height="100"> |


<!-- START doctoc generated TOC please keep comment here to allow auto update -->
<!-- DON'T EDIT THIS SECTION, INSTEAD RE-RUN doctoc TO UPDATE -->
## 📑 Table of Contents

- [🚀 Quickstart](#-quickstart)
  - [💻 Installation](#-installation)
    - [🛠️ From source](#-from-source)
    - [📦 From PyPi](#-from-pypi)
- [📝 Example](#-example)
  - [👋 Hello AgentScope](#-hello-agentscope)
  - [🧑‍🤝‍🧑 Multi-Agent Conversation](#-multi-agent-conversation)
  - [💡 Reasoning with Tools & MCP](#-reasoning-with-tools--mcp)
  - [🔠 Structured Output](#-structured-output)
  - [✏️ Workflow Orchestration](#-workflow-orchestration)
  - [⚡️ Distribution and Parallelization](#%EF%B8%8F-distribution-and-parallelization)
  - [👀 Tracing & Monitoring](#-tracing--monitoring)
- [⚖️ License](#-license)
- [📚 Publications](#-publications)
- [✨ Contributors](#-contributors)

<!-- END doctoc generated TOC please keep comment here to allow auto update -->

## 🚀 Quickstart

### 💻 Installation

> AgentScope requires **Python 3.9** or higher.

#### 🛠️ From source

```bash
# Pull the source code from GitHub
git clone https://github.com/modelscope/agentscope.git

# Install the package in editable mode
cd agentscope
pip install -e .
```

#### 📦 From PyPi

```bash
pip install agentscope
```

## 📝 Example

### 👋 Hello AgentScope

![](https://img.shields.io/badge/✨_Feature-Transparent-green)
![](https://img.shields.io/badge/✨_Feature-Model--Agnostic-b)

Creating a basic conversation **explicitly** between **a user** and **an assistant** with AgentScope:

```python
from agentscope.agents import DialogAgent, UserAgent
import agentscope

# Load model configs
agentscope.init(
    model_configs=[
        {
            "config_name": "my_config",
            "model_type": "dashscope_chat",
            "model_name": "qwen-max",
        }
    ]
)

# Create a dialog agent and a user agent
dialog_agent = DialogAgent(
    name="Friday",
    model_config_name="my_config",
    sys_prompt="You're a helpful assistant named Friday"
)
user_agent = UserAgent(name="user")

# Build the workflow/conversation explicitly
x = None
while x is None or x.content != "exit":
    x = dialog_agent(x)
    x = user_agent(x)
```

### 🧑‍🤝‍🧑 Multi-Agent Conversation

AgentScope is designed for **multi-agent** applications, offering flexible control over information flow and communication between agents.

![](https://img.shields.io/badge/✨_Feature-Transparent-green)
![](https://img.shields.io/badge/✨_Feature-Multi--Agent-purple)

```python
from agentscope.agents import DialogAgent
from agentscope.message import Msg
from agentscope.pipelines import sequential_pipeline
from agentscope import msghub
import agentscope

# Load model configs
agentscope.init(
    model_configs=[
        {
            "config_name": "my_config",
            "model_type": "dashscope_chat",
            "model_name": "qwen-max",
        }
    ]
)

# Create three agents
friday = DialogAgent(
    name="Friday",
    model_config_name="my_config",
    sys_prompt="You're a helpful assistant named Friday"
)

saturday = DialogAgent(
    name="Saturday",
    model_config_name="my_config",
    sys_prompt="You're a helpful assistant named Saturday"
)

sunday = DialogAgent(
    name="Sunday",
    model_config_name="my_config",
    sys_prompt="You're a helpful assistant named Sunday"
)

# Create a chatroom by msghub, where agents' messages are broadcast to all participants
with msghub(
    participants=[friday, saturday, sunday],
    announcement=Msg("user", "Counting from 1 and report one number each time without other things", "user"),  # A greeting message
) as hub:
    # Speak in sequence
    sequential_pipeline([friday, saturday, sunday], x=None)
```

### 💡 Reasoning with Tools & MCP

![](https://img.shields.io/badge/✨_Feature-Transparent-green)

Creating a reasoning agent with built-in tools and **MCP servers**!

```python
from agentscope.agents import ReActAgentV2, UserAgent
from agentscope.service import ServiceToolkit, execute_python_code
import agentscope

agentscope.init(
    model_configs={
        "config_name": "my_config",
        "model_type": "dashscope_chat",
        "model_name": "qwen-max",
    }
)

# Add tools
toolkit = ServiceToolkit()
toolkit.add(execute_python_code)

# Connect to Gaode MCP server
toolkit.add_mcp_servers(
    {
        "mcpServers": {
            "amap-amap-sse": {
            "url": "https://mcp.amap.com/sse?key={YOUR_GAODE_API_KEY}"
            }
        }
    }
)

# Create a reasoning-acting agent
agent = ReActAgentV2(
    name="Friday",
    model_config_name="my_config",
    service_toolkit=toolkit,
    sys_prompt="You're a helpful assistant named Friday."
)
user_agent = UserAgent(name="user")

# Build the workflow/conversation explicitly
x = None
while x is None or x.content != "exit":
    x = agent(x)
    x = user_agent(x)
```

### 🔠 Structured Output

![](https://img.shields.io/badge/✨_Feature-Easy--to--use-yellow)

Specifying structured output with a Pydantic base model.

```python
from agentscope.agents import ReActAgentV2
from agentscope.service import ServiceToolkit
from agentscope.message import Msg
from pydantic import BaseModel, Field
from typing import Literal
import agentscope

agentscope.init(
    model_configs={
        "config_name": "my_config",
        "model_type": "dashscope_chat",
        "model_name": "qwen-max",
    }
)

# Create a reasoning-acting agent
agent = ReActAgentV2(
    name="Friday",
    model_config_name="my_config",
    service_toolkit=ServiceToolkit(),
    max_iters=20
)

class CvModel(BaseModel):
    name: str = Field(max_length=50, description="The name")
    description: str = Field(max_length=200, description="The brief description")
    aget: int = Field(gt=0, le=120, description="The age of the person")

class ChoiceModel(BaseModel):
    choice: Literal["apple", "banana"]

# Specify structured output using `structured_model`
res_msg = agent(
    Msg("user", "Introduce Einstein", "user"),
    structured_model=CvModel
)
print(res_msg.metadata)

# Switch to different structured model
res_msg = agent(
    Msg("user", "Choice a fruit", "user"),
    structured_model=ChoiceModel
)
print(res_msg.metadata)
```

### ✏️ Workflow Orchestration

![](https://img.shields.io/badge/✨_Feature-Transparent-green)

[Routing](https://www.anthropic.com/engineering/building-effective-agents), [parallelization](https://www.anthropic.com/engineering/building-effective-agents), [orchestrator-workers](https://www.anthropic.com/engineering/building-effective-agents), or [evaluator-optimizer](https://www.anthropic.com/engineering/building-effective-agents).
Build your own workflow with AgentScope easily! Taking routing as an example:

```python
from agentscope.agents import ReActAgentV2
from agentscope.service import ServiceToolkit
from agentscope.message import Msg
from pydantic import BaseModel, Field
from typing import Literal, Union
import agentscope

agentscope.init(
    model_configs={
        "config_name": "my_config",
        "model_type": "dashscope_chat",
        "model_name": "qwen-max",
    }
)

# Workflow: Routing
routing_agent = ReActAgentV2(
    name="Routing",
    model_config_name="my_config",
    sys_prompt="You're a routing agent. Your target is to route the user query to the right follow-up task",
    service_toolkit=ServiceToolkit()
)

# Use structured output to specify the routing task
class RoutingChoice(BaseModel):
    your_choice: Literal[
        'Content Generation',
        'Programming',
        'Information Retrieval',
        None
    ] = Field(description="Choice the right follow-up task, and choice `None` if the task is too simple or no suitable task")
    task_description: Union[str, None] = Field(description="The task description", default=None)

res_msg = routing_agent(
    Msg("user", "Help me to write a poem", "user"),
    structured_model=RoutingChoice
)

# Execute the follow-up task
if res_msg.metadata["your_choice"] == "Content Generation":
    ...
elif res_msg.metadata["your_choice"] == "Programming":
    ...
elif res_msg.metadata["your_choice"] == "Information Retrieval":
    ...
else:
    ...
```

### ⚡️ Distribution and Parallelization

![](https://img.shields.io/badge/✨_Feature-Transparent-green)
![](https://img.shields.io/badge/✨_Feature-Distribution-darkblue)
![](https://img.shields.io/badge/✨_Feature-Efficiency-green)

Using `to_dist` function to run the agent in distributed mode!

```python
from agentscope.agents import DialogAgent
from agentscope.message import Msg
import agentscope

# Load model configs
agentscope.init(
    model_configs=[
        {
            "config_name": "my_config",
            "model_type": "dashscope_chat",
            "model_name": "qwen-max",
        }
    ]
)

# Using `to_dist()` to run the agent in distributed mode
agent1 = DialogAgent(
   name="Saturday",
   model_config_name="my_config"
).to_dist()

agent2 = DialogAgent(
   name="Sunday",
   model_config_name="my_config"
).to_dist()

# The two agent will run in parallel
agent1(Msg("user", "Execute task1 ...", "user"))
agent2(Msg("user", "Execute task2 ...", "user"))
```

### 👀 Tracing & Monitoring

![](https://img.shields.io/badge/✨_Feature-Visualization-8A2BE2)
![](https://img.shields.io/badge/✨_Feature-Customization-6495ED)

AgentScope provides a local visualization and monitoring tool, **AgentScope Studio**.

```bash
# Install AgentScope Studio
npm install -g @agentscope/studio
# Run AgentScope Studio
as_studio
```

```python
import agentscope

# Connect application to AgentScope Studio
agentscope.init(
  model_configs = {
    "config_name": "my_config",
    "model_type": "dashscope_chat",
    "model_name": "qwen_max",
  },
  studio_url="http://localhost:3000", # The URL of AgentScope Studio
)

# ...
```

<div align="center">
       <img
        src="https://img.alicdn.com/imgextra/i4/O1CN01eCEYvA1ueuOkien7T_!!6000000006063-1-tps-960-600.gif"
        alt="AgentScope Studio"
        width="100%"
    />
   <div align="center">AgentScope Studio, a local visualization tool</div>
</div>


## ⚖️ License

AgentScope is released under Apache License 2.0.

## 📚 Publications

If you find our work helpful for your research or application, please cite our papers.

[AgentScope: A Flexible yet Robust Multi-Agent Platform](https://arxiv.org/abs/2402.14034)

```
@article{agentscope,
    author  = {Dawei Gao and
               Zitao Li and
               Xuchen Pan and
               Weirui Kuang and
               Zhijian Ma and
               Bingchen Qian and
               Fei Wei and
               Wenhao Zhang and
               Yuexiang Xie and
               Daoyuan Chen and
               Liuyi Yao and
               Hongyi Peng and
               Ze Yu Zhang and
               Lin Zhu and
               Chen Cheng and
               Hongzhu Shi and
               Yaliang Li and
               Bolin Ding and
               Jingren Zhou}
    title   = {AgentScope: A Flexible yet Robust Multi-Agent Platform},
    journal = {CoRR},
    volume  = {abs/2402.14034},
    year    = {2024},
}
```

## ✨ Contributors

All thanks to our contributors:

<a href="https://github.com/modelscope/agentscope/graphs/contributors">
  <img src="https://contrib.rocks/image?repo=modelscope/agentscope&max=999&columns=12&anon=1" />
</a>
