Open whitemay opened 5 months ago
@whitemay 感谢反馈。这两天我漏掉了这个 issue 。我会参考一下这两个工具函数。感谢分享。
有没有兴趣参与到开发中来?比如引入这两个工具函数的使用,帮助提高模型推理质量。
@whitemay 你说的应该是这个函数吧?
https://github.com/langchain-ai/langchainjs/blob/main/langchain/src/chains/combine_documents/base.ts
export async function formatDocuments({
documentPrompt,
documentSeparator,
documents,
config,
}: {
documentPrompt: BasePromptTemplate;
documentSeparator: string;
documents: Document[];
config?: RunnableConfig;
}) {
const formattedDocs = await Promise.all(
documents.map((document) =>
documentPrompt
.withConfig({ runName: "document_formatter" })
.invoke(
{ ...document.metadata, page_content: document.pageContent },
config
)
)
);
return formattedDocs.join(documentSeparator);
}
用这个函数的难度是,如果要引入元数据,需要提示词模版 promptTemplate 中指定元数据变量。还需要琢磨一下如何引入元数据。
Document对象保存的时候,还包括metadata(例如文件来源等信息)。这些信息有助于帮助LLM分析数据的来源,做出更加有效的推理。 在 server/api/models/chat/index.post.ts 第70行,调用了langchain的 formatDocumentsAsString 函数来直接对参考文档进行格式化,该函数实际上会直接忽略掉所有的metadata信息,只采用content内容转为文档。 langchain库中另外有formatDocument和formatDocuments两个工具类可以用,是否可以使用或者参考?至少可以考虑将source等常用的metadata添加到prompt中。