如何在LangChain中将字符串格式的问答数据存入Chroma DB?
如何直接将字符串格式的问答存入LangChain的Chroma DB
Chroma的from_documents方法不支持直接传入原始字符串,必须将字符串包装成LangChain的Document对象才能存储,下面是具体实现方案:
方案1:将问答对合并为单个文档存储
这种方式适合把查询和对应答案作为整体存储,方便后续检索时直接获取完整问答:
from langchain.embeddings import OpenAIEmbeddings from langchain.vectorstores import Chroma from langchain.docstore.document import Document def store_query_and_answer(query, answer): embeddings = OpenAIEmbeddings() # 拼接问答内容,添加元数据用于标识和检索 qa_content = f"查询:{query}\n答案:{answer}" qa_doc = Document(page_content=qa_content, metadata={"category": "qa_pair", "query": query}) # 初始化Chroma并存储文档,持久化到本地目录 db = Chroma.from_documents(documents=[qa_doc], embedding=embeddings, persist_directory="./chroma_db") db.persist()
方案2:分别存储查询和答案,用元数据关联
如果需要单独管理查询和答案,可以给它们添加相同的标识元数据,方便后续关联:
from langchain.embeddings import OpenAIEmbeddings from langchain.vectorstores import Chroma from langchain.docstore.document import Document import uuid def store_query_and_answer(query, answer): embeddings = OpenAIEmbeddings() # 生成唯一ID关联问答对 qa_uuid = str(uuid.uuid4()) # 创建查询和答案的Document对象 query_doc = Document(page_content=query, metadata={"type": "query", "qa_id": qa_uuid}) answer_doc = Document(page_content=answer, metadata={"type": "answer", "qa_id": qa_uuid}) # 批量存入Chroma数据库 db = Chroma.from_documents(documents=[query_doc, answer_doc], embedding=embeddings, persist_directory="./chroma_db") db.persist()
注意事项
- 每次调用
from_documents时,指定相同的persist_directory会追加数据到现有数据库,若需重建可以手动清理目录或使用版本支持的reset_db=True参数。 - 元数据可以根据业务需求自定义字段,比如添加时间戳、用户ID等,便于后续精准检索。
内容的提问来源于stack exchange,提问作者Nuju
相关产品推荐
相关产品推荐

