检查其他资源
- 我为这个问题添加了一个非常描述性的标题。
- 我在集成搜索中搜索了LangChain文档。
- 我使用GitHub搜索找到了一个类似的问题,但没有找到。
- 我确信这是LangChain中的一个bug,而不是我的代码。
- 通过更新到LangChain的最新稳定版本(或特定集成包)无法解决这个bug。
示例代码
document_prompt = PromptTemplate(
input_variables=["page_content", "metadata"],
input_types={
"page_content": str,
"metadata": dict[str, Any],
},
output_parser=None,
partial_variables={},
template="{metadata['source']}: {page_content}",
template_format="f-string",
validate_template=True
)
错误信息和堆栈跟踪(如果适用)
File "/home/fules/src/ChatPDF/streamlitui.py", line 90, in <module>
main()
File "/home/fules/src/ChatPDF/streamlitui.py", line 51, in main
st.session_state["pdfquery"] = PDFQuery(st.session_state["OPENAI_API_KEY"])
File "/home/fules/src/ChatPDF/pdfquery.py", line 32, in __init__
document_prompt = PromptTemplate(
File "/home/fules/src/ChatPDF/_venv/lib/python3.10/site-packages/pydantic/v1/main.py", line 341, in __init__
raise validation_error
pydantic.v1.error_wrappers.ValidationError: 1 validation error for PromptTemplate
__root__
string indices must be integers (type=type_error)
描述
- 我正在尝试创建一个不仅使用文档内容,还使用其元数据的文档格式化模板
- 由于我明确指定
metadata
成员是一个字典,我希望验证逻辑会尊重这一信息 - 我经历过所有输入变量都被当作
str
处理,而不管input_types
是什么
在这一点上,input_types
没有传递给 check_valid_template
,因此在此点之后丢失了类型信息,因此即使尝试过,验证器也无法考虑该类型。
在这一点上,验证器 validate_input_variables
试图通过将字符串 "foo"
分配给所有输入变量来解析模板,这就是引发异常的地方。PromptTemplate.input_types
的文档指出
一个提示模板期望的变量类型的字典。如果未提供,所有变量都被视为字符串。
如果这种行为( input_types
被忽略,所有变量始终被视为字符串)是预期的行为,那么将其反映在文档中可能是个好主意。
系统信息
$ pip freeze | grep langchain
langchain==0.2.2
langchain-community==0.2.3
langchain-core==0.2.4
langchain-openai==0.1.8
langchain-text-splitters==0.2.1
$ uname -a
Linux Lya 5.15.146.1-microsoft-standard-WSL2 #1 SMP Thu Jan 11 04:09:03 UTC 2024 x86_64 x86_64 x86_64 GNU/Linux
$ python --version
Python 3.10.6
1条答案
按热度按时间ttisahbt1#
input_types
是从class BasePromptTemplate
继承的成员。这就是为什么它的文档字符串在文档中可见的原因。我们是否可以忽略这一点,以便为 Sphinx 文档生成?@eyurtsev