首页 > 编程语言 >LangChain Prompt Chain文本改写与翻译构建指南

LangChain Prompt Chain文本改写与翻译构建指南

来源:互联网 2026-07-29 07:41:29

在LangChain的ChatPromptTemplate中,System、Human、AI消息角色严格区分。若将翻译指令误放入System会导致失效。正确做法:角色定义放入System,而具体多步任务如改写和目标语言翻译应写入Human模板,确保两者同步准确完成。

本文详解 LangChain 中 ChatPromptTemplate 的消息类型分工,指出原链因混淆 System 与 Human 角色导致翻译失效,并提供结构清晰、可复用的 Prompt 链设计方法,确保改写与目标语言翻译同步准确完成。

在 LangChain 的 ChatPromptTemplate 里,System、Human(或 User)和 AI 这三类消息,扮演着严格区分的语义角色。很多人一开始没太在意这个,结果写出来的链总出各种奇怪的问题。

三类消息的职责划分

先理清这三者的职责。System 消息是用来设定模型身份、能力边界和行为准则的——比如“你是一个专业翻译助手”。它不承载具体的任务指令。Human 消息才是触发模型执行动作的核心输入,必须明确、完整地描述待处理任务,例如“请先改写以下文本,再译为德语”。而 AI 消息呢,通常只在少样本示例(Few-shot)场景下才用到,在推理链中一般不会显式出现。

长期稳定更新的攒劲资源: >>>点此立即查看<<<

常见错误:任务指令误放 System 消息

回到那类常见的错误。原代码的问题根源在于,把关键任务指令(比如“重写并翻译为 {language}”)错误地塞进了 System 消息,而 User 消息里只放了个原始文本 {input}。结果呢?大模型更倾向于把 System 里的内容当作背景约束,而不是可执行的命令。它认认真真地完成了改写——但默认语言是英文,翻译要求被彻底忽略了。

正确设计:System 定义角色,Human 承载任务

正确的做法其实很直接:把角色定义放在 System,把具体的多步任务明确写入 Human 模板。下面是优化后的链实现:

#  正确定义 System + Human 双消息结构
system_message = "You are a professional linguistic assistant skilled in paraphrasing technical documents and translating them accurately across European languages."

human_template = """
Your task has two mandatory steps:
1. Rephrase the following text clearly and professionally, preserving all factual details and technical terms: {input}
2. Translate the rephrased version into {language}.
Do NOT output anything other than the final translated text.
"""

chat_prompt = ChatPromptTemplate.from_messages([
    ("system", system_message),
    ("human", human_template),
])

# 绑定 LLM 与输出解析器
chain = chat_prompt | llm | StrOutputParser()

# 调用时传入用户输入和目标语言(注意:此处应传 language_code,如 "cs",而非显示标签 "Czech (CZ)")
answer = chain.invoke({
    "input": user_input,
    "language": selected_label  # ← 关键修正:使用字典键(如 "cs")而非值(如 "Czech (CZ)")
})

关键注意事项

  • 语言参数一致性:前端 language_options 字典的 key(比如 "cs")才是标准语言代码,应该直接传给 Prompt。如果传进去的是 "Czech (CZ)",模型很可能无法识别,结果翻译失败。
  • 指令原子性:避免在 System 中混入操作指令。所有“做什么”必须出现在 Human 模板里,用编号、换行等方式增强可读性。
  • 输出控制:加上 "Do NOT output anything other than..." 这类强约束语句,能显著提升 StrOutputParser 的解析稳定性,防止模型附加解释或格式符号。

总结:严格遵循消息角色分工

说到底,只要严格遵循消息角色的分工,把任务逻辑完整地写在 Human 模板里,就能构建出可靠、可维护、符合预期的 Prompt Chain。这个思路一旦固定下来,后面再复杂的多步任务也都好办了。

侠游戏发布此文仅为了传递信息,不代表侠游戏网站认同其观点或证实其描述

热游推荐

更多
湘ICP备14008430号-1 湘公网安备 43070302000280号
All Rights Reserved
本站为非盈利网站,不接受任何广告。本站所有软件,都由网友
上传,如有侵犯你的版权,请发邮件给xiayx666@163.com
抵制不良色情、反动、暴力游戏。注意自我保护,谨防受骗上当。
适度游戏益脑,沉迷游戏伤身。合理安排时间,享受健康生活。