You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

本地GPU部署Mixtral模型调用工具时遇400错误求助

本地Mixtral模型结合LangChain实现结构化输出报错400的解决方法

问题场景

本地GPU部署Mixtral模型后,使用LangChain的ChatOpenAI类对接OpenAI兼容接口,通过create_structured_output_runnable生成结构化测试用例时,触发openai.BadRequestError(错误码400),提示Extra inputs are not permitted,报错指向请求体中的function_call和functions字段不被允许。

报错原因

create_structured_output_runnable基于OpenAI的**函数调用(Function Calling)**机制实现,但你使用的mistral-7b-instruct-v02原生不支持OpenAI格式的函数调用参数。本地部署的API服务(如vLLM、text-generation-inference)会拒绝这些额外的函数相关字段,导致400错误。

解决方案

方案1:改用输出解析器替代函数调用机制

绕开OpenAI的函数调用逻辑,直接通过提示词引导模型输出指定格式内容,再用LangChain的PydanticOutputParser解析结果,这是适配本地非函数调用模型的最优方案。

修改后的代码:

from langchain_openai import ChatOpenAI
import httpx
from langchain.output_parsers import PydanticOutputParser
from langchain_core.prompts import PromptTemplate
from langchain_core.pydantic_v1 import BaseModel, Field
from typing import List

http_client = httpx.Client(verify=False)

llm = ChatOpenAI(
    base_url="<URL RUNNING MIXTRAL MODEL>",
    http_client=http_client,
    api_key="API KEY",
    model="mistral-7b-instruct-v02",
)

class Test(BaseModel):
    """测试用例结构定义"""
    Input: List[List] = Field(description="测试用例的输入数据集合")
    Output: List[List] = Field(description="测试用例对应的预期输出集合")

# 初始化Pydantic格式解析器
parser = PydanticOutputParser(pydantic_object=Test)

# 构建包含格式约束的提示词
test_gen_prompt = PromptTemplate(
    template="""请为以下代码生成单元测试用例:
{code}

请严格按照以下JSON格式输出结果:
{format_instructions}""",
    input_variables=["code"],
    partial_variables={"format_instructions": parser.get_format_instructions()}
)

# 构建执行链:提示词 → LLM → 格式解析
tester_agent = test_gen_prompt | llm | parser

# 执行调用
sample_code = """<SAMPLE JAVA Code Base>"""
result = tester_agent.invoke({"code": sample_code})
print(result.Input)
print(result.Output)

方案2:适配支持函数调用的部署或模型

如果需要工具调用能力(如多Agent协作场景),可选择以下方式:

  • 部署时开启函数调用支持:用vLLM部署时添加--enable-function-calling启动参数;用text-generation-inference时配置对应工具调用参数。
  • 使用支持工具调用的Mixtral变体:选择Mistral官方发布的工具调用微调模型,或社区适配的版本。
  • 用LangChain的HuggingFacePipeline对接模型,结合tool_calling组件实现自定义适配。

验证说明

方案1的代码通过提示词明确约束输出格式,无需依赖模型的函数调用能力,适配绝大多数本地部署的开源LLM(包括Mixtral)。执行后会直接返回Test类实例,可直接访问Input和Output字段。

内容的提问来源于stack exchange,提问作者Anshuman Kumar

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.23 00:50:23