博客

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

  • MetaGPT 人机协作:让 AI 与人类并肩作战

    在之前的教程中,我们学习了如何创建和使用智能体以及工具。但有时候,我们希望在 AI 系统中引入人类的参与,例如在项目中进行质量保证、在关键决策中提供指导或在游戏中进行角色扮演。这就是 MetaGPT 人机协作功能发挥作用的地方。

    本教程将带你学习如何将人类引入到 MetaGPT 的 AI 系统中,实现人机协作。

    人机交互

    MetaGPT 允许你在 LLM 驱动的智能体和人类之间进行交互。

    示例:

    我们以之前的多智能体教程为例。原本,SimpleReviewer 角色由 LLM 扮演。假设我们想要对审查过程有更多控制权,可以自己扮演 SimpleReviewer 角色。

    只需要在初始化 SimpleReviewer 时设置 is_human=True 即可。代码如下:

    team.hire(
        [
            SimpleCoder(),
            SimpleTester(),
            # SimpleReviewer(),  # 原代码
            SimpleReviewer(is_human=True),  # 修改后的代码
        ]
    )

    现在,你将以人类的身份扮演 SimpleReviewer,与两个 LLM 驱动的智能体 SimpleCoderSimpleTester 进行交互。你可以对 SimpleTester 生成的单元测试进行评论,例如要求增加覆盖率或边缘情况测试。你的反馈将被发送回 SimpleTester,以便它编写新版本的测试用例。

    交互方式

    每次轮到人类进行响应时,运行过程将会暂停,等待你的输入。只需输入你想要的内容,你的消息就会被发送到智能体。

    限制:

    • 目前,交互是通过终端输入进行的,对于多行或结构化的文本输入不太方便。
    • 用户必须遵守提示词的内容或格式要求,以便在人类输入后,逻辑能够正常运行。

    总结

    本教程展示了如何将人类引入到 MetaGPT 的 AI 系统中,实现人机协作。通过人机协作,你可以更好地控制 AI 系统,并发挥人类的优势,例如创造力、判断力等等。

    更多学习资源

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