内容简介
- 尝试用
FAISS
或DocArrayInMemorySearch
将数据向量化后检索 astream_events
的效果为|H|arrison| worked| at| Kens|ho|.||
安装依赖
# 之前的依赖即可 pip install --upgrade --quiet langchain-core langchain-community langchain-openai # Win或Linux用户可以试试 FAISS pip install faiss # mac用户应该为 pip install faiss-cpu
编写代码
我没有用 FAISS,这里替换为:DocArrayInMemorySearch
# MacBookProM1 FAISS没有包,可能是 faiss-cpu # from langchain_community.vectorstores import FAISS from langchain_community.vectorstores import DocArrayInMemorySearch from langchain_core.output_parsers import StrOutputParser from langchain_core.runnables import RunnablePassthrough from langchain_core.prompts import ChatPromptTemplate from langchain_openai import OpenAIEmbeddings from langchain_openai.chat_models import ChatOpenAI async def main(): template = """Answer the question based only on the following context: {context} Question: {question} """ prompt = ChatPromptTemplate.from_template(template) vectorstore = DocArrayInMemorySearch.from_texts( ["harrison worked at kensho"], embedding=OpenAIEmbeddings() ) retriever = vectorstore.as_retriever() model = ChatOpenAI( model="gpt-3.5-turbo", ) retrieval_chain = ( { "context": retriever.with_config(run_name="Docs"), "question": RunnablePassthrough(), } | prompt | model.with_config(run_name="my_llm") | StrOutputParser() ) async for event in retrieval_chain.astream_events( "where did harrison work?", version="v1", include_names=["Docs", "my_llm"] ): kind = event["event"] if kind == "on_chat_model_stream": print(event["data"]["chunk"].content, end="|") elif kind in {"on_chat_model_start"}: print() print("Streaming LLM:") elif kind in {"on_chat_model_end"}: print() print("Done streaming LLM.") elif kind == "on_retriever_end": print("--") print("Retrieved the following documents:") print(event["data"]["output"]["documents"]) elif kind == "on_tool_end": print(f"Ended tool: {event['name']}") else: pass if __name__ == "__main__": import asyncio asyncio.run(main())
运行结果
➜ python3 test03.py /Users/wuzikang/Desktop/py/langchain_test/own_learn/env/lib/python3.12/site-packages/pydantic/_migration.py:283: UserWarning: `pydantic.error_wrappers:ValidationError` has been moved to `pydantic:ValidationError`. warnings.warn(f'`{import_path}` has been moved to `{new_location}`.') /Users/wuzikang/Desktop/py/langchain_test/own_learn/env/lib/python3.12/site-packages/langchain_core/_api/beta_decorator.py:86: LangChainBetaWarning: This API is in beta and may change in the future. warn_beta( -- Retrieved the following documents: [Document(page_content='harrison worked at kensho')] Streaming LLM: |H|arrison| worked| at| Kens|ho|.|| Done streaming LLM.