标签: AGI

  • MetaGPT:让你的 AI 团队个性十足

    在之前的教程中,我们学习了如何整合开源 LLM,让你的 AI 团队更强大。但你是否想过,如何让团队中的每个成员都拥有独特的个性和能力?

    MetaGPT 允许你为不同的角色和动作指定不同的 LLM,让你的 AI 团队更加灵活和真实。

    个性化配置

    MetaGPT 提供了两种方式来定制 LLM 配置:

    1. 默认配置: MetaGPT 提供了一些默认配置,你可以直接使用。
    2. 自定义配置: 你可以在 ~/.metagpt 目录中创建自定义配置文件。

    示例:

    假设你想为 GPT-4、GPT-4-turbo 和 GPT-3.5-turbo 创建配置:

    from metagpt.config2 import Config
    
    # 示例配置:gpt-4、gpt-4-turbo 和 gpt-3.5-turbo
    gpt4 = Config.from_home("gpt-4.yaml")  # 从 `~/.metagpt` 目录加载 `gpt-4.yaml` 文件中的自定义配置
    gpt4t = Config.default()  # 使用 `config2.yaml` 文件中的默认配置 (模型: "gpt-4-turbo")
    gpt35 = Config.default()
    gpt35.llm.model = "gpt-3.5-turbo"  # 将模型修改为 "gpt-3.5-turbo"

    分配配置

    创建配置后,你可以将它们分配给不同的角色和动作。

    优先级:

    • 动作配置 > 角色配置 > 全局配置 ( config2.yaml 文件中的配置)

    示例:

    假设你想要创建一个模拟美国大选直播的环境,包含三个角色:

    • A: 民主党候选人
    • B: 共和党候选人
    • C: 选民
    from metagpt.roles import Role
    from metagpt.actions import Action
    
    # 创建三个动作:a1、a2 和 a3。将 gpt4t 的配置分配给 a1。
    a1 = Action(config=gpt4t, name="Say", instruction="用感情表达你的观点,不要重复")
    a2 = Action(name="Say", instruction="用感情表达你的观点,不要重复")
    a3 = Action(name="Vote", instruction="投票给候选人,并说明你为什么投票给他/她")
    
    # 创建三个角色:A、B 和 C。分别代表“民主党候选人”、“共和党候选人”和“选民”。
    # 虽然 A 在角色配置中配置了 gpt4,但由于动作配置设置,它将使用模型 gpt4t 的配置来执行 a1。
    A = Role(name="A", profile="民主党候选人", goal="赢得选举", actions=[a1], watch=[a2], config=gpt4)
    # 由于 B 在角色配置中配置了 gpt35,而 a2 没有动作配置,B 和 a2 都将使用角色配置,即模型 gpt35 的配置。
    B = Role(name="B", profile="共和党候选人", goal="赢得选举", actions=[a2], watch=[a1], config=gpt35)
    # 由于 C 没有设置配置,a3 也没有设置配置,C 和 a3 都将使用全局配置,即模型 gpt4 的配置。
    C = Role(name="C", profile="选民", goal="投票给候选人", actions=[a3], watch=[a1, a2])

    团队交互

    完成配置后,你可以创建一个团队,并让它们进行交互。

    示例:

    import asyncio
    from metagpt.environment import Environment
    from metagpt.team import Team
    
    # 创建一个名为“美国大选直播”的环境
    env = Environment(desc="美国大选直播")
    team = Team(investment=10.0, env=env, roles=[A, B, C])
    # 运行团队,你应该能观察到它们之间的协作
    asyncio.run(team.run(idea="主题:气候变化。每条消息不超过 80 个字。", send_to="A", n_round=3))
    # await team.run(idea="主题:气候变化。每条消息不超过 80 个字。", send_to="A", n_round=3) # 如果在 Jupyter Notebook 中运行,使用此代码行

    总结

    本教程展示了如何使用 MetaGPT 为不同的角色和动作指定不同的 LLM,让你的 AI 团队更加灵活和真实。通过个性化配置,你可以让你的 AI 团队更加符合你的需求,并创造更加沉浸式的交互体验。

    更多学习资源

  • MetaGPT 与开源 LLM 的整合:让你的 AI 团队更强大

    在之前的教程中,我们学习了如何创建和使用智能体、工具以及人机协作。但 MetaGPT 的真正强大之处在于它能够灵活地整合各种大型语言模型 (LLM),包括开源模型。

    本教程将带你学习如何将开源 LLM 整合到 MetaGPT 中,并利用它们来生成项目输出。

    注意:

    由于开源模型本身的限制,本教程中描述的内容无法保证稳定的代码生成。如果你按照本教程进行实验,意味着你已经了解这一点。同时,我们也在探索如何在开源模型下获得更稳定、更高质量的输出。如果你也对此感兴趣,可以加入我们的 Discord 或微信社区群组。相信随着开源模型的更新,这一目标很快就能实现。

    整合流程

    我们将按照以下步骤介绍本教程:

    1. 模型部署: 使用 LLaMA-Factory、FastChat、ollama 等推理库部署相应的 LLM 模型。
    2. LLM 配置: 配置 MetaGPT 以使用部署的 LLM 模型。
    3. 可选:修复 LLM 输出: 修复开源 LLM 输出,以提高执行成功率。
    4. 运行: 运行 MetaGPT,并观察结果。

    模型部署

    建议使用 OpenAI 兼容的接口进行模型部署。这样,请求和响应可以直接使用 OpenAI SDK 处理,简化了整合过程。以下推理库支持发布 OpenAI 兼容的接口(ollama 除外):

    注意: 默认情况下,你需要有显卡资源进行部署,否则 CPU 推理会比较慢。

    LLaMA-Factory

    安装:

    git clone https://github.com/hiyouga/LLaMA-Factory.git
    conda create -n llama_factory python=3.10
    conda activate llama_factory
    cd LLaMA-Factory
    pip install -r requirements.txt

    部署:

    • 启动源模型:
    python3 src/api_demo.py \
        --model_name_or_path meta-llama/Llama-2-13b-chat-hf \
        --template llama2
    • 加载和合并 LoRA 输出:
    python3 src/api_demo.py \
        --model_name_or_path path_to_llama2_model \
        --template llama2 \
        --finetuning_type lora \
        --checkpoint_dir path_to_checkpoint

    默认情况下,接口访问地址为 http://0.0.0.0:8000/。如果需要修改端口,请进入 src/api_demo.py 文件进行修改。如果需要使用多张显卡启动,请在启动命令前添加 CUDA_VISIBLE_DEVICES=0,1,2 并替换为你的显卡编号。不同的模型支持不同的模板值,可以在 src/llmtuner/data/template.py 文件中找到。

    请求示例:

    curl -X POST http://0.0.0.0:8000/v1/chat/completions -H "content-type:application/json" -d '{
      "messages":[{"role":"user","content":"who are you"}],
      "model": "gpt-3.5-turbo",
      "stream": false,
      "max_tokens": 256
    }'

    默认情况下,请求的模型参数值为 gpt-3.5-turbo,如有必要,请修改它。进入 src/llmtuner/api/app.py 文件的 list_models 方法,并修改为你的自定义值。

    FastChat

    安装:

    pip3 install "fschat[model_worker,webui]"

    部署:

    • 启动控制器:
    python3 -m fastchat.serve.controller
    • 启动源模型工作器:
    python3 -m fastchat.serve.model_worker --model-path lmsys/vicuna-13b-v1.5 --conv-template vicuna_v1.1 --model-names vicuna
    • 启动 OpenAI 兼容接口:
    python3 -m fastchat.serve.openai_api_server --host localhost --port 8000

    如果你需要启动 LoRA 微调模型,需要先进行模型合并。

    请求示例:

    curl -X POST http://0.0.0.0:8000/v1/chat/completions -H "content-type:application/json" -d '{
      "messages":[{"role":"user","content":"who are you"}],
      "model": "gpt-3.5-turbo",
      "stream": false,
      "max_tokens": 256
    }'

    默认情况下,请求的模型参数值为 vicuna,对应于启动 model_worker 时指定的 model-names

    vllm

    安装:

    pip3 install vllm

    部署:

    python3 -m vllm.entrypoints.openai.api_server \
        --model meta-llama/Llama-2-13b-hf \
        --served-model-name llama2-13b

    请求示例:

    curl -X POST http://0.0.0.0:8000/v1/chat/completions -H "content-type:application/json" -d '{
      "messages":[{"role":"user","content":"who are you"}],
      "model": "llama2-13b",
      "stream": false,
      "max_tokens": 256
    }'

    默认情况下,请求的模型参数值为 llama2-13b,对应于启动时指定的 served-model-name

    ollama

    安装:

    curl https://ollama.ai/install.sh | sh

    部署:

    ollama run llama2  # 下载速度很快 (10+MB/s)

    非本地访问:

    ollama 服务默认情况下只能本地访问,即 http://localhost:11434/api/chathttp://127.0.0.1:11434/api/chat。如果你想要支持 http://ip:11434/api/chat,可以按照以下步骤操作:

    service ollama stop
    
    OLLAMA_HOST=0.0.0.0 OLLAMA_ORIGINS=* ollama serve  # 一个终端
    
    ollama run llama2                                  # 另一个终端

    请求示例:

    # 默认情况下是非流式,`stream: true`
    curl -X POST http://localhost:11434/api/chat -d '{
      "model": "llama2",
      "messages": [
        {
          "role": "user",
          "content": "why is the sky blue?"
        }
      ]
     }'

    LLM 配置

    完成模型部署后,需要修改 config/config2.yaml 文件来配置 MetaGPT 使用部署的 LLM 模型。

    OpenAI 兼容接口

    例如 LLaMA-Factory、FastChat、vllm 的 OpenAI 兼容接口:

    llm:
      api_type: 'open_llm'
      base_url: 'http://106.75.10.xxx:8000/v1'
      model: 'llama2-13b'

    base_url 只需要配置到 http://0.0.0.0:8000/v1,其余部分由 OpenAI SDK 自动填充。model 是请求接口参数 model 的实际值。

    ollama API 接口

    例如通过 ollama 部署的模型服务:

    llm:
      api_type: 'ollama'
      base_url: 'http://127.0.0.1:11434/api'
      model: 'llama2'

    base_url 只需要配置到 http://127.0.0.1:11434/api,其余部分由 Ollama LLM 自动填充。model 是请求参数 model 的实际值。

    可选:修复 LLM 输出

    背景:

    本教程主要介绍如何在 MetaGPT 中整合开源模型(以及非 OpenAI 的闭源模型)。由于 LLM 的输出结果与提示词指令格式密切相关,开源模型(以及一些非 OpenAI 的闭源模型)往往非常复杂。它们很难完全按照 MetaGPT 现有角色的指令进行输出,导致输出内容缺失、遗漏和错误。主要表现如下:

    • 目标键无法按照提示词约定的大小写进行输出。
    • 输出的 JSON 纯文本包含缺失或多余的特殊字符,例如 {"a":b"}}, {"a":b"]}, {"a":b" 等等。

    为了解决这些问题,MetaGPT 添加了修复开源 LLM 输出的功能。

    配置:

    llm: ...
    
    repair_llm_output: true

    开启此功能后,执行过程中会尝试修复上述情况。但目前该功能无法保证完全修复,仍存在一些未覆盖的情况(不同的开源模型有不同的情况),执行过程可能会中断并退出。如果你对此感兴趣,请提交 PR 并附上相应的模型描述、测试日志和单元测试用例。

    开启此功能后,LLM 输出(MetaGPT 中软件公司中的 ProductManagerArchitect 角色)将会被修复。日志中会出现 repair_ 关键字,你可以关注它。

    运行

    完成上述步骤后,你就可以正式开始使用了。

    metagpt "write a snake game"

    扩展

    MetaGPT 本身是一个多智能体框架,并不局限于软件项目生成。你也可以结合整合的开源模型,构建相应的智能体,用于自己的应用场景。开始你的智能体之旅吧!

人生梦想 - 关注前沿的计算机技术 acejoy.com 🐾 步子哥の博客 🐾 背多分论坛 🐾 借一步网
Page Stats: PV: 2317 | UV: 1244
Last updated: 2025-06-25 17:11:14
沪ICP备2024052574号-1