langchain 在验证过程中,PromptTemplate.input_types被忽略了,

xdnvmnnf  于 6个月前  发布在  其他
关注(0)|答案(1)|浏览(63)

检查其他资源

  • 我为这个问题添加了一个非常描述性的标题。
  • 我在集成搜索中搜索了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
ttisahbt

ttisahbt1#

input_types 是从 class BasePromptTemplate 继承的成员。这就是为什么它的文档字符串在文档中可见的原因。我们是否可以忽略这一点,以便为 Sphinx 文档生成?@eyurtsev

相关问题