LangChain + RAG 实战(三):构建第一个 RAG Chain 创作者Yardon |GitHubgithub.com/YardonYan |版本v1.0 |LCELLangChain 的链式语法LCELLangChain Expression Language让链式调用变得像搭积木fromlangchain.promptsimportChatPromptTemplatefromlangchain.schemaimportStrOutputParser promptChatPromptTemplate.from_template(用{language}写一个{task}的函数)chainprompt|llm|StrOutputParser()resultchain.invoke({language:Python,task:计算 Fibonacci 数列})检索增强生成 (RAG) Chainfromlangchain.chainsimportcreate_retrieval_chainfromlangchain.chains.combine_documentsimportcreate_stuff_documents_chain# RAG promptpromptChatPromptTemplate.from_template( 基于以下上下文回答用户的问题。如果上下文中没有相关信息请如实说不知道。 上下文\n{context}\n 问题{input} 回答 )doc_chaincreate_stuff_documents_chain(llm,prompt)rag_chaincreate_retrieval_chain(retriever,doc_chain)resultrag_chain.invoke({input:useEffect 的依赖数组是什么意思})print(result[answer])带来源引用的 RAGresultrag_chain.invoke({input:React Hooks 的类型})print(result[answer])print(\n--- 参考来源 ---)fori,docinenumerate(result[context],1):print(f[{i}]{doc.metadata.get(source,未知来源)})Streamlit 快速搭一个 RAG 界面importstreamlitasst# 加载向量数据库缓存避免每次刷新重建st.cache_resourcedefget_vectordb():returnChroma(persist_directory./chroma_db,embedding_functionembeddings)# 构建 RAGst.title( 企业知识库问答)questionst.text_input(输入你的问题...)ifquestion:withst.spinner(搜索中...):resultrag_chain.invoke({input:question})st.markdown(f**答案**{result[answer]})st.write(---)fori,docinenumerate(result[context],1):st.caption(f[{i}] 来源:{doc.metadata.get(source,?)})本章小结概念要点LCELcreate_retrieval_chain检索生成的完整 RAG 管道Streamlit15 分钟搭一个 RAG UI创作者Yardon | 个人网站GlimmerAI.top 本章是「LangChain RAG 实战」系列的第 3 章。 欢迎大家来观看