我正在尝试使用 RunnableEach 向 OpenAI 发出并行请求。回答应该是“是/否”加上动机。我希望响应是 JSON 格式,我的代码如下:
from langchain_core.prompts import ChatPromptTemplate
from langchain_core.runnables.base import RunnableEach
from langchain_openai import ChatOpenAI
class Classification(BaseModel):
flag: bool = Field(description="my descr",enum=[True, False])
answer: str = Field(description="my descr")
llm = ChatOpenAI(temperature=0, model="gpt-4o-mini", api_key=model_key).with_structured_output(
Classification)
prompt = my_prompt
tagging_chain = prompt | llm
runnable_each = RunnableEach(bound=tagging_chain)
input_list = [{"input": val} for val in mydata]
res = runnable_each.invoke(input_list)
我的输入列表中有大约 25k 个元素,也就是说必须处理 25k 个请求。直到今天为止,这一切都运行良好,但由于一个请求中的错误而失败了:
Function Classification arguments:
{"flag":false,"motivation":"The passage does not contain any information relevant to products
are not valid JSON. Received JSONDecodeError Unterminated string starting at: line 1 column 34 (char 33)
我知道对 llm 模型的调用返回了一个格式错误的字符串,当解析为 JSON 时(因为我限制了输出),会生成错误。我想知道是否可以以某种方式处理这种错误,使整个过程不会失败,而只会失败该请求。预先感谢您的帮助。
我在文档中找到了以下内容
return_exceptions (bool) – Whether to return exceptions instead of raising them. Defaults to False.
所以基本上你只需将
return_exceptions
作为 True
传递给 RunnableEach
,它只会返回它,而不会破坏整个事情。