Home
Softono
a

agentscope-ai

Professional software vendor delivering innovative solutions on the Softono platform. Specialized in both open-source and proprietary software development.

Total Products
6

Software by agentscope-ai

agentscope
Open Source

agentscope

<p align="center"> <img src="https://img.alicdn.com/imgextra/i1/O1CN01nTg6w21NqT5qFKH1u_!!6000000001621-55-tps-550-550.svg" alt="AgentScope Logo" width="200" /> </p> <span align="center"> [**中文主页**](https://github.com/agentscope-ai/agentscope/blob/main/README_zh.md) | [**Documentation**](https://docs.agentscope.io/) | [**Roadmap**](https://github.com/orgs/agentscope-ai/projects/2/views/1) </span> <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.11+-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://discord.gg/eYMpfnkG8h"> <img src="https://img.shields.io/badge/Discord-Join%20Us-5865F2?logo=discord&logoColor=white" alt="discord" /> </a> <a href="https://docs.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="./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/20310" alt="agentscope-ai%2Fagentscope | Trendshift" style="width: 250px; height: 55px;" width="250" height="55"/> </p> ## What is AgentScope 2.0? AgentScope 2.0 is a production-ready, easy-to-use agent framework with essential abstractions that work with rising model capability and built-in support for . - [**Event System** →](https://docs.agentscope.io/v2/building-blocks/message-and-event) A unified event bus to the frontend and human-in-the-loop support. - [**Permission System** →](https://docs.agentscope.io/v2/building-blocks/permission-system) Fine-grained, configurable control over tools and resources. - [**Multi-tenancy & Multi-session Service** →](https://docs.agentscope.io/v2/deploy/agent-service) Production-grade serving with isolation across tenants and sessions. - [**Workspace / Sandbox Support** →](https://docs.agentscope.io/v2/building-blocks/workspace) Run tools and code in isolated environments, with built-in backends for local, Docker, and E2B. - [**Extensible Middleware System** →](https://docs.agentscope.io/v2/building-blocks/middleware) Composable hooks to customize and extend the agent's reasoning-acting loop. We design for increasingly agentic LLMs. Our approach leverages the models' reasoning and tool use abilities rather than constraining them with strict prompts and opinionated orchestrations. <img src="assets/images/agentscope.png" alt="agentscope" width="100%"/> ## News <!-- BEGIN NEWS --> - **[2026-06] `FEAT`:** Agent Team supported. [Example](https://github.com/agentscope-ai/agentscope/tree/main/examples/agent_service) | [Docs](https://docs.agentscope.io/v2/deploy/agent-team) - **[2026-05] `RELS`:** AgentScope 2.0 released! [Docs](https://docs.agentscope.io/) <!-- END NEWS --> [More news →](./docs/NEWS.md) ## Community 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="./assets/images/dingtalk_qr_code.png" width="100" height="100"> | ## Quickstart ### Installation > AgentScope requires **Python 3.11** or higher. #### From PyPI ```bash uv pip install agentscope # or # pip install agentscope ``` #### From source ```bash # Pull the source code from GitHub git clone -b main https://github.com/agentscope-ai/agentscope.git # Install the package in editable mode cd agentscope uv pip install -e . # or # pip install -e . ``` ## Hello AgentScope! Start your first agent with AgentScope 2.0: ```python from agentscope.agent import Agent from agentscope.tool import Toolkit, Bash, Grep, Glob, Read, Write, Edit from agentscope.credential import DashScopeCredential from agentscope.model import DashScopeChatModel from agentscope.message import UserMsg from agentscope.event import EventType import os, asyncio async def main() -> None: agent = Agent( name="Friday", system_prompt="You're a helpful assistant named Friday.", model=DashScopeChatModel( credential=DashScopeCredential( api_key=os.environ["DASHSCOPE_API_KEY"] ), model="qwen3.6-plus", ), toolkit=Toolkit( tools=[ Bash(), Grep(), Glob(), Read(), Write(), Edit(), ] ), ) async for evt in agent.reply_stream(UserMsg("Tony", "Hi, Friday!")): # Handle the event stream, e.g., print the message, update UI, etc. match evt.type: case EventType.REPLY_START: ... case EventType.MODEL_CALL_START: ... case EventType.TEXT_BLOCK_START: ... case EventType.TEXT_BLOCK_DELTA: ... case EventType.TEXT_BLOCK_END: ... # Handle other event types asyncio.run(main()) ``` ## Hello Agent Service! An extensible FastAPI based **multi-tenancy**, **multi-session** agent service with pre-built Web UI in `examples/web_ui` <table> <tr> <td align="center"> <img src="assets/images/team.gif" alt="Agent team" width="100%"/> <br/> <sub><b>Agent team</b> — a leader agent spawns workers and coordinates them through the built-in team tools.</sub> </td> </tr> <tr> <td align="center"> <img src="assets/images/task.gif" alt="Task planning" width="100%"/> <br/> <sub><b>Task planning</b> — the agent breaks complex work into a tracked plan and updates it as it goes.</sub> </td> </tr> <tr> <td align="center"> <img src="assets/images/permission_bypass.gif" alt="Permission control in bypass mode" width="100%"/> <br/> <sub><b>Permission control in bypass mode</b> — the agent runs end-to-end without pausing for tool-call confirmations.</sub> </td> </tr> <tr> <td align="center"> <img src="assets/images/bg_tool.gif" alt="Background task offloading" width="100%"/> <br/> <sub><b>Background task offloading</b> — a long-running tool moves to the background; its result later wakes the agent up and the conversation resumes.</sub> </td> </tr> </table> Run the following commands to start the agent service backend and the web UI: ```bash git clone -b main https://github.com/agentscope-ai/agentscope.git cd agentscope/examples/agent_service # start the agent service backend python main.py ``` Then open another terminal to start the web UI: ```bash cd agentscope/examples/web_ui # start the webui pnpm install pnpm dev ``` ## Contributing We welcome contributions from the community! Please refer to our [CONTRIBUTING.md](./CONTRIBUTING.md) for guidelines on how to contribute. ## 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 1.0: A Developer-Centric Framework for Building Agentic Applications](https://arxiv.org/abs/2508.16279) - [AgentScope: A Flexible yet Robust Multi-Agent Platform](https://arxiv.org/abs/2402.14034) ``` @article{agentscope_v1, author = {Dawei Gao, Zitao Li, Yuexiang Xie, Weirui Kuang, Liuyi Yao, Bingchen Qian, Zhijian Ma, Yue Cui, Haohao Luo, Shen Li, Lu Yi, Yi Yu, Shiqi He, Zhiling Luo, Wenmeng Zhou, Zhicheng Zhang, Xuguang He, Ziqian Chen, Weikai Liao, Farruh Isakulovich Kushnazarov, Yaliang Li, Bolin Ding, Jingren Zhou} title = {AgentScope 1.0: A Developer-Centric Framework for Building Agentic Applications}, journal = {CoRR}, volume = {abs/2508.16279}, year = {2025}, } @article{agentscope, author = {Dawei Gao, Zitao Li, Xuchen Pan, Weirui Kuang, Zhijian Ma, Bingchen Qian, Fei Wei, Wenhao Zhang, Yuexiang Xie, Daoyuan Chen, Liuyi Yao, Hongyi Peng, Zeyu Zhang, Lin Zhu, Chen Cheng, Hongzhu Shi, Yaliang Li, Bolin Ding, 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/agentscope-ai/agentscope/graphs/contributors"> <img src="https://contrib.rocks/image?repo=agentscope-ai/agentscope&max=999&columns=12&anon=1" /> </a>

AI Agents
26.6K Github Stars
agentscope-java
Open Source

agentscope-java

<p align="center"> <img src="https://img.alicdn.com/imgextra/i1/O1CN01nTg6w21NqT5qFKH1u_!!6000000001621-55-tps-550-550.svg" alt="AgentScope Logo" width="200" /> </p> <h3 align="center">Build Production-Ready AI Agents in Java</h3> <p align="center"> <a href="https://java.agentscope.io/">📖 Documentation</a> &nbsp;|&nbsp; <a href="README_zh.md">中文</a> &nbsp;|&nbsp; <a href="https://discord.gg/eYMpfnkG8h">Discord</a> </p> <p align="center"> <img src="https://img.shields.io/badge/license-Apache--2.0-blue" alt="License" /> <img src="https://img.shields.io/badge/JDK-17%2B-orange" alt="JDK 17+" /> <img src="https://img.shields.io/maven-central/v/io.agentscope/agentscope?color=green" alt="Maven Central" /> <a href="https://deepwiki.com/agentscope-ai/agentscope-java"><img src="https://deepwiki.com/badge.svg" alt="Ask DeepWiki"></a> </p> --- AgentScope Java is an agent-oriented programming framework for building LLM-powered applications. It provides everything you need to create intelligent agents: ReAct reasoning, tool calling, memory management, multi-agent collaboration, and more. ## Highlights ### 🎯 Smart Agents, Full Control AgentScope adopts the ReAct (Reasoning-Acting) paradigm, enabling agents to autonomously plan and execute complex tasks. Unlike rigid workflow-based approaches, ReAct agents dynamically decide which tools to use and when, adapting to changing requirements in real-time. However, autonomy without control is a liability in production. AgentScope provides comprehensive runtime intervention mechanisms: - **Safe Interruption** - Pause agent execution at any point while preserving full context and tool state, enabling seamless resumption without data loss - **Graceful Cancellation** - Terminate long-running or unresponsive tool calls without corrupting agent state, allowing immediate recovery and redirection - **Human-in-the-Loop** - Inject corrections, additional context, or guidance at any reasoning step through the Hook system, maintaining human oversight over critical decisions ### 🛠️ Built-in Tools AgentScope includes production-ready tools that address common challenges in agent development: - **PlanNotebook** - A structured task management system that decomposes complex objectives into ordered, trackable steps. Agents can create, modify, pause, and resume multiple concurrent plans, ensuring systematic execution of multi-step workflows. - **Structured Output** - A self-correcting output parser that guarantees type-safe responses. When LLM output deviates from the expected format, the system automatically detects errors and guides the model to produce valid output, mapping results directly to Java POJOs without manual parsing. - **Long-term Memory** - Persistent memory storage with semantic search capabilities across sessions. Supports automatic management, agent-controlled recording, or hybrid modes. Enables multi-tenant isolation for enterprise deployments where agents serve multiple users independently. - **RAG (Retrieval-Augmented Generation)** - Seamless integration with enterprise knowledge bases. Supports both self-hosted embedding-based retrieval and managed services like Alibaba Cloud Bailian, grounding agent responses in authoritative data sources. ### 🔌 Seamless Integration AgentScope is designed to integrate with existing enterprise infrastructure without requiring extensive modifications: - **MCP Protocol** - Integrate with any MCP-compatible server to instantly extend agent capabilities. Connect to the growing ecosystem of MCP tools and services—from file systems and databases to web browsers and code interpreters—without writing custom integration code. - **A2A Protocol** - Enable distributed multi-agent collaboration through standard service discovery. Register agent capabilities to Nacos or similar registries, allowing agents to discover and invoke each other as naturally as calling microservices. ### 🚀 Production Grade Built for enterprise deployment requirements: - **High Performance** - Reactive architecture based on Project Reactor ensures non-blocking execution. GraalVM native image compilation achieves 200ms cold start times, making AgentScope suitable for serverless and auto-scaling environments. - **Security Sandbox** - AgentScope Runtime provides isolated execution environments for untrusted tool code. Includes pre-built sandboxes for GUI automation, file system operations, and mobile device interaction, preventing unauthorized access to system resources. - **Observability** - Native integration with OpenTelemetry for distributed tracing across the entire agent execution pipeline. AgentScope Studio provides visual debugging, real-time monitoring, and comprehensive logging for development and production environments. ## Quick Start **Requirements:** JDK 17+ ```xml <dependency> <groupId>io.agentscope</groupId> <artifactId>agentscope</artifactId> <version>1.0.12</version> </dependency> ``` ```java ReActAgent agent = ReActAgent.builder() .name("Assistant") .sysPrompt("You are a helpful AI assistant.") .model(DashScopeChatModel.builder() .apiKey(System.getenv("DASHSCOPE_API_KEY")) .modelName("qwen-max") .build()) .build(); Msg response = agent.call(Msg.builder() .textContent("Hello!") .build()).block(); System.out.println(response.getTextContent()); ``` For more examples, see the [documentation](https://java.agentscope.io/). ## Contributing We welcome contributions! Please see [CONTRIBUTING.md](./CONTRIBUTING.md) for guidelines. ## Community | [Discord](https://discord.gg/eYMpfnkG8h) | DingTalk | WeChat | |--------------------------------------------------------------|----------| ---------| | <img src="./docs/imgs/discord.png" width="100" height="100"> | <img src="./docs/imgs/dingtalk_qr_code.jpg" width="100" height="100"> | <img src="./docs/imgs/wechat.png" width="100" height="100"> | ## License Apache License 2.0 - see [LICENSE](./LICENSE) for details. ## Publications If you find AgentScope helpful, please cite our papers: - [AgentScope 1.0: A Developer-Centric Framework for Building Agentic Applications](https://arxiv.org/abs/2508.16279) - [AgentScope: A Flexible yet Robust Multi-Agent Platform](https://arxiv.org/abs/2402.14034) ## Contributors <a href="https://github.com/agentscope-ai/agentscope-java/graphs/contributors"> <img src="https://contrib.rocks/image?repo=agentscope-ai/agentscope-java&max=999&columns=12&anon=1" /> </a>

AI Tools AI Agents
3.7K Github Stars
OpenJudge
Open Source

OpenJudge

<div align="center"> <img src="./docs/images/logo.svg" alt="Open-Judge Logo" width="500"> <br/> <h3> <em>Holistic Evaluation, Quality Rewards: Driving Application Excellence</em> </h3> <p> 🌟 <em>If you find OpenJudge helpful, please give us a <b>Star</b>!</em> 🌟 </p> [![Python 3.10+](https://img.shields.io/badge/python-3.10+-blue?logo=python)](https://pypi.org/project/py-openjudge/) [![PyPI](https://img.shields.io/badge/pypi-v0.2.0-blue?logo=pypi)](https://pypi.org/project/py-openjudge/) [![Documentation](https://img.shields.io/badge/docs-online-blue?logo=readthedocs&logoColor=white)](https://agentscope-ai.github.io/OpenJudge/) [![Website](https://img.shields.io/badge/website-openjudge.me-blue?logo=googlechrome&logoColor=white)](https://openjudge.me/) [![Try Online](https://img.shields.io/badge/try%20online-free-brightgreen?logo=rocket&logoColor=white)](https://openjudge.me/app/) [🌐 Website](https://openjudge.me/) | [🚀 Try Online](https://openjudge.me/app/) | [📖 Documentation](https://agentscope-ai.github.io/OpenJudge/) | [🤝 Contributing](https://agentscope-ai.github.io/OpenJudge/community/contributing/) | [中文](./README_zh.md) </div> OpenJudge is an **open-source evaluation framework** for **AI applications** (e.g., AI agents or chatbots) designed to **evaluate quality** and drive **continuous application optimization**. > In practice, application excellence depends on a trustworthy evaluation workflow: Collect test data → Define graders → Run evaluation at scale → Analyze weaknesses → Iterate quickly. OpenJudge provides **ready-to-use graders** and supports generating **scenario-specific rubrics (as graders)**, making this workflow **simpler**, **more professional**, and **easy to integrate** into your workflow. It can also convert grading results into **reward signals** to help you **fine-tune** and optimize your application. > **🚀 Try it now!** Visit [openjudge.me/app](https://openjudge.me/app/) to use graders online — no installation required. Test built-in graders, build custom rubrics, and explore evaluation results directly in your browser. --- ## 📑 Table of Contents - [Key Features](#-key-features) - [News](#news) - [Online Playground](#-online-playground) - [Installation](#-installation) - [Quickstart](#-quickstart) - [Integrations](#-integrations) - [Contributing](#-contributing) - [Community](#-community) - [Citation](#-citation) --- ## News - **2026-04-07** - 🔒 **Skill Graders** - 5 new LLM-based graders for evaluating AI Agent Skill packages: threat analysis (AITech taxonomy), declaration alignment, completeness, relevance, and design quality. 👉 [Documentation](./docs/built_in_graders/skills.md) | [Cookbook](./cookbooks/skills_evaluation/README.md) - **2026-03-10** - 🛠️ **New Skills** - Claude authenticity verification, find skills combo, and more. 👉 [Browse Skills](https://openjudge.me/skills) - **2026-02-12** - 📚 **Reference Hallucination Arena** - Benchmark for evaluating LLM academic reference hallucination. 👉 [Documentation](./docs/validating_graders/ref_hallucination_arena.md) | 📊 [Leaderboard](https://openjudge.me/leaderboard) - **2026-01-27** - 🆕 **Paper Review** - Automatically review academic papers using LLM-powered evaluation. 👉 [Documentation](https://agentscope-ai.github.io/OpenJudge/applications/paper_review/) - **2026-01-27** - 🖥️ **OpenJudge UI** - A Streamlit-based visual interface for grader testing and Auto Arena. 👉 [Try Online](https://openjudge.me/app/) | Run locally: `streamlit run ui/app.py` --- ## ✨ Key Features ### 📦 Systematic & Quality-Assured Grader Library Access **50+ production-ready graders** featuring a comprehensive taxonomy, rigorously validated for reliable performance. <table> <tr> <td width="33%" valign="top"> #### 🎯 General **Focus:** Semantic quality, functional correctness, structural compliance **Key Graders:** - `Relevance` - Semantic relevance scoring - `Similarity` - Text similarity measurement - `Syntax Check` - Code syntax validation - `JSON Match` - Structure compliance </td> <td width="33%" valign="top"> #### 🤖 Agent **Focus:** Agent lifecycle, tool calling, memory, plan feasibility, trajectory quality **Key Graders:** - `Tool Selection` - Tool choice accuracy - `Memory` - Context preservation - `Plan` - Strategy feasibility - `Trajectory` - Path optimization </td> <td width="33%" valign="top"> #### 🖼️ Multimodal **Focus:** Image-text coherence, visual generation quality, image helpfulness **Key Graders:** - `Image Coherence` - Visual-text alignment - `Text-to-Image` - Generation quality - `Image Helpfulness` - Image contribution </td> </tr> </table> - 🌐 **Multi-Scenario Coverage:** Extensive support for diverse domains including Agent, text, code, math, and multimodal tasks. 👉 [Explore Supported Scenarios](https://agentscope-ai.github.io/OpenJudge/built_in_graders/overview/) - 🔄 **Holistic Agent Evaluation:** Beyond final outcomes, we assess the entire lifecycle—including trajectories, Memory, Reflection, and Tool Use. 👉 [Agent Lifecycle Evaluation](https://agentscope-ai.github.io/OpenJudge/built_in_graders/agent_graders/) - ✅ **Quality Assurance:** Every grader comes with benchmark datasets and pytest integration for validation. 👉 [View Benchmark Datasets](https://huggingface.co/datasets/agentscope-ai/OpenJudge) ### 🛠️ Flexible Grader Building Methods Choose the build method that fits your requirements: * **Customization:** Clear requirements, but no existing grader? If you have explicit rules or logic, use our Python interfaces or Prompt templates to quickly define your own grader. 👉 [Custom Grader Development Guide](https://agentscope-ai.github.io/OpenJudge/building_graders/create_custom_graders/) * **Zero-shot Rubrics Generation:** Not sure what criteria to use, and no labeled data yet? Just provide a task description and optional sample queries—the LLM will automatically generate evaluation rubrics for you. Ideal for rapid prototyping when you want to get started immediately. 👉 [Zero-shot Rubrics Generation Guide](https://agentscope-ai.github.io/OpenJudge/building_graders/generate_rubrics_as_graders/#simple-rubric-zero-shot-generation) * **Data-driven Rubrics Generation:** Ambiguous requirements, but have few examples? Use the GraderGenerator to automatically summarize evaluation Rubrics from your annotated data, and generate a llm-based grader. 👉 [Data-driven Rubrics Generation Guide](https://agentscope-ai.github.io/OpenJudge/building_graders/generate_rubrics_as_graders/#iterative-rubric-data-driven-generation) * **Training Judge Models:** Massive data and need peak performance? Use our training pipeline to train a dedicated Judge Model. This is ideal for complex scenarios where prompt-based grading falls short.👉 [Train Judge Models](https://agentscope-ai.github.io/OpenJudge/building_graders/training_judge_models/) ### 🔌 Easy Integration Using mainstream observability platforms like **LangSmith** or **Langfuse**? We offer seamless integration to enhance their evaluators and automated evaluation capabilities. We also provide integrations with training frameworks like **VERL** for RL training. 👉 See [Integrations](#-integrations) for details ### 🌐 Online Playground Explore OpenJudge without writing a single line of code. Our online platform at [openjudge.me/app](https://openjudge.me/app/) lets you: - **Test graders interactively** — select a built-in grader, input your data, and see results instantly - **Build custom rubrics** — use the zero-shot generator to create graders from task descriptions - **View leaderboards** — compare model performance across evaluation benchmarks at [openjudge.me/leaderboard](https://openjudge.me/leaderboard) --- ## 📥 Installation > 💡 **Don't want to install anything?** [Try OpenJudge online](https://openjudge.me/app/) — use graders directly in your browser, no setup needed. ```bash pip install py-openjudge ``` > 💡 More installation methods can be found in the [Quickstart Guide](https://agentscope-ai.github.io/OpenJudge/get_started/quickstart/#installation). --- ## 🚀 Quickstart > 📚 Complete Quickstart can be found in the [Quickstart Guide](https://agentscope-ai.github.io/OpenJudge/get_started/quickstart/). ### Simple Example A simple example to evaluate a single response: ```python import asyncio from openjudge.models import OpenAIChatModel from openjudge.graders.common.relevance import RelevanceGrader async def main(): # 1️⃣ Create model client model = OpenAIChatModel(model="qwen3-32b") # 2️⃣ Initialize grader grader = RelevanceGrader(model=model) # 3️⃣ Prepare data data = { "query": "What is machine learning?", "response": "Machine learning is a subset of AI that enables computers to learn from data.", } # 4️⃣ Evaluate result = await grader.aevaluate(**data) print(f"Score: {result.score}") # Score: 4 print(f"Reason: {result.reason}") if __name__ == "__main__": asyncio.run(main()) ``` ### Evaluate LLM Applications with Built-in Graders Use multiple built-in graders to comprehensively evaluate your LLM application: 👉 [Explore All built-in graders](https://agentscope-ai.github.io/OpenJudge/built_in_graders/overview/) > **Business Scenario:** Evaluating an e-commerce customer service agent that handles order inquiries. We assess the agent's performance across three dimensions: **relevance**, **hallucination**, and **tool selection**. ```python import asyncio from openjudge.models import OpenAIChatModel from openjudge.graders.common import RelevanceGrader, HallucinationGrader from openjudge.graders.agent.tool.tool_selection import ToolSelectionGrader from openjudge.runner import GradingRunner from openjudge.runner.aggregator import WeightedSumAggregator from openjudge.analyzer.statistical import DistributionAnalyzer TOOL_DEFINITIONS = [ {"name": "query_order", "description": "Query order status and logistics information", "parameters": {"order_id": "str"}}, {"name": "query_logistics", "description": "Query detailed logistics tracking", "parameters": {"order_id": "str"}}, {"name": "estimate_delivery", "description": "Estimate delivery time", "parameters": {"order_id": "str"}}, ] # Prepare your dataset dataset = [{ "query": "Where is my order ORD123456?", "response": "Your order ORD123456 has arrived at the Beijing distribution center and is expected to arrive tomorrow.", "context": "Order ORD123456: Arrived at Beijing distribution center, expected to arrive tomorrow.", "tool_definitions": TOOL_DEFINITIONS, "tool_calls": [{"name": "query_order", "arguments": {"order_id": "ORD123456"}}], # ... more test cases }] async def main(): # 1️⃣ Initialize judge model model = OpenAIChatModel(model="qwen3-max") # 2️⃣ Configure multiple graders grader_configs = { "relevance": {"grader": RelevanceGrader(model=model), "mapper": {"query": "query", "response": "response"}}, "hallucination": {"grader": HallucinationGrader(model=model), "mapper": {"query": "query", "response": "response", "context": "context"}}, "tool_selection": {"grader": ToolSelectionGrader(model=model), "mapper": {"query": "query", "tool_definitions": "tool_definitions", "tool_calls": "tool_calls"}}, } # 3️⃣ Set up aggregator for overall score aggregator = WeightedSumAggregator(name="overall_score", weights={"relevance": 0.3, "hallucination": 0.4, "tool_selection": 0.3}) # 4️⃣ Run evaluation results = await GradingRunner(grader_configs=grader_configs, aggregators=[aggregator], max_concurrency=5).arun(dataset) # 5️⃣ Generate evaluation report overall_stats = DistributionAnalyzer().analyze(dataset, results["overall_score"]) print(f"{'Overall Score':<20} | {overall_stats.mean:>15.2f}") if __name__ == "__main__": asyncio.run(main()) ``` ### Build Custom Graders for Your Scenario #### Zero-shot Rubric Generation Generate a custom grader from task description without labeled data: 👉 [Zero-shot Rubrics Generation Guide](https://agentscope-ai.github.io/OpenJudge/building_graders/generate_rubrics_as_graders/#simple-rubric-zero-shot-generation) **When to use:** Quick prototyping when you have no labeled data but can clearly describe your task. ```python import asyncio from openjudge.generator.simple_rubric import SimpleRubricsGenerator, SimpleRubricsGeneratorConfig from openjudge.models import OpenAIChatModel async def main(): # 1️⃣ Configure generator config = SimpleRubricsGeneratorConfig( grader_name="customer_service_grader", model=OpenAIChatModel(model="qwen3-max"), task_description="E-commerce AI customer service primarily handles order inquiry tasks (such as logistics status and ETA) while focusing on managing customer emotions.", min_score=1, max_score=3, ) # 2️⃣ Generate grader generator = SimpleRubricsGenerator(config) grader = await generator.generate(dataset=[], sample_queries=[]) # 3️⃣ View generated rubrics print("Generated Rubrics:", grader.kwargs.get("rubrics")) # 4️⃣ Use the grader result = await grader.aevaluate( query="My order is delayed, what should I do?", response="I understand your concern. Let me check your order status..." ) print(f"\nScore: {result.score}/3\nReason: {result.reason}") if __name__ == "__main__": asyncio.run(main()) ``` #### Data-driven Rubric Generation Learn evaluation criteria from labeled examples: 👉 [Data-driven Rubrics Generation Guide](https://agentscope-ai.github.io/OpenJudge/building_graders/generate_rubrics_as_graders/#iterative-rubric-data-driven-generation) **When to use:** You have labeled data and need high-accuracy graders for production use, especially when evaluation criteria are implicit. ```python import asyncio from openjudge.generator.iterative_rubric.generator import IterativeRubricsGenerator, IterativePointwiseRubricsGeneratorConfig from openjudge.models import OpenAIChatModel from openjudge.models.schema.prompt_template import LanguageEnum # Prepare labeled dataset (simplified example, recommend 10+ samples in practice) labeled_dataset = [ {"query": "My order hasn't arrived after 10 days, I want to complain!", "response": "I sincerely apologize for the delay. I completely understand your frustration! Your order was delayed due to weather conditions, but it has now resumed shipping and is expected to arrive tomorrow. I've marked it for priority delivery.", "label_score": 5}, {"query": "Where is my package? I need it urgently!", "response": "I understand your urgency! Your package is currently out for delivery and is expected to arrive before 2 PM today. The delivery driver's contact number is 138xxxx.", "label_score": 5}, {"query": "Why hasn't my order arrived yet? I've been waiting for days!", "response": "Your order is expected to arrive the day after tomorrow.", "label_score": 2}, {"query": "The logistics hasn't updated in 3 days, is it lost?", "response": "Hello, your package is not lost. It's still in transit, please wait patiently.", "label_score": 3}, # ... more labeled examples ] async def main(): # 1️⃣ Configure generator config = IterativePointwiseRubricsGeneratorConfig( grader_name="customer_service_grader_v2", model=OpenAIChatModel(model="qwen3-max"), min_score=1, max_score=5, enable_categorization=True, categories_number=5, # Enable categorization, Aggregate into 5 themes ) # 2️⃣ Generate grader from labeled data generator = IterativeRubricsGenerator(config) grader = await generator.generate(labeled_dataset) # 3️⃣ View learned rubrics print("\nLearned Rubrics from Labeled Data:\n",grader.kwargs.get("rubrics", "No rubrics generated")) # 4️⃣ Evaluate new samples test_cases = [ {"query": "My order hasn't moved in 5 days, can you check? I'm a bit worried", "response": "I understand your concern! Let me check immediately: Your package is currently at XX distribution center. Due to recent high order volume, there's a slight delay, but it's expected to arrive the day after tomorrow. I'll proactively contact you if there are any issues."}, {"query": "Why is this delivery so slow? I'm waiting to use it!", "response": "Checking, please wait."}, ] print("\n" + "=" * 70, "\nEvaluation Results:\n", "=" * 70) for i, case in enumerate(test_cases): result = await grader.aevaluate(query=case["query"], response=case["response"]) print(f"\n[Test {i+1}]\n Query: {case['query']}\n Response: {case['response']}\n Score: {result.score}/5\n Reason: {result.reason[:200]}...") if __name__ == "__main__": asyncio.run(main()) ``` --- ## 🔗 Integrations Seamlessly connect OpenJudge with mainstream observability and training platforms: | Category | Platform | Status | Documentation | |:---------|:---------|:------:|:--------------| | **Observability** | [LangSmith](https://smith.langchain.com/) | ✅ Available | 👉 [LangSmith Integration Guide](https://agentscope-ai.github.io/OpenJudge/integrations/langsmith/) | | | [Langfuse](https://langfuse.com/) | ✅ Available | 👉 [Langfuse Integration Guide](https://agentscope-ai.github.io/OpenJudge/integrations/langfuse/) | | | Other frameworks | 🔵 Planned | — | | **Training** | [verl](https://github.com/volcengine/verl) | ✅ Available | 👉 [VERL Integration Guide](https://agentscope-ai.github.io/OpenJudge/integrations/verl/) | | | [Trinity-RFT](https://github.com/modelscope/Trinity-RFT) | 🔵 Planned | — | > 💬 Have a framework you'd like us to prioritize? [Open an Issue](https://github.com/agentscope-ai/OpenJudge/issues)! --- ## 🤝 Contributing We love your input! We want to make contributing to OpenJudge as easy and transparent as possible. > **🎨 Adding New Graders** — Have domain-specific evaluation logic? Share it with the community! > **🐛 Reporting Bugs** — Found a glitch? Help us fix it by [opening an issue](https://github.com/agentscope-ai/OpenJudge/issues) > **📝 Improving Docs** — Clearer explanations or better examples are always welcome > **💡 Proposing Features** — Have ideas for new integrations? Let's discuss! 📖 See full [Contributing Guidelines](https://agentscope-ai.github.io/OpenJudge/community/contributing/) for coding standards and PR process. --- ## 💬 Community Join our DingTalk group to connect with the community: <div align="center"> <img src="./docs/images/dingtalk_qr_code.png" alt="DingTalk QR Code" width="200"> </div> --- ## Migration Guide (v0.1.x → v0.2.0) > OpenJudge was previously distributed as the legacy package `rm-gallery` (v0.1.x). Starting from v0.2.0, it is published as `py-openjudge` and the Python import namespace is `openjudge`. **OpenJudge v0.2.0 is NOT backward compatible with v0.1.x.** If you are currently using v0.1.x, choose one of the following paths: - **Stay on v0.1.x (legacy)**: keep using the old package ```bash pip install rm-gallery ``` We preserved the source code of **v0.1.7 (the latest v0.1.x release)** in the [`v0.1.7-legacy` branch](https://github.com/agentscope-ai/OpenJudge/tree/v0.1.7-legacy). - **Migrate to v0.2.0 (recommended)**: follow the **[Installation](#-installation)** section above, then walk through **[Quickstart](#-quickstart)** (or the full [Quickstart Guide](https://agentscope-ai.github.io/OpenJudge/get_started/quickstart/)) to update your imports / usage. If you run into migration issues, please [open an issue](https://github.com/agentscope-ai/OpenJudge/issues) with your minimal repro and current version. --- ## 📄 Citation If you use OpenJudge in your research, please cite: ```bibtex @software{ title = {OpenJudge: A Unified Framework for Holistic Evaluation and Quality Rewards}, author = {The OpenJudge Team}, url = {https://github.com/agentscope-ai/OpenJudge}, month = {07}, year = {2025} } ``` --- <div align="center"> **Made with ❤️ by the OpenJudge Team** [🌐 Website](https://openjudge.me/) · [🚀 Try Online](https://openjudge.me/app/) · [⭐ Star Us](https://github.com/agentscope-ai/OpenJudge) · [🐛 Report Bug](https://github.com/agentscope-ai/OpenJudge/issues) · [💡 Request Feature](https://github.com/agentscope-ai/OpenJudge/issues) </div>

AI Agents Testing & QA
650 Github Stars
ReMe
Open Source

ReMe

<p align="center"> <img src="docs/_static/figure/reme_logo.png" alt="ReMe Logo" width="50%"> </p> <p align="center"> <a href="https://pypi.org/project/reme-ai/"><img src="https://img.shields.io/badge/python-3.10+-blue" alt="Python Version"></a> <a href="https://pypi.org/project/reme-ai/"><img src="https://img.shields.io/pypi/v/reme-ai.svg?logo=pypi" alt="PyPI Version"></a> <a href="https://pepy.tech/project/reme-ai/"><img src="https://img.shields.io/pypi/dm/reme-ai" alt="PyPI Downloads"></a> <a href="https://github.com/agentscope-ai/ReMe"><img src="https://img.shields.io/github/commit-activity/m/agentscope-ai/ReMe?style=flat-square" alt="GitHub commit activity"></a> </p> <p align="center"> <a href="./LICENSE"><img src="https://img.shields.io/badge/license-Apache--2.0-black" alt="License"></a> <a href="./README.md"><img src="https://img.shields.io/badge/English-Click-yellow" alt="English"></a> <a href="./README_ZH.md"><img src="https://img.shields.io/badge/简体中文-点击查看-orange" alt="简体中文"></a> <a href="https://github.com/agentscope-ai/ReMe"><img src="https://img.shields.io/github/stars/agentscope-ai/ReMe?style=social" alt="GitHub Stars"></a> <a href="https://deepwiki.com/agentscope-ai/ReMe"><img src="https://img.shields.io/badge/DeepWiki-Ask_Devin-navy.svg" alt="DeepWiki"></a> </p> <p align="center"> <a href="https://trendshift.io/repositories/20528" target="_blank"><img src="https://trendshift.io/api/badge/repositories/20528" alt="agentscope-ai%2FReMe | Trendshift" style="width: 250px; height: 55px;" width="250" height="55"/></a> </p> <p align="center"> <strong>A memory management toolkit for AI agents — Remember Me, Refine Me.</strong><br> </p> > For the older version, please refer to the [0.2.x documentation](docs/README_0_2_x.md). --- ## 📰 Latest Articles | Date | Title | |------------|-----------------------------------------------------------------| | 2026-03-30 | [Context Management Design](docs/copaw_context_design.md) | --- 🧠 ReMe is a memory management framework designed for **AI agents**, providing both [file-based](#-file-based-memory-system-remelight) and [vector-based](#-vector-based-memory-system) memory systems. It tackles two core problems of agent memory: **limited context window** (early information is truncated or lost in long conversations) and **stateless sessions** (new sessions cannot inherit history and always start from scratch). ReMe gives agents **real memory** — old conversations are automatically compacted, important information is persistently stored, and relevant context is automatically recalled in future interactions. ReMe achieves state-of-the-art results on the LoCoMo and HaluMem benchmarks; see the [Experimental results](#experimental-results). <details> <summary><b>What you can do with ReMe</b></summary> <br> - **Personal assistant**: Provide long-term memory for agents like [QwenPaw](https://github.com/agentscope-ai/CoPaw), remembering user preferences and conversation history. - **Coding assistant**: Record code style preferences and project context, maintaining a consistent development experience across sessions. - **Customer service bot**: Track user issue history and preference settings for personalized service. - **Task automation**: Learn success/failure patterns from historical tasks to continuously optimize execution strategies. - **Knowledge Q&A**: Build a searchable knowledge base with semantic search and exact matching support. - **Multi-turn dialogue**: Automatically compress long conversations while retaining key information within limited context windows. </details> --- ## 📁 File-based memory system (ReMeLight) > Memory as files, files as memory. Treat **memory as files** — readable, editable, and copyable. [QwenPaw](https://github.com/agentscope-ai/CoPaw) integrates long-term memory and context management by inheriting from `ReMeLight`. | Traditional memory system | File-based ReMe | |---------------------------|----------------------| | 🗄️ Database storage | 📝 Markdown files | | 🔒 Opaque | 👀 Always readable | | ❌ Hard to modify | ✏️ Directly editable | | 🚫 Hard to migrate | 📦 Copy to migrate | ``` working_dir/ ├── MEMORY.md # Long-term memory: persistent info such as user preferences ├── memory/ │ └── YYYY-MM-DD.md # Daily journal: automatically written after each conversation ├── dialog/ # Raw conversation records: full dialog before compression │ └── YYYY-MM-DD.jsonl # Daily conversation messages in JSONL format └── tool_result/ # Cache for long tool outputs (auto-managed, expired entries auto-cleaned) └── <uuid>.txt ``` ### Core capabilities [ReMeLight](reme/reme_light.py) is the core class of the file-based memory system. It provides full memory management capabilities for AI agents: <table> <tr><th>Category</th><th>Method</th><th>Function</th><th>Key components</th></tr> <tr><td rowspan="4">Context Management</td><td><code>check_context</code></td><td>📊 Check context size</td><td><a href="reme/memory/file_based/components/context_checker.py">ContextChecker</a> — checks whether context exceeds thresholds and splits messages</td></tr> <tr><td><code>compact_memory</code></td><td>📦 Compact history into summary</td><td><a href="reme/memory/file_based/components/compactor.py">Compactor</a> — ReActAgent that generates structured context summaries</td></tr> <tr><td><code>compact_tool_result</code></td><td>✂️ Compact long tool outputs</td><td><a href="reme/memory/file_based/components/tool_result_compactor.py">ToolResultCompactor</a> — truncates long tool outputs and stores them in <code>tool_result/</code> while keeping file references in messages</td></tr> <tr><td><code>pre_reasoning_hook</code></td><td>🔄 Pre-reasoning hook</td><td><code>compact_tool_result</code> + <code>check_context</code> + <code>compact_memory</code> + <code>summary_memory</code> (async)</td></tr> <tr><td rowspan="2">Long-term Memory</td><td><code>summary_memory</code></td><td>📝 Persist important memory to files</td><td><a href="reme/memory/file_based/components/summarizer.py">Summarizer</a> — ReActAgent + file tools (<code>read</code> / <code>write</code> / <code>edit</code>)</td></tr> <tr><td><code>memory_search</code></td><td>🔍 Semantic memory search</td><td><a href="reme/memory/file_based/tools/memory_search.py">MemorySearch</a> — hybrid retrieval with vectors + BM25</td></tr> <tr><td rowspan="2">Session Memory</td><td><code>get_in_memory_memory</code></td><td>💾 Create in-session memory instance</td><td>Returns ReMeInMemoryMemory with dialog_path configured for persistence</td></tr> <tr><td><code>await_summary_tasks</code></td><td>⏳ Wait for async summary tasks</td><td>Block until all background summary tasks complete</td></tr> <tr><td>-</td><td><code>start</code></td><td>🚀 Start memory system</td><td>Initialize file storage, file watcher, and embedding cache; clean up expired tool result files</td></tr> <tr><td>-</td><td><code>close</code></td><td>📕 Shutdown and cleanup</td><td>Clean up tool result files, stop file watcher, and persist embedding cache</td></tr> </table> --- ### 🚀 Quick start #### Installation **Install from source:** ```bash git clone https://github.com/agentscope-ai/ReMe.git cd ReMe pip install -e ".[light]" ``` **Update to the latest version:** ```bash git pull pip install -e ".[light]" ``` #### Environment variables `ReMeLight` uses environment variables to configure the embedding model and storage backends: | Variable | Description | Example | |----------------------|-------------------------------|-----------------------------------------------------| | `LLM_API_KEY` | LLM API key | `sk-xxx` | | `LLM_BASE_URL` | LLM base URL | `https://dashscope.aliyuncs.com/compatible-mode/v1` | | `EMBEDDING_API_KEY` | Embedding API key (optional) | `sk-xxx` | | `EMBEDDING_BASE_URL` | Embedding base URL (optional) | `https://dashscope.aliyuncs.com/compatible-mode/v1` | #### Python usage ```python import asyncio from reme.reme_light import ReMeLight async def main(): # Initialize ReMeLight reme = ReMeLight( default_as_llm_config={"model_name": "qwen3.5-35b-a3b"}, # default_embedding_model_config={"model_name": "text-embedding-v4"}, default_file_store_config={"fts_enabled": True, "vector_enabled": False}, enable_load_env=True, ) await reme.start() messages = [...] # List of conversation messages # 1. Check context size (token counting, determine if compaction is needed) messages_to_compact, messages_to_keep, is_valid = await reme.check_context( messages=messages, memory_compact_threshold=90000, # Threshold to trigger compaction (tokens) memory_compact_reserve=10000, # Token count to reserve for recent messages ) # 2. Compact conversation history into a structured summary summary = await reme.compact_memory( messages=messages, previous_summary="", max_input_length=128000, # Model context window (tokens) compact_ratio=0.7, # Trigger compaction when exceeding max_input_length * 0.7 language="zh", # Summary language (e.g., "zh" / "") ) # 3. Compact long tool outputs (prevent tool results from blowing up context) messages = await reme.compact_tool_result(messages) # 4. Pre-reasoning hook (auto compact tool results + check context + generate summaries) processed_messages, compressed_summary = await reme.pre_reasoning_hook( messages=messages, system_prompt="You are a helpful AI assistant.", compressed_summary="", max_input_length=128000, compact_ratio=0.7, memory_compact_reserve=10000, enable_tool_result_compact=True, tool_result_compact_keep_n=3, ) # 5. Persist important memory to files (writes to memory/YYYY-MM-DD.md) summary_result = await reme.summary_memory( messages=messages, language="zh", ) # 6. Semantic memory search (vector + BM25 hybrid retrieval) result = await reme.memory_search(query="Python version preference", max_results=5) # 7. Create in-session memory instance (manages context for one conversation) memory = reme.get_in_memory_memory() # Auto-configures dialog_path for msg in messages: await memory.add(msg) token_stats = await memory.estimate_tokens(max_input_length=128000) print(f"Current context usage: {token_stats['context_usage_ratio']:.1f}%") print(f"Message token count: {token_stats['messages_tokens']}") print(f"Estimated total tokens: {token_stats['estimated_tokens']}") # 8. Mark messages as compressed (auto-persists to dialog/YYYY-MM-DD.jsonl) # await memory.mark_messages_compressed(messages_to_compact) # Shutdown ReMeLight await reme.close() if __name__ == "__main__": asyncio.run(main()) ``` > 📂 Full example: [test_reme_light.py](tests/light/test_reme_light.py) > 📋 Sample run log: [test_reme_light_log.txt](tests/light/test_reme_light_log.txt) (223,838 tokens → 1,105 tokens, 99.5% > compression) ### Architecture of the file-based ReMeLight memory system #### Context data structure ```mermaid flowchart TD A[Context] --> B[compact_summary] B --> C[dialog path guide + Goal/Constraints/Progress/KeyDecisions/NextSteps] A --> E[messages: full dialogue history] A --> F[File System Cache] F --> G[dialog/YYYY-MM-DD.jsonl] F --> H[tool_result/uuid.txt N-day TTL] ``` --- [MemoryManager](https://github.com/agentscope-ai/CoPaw/blob/main/src/copaw/agents/memory/reme_light_memory_manager.py) inherits `ReMeLight` and integrates its memory capabilities into the agent reasoning loop: ```mermaid graph LR Agent[Agent] -->|Before each reasoning step| Hook[pre_reasoning_hook] Hook --> TC[compact_tool_result<br>Compact tool outputs] TC --> CC[check_context<br>Token counting] CC -->|Exceeds limit| CM[compact_memory<br>Generate summary] CC -->|Exceeds limit| SM[summary_memory<br>Async persistence] SM -->|ReAct + FileIO| Files[memory/*.md] CC -->|Exceeds limit| MMC[mark_messages_compressed<br>Persist raw dialog] MMC --> Dialog[dialog/*.jsonl] Agent -->|Explicit call| Search[memory_search<br>Vector+BM25] Agent -->|In - session| InMem[ReMeInMemoryMemory<br>Token-aware memory] InMem -->|Compress/Clear| Dialog Files -.->|FileWatcher| Store[(FileStore<br>Vector+FTS index)] Search --> Store ``` --- #### 1. `check_context` — context checking [ContextChecker](reme/memory/file_based/components/context_checker.py) uses token counting to determine whether the context exceeds thresholds and automatically splits messages into a "to compact" group and a "to keep" group. ```mermaid graph LR M[messages] --> H[AsMsgHandler<br>Token counting] H --> C{total > threshold?} C -->|No| K[Return all messages] C -->|Yes| S[Keep from tail<br>reserve tokens] S --> CP[messages_to_compact<br>Earlier messages] S --> KP[messages_to_keep<br>Recent messages] S --> V{is_valid<br>Tool calls aligned?} ``` - **Core logic**: keep `reserve` tokens from the tail; mark the rest as messages to compact. - **Integrity guarantee**: preserves complete user-assistant turns and tool_use/tool_result pairs without splitting them. --- #### 2. `compact_memory` — conversation compaction [Compactor](reme/memory/file_based/components/compactor.py) uses a ReActAgent to compact conversation history into a * *structured context summary**. ```mermaid graph LR M[messages] --> H[AsMsgHandler<br>format_msgs_to_str] H --> A[ReActAgent<br>reme_compactor] P[previous_summary] -->|Incremental update| A A --> S[Structured summary<br>Goal/Progress/Decisions...] ``` **Summary structure** (context checkpoints): | Field | Description | |-----------------------|-----------------------------------------------------------------------------------------| | `## Goal` | User goals | | `## Constraints` | Constraints and preferences | | `## Progress` | Task progress | | `## Key Decisions` | Key decisions | | `## Next Steps` | Next step plans | | `## Critical Context` | Critical data such as file paths, function names, error messages, etc. | - **Incremental updates**: when `previous_summary` is provided, new conversations are merged into the existing summary. - **Thinking enhancement**: with `add_thinking_block=True` (default), a reasoning step is added before generating the summary to improve quality. --- #### 3. `summary_memory` — persistent memory [Summarizer](reme/memory/file_based/components/summarizer.py) uses a **ReAct + file tools** pattern so that the AI can decide what to write and where to write it. ```mermaid graph LR M[messages] --> A[ReActAgent<br>reme_summarizer] A -->|read| R[Read memory/YYYY-MM-DD.md] R --> T{Reason: how to merge?} T -->|write| W[Overwrite] T -->|edit| E[Edit in place] W --> F[memory/YYYY-MM-DD.md] E --> F ``` **File tools** ([FileIO](reme/memory/file_based/tools/file_io.py)): | Tool | Function | |---------|-----------------------| | `read` | Read file content | | `write` | Overwrite file | | `edit` | Find-and-replace edit | --- #### 4. `compact_tool_result` — tool result compaction [ToolResultCompactor](reme/memory/file_based/components/tool_result_compactor.py) addresses the problem of long tool outputs bloating the context. It applies two different truncation strategies depending on whether a message falls within the `recent_n` window: ```mermaid graph LR M[messages] --> B{Within recent_n?} B -->|Yes - recent| C[Low truncation recent_max_bytes=100KB<br>Save full content to tool_result/uuid.txt<br>Hint: 'Read from line N'] B -->|No - old| D[High truncation old_max_bytes=3KB<br>Reference existing file<br>More aggressive truncation] C --> E[cleanup_expired_files<br>Delete expired files] D --> E ``` | Parameter | Default | Description | |--------------------|-----------------------|-------------------------------------------------------------------------------------------------------------------------------| | `recent_n` | `1` | Minimum number of trailing consecutive tool-result messages treated as "recent" (use low truncation) | | `recent_max_bytes` | `100 * 1024` (100 KB) | Truncation threshold for recent messages; content beyond this is saved to `tool_result/` with a file path and start-line hint | | `old_max_bytes` | `3000` (3 KB) | Truncation threshold for older messages; truncation is more aggressive | | `retention_days` | `3` | Number of days to retain tool result files; expired files are auto-cleaned | - **Auto cleanup**: expired files (older than `retention_days`) are deleted automatically during `start` / `close` / `compact_tool_result`. --- #### 5. `memory_search` — memory retrieval [MemorySearch](reme/memory/file_based/tools/memory_search.py) provides **vector + BM25 hybrid retrieval**. ```mermaid graph LR Q[query] --> E[Embedding<br>Vectorization] E --> V[vector_search<br>Semantic similarity] Q --> B[BM25<br>Keyword matching] V -->|" weight: 0.7 "| M[Deduplicate + weighted merge] B -->|" weight: 0.3 "| M M --> F[min_score filter] F --> R[Top-N results] ``` - **Fusion mechanism**: vector weight 0.7 + BM25 weight 0.3 — balancing semantic similarity and exact matches. --- #### 6. `ReMeInMemoryMemory` — in-session memory [ReMeInMemoryMemory](reme/memory/file_based/reme_in_memory_memory.py) extends AgentScope's `InMemoryMemory` to provide token-aware memory management and raw conversation persistence. ```mermaid graph LR C[content] --> G[get_memory<br>exclude_mark=COMPRESSED] G --> F[Filter out compressed messages] F --> P{prepend_summary?} P -->|Yes| S[Prepend previous summary] S --> O[Output messages] P -->|No| O M[mark_messages_compressed] --> D[Persist to dialog/YYYY-MM-DD.jsonl] D --> R[Remove from memory] ``` | Function | Description | |----------------------------------|----------------------------------------------------------| | `get_memory` | Filter messages by mark and auto-append summary | | `estimate_tokens` | Estimate token usage of the context | | `state_dict` / `load_state_dict` | Serialize/deserialize state (session persistence) | | `mark_messages_compressed` | Mark messages compressed and persist to dialog directory | | `clear_content` | Persist all messages before clearing memory | **Raw conversation persistence**: When messages are compressed or cleared, they are automatically saved to `{dialog_path}/{date}.jsonl` with one JSON-formatted message per line. --- #### 7. `pre_reasoning_hook` — pre-reasoning processing This is a unified entry point that wires all the above components together and automatically manages context before each reasoning step. ```mermaid graph LR M[messages] --> TC[compact_tool_result<br>Compact long tool outputs] TC --> CC[check_context<br>Compute remaining space] CC --> D{messages_to_compact<br>Non-empty?} D -->|No| K[Return original messages + summary] D -->|Yes| V{is_valid?} V -->|No| K V -->|Yes| CM[compact_memory<br>Sync summary generation] V -->|Yes| SM[add_async_summary_task<br>Async persistence] CM --> R[Return messages_to_keep + new summary] ``` **Execution flow**: 1. `compact_tool_result` — compact long tool outputs for all messages except the most recent `tool_result_compact_keep_n`. 2. `check_context` — check whether the context exceeds limits (remaining space = threshold minus tokens used by system prompt and compressed summary). 3. `compact_memory` — generate compact summary (sync), appended into `compact_summary`. 4. `summary_memory` — persist memory to `memory/*.md` (async in the background, non-blocking). | Key parameter | Default | Description | |------------------------------|---------|-------------------------------------------------------------------------------------| | `tool_result_compact_keep_n` | `3` | Skip tool result compaction for the most recent N messages (preserve full content) | | `memory_compact_reserve` | `10000` | Token count to reserve for recent messages; messages beyond this trigger compaction | | `compact_ratio` | `0.7` | Compaction threshold ratio: `max_input_length × compact_ratio × 0.95` | --- ## 🗃️ Vector-based memory system [ReMe Vector Based](reme/reme.py) is the core class for the vector-based memory system. It manages three types of memories: | Memory type | Use case | |-----------------------|-------------------------------------------------------------------| | **Personal memory** | Records user preferences and habits | | **Procedural memory** | Records task execution experience and patterns of success/failure | | **Tool memory** | Records tool usage experience and parameter tuning | ### Core capabilities | Method | Function | Description | |--------------------|--------------|-------------------------------------------------------------| | `summarize_memory` | 🧠 Summarize | Automatically extract and store memories from conversations | | `retrieve_memory` | 🔍 Retrieve | Retrieve related memories based on a query | | `add_memory` | ➕ Add | Manually add memories into the vector store | | `get_memory` | 📖 Get | Get a single memory by ID | | `update_memory` | ✏️ Update | Update existing memory content or metadata | | `delete_memory` | 🗑️ Delete | Delete a specific memory | | `list_memory` | 📋 List | List memories with filtering and sorting | ### Installation and environment variables Installation and environment configuration are the same as [ReMeLight](#installation). API keys are configured via environment variables and can be stored in a `.env` file at the project root. ### Python usage ```python import asyncio from reme import ReMe async def main(): # Initialize ReMe reme = ReMe( working_dir=".reme", default_llm_config={ "backend": "openai", "model_name": "qwen3.5-plus", }, default_embedding_model_config={ "backend": "openai", "model_name": "text-embedding-v4", "dimensions": 1024, }, default_vector_store_config={ "backend": "local", # Supports local/chroma/qdrant/elasticsearch/obvec/zvec/hologres }, ) await reme.start() messages = [ {"role": "user", "content": "Help me write a Python script", "time_created": "2026-02-28 10:00:00"}, {"role": "assistant", "content": "Sure, I'll help you with that.", "time_created": "2026-02-28 10:00:05"}, ] # 1. Summarize memories from conversation (automatically extract user preferences, task experience, etc.) result = await reme.summarize_memory( messages=messages, user_name="alice", # Personal memory # task_name="code_writing", # Procedural memory ) print(f"Summary result: {result}") # 2. Retrieve related memories memories = await reme.retrieve_memory( query="Python programming", user_name="alice", # task_name="code_writing", ) print(f"Retrieved memories: {memories}") # 3. Manually add a memory memory_node = await reme.add_memory( memory_content="The user prefers concise code style.", user_name="alice", ) print(f"Added memory: {memory_node}") memory_id = memory_node.memory_id # 4. Get a single memory by ID fetched_memory = await reme.get_memory(memory_id=memory_id) print(f"Fetched memory: {fetched_memory}") # 5. Update memory content updated_memory = await reme.update_memory( memory_id=memory_id, user_name="alice", memory_content="The user prefers concise code with comments.", ) print(f"Updated memory: {updated_memory}") # 6. List all memories for the user (supports filtering and sorting) all_memories = await reme.list_memory( user_name="alice", limit=10, sort_key="time_created", reverse=True, ) print(f"User memory list: {all_memories}") # 7. Delete a specific memory await reme.delete_memory(memory_id=memory_id) print(f"Deleted memory: {memory_id}") # 8. Delete all memories (use with care) # await reme.delete_all() await reme.close() if __name__ == "__main__": asyncio.run(main()) ``` ### Technical architecture ```mermaid graph LR User[User / Agent] --> ReMe[Vector Based ReMe] ReMe --> Summarize[Summarize memories] ReMe --> Retrieve[Retrieve memories] ReMe --> CRUD[CRUD operations] Summarize --> PersonalSum[PersonalSummarizer] Summarize --> ProceduralSum[ProceduralSummarizer] Summarize --> ToolSum[ToolSummarizer] Retrieve --> PersonalRet[PersonalRetriever] Retrieve --> ProceduralRet[ProceduralRetriever] Retrieve --> ToolRet[ToolRetriever] PersonalSum --> VectorStore[Vector database] ProceduralSum --> VectorStore ToolSum --> VectorStore PersonalRet --> VectorStore ProceduralRet --> VectorStore ToolRet --> VectorStore ``` ### Experimental results Evaluations are conducted on two benchmarks: **LoCoMo** and **HaluMem**. Experimental settings: 1. **ReMe backbone**: as specified in each table. 2. **Evaluation protocol**: LLM-as-a-Judge following MemOS — each answer is scored by GPT-4o-mini. Baseline results are reproduced from their respective papers under aligned settings where possible. ### LoCoMo | Method | Single Hop | Multi Hop | Temporal | Open Domain | Overall | |----------|------------|-----------|-----------|-------------|-----------| | MemoryOS | 62.43 | 56.50 | 37.18 | 40.28 | 54.70 | | Mem0 | 66.71 | 58.16 | 55.45 | 40.62 | 61.00 | | MemU | 72.77 | 62.41 | 33.96 | 46.88 | 61.15 | | MemOS | 81.45 | 69.15 | 72.27 | 60.42 | 75.87 | | HiMem | 89.22 | 70.92 | 74.77 | 54.86 | 80.71 | | Zep | 88.11 | 71.99 | 74.45 | 66.67 | 81.06 | | TiMem | 81.43 | 62.20 | 77.63 | 52.08 | 75.30 | | TSM | 84.30 | 66.67 | 71.03 | 58.33 | 76.69 | | MemR3 | 89.44 | 71.39 | 76.22 | 61.11 | 81.55 | | **ReMe** | **89.89** | **82.98** | **83.80** | **71.88** | **86.23** | ### HaluMem | Method | Memory Integrity | Memory Accuracy | QA Accuracy | |-------------|------------------|-----------------|-------------| | MemoBase | 14.55 | 92.24 | 35.53 | | Supermemory | 41.53 | 90.32 | 54.07 | | Mem0 | 42.91 | 86.26 | 53.02 | | ProMem | **73.80** | 89.47 | 62.26 | | **ReMe** | 67.72 | **94.06** | **88.78** | --- ## 🧪 Procedural memory paper > Our procedural (task) memory paper is available on [arXiv](https://arxiv.org/abs/2512.10696). ### 🌍 [Appworld benchmark](benchmark/appworld/quickstart.md) We evaluate ReMe on the Appworld environment using Qwen3-8B (non-thinking mode): | Method | Avg@4 | Pass@4 | |----------|---------------------|---------------------| | w/o ReMe | 0.1497 | 0.3285 | | w/ ReMe | 0.1706 **(+2.09%)** | 0.3631 **(+3.46%)** | Pass@K measures the probability that at least one of K generated candidates successfully completes the task (score=1). The current experiments use an internal AppWorld environment, which may differ slightly from the public version. For more details on how to reproduce the experiments, see [quickstart.md](benchmark/appworld/quickstart.md). ### 🔧 [BFCL-V3 benchmark](benchmark/bfcl/quickstart.md) We evaluate ReMe on the BFCL-V3 multi-turn-base task (random split 50 train / 150 val) using Qwen3-8B (thinking mode): | Method | Avg@4 | Pass@4 | |----------|---------------------|---------------------| | w/o ReMe | 0.4033 | 0.5955 | | w/ ReMe | 0.4450 **(+4.17%)** | 0.6577 **(+6.22%)** | For more details on how to reproduce the experiments, see [quickstart.md](benchmark/bfcl/quickstart.md). ## ⭐ Community & support - **Star & Watch**: Starring helps more agent developers discover ReMe; Watching keeps you up to date with new releases and features. - **Share your results**: Share how ReMe empowers your agents in Issues or Discussions — we are happy to showcase great community use cases. - **Need a new feature?** Open a feature request; we’ll evolve ReMe together with the community. - **Code contributions**: All forms of contributions are welcome. Please see the [contribution guide](docs/contribution.md). - **Acknowledgements**: We thank excellent open-source projects such as OpenClaw, Mem0, MemU, and QwenPaw for their inspiration and support. ### Contributors Thanks to all who have contributed to ReMe: <a href="https://github.com/agentscope-ai/ReMe/graphs/contributors"> <img src="https://contrib.rocks/image?repo=agentscope-ai/ReMe" alt="Contributors" /> </a> --- ## 📄 Citation ```bibtex @software{AgentscopeReMe2025, title = {AgentscopeReMe: Memory Management Kit for Agents}, author = {ReMe Team}, url = {https://reme.agentscope.io}, year = {2025} } ``` --- ## ⚖️ License This project is open-sourced under the Apache License 2.0. See [LICENSE](./LICENSE) for details. --- ## 🤔 Why ReMe? ReMe stands for **Remember Me** and **Refine Me**, symbolizing our goal to help AI agents "remember" users and "refine" themselves through interactions. We hope ReMe is not just a cold memory module, but a partner that truly helps agents understand users, accumulate experience, and continuously evolve. --- ## 📈 Star history [![Star History Chart](https://api.star-history.com/svg?repos=agentscope-ai/ReMe&type=Date)](https://www.star-history.com/#agentscope-ai/ReMe&Date)

AI Agents Knowledge Bases & RAG
3.1K Github Stars
QwenPaw
Open Source

QwenPaw

<div align="center"> # QwenPaw [![GitHub Repo](https://img.shields.io/badge/GitHub-Repo-black.svg?logo=github)](https://github.com/agentscope-ai/QwenPaw) [![PyPI](https://img.shields.io/pypi/v/qwenpaw?color=3775A9&label=PyPI&logo=pypi)](https://pypi.org/project/qwenpaw/) [![Documentation](https://img.shields.io/badge/Docs-Website-green.svg?logo=readthedocs&label=Docs)](https://qwenpaw.agentscope.io/) [![Python Version](https://img.shields.io/badge/python-3.10%20~%20%3C3.14-blue.svg?logo=python&label=Python)](https://www.python.org/downloads/) [![Last Commit](https://img.shields.io/github/last-commit/agentscope-ai/QwenPaw)](https://github.com/agentscope-ai/QwenPaw) [![License](https://img.shields.io/badge/license-Apache%202.0-red.svg?logo=apache&label=License)](LICENSE) [![Code Style](https://img.shields.io/badge/code%20style-black-black.svg?logo=python&label=CodeStyle)](https://github.com/psf/black) [![GitHub Stars](https://img.shields.io/github/stars/agentscope-ai/QwenPaw?style=flat&logo=github&color=yellow&label=Stars)](https://github.com/agentscope-ai/QwenPaw/stargazers) [![GitHub Forks](https://img.shields.io/github/forks/agentscope-ai/QwenPaw?style=flat&logo=github&color=purple&label=Forks)](https://github.com/agentscope-ai/QwenPaw/network) [![DeepWiki](https://img.shields.io/badge/DeepWiki-Ask_Devin-navy.svg?logo=data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACwAAAAyCAYAAAAnWDnqAAAAAXNSR0IArs4c6QAAA05JREFUaEPtmUtyEzEQhtWTQyQLHNak2AB7ZnyXZMEjXMGeK/AIi+QuHrMnbChYY7MIh8g01fJoopFb0uhhEqqcbWTp06/uv1saEDv4O3n3dV60RfP947Mm9/SQc0ICFQgzfc4CYZoTPAswgSJCCUJUnAAoRHOAUOcATwbmVLWdGoH//PB8mnKqScAhsD0kYP3j/Yt5LPQe2KvcXmGvRHcDnpxfL2zOYJ1mFwrryWTz0advv1Ut4CJgf5uhDuDj5eUcAUoahrdY/56ebRWeraTjMt/00Sh3UDtjgHtQNHwcRGOC98BJEAEymycmYcWwOprTgcB6VZ5JK5TAJ+fXGLBm3FDAmn6oPPjR4rKCAoJCal2eAiQp2x0vxTPB3ALO2CRkwmDy5WohzBDwSEFKRwPbknEggCPB/imwrycgxX2NzoMCHhPkDwqYMr9tRcP5qNrMZHkVnOjRMWwLCcr8ohBVb1OMjxLwGCvjTikrsBOiA6fNyCrm8V1rP93iVPpwaE+gO0SsWmPiXB+jikdf6SizrT5qKasx5j8ABbHpFTx+vFXp9EnYQmLx02h1QTTrl6eDqxLnGjporxl3NL3agEvXdT0WmEost648sQOYAeJS9Q7bfUVoMGnjo4AZdUMQku50McDcMWcBPvr0SzbTAFDfvJqwLzgxwATnCgnp4wDl6Aa+Ax283gghmj+vj7feE2KBBRMW3FzOpLOADl0Isb5587h/U4gGvkt5v60Z1VLG8BhYjbzRwyQZemwAd6cCR5/XFWLYZRIMpX39AR0tjaGGiGzLVyhse5C9RKC6ai42ppWPKiBagOvaYk8lO7DajerabOZP46Lby5wKjw1HCRx7p9sVMOWGzb/vA1hwiWc6jm3MvQDTogQkiqIhJV0nBQBTU+3okKCFDy9WwferkHjtxib7t3xIUQtHxnIwtx4mpg26/HfwVNVDb4oI9RHmx5WGelRVlrtiw43zboCLaxv46AZeB3IlTkwouebTr1y2NjSpHz68WNFjHvupy3q8TFn3Hos2IAk4Ju5dCo8B3wP7VPr/FGaKiG+T+v+TQqIrOqMTL1VdWV1DdmcbO8KXBz6esmYWYKPwDL5b5FA1a0hwapHiom0r/cKaoqr+27/XcrS5UwSMbQAAAABJRU5ErkJggg==)](https://deepwiki.com/agentscope-ai/QwenPaw) [![Discord](https://img.shields.io/badge/Discord-Join_Us-blueviolet.svg?logo=discord)](https://discord.gg/eYMpfnkG8h) [![X](https://img.shields.io/badge/X-Follow_Us-black.svg?logo=x)](https://x.com/agentscope_ai) [![DingTalk](https://img.shields.io/badge/DingTalk-Join_Us-orange.svg)](https://qr.dingtalk.com/action/joingroup?code=v1,k1,OmDlBXpjW+I2vWjKDsjvI9dhcXjGZi3bQiojOq3dlDw=&_dt_no_comment=1&origin=11) [[Documentation](https://qwenpaw.agentscope.io/)] [[中文](README_zh.md)] [[日本語](README_ja.md)] [[Русский](README_ru.md)] <p align="center"> <img src="https://gw.alicdn.com/imgextra/i1/O1CN01sens5C1TuwioeGexL_!!6000000002443-55-tps-771-132.svg" alt="QwenPaw Logo" width="120"> </p> <p align="center"><b>Works for you, grows with you.</b></p> </div> Your personal AI assistant — easy to install, deploy locally or in the cloud, connect across channels, extend with ease. > **Core capabilities:** > > **Under your control** — Memory and personalization fully under your control. Deploy locally (data stays on your machine) or in the cloud (your chosen server). No third-party hosting, no data upload. > > **Skills extension** — Built-in scheduling, PDF/Office processing, news digest, and more; custom skills auto-loaded, no lock-in. Skills determine what QwenPaw can do. > > **Multi-agent collaboration** — Create multiple independent agents, each with their own role; enable collaboration skills for inter-agent communication to tackle complex tasks together. > > **Multi-layer security** — Tool guard, file access control, skill security scanning to ensure safe operation. > > **Every channel** — DingTalk, Feishu, WeChat, Discord, Telegram, and more. One QwenPaw, connect as needed. > > **Memory-evolving & proactive** — Agent learns from interactions, reflects on experience, and proactively serves you. Gets smarter the more you use it. > > <details> > <summary><b>What you can do with QwenPaw</b></summary> > > <br> > > - **Social media**: Daily hot post digests (Xiaohongshu, Zhihu, Reddit), Bilibili/YouTube video summaries. > - **Productivity**: Email & newsletter highlights pushed to DingTalk/Feishu/QQ; email & calendar contact organization. > - **Creative & building**: Describe your goal before sleep, auto-execute, wake up to a prototype; full workflow from topic selection to final video. > - **Research & learning**: Track tech & AI news, personal knowledge base search and reuse. > - **Desktop & files**: Organize and search local files, read & summarize documents, request files in chat. > - **Explore more**: Combine Skills with scheduled tasks into your own agentic app. > > </details> --- ## News - [2026-06-10] **v1.1.11 — Free Model OAuth & Plugin Market** | Zero-config free models with one-click OAuth; Plugin Market with AgentScope Platform integration. | Highlight | What's new | |-----------|------------| | **Free Model OAuth** | Zero-config free models with one-click OAuth authentication. | | **Plugin Market** | New Plugin Market tab with AgentScope Platform integration. | | **MCP Tool Whitelisting** | Per-server MCP tool whitelisting with frontend toggle UI. | Also: self-evolving skill creation, backend startup optimization, Feishu group sharing, QQ QR code auth. [v1.1.11 Release Notes →](https://qwenpaw.agentscope.io/release-notes#v1.1.11) - [2026-06-01] **v1.1.10** — Spawn Subagent, Open Directory, Tencent Yuanbao channel. [v1.1.10 Release Notes →](https://qwenpaw.agentscope.io/release-notes#v1.1.10) - [2026-05-27] **v1.1.9** — Coding Mode (three-panel Web IDE), Tauri desktop app, unified access control. [v1.1.9 Release Notes →](https://qwenpaw.agentscope.io/release-notes#v1.1.9) - [2026-05-19] **v1.1.8** — Official plugin distribution, QwenPaw Pet, streaming cards for DingTalk / Feishu / Telegram. [v1.1.8 Release Notes →](https://qwenpaw.agentscope.io/release-notes#v1.1.8) - [2026-05-14] **v1.1.7** — Browser batch actions, OAuth 2.1 MCP, Cron calendar view, multiple file attachments. [v1.1.7 Release Notes →](https://qwenpaw.agentscope.io/release-notes#v1.1.7) - [2026-05-09] **v1.1.6** — Whisper voice input, GPT Image 2 plugin, Volcano Engine provider, Mermaid diagrams. [v1.1.6 Release Notes →](https://qwenpaw.agentscope.io/release-notes#v1.1.6) - [2026-04-12] **CoPaw rebrands to QwenPaw** — deeper Qwen ecosystem integration, same open-source mission. [v1.0.0 Release Notes →](https://qwenpaw.agentscope.io/release-notes#v1.0.0) --- ## Table of Contents > **Recommended reading:** > > - **🚀 I'm new and want to try quickly**: [Quick Start](#quick-start) → three commands to run → [Configure model](#api-key) → chat in Console > - **💬 I want to use in DingTalk/Feishu/WeChat**: Complete Quick Start → [Configure model](#api-key) → [Channel setup](https://qwenpaw.agentscope.io/docs/channels) > - **🐍 I don't want to install Python**: [Desktop app](#option-6-desktop-application-beta) or [Script install](#option-2-script-install) or [ModelScope Studio](https://modelscope.cn/studios/fork?target=AgentScope/QwenPaw) > - **💻 I want to use local models (no API key needed)**: [Local Models](#local-models) → download model → start using > - **🛠️ I want to contribute code or develop new features**: [Install from source](#install-from-source) → [Contributing](#contributing) - [News](#news) - [Quick Start](#quick-start) - [API Key](#api-key) - [Local Models](#local-models) - [Documentation](#documentation) - [Security Features](#security-features) - [FAQ](#faq) - [Staying ahead](#staying-ahead) - [Roadmap](#roadmap) - [Install from source](#install-from-source) - [Contributing](#contributing) - [Why QwenPaw?](#why-qwenpaw) - [Built by](#built-by) - [License](#license) --- ## Quick Start ### Option 1: pip install If you prefer managing Python yourself: ```bash pip install qwenpaw qwenpaw init --defaults qwenpaw app ``` Then open the Console in your browser at **http://127.0.0.1:8088/** to configure your model. To chat in DingTalk, Feishu, WeChat, etc., see the [Channel setup](https://qwenpaw.agentscope.io/docs/channels) documentation. ![Console](https://img.alicdn.com/imgextra/i2/O1CN01EP1ra01iOAcBvF0TC_!!6000000004402-2-tps-3822-2070.png) --- ### Option 2: Script install No Python setup required, one command installs everything. The script will automatically download uv (Python package manager), create a virtual environment, and install QwenPaw with all dependencies (including Node.js and frontend assets). Note: May not work in restricted network environments or corporate firewalls. **macOS / Linux:** ```bash curl -fsSL https://qwenpaw.agentscope.io/install.sh | bash ``` **Windows (CMD):** ```CMD curl -fsSL https://qwenpaw.agentscope.io/install.bat -o install.bat && install.bat ``` **Windows (PowerShell):** ```powershell irm https://qwenpaw.agentscope.io/install.ps1 | iex ``` > **Note**: The installer will automatically check the status of uv. If it is not installed, it will attempt to download and configure it automatically. If the automatic installation fails, please follow the on-screen prompts or execute `python -m pip install -U uv`, then rerun the installer. > **⚠️ Special Notice for Windows Enterprise LTSC Users** > > If you are using Windows LTSC or an enterprise environment governed by strict security policies, PowerShell may run in **Constrained Language Mode**, potentially causing the following issue: > 1. **If using CMD (.bat): Script executes successfully but fails to write to `Path`** > > The script completes file installation. Due to **Constrained Language Mode**, it cannot automatically update environment variables. Manually configure as follows: > - **Locate the installation directory**: > - Check if `uv` is available: Enter `uv --version` in CMD. If a version number appears, **only configure the QwenPaw path**. If you receive the prompt `'uv' is not recognized as an internal or external command, operable program or batch file,` configure both paths. > - uv path (choose one based on installation location; use if `uv` fails): Typically `%USERPROFILE%\.local\bin`, `%USERPROFILE%\AppData\Local\uv`, or the `Scripts` folder within your Python installation directory > - QwenPaw path: Typically located at `%USERPROFILE%\.qwenpaw\bin`. > - **Manually add to the system's Path environment variable**: > - Press `Win + R`, type `sysdm.cpl` and press Enter to open System Properties. > - Click “Advanced” -> “Environment Variables”. > - Under “System variables”, locate and select `Path`, then click “Edit”. > - Click “New”, enter both directory paths sequentially, then click OK to save. > 2. **If using PowerShell (.ps1): Script execution interrupted** > > Due to **Constrained Language Mode**, the script may fail to automatically download `uv`. > - **Manually install uv**: Refer to the [GitHub Release](https://github.com/astral-sh/uv/releases) to download `uv.exe` and place it in `%USERPROFILE%\.local\bin` or `%USERPROFILE%\AppData\Local\uv`; or ensure Python is installed and run `python -m pip install -U uv`. > - **Configure `uv` environment variables**: Add the `uv` directory and `%USERPROFILE%\.qwenpaw\bin` to your system's `Path` variable. > - **Re-run the installation**: Open a new terminal and execute the installation script again to complete the `QwenPaw` installation. > - **Configure the `QwenPaw` environment variable**: Add `%USERPROFILE%\.qwenpaw\bin` to your system's `Path` variable. Once installed, open a new terminal and run: ```bash qwenpaw init --defaults # or: qwenpaw init (interactive) qwenpaw app ``` <details> <summary><b>Install options</b></summary> **macOS / Linux:** ```bash # Install a specific version curl -fsSL ... | bash -s -- --version 1.1.0 # Install from source (dev/testing) curl -fsSL ... | bash -s -- --from-source # Upgrade — just re-run the installer curl -fsSL ... | bash # Uninstall qwenpaw uninstall # keeps config and data qwenpaw uninstall --purge # removes everything ``` **Windows (PowerShell):** ```powershell # Install a specific version irm ... | iex; .\install.ps1 -Version 0.0.2 # Install from source (dev/testing) .\install.ps1 -FromSource # Upgrade — just re-run the installer irm ... | iex # Uninstall qwenpaw uninstall # keeps config and data qwenpaw uninstall --purge # removes everything ``` </details> --- ### Option 3: Docker Images are on **Docker Hub** (`agentscope/qwenpaw`). Image tags: `latest` (stable); `pre` (PyPI pre-release). ```bash docker pull agentscope/qwenpaw:latest docker run -p 127.0.0.1:8088:8088 \ -v qwenpaw-data:/app/working \ -v qwenpaw-secrets:/app/working.secret \ -v qwenpaw-backups:/app/working.backups \ agentscope/qwenpaw:latest ``` Also available on Alibaba Cloud Container Registry (ACR) for users in China: `agentscope-registry.ap-southeast-1.cr.aliyuncs.com/agentscope/qwenpaw` (same tags). Then open **http://127.0.0.1:8088/** for the Console. Config, memory, and skills are stored in the `qwenpaw-data` volume; model provider settings and API keys are in the `qwenpaw-secrets` volume; backup archives are stored in the `qwenpaw-backups` volume. To pass API keys (e.g. `DASHSCOPE_API_KEY`), add `-e VAR=value` or `--env-file .env` to `docker run`. > **Connecting to Ollama or other services on the host machine** > > Inside a Docker container, `localhost` refers to the container itself, not your host machine. If you run Ollama (or other model services) on the host and want QwenPaw in Docker to reach them, use one of these approaches: > > **Option A** — Explicit host binding (all platforms): > ```bash > docker run -p 127.0.0.1:8088:8088 \ > --add-host=host.docker.internal:host-gateway \ > -v qwenpaw-data:/app/working \ > -v qwenpaw-secrets:/app/working.secret \ > -v qwenpaw-backups:/app/working.backups \ > agentscope/qwenpaw:latest > ``` > Then in QwenPaw **Settings → Models**, change the Base URL to `http://host.docker.internal:<port>` — for example, `http://host.docker.internal:11434` for Ollama, or `http://host.docker.internal:1234/v1` for LM Studio. > > **Option B** — Host networking (Linux only): > ```bash > docker run --network=host \ > -v qwenpaw-data:/app/working \ > -v qwenpaw-secrets:/app/working.secret \ > -v qwenpaw-backups:/app/working.backups \ > agentscope/qwenpaw:latest > ``` > No port mapping (`-p`) is needed; the container shares the host network directly. Note that all container ports are exposed on the host, which may cause conflicts if the port is already in use. > The image is built from scratch. To build the image yourself, please refer to the [Build Docker image](scripts/README.md#build-docker-image) section in `scripts/README.md`, and then push to your registry. --- ### Option 4: Deploy on Alibaba Cloud ECS To run QwenPaw on Alibaba Cloud (ECS), use the one-click deployment: open the [QwenPaw on Alibaba Cloud (ECS) deployment link](https://computenest.console.aliyun.com/service/instance/create/cn-hangzhou?type=user&ServiceId=service-1ed84201799f40879884) and follow the prompts. For step-by-step instructions, see [Alibaba Cloud Developer: Deploy your AI assistant in 3 minutes](https://developer.aliyun.com/article/1713682). --- ### Option 5: Using ModelScope **No local install?** [ModelScope Studio](https://modelscope.cn/studios/fork?target=AgentScope/QwenPaw) one-click cloud setup. Set your Studio to **non-public** so others cannot control your QwenPaw. --- ### Option 6: Desktop Application (Beta) > **Beta Notice**: The desktop application is currently in Beta testing phase with the following known limitations: > - **Incomplete compatibility testing**: Not fully tested across all system versions and hardware configurations > - **Potential performance issues**: Startup time, memory usage, and other performance aspects may need further optimization > - **Features under development**: Some features may be unstable or missing If you're not comfortable with command-line tools, you can download and use QwenPaw's desktop application without manually configuring Python environments or running commands. #### Download Download the desktop app from [GitHub Releases](https://github.com/agentscope-ai/QwenPaw/releases): - **Windows**: `QwenPaw-Setup-<version>.exe` - **macOS**: `QwenPaw-<version>-macOS.zip` (Apple Silicon recommended) #### Features - ✅ **Zero configuration**: Download and double-click to run, no need to install Python or configure environment variables - ✅ **Cross-platform**: Supports Windows 10+ and macOS 14+ - ✅ **Visual interface**: Automatically opens browser interface, no need to manually enter addresses - ⚠️ **Beta stage**: Features are continuously being improved, feedback welcome #### First Launch **Important**: The first launch may take 10-60 seconds (depending on your system configuration). The application needs to initialize the Python environment and load dependencies. Please wait patiently for the browser window to open automatically. #### macOS: Bypass System Security Restrictions When you download the QwenPaw macOS app from Releases, macOS may show: *"Apple cannot verify that 'QwenPaw' contains no malicious software"*. This happens because the app is not notarized. You can still open it as follows: - **Right-click to open (recommended)** Right-click (or Control+click) the QwenPaw app → **Open** → in the dialog click **Open** again. This tells Gatekeeper you trust the app; after that you can double-click to launch as usual. - **Allow in System Settings** If it is still blocked, go to **System Settings → Privacy & Security**, scroll to the message like *"QwenPaw was blocked because it is from an unidentified developer"*, and click **Open Anyway** or **Allow**. - **Remove quarantine attribute (not recommended for most users)** In Terminal run: `xattr -cr /Applications/QwenPaw.app` (or use the path to the `.app` after unzipping). This clears the "downloaded from the internet" quarantine flag so the warning usually does not appear, but is less safe and controllable than using **Right-click → Open**. For detailed usage instructions, troubleshooting, and common issues, see the [Desktop Application Guide](https://qwenpaw.agentscope.io/docs/desktop). --- ## API Key If you use a **cloud LLM API** (e.g., Qianwen, Gemini, OpenAI), you must configure an API key before chatting. QwenPaw will not work until a valid key is set. See the [official docs](https://qwenpaw.agentscope.io/docs/models) for details. **How to configure:** 1. **Console (recommended)** — After running `qwenpaw app`, open **http://127.0.0.1:8088/** → **Settings** → **Models**. Choose a provider, enter the **API Key**, and enable that provider and model. 2. **`qwenpaw init`** — When you run `qwenpaw init`, it will guide you through configuring the LLM provider and API key. Follow the prompts to choose a provider and enter your key. 3. **Environment variable** — For DashScope you can set `DASHSCOPE_API_KEY` in your shell or in a `.env` file in the working directory. Tools that need extra keys (e.g. `TAVILY_API_KEY` for web search) can be set in Console **Settings → Environment variables**, see [Config](https://qwenpaw.agentscope.io/docs/config) for details. > **Using local models only?** If you use [Local Models](#local-models) (llama.cpp / Ollama / LM Studio), you do **not** need any API key. ## Local Models QwenPaw can run LLMs entirely on your machine — no API keys or cloud services required. See the [official docs](https://qwenpaw.agentscope.io/docs/models) for details. | Backend | Best for | Install | | ------------- | ---------------------------------------- | -------------------------------------------------------------------- | | **llama.cpp** | Cross-platform (macOS / Linux / Windows) | No extra installation required; click "Download Llama.cpp" in the web UI. | | **Ollama** | Cross-platform (requires Ollama service) | Install and start the Ollama app in advance. | | **LM Studio** | Cross-platform (requires LM Studio service) | Install and start the LM Studio app in advance. | --- ## Documentation | Topic | Description | | --------------------------------------------------------------------- | ------------------------------------------------ | | [Introduction](https://qwenpaw.agentscope.io/docs/intro) | What QwenPaw is and how to use it | | [Quick start](https://qwenpaw.agentscope.io/docs/quickstart) | Install and run (local or ModelScope Studio) | | [Console](https://qwenpaw.agentscope.io/docs/console) | Web UI: chat and agent configuration | | [Models](https://qwenpaw.agentscope.io/docs/models) | Configure cloud, local, and custom providers | | [Channels](https://qwenpaw.agentscope.io/docs/channels) | DingTalk, Feishu, QQ, Discord, iMessage, and more | | [Skills](https://qwenpaw.agentscope.io/docs/skills) | Extend and customize capabilities | | [Plugins](https://qwenpaw.agentscope.io/docs/plugins) | Plugin system | | [MCP](https://qwenpaw.agentscope.io/docs/mcp) | Manage MCP clients | | [Memory](https://qwenpaw.agentscope.io/docs/memory) | Long-term memory | | [Memory-Evolving & Proactive](https://qwenpaw.agentscope.io/docs/memory-evolving-and-proactive) | Agent memory evolution and proactive interaction | | [Context](https://qwenpaw.agentscope.io/docs/context) | Context management mechanism | | [Magic commands](https://qwenpaw.agentscope.io/docs/commands) | Control conversation state without waiting for the AI | | [Heartbeat](https://qwenpaw.agentscope.io/docs/heartbeat) | Scheduled check-in and digest | | [Multi-Agent](https://qwenpaw.agentscope.io/docs/multi-agent) | Create multiple agents and enable collaboration | | [Config & working dir](https://qwenpaw.agentscope.io/docs/config) | Working directory and config file | | [CLI](https://qwenpaw.agentscope.io/docs/cli) | Init, cron jobs, skills, clean | | [FAQ](https://qwenpaw.agentscope.io/docs/faq) | Common questions and troubleshooting | Full docs in this repo: [website/public/docs/](website/public/docs/). --- ## Security Features QwenPaw includes multi-layer security mechanisms to protect your data and system: - **Tool guard** — Automatically intercepts dangerous shell commands (e.g., `rm -rf /`, fork bombs, reverse shells, etc.) - **File access guard** — Restricts agent access to sensitive paths (e.g., `~/.ssh`, key files, system directories, etc.) - **Skill security scanning** — Automatically scans before installing skills, detecting risks like prompt injection, command injection, hardcoded keys, data exfiltration, etc. - **Local deployment** — All data and memory stored locally, no third-party upload (when using cloud LLM APIs, conversation content is sent to the corresponding API provider) - **Web Authentication** — Optional login protection for the Console. Disabled by default; set `QWENPAW_AUTH_ENABLED=true` to enable. See [Web Authentication](https://qwenpaw.agentscope.io/docs/security#Web-Authentication) for details. See [Security documentation](https://qwenpaw.agentscope.io/docs/security) for details. --- ## FAQ For common questions, troubleshooting tips, and known issues, please visit the **[FAQ page](https://qwenpaw.agentscope.io/docs/faq)**. --- ## Staying ahead <a href="https://github.com/agentscope-ai/QwenPaw"> <img src="https://img.alicdn.com/imgextra/i1/O1CN01V8HYv61By0HYcIDaq_!!6000000000013-1-tps-1698-954.gif" width="600" alt="Star QwenPaw" /> </a> Star QwenPaw on GitHub and be instantly notified of new releases. --- ## Roadmap | Area | Item | Status | | ------------------------ | -------------------------------------------------------------------------------------------- | -------------------- | | **Horizontal Expansion** | More channels, models, skills, MCPs — **community contributions welcome** | Seeking Contributors | | **Existing Feature Extension** | Display optimization, download hints, Windows path compatibility, etc. — **community contributions welcome** | Seeking Contributors | | **Client Experience** | Install, update, and packaging improvements | In Progress | | **Models** | Multi-model switching | In Progress | | | OAuth | Planned | | | Response API | Planned | | **Workspace** | File access control with Sandbox integration | In Progress | | | Subfolder layout (config, production files, etc.) | Planned | | **Coding** | LSP, dedicated prompts, workspace versioning, runtime, and supporting infra | In Progress | | | Lightweight native APIs | Planned | | | Tool self-evolution | Planned | | | Compatibility with existing agents (e.g. Claude Code) | Planned | | **Multi-agent** | Group chat | Planned | | | Subagent Visualization | Planned | | | HiClaw enterprise capabilities | Planned | | **Context Management** | Personal Knowledge Base | In Progress | | | User-selectable compression (fine-grained control) | Planned | | **QwenPaw Application** | QwenPaw Creator | In Progress | | | QwenPaw Insight | In Progress | _Status:_ **In Progress** — actively being worked on; **Planned** — queued or under design, also welcome contributions; **Seeking Contributors** — we strongly encourage community contributions. ## Install from source ```bash git clone https://github.com/agentscope-ai/QwenPaw.git cd QwenPaw # Build console frontend first (required for web UI) cd console && npm ci && npm run build cd .. # Copy console build output to package directory mkdir -p src/qwenpaw/console cp -R console/dist/. src/qwenpaw/console/ # Install Python package pip install -e . ``` - **Dev** (tests, formatting): `pip install -e ".[dev,full]"` - **Then**: Run `qwenpaw init --defaults`, then `qwenpaw app`. > **Note for updates:** When updating to a new major version after `git pull`, please also rebuild the frontend, reinstall the package (`pip install -e .`), restart `qwenpaw app`, and clear your browser cache with `Ctrl+Shift+R` (or `Cmd+Shift+R` on macOS). --- ## Contributing QwenPaw evolves through open collaboration, and we welcome all forms of contribution! Check the [Roadmap](#roadmap) above (especially items marked **Seeking Contributors**) to find areas that interest you, and read [CONTRIBUTING](https://github.com/agentscope-ai/QwenPaw/blob/main/CONTRIBUTING.md) to get started. We particularly welcome: - **Horizontal expansion** — new channels, model providers, skills, MCPs. - **Existing feature extension & refinement** — display and interaction improvements, download hints, Windows path compatibility, etc. Join [GitHub Discussions](https://github.com/agentscope-ai/QwenPaw/discussions) to discuss ideas or pick up tasks. --- ## Why QwenPaw? QwenPaw stands for Qwen Personal Agent Workstation, and also embodies the wisdom of Qwen and the warmth of a Paw. We hope it is not a cold tool, but an intelligent and warm "little paw" always ready to help—a most intuitive partner in your digital life. --- ## Built by [AgentScope team](https://github.com/agentscope-ai) · [AgentScope](https://github.com/agentscope-ai/agentscope) · [AgentScope Runtime](https://github.com/agentscope-ai/agentscope-runtime) · [ReMe](https://github.com/agentscope-ai/ReMe) --- ## Contact us | [Discord](https://discord.gg/eYMpfnkG8h) | [X (Twitter)](https://x.com/agentscope_ai) | [DingTalk](https://qr.dingtalk.com/action/joingroup?code=v1,k1,OmDlBXpjW+I2vWjKDsjvI9dhcXjGZi3bQiojOq3dlDw=&_dt_no_comment=1&origin=11) | [RedNote](https://www.xiaohongshu.com/user/profile/691c18db0000000037032be9) | | ------------------------------------------------------------ | ------------------------------------------------------------ | ------------------------------------------------------------ | ------------------------------------------------------------ | | [<img src="https://gw.alicdn.com/imgextra/i1/O1CN01hhD1mu1Dd3BWVUvxN_!!6000000000238-2-tps-400-400.png" width="80" height="80" alt="Discord">](https://discord.gg/eYMpfnkG8h) | [<img src="https://img.shields.io/badge/X-black.svg?logo=x&logoColor=white" width="80" height="80" alt="X">](https://x.com/agentscope_ai) | [<img src="https://img.alicdn.com/imgextra/i2/O1CN01vCWI8a1skHtLGXEMQ_!!6000000005804-2-tps-458-460.png" width="80" height="80" alt="DingTalk">](https://qr.dingtalk.com/action/joingroup?code=v1,k1,OmDlBXpjW+I2vWjKDsjvI9dhcXjGZi3bQiojOq3dlDw=&_dt_no_comment=1&origin=11) | [<img src="https://img.alicdn.com/imgextra/i3/O1CN016BoEPS1l33CE9mHb9_!!6000000004762-0-tps-160-160.jpg" width="80" height="80" alt="RedNote">](https://www.xiaohongshu.com/user/profile/691c18db0000000037032be9) | --- ## Telemetry QwenPaw collects **anonymous** usage data during `qwenpaw init` to help us understand our user base and prioritize improvements. Data is sent **once per version** — when you upgrade QwenPaw, telemetry is re-collected so we can track version adoption. **What we collect:** - QwenPaw version (e.g., 0.0.7) - Install method (pip, Docker, or desktop app) - OS and version (e.g., macOS 14.0, Ubuntu 22.04) - Python version (e.g., 3.13) - CPU architecture (e.g., x86_64, arm64) - GPU availability (yes/no) **What we do NOT collect:** No personal data, no files, no credentials, no IP addresses, no identifiable information. When running `qwenpaw init` interactively, you will be asked whether to opt in. If you choose `--defaults`, telemetry is accepted automatically. The prompt appears once per version and never affects QwenPaw's functionality. --- ## License QwenPaw is released under the [Apache License 2.0](LICENSE). --- ## Contributors All thanks to our contributors: <a href="https://github.com/agentscope-ai/QwenPaw/graphs/contributors"> <img src="https://contrib.rocks/image?repo=agentscope-ai/QwenPaw" alt="Contributors" /> </a>

AI Agents
17.3K Github Stars
agentscope-studio
Open Source

agentscope-studio

<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 Studio: Development-Oriented Visualization Toolkit</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://www.npmjs.com/package/@agentscope/studio"> <img src="https://img.shields.io/badge/dynamic/json?url=https://registry.npmjs.org/%40agentscope%2Fstudio&query=$.%27dist-tags%27.latest&prefix=v&logo=npm&label=version" alt="npm" /> </a> <a href="./LICENSE"> <img src="https://img.shields.io/badge/license-Apache--2.0-black" alt="license" /> </a> <a href="https://agentscope.io/"> <img src="https://img.shields.io/badge/Tracing-OpenTelemetry-blue?logo=look&logoColor=green&color=dark-green" alt="tracing" /> </a> <a href="https://agentscope.io/"> <img src="https://img.shields.io/badge/Evaluation-Agent-blue?logo=look&color=red" alt="evaluation" /> </a> <a href="https://agentscope.io/"> <img src="https://img.shields.io/badge/Built--in_Copilot-Friday-blue?logo=look&color=cyan" alt="friday" /> </a> </p> AgentScope Studio is a powerful **local visualization toolkit** designed for developers working with [AgentScope](https://github.com/agentscope-ai/agentscope). It provides a **transparent**, **simple**, and **fun** way to develop, debug, and evaluate agent-based applications. ## Key Features - **Project Management**: Organize and manage your AgentScope projects with Projects and Runs - **Runtime Visualization**: Chatbot-style interface for real-time agent interaction - **Tracing**: OpenTelemetry-based trace visualization for LLM calls, token usage, and agent invocations - **Agent Evaluation**: Evaluation-oriented analysis from a statistical perspective - **Built-in Copilot (Friday)**: A development assistant, playground for rapid secondary development, and integration hub for advanced features <p align="center"> <img src="https://img.alicdn.com/imgextra/i1/O1CN01PG2MdF1Zc44A1QM6N_!!6000000003214-1-tps-1971-1080.gif" width="49%" alt="home" /> <img src="https://img.alicdn.com/imgextra/i2/O1CN01pGHedL1L4ibmyPeiq_!!6000000001246-1-tps-1971-1080.gif" width="49%" alt="runtime" /> <img src="https://img.alicdn.com/imgextra/i1/O1CN01HfFhy928SSJAcWQ8c_!!6000000007931-1-tps-1971-1080.gif" width="49%" alt="traces" /> <img src="https://img.alicdn.com/imgextra/i1/O1CN01vovov821Arms9tEJ1_!!6000000006945-1-tps-1971-1080.gif" width="49%" alt="friday" /> </p> ## 📢 News - **[2025-08]** AgentScope Studio is now open-sourced! We will continue to improve it and welcome contributions from the community. ## 💻 Installation ### Prerequisites - **Node.js >= 20.0.0** - **npm >= 10.0.0** - [Docker](https://docs.docker.com/install/#supported-platforms) (optional, for Docker deployment) > **💡 Tip**: If you're using [nvm](https://github.com/nvm-sh/nvm), you can run `nvm use` to automatically switch to the required Node.js version. ```bash # How to check your version node --version # Should show v20.x.x or higher npm --version # Should show 10.x.x or higher ``` ### From NPM (Recommended) ```bash npm install -g @agentscope/studio # Start AgentScope Studio as_studio ``` ### From Source ```bash git clone https://github.com/agentscope-ai/agentscope-studio cd agentscope-studio npm install # Start in development mode npm run dev ``` - From npm ```bash npm install -g @agentscope/studio # or npm install @agentscope/studio as_studio ``` ### Docker Deployment Please refer to [docker/README.md](docker/README.md). ## 🚀 QuickStart To connect AgentScope applications, you need to set the `studio_url` field in the `AgentScope` initializer as follows: ```python import agentscope agentscope.init( # ... studio_url="http://localhost:3000" ) # ... ``` ## 📚 Documentation For more details, please refer to our documentation: - [Overview](./docs/tutorial/en/tutorial/overview.md) - What is AgentScope Studio and how it works - [Quick Start](./docs/tutorial/en/tutorial/quick_start.md) - Installation and configuration guide - [Project Management](./docs/tutorial/en/develop/project.md) - Managing projects and runs - [Tracing](./docs/tutorial/en/develop/tracing.md) - OpenTelemetry integration and semantic conventions - [Friday](./docs/tutorial/en/agent/friday.md) - Built-in Copilot guide - [Contributing](./docs/tutorial/en/tutorial/contributing.md) - How to contribute ## ⚖️ License AgentScope Studio is released under [Apache License 2.0](./LICENSE). ## ✨ Contributors All thanks to our contributors: <a href="https://github.com/agentscope-ai/agentscope-studio/graphs/contributors"> <img src="https://contrib.rocks/image?repo=agentscope-ai/agentscope-studio&max=999&columns=12&anon=1" /> </a>

AI Agents Monitoring & Observability
569 Github Stars