如何用LangChain与Gemini API构建问答系统:完整实现步骤
如何用LangChain与Gemini API构建问答系统:完整实现步骤
【免费下载链接】generative-ai-docsThis repository is deprecated and will be archived项目地址: https://gitcode.com/gh_mirrors/ge/generative-ai-docs
本文将详细介绍如何使用LangChain与Gemini API构建一个功能强大的问答系统,帮助你快速实现基于自定义数据的智能问答功能。通过结合LangChain的数据处理能力、Gemini API的强大语言理解能力以及Chroma向量数据库的高效检索能力,你可以轻松构建一个能够理解和回答特定领域问题的AI助手。
系统架构概述
构建基于LangChain与Gemini API的问答系统主要涉及三个核心组件:文档处理与嵌入生成、向量存储与检索、以及LLM问答生成。下面的架构图展示了这些组件如何协同工作:
图1:Gemini问答系统架构图,展示了数据流向和组件交互
核心组件说明
- 文档处理模块:负责从各种来源(如网站、PDF、文档等)加载数据,并将其分割成适合处理的小块
- 嵌入模型:使用Gemini的嵌入模型将文本转换为向量表示,捕捉语义信息
- 向量数据库:存储文本向量,支持高效的相似度搜索
- 检索器:根据用户查询从向量数据库中检索相关文档片段
- LLM模型:使用Gemini Pro模型,结合检索到的上下文生成准确回答
- 用户界面:提供与用户交互的界面,接收问题并展示答案
准备工作与环境搭建
在开始构建问答系统之前,需要完成以下准备工作:
安装必要的依赖包
首先,我们需要安装LangChain、Gemini API集成包以及Chroma向量数据库:
# 安装LangChain核心库 pip install --quiet langchain # 安装LangChain与Gemini API的集成包 pip install --quiet langchain-google-genai # 安装Chroma向量数据库 pip install --quiet chromadb获取Gemini API密钥
要使用Gemini API,你需要一个API密钥。你可以在Google AI Studio免费创建一个API密钥。获取密钥后,可以通过环境变量设置:
import os import getpass os.environ['GOOGLE_API_KEY'] = getpass.getpass('Gemini API Key:')实现步骤详解
步骤1:加载和处理文档
首先,我们需要加载要用于问答的文档。LangChain提供了多种文档加载器,这里我们使用WebBaseLoader从网页加载内容:
from langchain.document_loaders import WebBaseLoader # 从网页加载文档 loader = WebBaseLoader("https://blog.google/technology/ai/google-gemini-ai/") docs = loader.load() # 提取和处理文本内容 text_content = docs[0].page_content # 根据需要提取相关部分 text_content_1 = text_content.split("code, audio, image and video.", 1)[1] final_text = text_content_1.split("Cloud TPU v5p", 1)[0] # 转换为LangChain的Document格式 docs = [Document(page_content=final_text, metadata={"source": "local"})]步骤2:创建文本嵌入
接下来,我们使用Gemini的嵌入模型将文本转换为向量。嵌入是文本的数值表示,能够捕捉语义信息,使得相似的文本具有相似的向量表示:
图2:文本嵌入生成过程,展示文档如何通过嵌入模型转换为向量表示
from langchain_google_genai import GoogleGenerativeAIEmbeddings # 初始化Gemini嵌入模型 gemini_embeddings = GoogleGenerativeAIEmbeddings(model="models/embedding-001")步骤3:初始化向量数据库
我们使用Chroma向量数据库来存储和管理文本嵌入。Chroma是一个轻量级、易用的向量数据库,非常适合开发和原型设计:
from langchain.vectorstores import Chroma # 创建并保存向量数据库到磁盘 vectorstore = Chroma.from_documents( documents=docs, # 处理后的文档 embedding=gemini_embeddings, # 嵌入模型 persist_directory="./chroma_db" # 保存目录 ) # 持久化向量数据库 vectorstore.persist()步骤4:创建检索器
从向量数据库创建一个检索器,用于根据用户查询检索相关文档片段:
# 从磁盘加载向量数据库 vectorstore_disk = Chroma( persist_directory="./chroma_db", # 数据库目录 embedding_function=gemini_embeddings # 嵌入模型 ) # 创建检索器,设置返回结果数量为1 retriever = vectorstore_disk.as_retriever(search_kwargs={"k": 1}) # 测试检索器 print(len(retriever.get_relevant_documents("MMLU"))) # 输出:1步骤5:初始化Gemini LLM模型
初始化Gemini Pro模型,用于生成回答。我们可以调整模型参数如temperature来控制输出的创造性:
from langchain_google_genai import ChatGoogleGenerativeAI # 初始化Gemini Pro模型 llm = ChatGoogleGenerativeAI( model="gemini-pro", temperature=0.7, # 控制输出的随机性,0表示更确定,1表示更随机 top_p=0.85 # 控制输出的多样性 )步骤6:创建提示模板
设计一个提示模板,指导LLM如何使用检索到的上下文来回答问题:
from langchain import PromptTemplate # 定义提示模板 llm_prompt_template = """You are an assistant for question-answering tasks. Use the following context to answer the question. If you don't know the answer, just say that you don't know. Use five sentences maximum and keep the answer concise. Question: {question} Context: {context} Answer:""" # 创建PromptTemplate对象 llm_prompt = PromptTemplate.from_template(llm_prompt_template)步骤7:构建RAG链
使用LangChain Expression Language (LCEL)构建一个检索增强生成(RAG)链,将检索器、提示模板和LLM组合起来:
from langchain.schema.runnable import RunnablePassthrough from langchain.schema import StrOutputParser # 定义文档格式化函数 def format_docs(docs): return "\n\n".join(doc.page_content for doc in docs) # 构建RAG链 rag_chain = ( {"context": retriever | format_docs, "question": RunnablePassthrough()} | llm_prompt | llm | StrOutputParser() )步骤8:测试问答系统
现在,我们可以使用构建好的RAG链来回答问题了:
# 测试问答系统 response = rag_chain.invoke("What is Gemini?") print(response)示例输出:
Gemini is Google's largest and most capable AI model, designed to efficiently run on various platforms, from data centers to mobile devices. It excels in understanding and reasoning about text, images, audio, and code. Gemini's sophisticated multimodal reasoning capabilities enable it to uncover knowledge from vast amounts of data and explain reasoning in complex subjects like math and physics. It can also generate high-quality code in multiple programming languages.项目结构与文件说明
本项目的核心代码位于以下路径:
- 主要实现代码:examples/gemini/python/langchain/Gemini_LangChain_QA_Chroma_WebLoad.ipynb
- 向量数据库存储:
./chroma_db目录 - 依赖配置:项目根目录下的
requirements.txt
总结与扩展
通过本文的步骤,你已经成功构建了一个基于LangChain和Gemini API的问答系统。这个系统能够根据提供的文档内容回答相关问题,具有以下特点:
- 高效检索:使用Chroma向量数据库实现快速相似性搜索
- 准确回答:结合Gemini Pro模型和上下文信息生成准确回答
- 可扩展性:可以轻松添加更多文档源和功能
可能的扩展方向
- 添加更多文档源,如PDF、Markdown文件等
- 实现更复杂的文档分块策略,提高检索准确性
- 添加用户界面,使系统更易于使用
- 实现文档更新和向量数据库增量更新功能
- 添加多轮对话能力,支持上下文感知的问答
要开始使用这个项目,你可以通过以下命令克隆仓库:
git clone https://gitcode.com/gh_mirrors/ge/generative-ai-docs然后按照本文的步骤进行配置和运行,即可快速搭建属于你自己的智能问答系统。
【免费下载链接】generative-ai-docsThis repository is deprecated and will be archived项目地址: https://gitcode.com/gh_mirrors/ge/generative-ai-docs
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
