LangChain Model I/O (模型输入/输出)
Model I/O 是任何 LLM 应用的核心。LangChain 将这个过程拆解为三个标准步骤:Prompts(提示词)、Models(模型)和 Output Parsers(输出解析器)。

#1. 提示词模版 (Prompts)
不要使用简单的字符串拼接,使用 PromptTemplate 可以让你的应用更具扩展性。
pythonfrom langchain_core.prompts import ChatPromptTemplate template = ChatPromptTemplate.from_messages([ ("system", "你是一位翻译专家,将内容翻译为 {language}。"), ("user", "{text}"), ]) prompt_value = template.invoke({"language": "法文", "text": "你好,世界"})
#2. 聊天模型 (Chat Models)
LangChain 为所有主流模型提供了统一的接口 BaseChatModel。这意味着你可以通过修改一行代码在 GPT-4o 和 Claude 3.5 之间切换。
pythonfrom langchain_openai import ChatOpenAI from langchain_anthropic import ChatAnthropic # 统一使用 .invoke() 方法 llm = ChatOpenAI(model="gpt-4o") # 或者切换为 Claude # llm = ChatAnthropic(model="claude-3-5-sonnet-20240620") response = llm.invoke("介绍一下 LangChain。")
#3. 输出解析器 (Output Parsers)
模型返回的是字符串(或 Message 对象),但你的程序通常需要结构化数据(如 JSON 或 List)。
pythonfrom langchain_core.output_parsers import JsonOutputParser from langchain_core.pydantic_v1 import BaseModel, Field # 定义期望的数据结构 class Joke(BaseModel): setup: str = Field(description="笑话的铺垫") punchline: str = Field(description="笑话的笑点") parser = JsonOutputParser(pydantic_object=Joke) # 组合成一个 Chain chain = template | llm | parser result = chain.invoke({"language": "中文", "text": "讲个关于程序员的笑话"}) # result 此时是一个 Python 字典:{"setup": "...", "punchline": "..."}
#4. LCEL (LangChain 表达式语言)
在上面的例子中,| 符号就是 LCEL。它像管道一样将不同的组件连接起来:
- 可读性强:一眼就能看清数据流向。
- 支持流式 (Streaming):自动处理中间步骤的流。
- 支持异步 (Async):天然支持
ainvoke。
#5. 常见交互模式
- Bind: 给模型绑定参数(如指定
stop词或tools)。 - Fallbacks: 定义备选模型。如果 GPT-4 挂了,自动切换到 Claude。
- Batch: 同时处理多个请求。
下一步:当你的应用需要记住之前的对话时,你需要学习 Memory 记忆系统。