Langchain-core 基础数据模型(message、outputs,output_parsers)

1
用户输入消息 (BaseMessage) → LLM 执行 → 产出LLMResult二维容器(内部包含ChatGeneration/ChatGenerationChunk、内部携带BaseMessage/AIMessageChunk) → 取出 generations 交给BaseOutputParser做解析,输出业务数据
示例:

点击查看代码
from langchain_core.messages import HumanMessage, AIMessageChunk
from langchain_core.outputs import LLMResult, ChatGenerationChunk
from langchain_core.output_parsers import StringOutputParser

# ========== 1. messages模块:用户输入消息(蓝色区域) ==========
user_input = HumanMessage(content="请简单介绍Python")

# ========== 2. outputs模块:模拟大模型流式返回,组装LLMResult(绿色区域) ==========
# 模拟流式分片,AIMessageChunk实现BaseMessageChunk协议,支持 __add__ 拼接
chunk_1 = AIMessageChunk(content="Python是")
chunk_2 = AIMessageChunk(content="一门解释型编程语言。")

# ChatGenerationChunk:包裹消息分片,实现GenerationChunk协议
gen_chunk_1 = ChatGenerationChunk(message=chunk_1)
gen_chunk_2 = ChatGenerationChunk(message=chunk_2)

# LLMResult 二维generations:外层batch,内层候选输出;可以直接存放Chunk对象
llm_result = LLMResult(
    generations=[
        [gen_chunk_1, gen_chunk_2]
    ],
    llm_output={"model_name":"mock‑llm"}
)

# ========== 3. output_parsers模块:解析器消费LLMResult的数据(浅黄色区域) ==========
parser = StringOutputParser()

# 从LLMResult取出内层List[Generation|ChatGenerationChunk],传给parse_result
generation_list = llm_result.generations[0]
# partial=True:流式增量解析
final_text = parser.parse_result(generation_list, partial=True)

print(final_text)
# 输出:Python是一门解释型编程语言。
Generation是支持text:str的原始模型的,chatGeneration则是支持新模型,同时为了兼容旧模型,chunk则代表流式,和非流式最终的结果是一致的,只不过流式在响应优势明显(逐步输出)
posted @ 2026-09-03 19:41  kofxx  阅读(1)  评论(0)    收藏  举报