Langsmith含MessagesPlaceholder的混合模板数据集创建异常问题
问题原因及解决方法
1. 聊天历史格式不符合规范
你传入的chat_history只是简单的字符串元组,LangSmith无法识别其消息角色(用户/助手/系统),导致无法在UI中正确解析和展示示例。必须使用结构化的消息格式,可选两种形式:
- LangChain的消息对象(如
HumanMessage、AIMessage) - 包含
role和content字段的字典
2. 数据集未指定聊天类型
创建数据集时未设置data_type=ls_schemas.DataType.chat,LangSmith默认按普通文本数据集处理,无法适配聊天类示例的展示和编辑逻辑。
修正后的代码示例
from langchain_core.messages import SystemMessage, HumanMessage from langchain_core.prompts import ChatPromptTemplate from langchain_core.prompts.chat import MessagesPlaceholder import langsmith as ls from langsmith import schemas as ls_schemas # 原Prompt定义保持不变 prompt_template = ChatPromptTemplate([ SystemMessage("Here goes a mustache variable: {{var_1}}"), MessagesPlaceholder("chat_history") ], template_format="mustache") # 修正示例的聊天历史格式 examples = [ {"var_1": 10, "chat_history": [HumanMessage("hi!")]}, {"var_1": 12, "chat_history": [HumanMessage("hola!")]}, # 也可使用字典格式替代消息对象 # {"var_1": 10, "chat_history": [{"role": "user", "content": "hi!"}]}, ] dataset_name = "test_2" client = ls.Client() # 创建数据集时指定聊天类型 dataset = client.create_dataset( dataset_name=dataset_name, data_type=ls_schemas.DataType.chat ) # 插入示例 client.create_examples(dataset_id=dataset.id, examples=examples)
额外说明
- 修正后,LangSmith UI会以聊天会话形式展示
chat_history字段,同时正常显示var_1这类普通变量。 - 数据集设置为
chat类型后,UI的「+ Example」按钮会出现适配聊天消息的输入界面,支持添加不同角色的消息,同时也能添加自定义变量(如var_1)。
内容的提问来源于stack exchange,提问作者Facundo
相关产品推荐
相关产品推荐

