返回

AutoGen本地LLM报错:TypeError: 'api_type' 参数错误解决方案

Ai

AutoGen 本地 LLM 运行错误排查与解决:"TypeError: create() got an unexpected keyword argument 'api_type'"

碰上用 AutoGen 搭配本地 LLM 却跑不起来的情况了?别急,咱来捋一捋。你遇到的错误提示 "TypeError: create() got an unexpected keyword argument 'api_type'",多半跟配置参数有关。下面咱们就一步步排查,找出症结,解决问题。

问题成因:参数配置与版本冲突

错误提示明确指出,create() 函数收到了一个意料之外的参数 'api_type'。 简单说,就是你给的参数,它不认。这通常有两个原因:

  1. AutoGen 版本与示例代码不匹配。 你参考的 GitHub 示例可能用的是较新的 AutoGen 版本, 而你本地安装的版本较旧,不支持 'api_type' 这个参数。
  2. 配置方式错误。 即使 AutoGen 版本支持,'api_type' 的使用位置或方式也可能不对,导致函数无法识别。

解决步骤:对症下药

针对上面分析的原因, 咱分几步走,逐个排查:

1. 检查 AutoGen 版本

首先,确认你安装的 AutoGen 是哪个版本。用命令行:

pip show pyautogen

如果版本比较老,建议升级到最新版:

pip install --upgrade pyautogen

2. 调整配置参数

新版本的 pyautogen (从 0.2.0 开始)可能不直接在 config_list 中使用 api_type。 需要在 model 字段里面进行配置,正确的配置方式:

from autogen import AssistantAgent, UserProxyAgent

config_list = [
    {
        "model": "llama2",  # 假设你在LM Studio用的模型叫llama2, 具体名称按实际情况修改
        "api_base": "http://localhost:1234/v1",
        "api_key": "NULL",  # 本地模型一般不需要api_key,写个"NULL"占位
    }
]

llm_config = {'config_list': config_list}

assistant = AssistantAgent(
    name="assistant",
    llm_config=llm_config
)

user_proxy = UserProxyAgent(
    name="user_proxy",
    human_input_mode="NEVER",
    max_consecutive_auto_reply=10,
)

task = """写一个 Python 函数,输出 1 到 100 的数字。"""

user_proxy.initiate_chat(
    assistant,
    message=task
)

核心改动:

  • api_typeconfig_list 里拿掉。
  • 添加 model 字段, 指定模型名称。这名字要跟你在 LM Studio 里看到的对应上. 也可以根据服务器提供的模型名称修改,比如"mistralai/Mistral-7B-Instruct-v0.1"

工作原理:
新版本的 pyautogen , 让模型名称来决定API类型,内部会做处理,更简洁。

3. 如果还不行:使用 OAI_CONFIG_LIST 文件 (备选方案)

如果调整参数后还遇到问题, 可以尝试把配置信息写到一个单独的文件里 (文件名必须是 OAI_CONFIG_LIST,没有后缀)。

步骤:

  1. 创建 OAI_CONFIG_LIST 文件: 在你的项目目录下 (就是运行代码的地方), 新建一个文件,命名为 OAI_CONFIG_LIST,注意没有后缀。

  2. 写入配置信息: 文件内容类似这样 (根据你的实际情况修改):

    [
        {
            "model": "llama2",
            "api_base": "http://localhost:1234/v1",
            "api_key": "NULL"
        }
    ]
    
  3. 代码中移除 config_list 修改你的 Python 代码,把定义 config_list 的部分去掉,然后直接在llm_config 设置一个空数组:

from autogen import AssistantAgent, UserProxyAgent

# config_list = [...]  # 这行注释掉, 或者删掉

llm_config = {'config_list': []} #设置一个空列表

assistant = AssistantAgent(
    name="assistant",
    llm_config=llm_config
)

user_proxy = UserProxyAgent(
    name="user_proxy",
    human_input_mode="NEVER",
    max_consecutive_auto_reply=10,
)

task = """写一个 Python 函数,输出 1 到 100 的数字。"""

user_proxy.initiate_chat(
    assistant,
    message=task
)

工作原理: AutoGen 会自动查找并读取 OAI_CONFIG_LIST 文件的内容, 作为配置. 这样做的好处是可以把配置和代码分开, 尤其在多模型配置的情况下, 更清晰。

4. 终极大招:检查 LM Studio 设置

如果上面都试过了还不行,就要回头看看 LM Studio 的设置了:

  1. Server 是否正常启动? LM Studio 界面上,确认本地 inference server 已经启动,端口号 (你代码里用的 1234) 也没错。
  2. 模型是否加载成功? 确认你选的模型 (比如 Llama 2) 已经加载,并且状态正常。
  3. 防火墙设置: 检查下, 系统或者安全软件有没有把 LM Studio 或者 1234 端口给拦了.

进阶使用技巧

  1. 多模型配置: 使用OAI_CONFIG_LIST可以很方便的管理不同配置.例如同时使用本地模型, 以及一个OpenAI的gpt-4 模型.
    OAI_CONFIG_LIST文件中写入类似以下内容即可:

        [
            {
                "model": "llama2",
                "api_base": "http://localhost:1234/v1",
                "api_key": "NULL"
            },
           {
                "model": "gpt-4",
                "api_key": "YOUR_API_KEY"
            }
        ]
    
  2. 指定特定模型进行回复 : 如果使用了多模型, 又不想每次都是config_list中第一个模型回复, 可以在AssistantAgent初始化的时候指定:

        assistant = AssistantAgent(
        name="assistant",
        llm_config={
            "config_list": config_list,
            "model": "llama2", # 指定该agent使用的模型
           }
        )
    

    甚至在generate_reply的时候也可以指定. 可以参考autogen官方文档的cookbook部分来了解更细节的操作.

  3. 理解本地模型的局限性
    本地LLM虽然可以在没有网络环境下运行, 但也请注意: 它的能力上限取决于模型大小, 以及你设备的算力 (CPU, 内存, 最好有GPU)。 不要对本地模型有不切实际的期望, 比较复杂的问题或者需要联网的任务,本地LLM可能就处理不了了。

这些都检查过,一般就能解决问题了。 如果还不行,可能就要去 AutoGen 的 GitHub 仓库提 issue,或者到相关论坛、社区寻求帮助了, 把你的错误信息、代码、环境配置都贴上, 方便别人帮你定位问题。