AutoGen本地LLM报错:TypeError: 'api_type' 参数错误解决方案
2025-03-14 20:16:36
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'
。 简单说,就是你给的参数,它不认。这通常有两个原因:
- AutoGen 版本与示例代码不匹配。 你参考的 GitHub 示例可能用的是较新的 AutoGen 版本, 而你本地安装的版本较旧,不支持
'api_type'
这个参数。 - 配置方式错误。 即使 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_type
从config_list
里拿掉。 - 添加
model
字段, 指定模型名称。这名字要跟你在 LM Studio 里看到的对应上. 也可以根据服务器提供的模型名称修改,比如"mistralai/Mistral-7B-Instruct-v0.1"
。
工作原理:
新版本的 pyautogen
, 让模型名称来决定API类型,内部会做处理,更简洁。
3. 如果还不行:使用 OAI_CONFIG_LIST
文件 (备选方案)
如果调整参数后还遇到问题, 可以尝试把配置信息写到一个单独的文件里 (文件名必须是 OAI_CONFIG_LIST
,没有后缀)。
步骤:
-
创建
OAI_CONFIG_LIST
文件: 在你的项目目录下 (就是运行代码的地方), 新建一个文件,命名为OAI_CONFIG_LIST
,注意没有后缀。 -
写入配置信息: 文件内容类似这样 (根据你的实际情况修改):
[ { "model": "llama2", "api_base": "http://localhost:1234/v1", "api_key": "NULL" } ]
-
代码中移除
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 的设置了:
- Server 是否正常启动? LM Studio 界面上,确认本地 inference server 已经启动,端口号 (你代码里用的
1234
) 也没错。 - 模型是否加载成功? 确认你选的模型 (比如 Llama 2) 已经加载,并且状态正常。
- 防火墙设置: 检查下, 系统或者安全软件有没有把 LM Studio 或者 1234 端口给拦了.
进阶使用技巧
-
多模型配置: 使用
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" } ]
-
指定特定模型进行回复 : 如果使用了多模型, 又不想每次都是
config_list
中第一个模型回复, 可以在AssistantAgent
初始化的时候指定:assistant = AssistantAgent( name="assistant", llm_config={ "config_list": config_list, "model": "llama2", # 指定该agent使用的模型 } )
甚至在
generate_reply
的时候也可以指定. 可以参考autogen官方文档的cookbook部分来了解更细节的操作. -
理解本地模型的局限性
本地LLM虽然可以在没有网络环境下运行, 但也请注意: 它的能力上限取决于模型大小, 以及你设备的算力 (CPU, 内存, 最好有GPU)。 不要对本地模型有不切实际的期望, 比较复杂的问题或者需要联网的任务,本地LLM可能就处理不了了。
这些都检查过,一般就能解决问题了。 如果还不行,可能就要去 AutoGen 的 GitHub 仓库提 issue,或者到相关论坛、社区寻求帮助了, 把你的错误信息、代码、环境配置都贴上, 方便别人帮你定位问题。