项目简介

DevDuck是一个高度自适应的AI代理,设计用于在运行时自我修改和扩展功能。它以单个Python文件的形式运行,能够根据环境自动修复和增强其能力。DevDuck不仅是一个强大的AI代理,更是一个多协议服务器,可以作为MCP、TCP、WebSocket和IPC服务器运行,向其他客户端提供其AI能力和工具。

主要功能点

  • 自适应AI代理: 作为一个智能代理,它能记住对话、自动进行RAG(检索增强生成)、并利用各种工具执行任务。
  • 热重载: 无需重启,即可在运行时动态创建、修改或加载新的工具。只需将Python文件保存到'./tools/'目录,工具便会立即生效。
  • 多协议服务器: 除了通过命令行或Python API使用,DevDuck还能作为TCP、WebSocket、IPC和MCP服务器运行,方便其他应用或AI客户端接入。
  • 丰富工具集: 内置超过35种工具,涵盖Shell操作、文件编辑、GitHub集成、数学计算、UI控制等,可根据需求灵活配置。
  • 知识库集成: 支持与Bedrock知识库集成,实现自动上下文检索和会话记忆,提升AI代理的长期记忆能力。
  • AWS AgentCore部署: 提供一键部署到AWS Bedrock AgentCore的能力,便于将DevDuck作为无服务器代理进行托管。

安装步骤

DevDuck可以通过 'pipx' 或 'pip' 轻松安装和运行。

  1. 确保Python环境: 需要Python 3.10-3.13。
  2. 安装 'pipx' (推荐): 如果尚未安装,请先安装 'pipx'。 'pip install pipx' 'pipx ensurepath'
  3. 使用 'pipx' 安装 DevDuck: 'pipx install devduck'
  4. 运行 DevDuck: 'devduck' (这将启动交互式模式并自动启动服务器) 或者 'devduck "你的查询"' (单次查询)

服务器配置 (MCP客户端配置)

DevDuck可以作为MCP服务器运行,以便其他MCP客户端(如Claude Desktop)连接和使用其工具。要连接到DevDuck MCP服务器,MCP客户端需要知道其启动命令和参数。

以下是MCP客户端配置DevDuck MCP服务器的示例信息(请根据您实际使用的MCP客户端的配置方式进行调整,通常是在一个JSON文件中):

  • 服务器名称: 'devduck' (您可以根据自己的偏好命名)
  • 命令: 'uvx' (一个轻量级的Python包执行器,确保环境隔离)
  • 参数: '["devduck", "--mcp"]' (指示 'uvx' 运行 DevDuck 并以MCP服务器模式启动)

示例配置(假设您的MCP客户端使用JSON文件):

{
  "mcpServers": {
    "devduck": {
      "command": "uvx",
      "args": ["devduck", "--mcp"]
    }
  }
}

参数注释:

  • '"devduck"': 这是要执行的Python包名称,确保它已在您的环境中安装。
  • '"--mcp"': 这个参数告诉DevDuck以MCP服务器模式启动,并通过标准输入/输出来与客户端通信。

手动启动HTTP协议的MCP服务器: 如果您想手动启动HTTP协议的MCP服务器,可以先启动DevDuck的交互模式,然后调用其内置工具:

  1. 在终端输入 'devduck' 进入交互模式。
  2. 在交互模式中输入 '🦆 mcp_server(action="start", port=8000)'

基本使用方法

  1. 交互式模式: 在终端输入 'devduck',然后就可以与AI代理对话。
    • 输入 '🦆 create a REST API with FastAPI' 让AI创建API。
    • 输入 '🦆 !ls -la' 执行Shell命令。
    • 输入 'exit' 退出。
  2. 一次性查询: 'devduck "分析这个错误: ImportError: No module named 'flask'"'
  3. Python API:
    import devduck
    devduck("重构我的代码以使用async/await")
  4. 热重载自定义工具: 在项目根目录创建一个 'tools/' 文件夹(如果不存在)。 在 'tools/' 文件夹中创建一个 'weather.py' 文件,内容如下:
    # ./tools/weather.py
    from strands import tool
    import requests
    
    @tool
    def weather(city: str) -> str:
        """获取指定城市的天气。"""
        r = requests.get(f"https://wttr.in/{city}?format=%C+%t")
        return r.text
    保存文件后,在DevDuck交互模式中直接使用:'🦆 weather(city="Tokyo")'。无需重启,工具即刻可用。

信息

分类

开发者工具