sugarforever / chat-ollama

ChatOllama is an open source chatbot based on LLMs. It supports a wide range of language models, and knowledge base management.
MIT License
2.56k stars 395 forks source link

没有在数据中加入metadata #206

Open whitemay opened 5 months ago

whitemay commented 5 months ago

Document对象保存的时候,还包括metadata(例如文件来源等信息)。这些信息有助于帮助LLM分析数据的来源,做出更加有效的推理。 在 server/api/models/chat/index.post.ts 第70行,调用了langchain的 formatDocumentsAsString 函数来直接对参考文档进行格式化,该函数实际上会直接忽略掉所有的metadata信息,只采用content内容转为文档。 langchain库中另外有formatDocument和formatDocuments两个工具类可以用,是否可以使用或者参考?至少可以考虑将source等常用的metadata添加到prompt中。

sugarforever commented 4 months ago

@whitemay 感谢反馈。这两天我漏掉了这个 issue 。我会参考一下这两个工具函数。感谢分享。

有没有兴趣参与到开发中来?比如引入这两个工具函数的使用,帮助提高模型推理质量。

sugarforever commented 4 months ago

@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 中指定元数据变量。还需要琢磨一下如何引入元数据。