Source code for langchain_core.outputs.llm_result
from __future__ import annotations
from copy import deepcopy
from typing import List, Optional
from langchain_core.outputs.generation import Generation
from langchain_core.outputs.run_info import RunInfo
from langchain_core.pydantic_v1 import BaseModel
[docs]class LLMResult(BaseModel):
"""包含批量LLM调用所有结果的类。"""
generations: List[List[Generation]]
"""生成的输出列表。这是一个List[List[]],因为每个输入可能有多个候选生成。"""
llm_output: Optional[dict] = None
"""LLM提供程序特定的任意输出。"""
run: Optional[List[RunInfo]] = None
"""每个输入的模型调用的元数据信息列表。"""
[docs] def flatten(self) -> List[LLMResult]:
"""将多代展平为一个列表。
解包List[List[Generation]] -> List[LLMResult],其中每个返回的LLMResult
仅包含单个Generation。如果有可用的令牌使用信息,
仅保留用于顶选Generation对应的LLMResult,
以避免在下游过多计算令牌使用情况。
返回:
包含单个Generation的LLMResult列表。
"""
llm_results = []
for i, gen_list in enumerate(self.generations):
# Avoid double counting tokens in OpenAICallback
if i == 0:
llm_results.append(
LLMResult(
generations=[gen_list],
llm_output=self.llm_output,
)
)
else:
if self.llm_output is not None:
llm_output = deepcopy(self.llm_output)
llm_output["token_usage"] = dict()
else:
llm_output = None
llm_results.append(
LLMResult(
generations=[gen_list],
llm_output=llm_output,
)
)
return llm_results
def __eq__(self, other: object) -> bool:
"""通过忽略与运行相关的任何元数据来检查LLMResult的相等性。"""
if not isinstance(other, LLMResult):
return NotImplemented
return (
self.generations == other.generations
and self.llm_output == other.llm_output
)