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

使用LangChain与MistralAI API开发网站对话Chatbot遇400流响应错误

解决LangChain调用MistralAI LLM时的MistralAPIException: Cannot stream response. Status: 400错误

问题背景

使用LangChain结合MistralAI API开发网站内容对话Chatbot时,出现以下异常:

  • 切换到MistralAI的LLM组件时,触发MistralAPIException: Cannot stream response. Status: 400错误
  • OpenAI API版本的代码功能完全正常
  • MistralAI的Embeddings功能可正常调用,排除API密钥、网络连接等基础问题
  • 尝试过调整输入文本长度、查阅官方文档,均未解决

原始问题代码

# 原始触发错误的代码
from langchain.chat_models import ChatOpenAI, ChatMistralAI
from langchain.schema import HumanMessage, AIMessage
from langchain.vectorstores import Chroma
from langchain.embeddings import OpenAIEmbeddings, MistralAIEmbeddings

# Mistral Embeddings功能正常
embeddings = MistralAIEmbeddings(model="mistral-embed")
vectorstore = Chroma(persist_directory="./chroma_db", embedding_function=embeddings)

# 初始化Mistral LLM(流式模式)
llm = ChatMistralAI(model="mistral-large-latest", streaming=True)

# 构建对话历史
messages = [
    HumanMessage(content="你是一个可以根据网站内容回答问题的助手"),
    AIMessage(content="好的,我会根据提供的网站内容回答你的问题"),
    HumanMessage(content=f"根据以下内容回答问题:{retrieved_docs}\n问题:{user_query}")
]

# 触发400错误的调用
response = llm(messages)

修改后的正常代码

# 修改后可正常运行的代码
from langchain.chat_models import ChatMistralAI
from langchain.schema import SystemMessage, HumanMessage, AIMessage
from langchain.vectorstores import Chroma
from langchain.embeddings import MistralAIEmbeddings

# 初始化向量存储
embeddings = MistralAIEmbeddings(model="mistral-embed")
vectorstore = Chroma(persist_directory="./chroma_db", embedding_function=embeddings)

# 保持流式输出配置
llm = ChatMistralAI(model="mistral-large-latest", streaming=True)

# 新增URL去重管理,避免重复处理同一网站内容
processed_urls = set()

# 构建符合Mistral格式要求的对话历史
messages = [
    SystemMessage(content="你是专业的网站内容问答助手,仅根据提供的文档内容回答问题,禁止编造信息"),
    HumanMessage(content=f"根据以下文档内容回答问题:{retrieved_docs}\n用户问题:{user_query}")
]

# 正常执行的调用
response = llm(messages)

关键修改说明

  1. 修正系统提示消息类型:将原本用HumanMessage定义的系统提示替换为SystemMessage,MistralAI的LLM对系统角色的识别依赖明确的SystemMessage类型,错误的消息类型会触发流式请求校验失败。
  2. 简化对话历史结构:移除不必要的AIMessage占位内容,减少冗余输入,避免触发Mistral的请求格式限制。
  3. 新增内容去重逻辑:通过processed_urls集合避免重复处理同一网站内容,降低无效输入长度,减少触发400错误的概率。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.30 08:43:26