LangChain 提示工程与输出解析器实践指南 | 豆包MarsCode AI刷题

4 阅读4分钟

实践目标

本指南旨在帮助开发者理解和掌握大语言模型的提示工程与输出解析器技术,特别是在 LangChain 框架中的实际应用。从基本的提示设计到复杂的输出解析方法,内容涵盖了多种场景与实践示例。


提示工程基础

  1. Few-Shot 与 Zero-Shot Prompting

    • Few-Shot 提供示例帮助模型理解任务。
    • Zero-Shot 直接通过任务描述生成答案。
    • 实践案例:设计提示模板,帮助模型为鲜花生成精准文案。
  2. Chain of Thought (CoT)

    • 模型通过逐步推理解决复杂问题。
    • 应用场景:帮助用户选择鲜花、设计复杂业务决策流程。
  3. Tree of Thought (ToT)

    • 扩展 CoT,生成多条推理路径并优化选择。
    • 实践案例:为鲜花运营场景中的客户服务问题生成最佳解决方案。

LangChain 输出解析器

  1. Pydantic (JSON) Output Parser

    • 定义数据结构,确保模型生成的输出符合格式。

    • 实践示例

      • 为鲜花生成文案,包括花名、价格和推荐理由。
      • 使用 Pydantic 库自动验证模型输出的正确性。
  2. 自动修复解析器 (OutputFixingParser)

    • 修复模型输出的格式错误,如 JSON 引号问题。
    • 适用场景:当输出格式错误但内容完整时。
  3. 重试解析器 (RetryWithErrorOutputParser)

    • 在内容缺失或逻辑错误时,基于原始提示重新生成输出。

    • 实践示例

      • 为用户问题生成行动建议时补全缺失信息。
# 导入必要的模块
from pydantic import BaseModel, Field
from langchain.prompts import PromptTemplate
from langchain.output_parsers import PydanticOutputParser, RetryWithErrorOutputParser
from langchain.llms import OpenAI

# 定义数据模型,用于描述行动建议的结构
class Action(BaseModel):
    action: str = Field(description="需要采取的行动")
    action_input: str = Field(description="行动的输入")

# 创建 Pydantic 输出解析器
parser = PydanticOutputParser(pydantic_object=Action)

# 定义提示模板,包含格式化说明
prompt_template = PromptTemplate(
    template=(
        "根据用户的问题,生成一个行动建议,包括需要采取的行动和行动输入。\n"
        "{format_instructions}\n"
        "问题: {query}\n"
        "回应:"
    ),
    input_variables=["query"],
    partial_variables={"format_instructions": parser.get_format_instructions()},
)

# 初始化重试解析器,用于处理输出缺失的情况
retry_parser = RetryWithErrorOutputParser.from_llm(
    parser=parser, llm=OpenAI(temperature=0)
)

# 模拟一个不完整的输出
incomplete_response = '{"action": "search"}'

# 生成提示并修复不完整的响应
prompt_value = prompt_template.format_prompt(query="列出兰花的颜色")
fixed_output = retry_parser.parse_with_prompt(incomplete_response, prompt_value)

# 打印结果
print(fixed_output)

代码说明

  1. 数据模型定义

    • Action 包含两个字段:action 表示需要采取的行动,action_input 表示该行动的输入。
  2. 解析器初始化

    • 使用 PydanticOutputParser 验证并解析模型输出。
    • 如果输出不完整,则通过 RetryWithErrorOutputParser 重试,向模型重新提问。
  3. 问题与响应

    • 使用提示模板动态生成输入提示。
    • 模拟不完整的响应并通过重试解析器补全缺失信息。
  4. 输出

    • 程序会生成完整的 Action 对象,并包含 action_input 的正确补全信息。

综合实战:鲜花文案生成

  1. 目标:为不同类型鲜花生成结构化的文案,包括描述、价格和推荐理由。

  2. 步骤

    • 定义 Pydantic 数据模型。
    • 创建输出解析器与提示模板。
    • 循环传入鲜花信息,生成文案并解析。
  3. 关键点

    • 输出格式需与解析器定义一致。
    • 使用自动修复解析器或重试解析器应对复杂错误。

总结与延伸

  • 总结

    • 提示工程(Few-Shot, CoT, ToT)与输出解析器(Pydantic、自动修复、重试)是提升 LLM 应用可靠性与复杂任务能力的核心技术。
  • 延伸阅读

    • LangChain 官方文档与案例。
    • CoT 与 ToT 在实际问题解决中的进一步应用。

思考与练习

  1. 思考题

    • LangChain 中不同类型的输出解析器有何异同?请结合实际案例分析。
    • 为什么大模型能生成 JSON 格式的数据?输出解析器在实现中起到了什么作用?
    • 自动修复解析器如何设计提示以解决常见问题?
  2. 实践建议

    • 使用 LangChain 提供的提示模板与解析器构建实际项目。
    • 尝试在 CoT 和 ToT 技术基础上设计复杂推理任务。