You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

LangChain中language占位符未生效,回复始终为英文问题求助

问题原因分析与解决方案

核心问题与原因

  1. System Prompt指令不够明确:原prompt仅要求"用{language}回答",若用户输入为英文,模型可能默认沿用英文回复,需要更强制的指令约束。
  2. 手动重复维护会话历史:你既通过session_history.add_message(human_message)手动添加用户消息,又在invoke调用中传入messages=[human_message],导致会话历史出现重复消息,干扰模型对指令的理解。
  3. 历史管理逻辑冗余:RunnableWithMessageHistory本身会自动处理会话历史的添加与合并,手动操作属于重复劳动,还可能引发逻辑冲突。

修正后的代码

# Securely input the OpenAI API key
api_key = os.getenv("OPENAI_API_KEY")

# Initialize the ChatOpenAI model with the API key
model = ChatOpenAI(model="gpt-3.5-turbo", api_key=api_key, verbose=True)

# 将prompt和链初始化移到函数外,避免重复创建
prompt = ChatPromptTemplate.from_messages(
    [
        ("system", "You are a helpful assistant. Strictly answer all questions in {language}, no matter what language the user uses."),
        MessagesPlaceholder(variable_name="history"),
    ]
)
chain = prompt | model

def invoke_model(session_id: str, message: str):
    with_message_history = RunnableWithMessageHistory(
        chain, 
        get_session_history, 
        input_messages_key="new_message",
        history_messages_key="history"
    )

    config = {"configurable": {"session_id": session_id}}
    # 仅传入新消息和language参数,让RunnableWithMessageHistory自动管理历史
    response = with_message_history.invoke(
        {"new_message": HumanMessage(content=message), "language": "Spanish"}, 
        config=config
    )
    return response.content

关键调整说明

  • 强化指令约束:修改system prompt,明确要求模型"无论用户使用什么语言,都严格用指定语言回复",消除模型的歧义空间。
  • 规范历史管理:通过input_messages_key指定新消息的参数名,history_messages_key关联prompt中的历史占位符,让RunnableWithMessageHistory自动完成消息添加与历史合并,彻底移除手动维护历史的代码。
  • 优化资源利用:将prompt和链的初始化移到函数外,避免每次调用都重复创建,提升运行效率。

额外验证建议

如果修改后仍不生效,可以:

  • 借助verbose=True查看实际发送给模型的prompt内容,确认{language}是否被正确替换为目标语言。
  • 测试时使用明确的多语言输入,比如用中文提问,验证模型是否按指定语言回复。

内容的提问来源于stack exchange,提问作者airsoftFreak

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.19 23:36:11