langchain 结构化输出与Groq:错误代码:400 - {'错误': {'消息': 'response_format`不支持流式传输', '类型': '无效请求错误'}}

6tqwzwtp  于 6个月前  发布在  其他
关注(0)|答案(4)|浏览(42)

检查其他资源

  • 为这个问题添加了一个非常描述性的标题。
  • 使用集成搜索在LangChain文档中进行了搜索。
  • 使用GitHub搜索查找类似的问题,但没有找到。
  • 我确信这是LangChain中的一个bug,而不是我的代码。
  • 通过更新到LangChain的最新稳定版本(或特定集成包)无法解决此错误。

示例代码

class GradeDocuments(BaseModel):
        score: str = Field(
            description="Die Frage handelt sich um ein Smalltalk-Thema, 'True' oder 'False'"
        )

    def question_classifier(state: AgentState):
        question = state["question"]
        print(f"In question classifier with question: {question}")
        system = """<s>[INST] Du bewertest, ob es in sich bei der Frage des Nutzers um ein Smalltalk-Thema handelt oder nicht. \n
            Falls es bei der Frage um generelle Smalltalk-Fragen wie zum Beispiel: 'Hallo, wer bist du?' geht, bewerte es als 'True'. \n
            Falls es sich bei der Frage um eine spezifische Frage zu einem Thema handelt wie zum Beispiel: 'Nenne mir Vorteile von Multi CLoud' geht, bewerte die Frage mit 'False'.[/INST]"""

        grade_prompt = ChatPromptTemplate.from_messages(
            [
                ("system", system),
                (
                    "human",
                    "Frage des Nutzers: {question}",
                ),
            ]
        )

        #llm = ChatOpenAI() mit ChatOpenAI gehts, mit Chatgroq vorher iwie nicht mehr
        env_vars = dotenv_values('.env')
        load_dotenv()
        groq_key = env_vars.get("GROQ_API_KEY")
        print("Loading Structured Groq.")
        llm = ChatGroq(model_name="mixtral-8x7b-32768", groq_api_key = groq_key)
        structured_llm = llm.with_structured_output(GradeDocuments)
        grader_llm = grade_prompt | structured_llm
        result = grader_llm.invoke({"question": question})
        state["is_smalltalk"] = result.score
        return state

错误消息和堆栈跟踪(如果适用)

当涉及到grade_llm.invoke时:
错误代码:400 - {'error': {'message': 'response_format`不支持流式传输', 'type': 'invalid_request_error'}}

描述

你好,
我想使用Groq LLM获取结构化输出,在我的情况下,它应该返回True或False。代码在使用ChatOpenAI时运行正常,但在使用Groq时失败,即使根据文档它应该可以处理结构化输出。
我也尝试了structured_llm = llm.with_structured_output(GradeDocuments, method="json_mode"),但没有成功。
我已经更新了我的langchain-groq版本。
有人知道如何解决这个问题吗?
编辑:我还尝试了一个简单的示例,它在使用ChatOpenAI时可以正常工作,但在使用Groq时出现相同的错误。但是,如果我使用Groq的Llama 3模型,它就可以正常工作,所以似乎这是一个Mixtral 8x7B模型的问题。

系统信息

langchain-groq 0.1.5
langchain 0.2.5

wf82jlnq

wf82jlnq1#

你能请贴出回溯吗?

byqmnocz

byqmnocz2#

请将以下代码粘贴到您的编辑器中,以查看回溯:

[/Users/mweissenba001/Documents/GitHub/fastapi_rag_demo/test.ipynb](https://file+.vscode-resource.vscode-cdn.net/Users/mweissenba001/Documents/GitHub/fastapi_rag_demo/test.ipynb)  [~/anaconda3/lib/python3.11/site-packages/langchain_core/runnables/base.py:2505](https://file+.vscode-resource.vscode-cdn.net/Users/mweissenba001/Documents/GitHub/fastapi_rag_demo/~/anaconda3/lib/python3.11/site-packages/langchain_core/runnables/base.py:2505) 
--> 23. structured_llm.invoke("Hallo, wer bist du?")
File  [~/anaconda3/lib/python3.11/site-packages/langchain_core/runnables/base.py:2505](https://file+.vscode-resource.vscode-cdn.net/Users/mweissenba001/Documents/GitHub/fastapi_rag_demo/~/anaconda3/lib/python3.11/site-packages/langchain_core/runnables/base.py:2505) , in RunnableSequence.invoke(self, input, config, **kwargs)
  501 config = patch_config(
  502 config, callbacks=run_manager.get_child(f"seq:step:{i+1}")
  503 )
  504 if i == 0:
--> 505 input = step.invoke(input, config, **kwargs)
  506 else:
--> 507 input = step.invoke(input, config)
File  [~/anaconda3/lib/python3.11/site-packages/langchain_core/runnables/base.py:4588](https://file+.vscode-resource.vscode-cdn.net/Users/mweissenba001/Documents/GitHub/fastapi_rag_demo/~/anaconda3/lib/python3.11/site-packages/langchain_core/runnables/base.py:4588) , in RunnableBindingBase.invoke(self, input, config, **kwargs)
  458 def invoke(
  459 self,
  460 input: Input,
--> 461 config: Optional[RunnableConfig] = None,
  462 **kwargs: Any,
  463 ) -> Output:
--> 464 return self.bound.invoke(
  465 input,
--> 466 self._merge_configs(config),
--> 467 **{**self.kwargs, **kwargs},
--> 468 )
File  [~/anaconda3/lib/python3.11/site-packages/langchain_core/language_models/chat_models.py:248](https://file+.vscode-resource.vscode-cdn.net/Users/mweissenba001/Documents/GitHub/fastapi_rag_demo/~/anaconda3/lib/python3.11/site-packages/langchain_core/language_models/chat_models.py:248) , in BaseChatModel.invoke(self, input, config, stop, **kwargs)
 237 def invoke(
 238 self,
--> 239 input: LanguageModelInput,
 (...)
>>>> 240 return self.generate_prompt(
[self._convert_input(input)],
--> stop=stop,
--> callbacks=config.get("callbacks"),
--> tags=config.get("tags"),
--> metadata=config.get("metadata"),
--> run_name=config.get("run_name"),
--> run_id=config.pop("run_id", None),
--> **kwargs,
--> ).generations[0][0],
--> ).message
File  [~/anaconda3/lib/python3.11/site-packages/langchain_core/language_models/chat_models.py:677](https://file+.vscode-resource.vscode-cdn.net/Users/mweissenba001/Documents/GitHub/fastapi_rag_demo/~/anaconda3/lib/python3.11/site-packages/langchain_core/language_models/chat_models.py:677) , in BaseChatModel.generate_prompt(self, prompts, stop, callbacks, **kwargs)
<<<<<<< HEAD
669 def generate_prompt(
670 self,
-->671 prompts: List[PromptValue],
-->672 ...
>>>>>>> f9a8d9c7b8d9c7b8d9c7b8d9c7b8d9c7b8d9c7b8d9c7b8d9c7b8d9c7b8d9c7b8d9c7b8d9c7b8d9c7b8d9c7b8d9c7b8d9c7b8d9c7b8d9c7b8d9c7b8d9c7b8d9c7b8d9c7b8d9c7b8d9c7b8d9c7b8d9c7b8d9c7b8d9c7b8d9c7b8d9c7b8d9c7b8d9c7b8d9c7b8d9c7b8d9c7b8d9c7b8d9c7b8d9c7b8d9c7b8d9c7b8d9c7b8d9c7b8d9c7b8d9c7b8d9c7b8d9c7b8d9c7b8d9c7b8d9c7b8d9c7b8d9c7b8d9c7b8d9c7b8d9c7b8d9c7b8d9c7b8d9c7b8d9c7b8d9c7b8d9c7b8d9c7b8d9c7b8d
翻译结果如下:

1184 stream_cls:类型[_StreamT] | None = None,
1185 ) -> ResponseT | _StreamT:
1186 opts = FinalRequestOptions.construct(
1187 method="post", url=path, json_data=body, files=to_httpx_files(files), **options
1188 )
-> 1189 return cast(ResponseT, self.request(cast_to, opts, stream=stream, stream_cls=stream_cls))
文件 [~/anaconda3/lib/python3.11/site-packages/groq/_base_client.py:891](https://file+.vscode-resource.vscode-cdn.net/Users/mweissenba001/Documents/GitHub/fastapi_rag_demo/~/anaconda3/lib/python3.11/site-packages/groq/_base_client.py:891) ,在 SyncAPIClient.request(self, cast_to, options, remaining_retries, stream, stream_cls)
882 def request(
883 self,
884 cast_to: Type[ResponseT],
(...)
889 stream_cls: type[_StreamT] | None = None,
890 ) -> ResponseT | _StreamT:
 --> 891 return self._request(
892 cast_to=cast_to,
893 options=options,
894 stream=stream,
895 stream_cls=stream_cls,
896 remaining_retries=remaining_retries,
897 )
文件 [~/anaconda3/lib/python3.11/site-packages/groq/_base_client.py:982](https://file+.vscode-resource.vscode-cdn.net/Users/mweissenba001/Documents/GitHub/fastapi_rag_demo/~/anaconda3/lib/python3.11/site-packages/groq/_base_client.py:982) ,在 SyncAPIClient._request(self, cast_to, options, remaining_retries, stream, stream_cls)
979 err.response.read()
981 log.debug("Re-raising status error")
 --> 982 raise self._make_status_error_from_response(err.response) from None
984 return self._process_response(
985 cast_to=cast_to,
986 options=options,
(...)
989 stream_cls=stream_cls,
990 )
NotFoundError:错误代码:404 - {'error': {'message': '模型 `llama3-8b-81928` 不存在或您无权访问它。', 'type': 'invalid_request_error', 'code': 'model_not_found'}}
relj7zay

relj7zay3#

@weissenbacherpwc 谢谢,我会查看一下。

d8tt03nd

d8tt03nd4#

我遇到了同样的问题,我不得不创建一个子类来阻止流式传输。
langchain/libs/partners/groq/langchain_groq/chat_models.py
第507行 in 9d0c1d2
| | if"tools"inkwargs: |
对于工具使用有特殊情况,在这种情况下只需要使用该路径。

相关问题