使用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)
关键修改说明
- 修正系统提示消息类型:将原本用
HumanMessage定义的系统提示替换为SystemMessage,MistralAI的LLM对系统角色的识别依赖明确的SystemMessage类型,错误的消息类型会触发流式请求校验失败。 - 简化对话历史结构:移除不必要的
AIMessage占位内容,减少冗余输入,避免触发Mistral的请求格式限制。 - 新增内容去重逻辑:通过
processed_urls集合避免重复处理同一网站内容,降低无效输入长度,减少触发400错误的概率。
内容的提问来源于stack exchange,提问作者Alexandro
相关产品推荐
相关产品推荐

