框架与工具链949 字

LangChain整合维基百科实现网页问答

·全库 338 / 611

《LangChain整合维基百科实现网页问答》共 0.1 万字,通篇围绕 LangChain、向量、数据库、检索 展开,归在「框架与工具链」这一层。

覆盖LangChain向量数据库检索

适合要选技术栈、不想把别人踩过的坑重踩一遍的人

目录骨架(4 节)
  1. 导入依赖库
  2. 爬取维基百科
  3. 设置用户界面
  4. 问答效果
目录 · 3 节

示例代码

注:将ppt后缀名改为zip后解压

python版本:3.12.4

导入依赖库

我们将首先导入聊天机器人所需的库。

#示例:web_search.py
import time
from datetime import datetime

import requests
import streamlit as st
import wikipedia
from bs4 import BeautifulSoup
from langchain.schema import AIMessage, HumanMessage, SystemMessage
from langchain.text_splitter import CharacterTextSplitter
from langchain_community.vectorstores import FAISS
from langchain_openai import ChatOpenAI
from langchain_openai import OpenAIEmbeddings
from streamlit_chat import message
global docsearch
from langchain.globals import set_verbose
docsearch = None

爬取维基百科

构建聊天机器人的第一步是访问维基百科文章并提取内容。该get_wiki函数接受搜索词并返回整页内容和维基百科文章的摘要。该wikipedia.summary方法搜索摘要,以及requests用于访问文章的 URL 的模块。该BeautifulSoup模块使用在解析页面的HTML内容,该content_div.find_all('p')行从页面上的段落中提取文本。

def get_wiki(search):
    # 将语言设置为简体中文(默认为自动检测)
    lang = "zh"

    """
    从维基百科获取摘要
    """
    # set language to zh_CN (default is auto-detect)
    wikipedia.set_lang(lang)
    summary = wikipedia.summary(search, sentences=5)

    """
    抓取所请求查询的维基百科页面
    """

    # 根据用户输入和语言创建URL
    url = f"https://{lang}.wikipedia.org/wiki/{search}"

    # 向URL发送GET请求并解析HTML内容
    response = requests.get(url)
    soup = BeautifulSoup(response.content, "html.parser")

    # 提取页面的主要内容
    content_div = soup.find(id="mw-content-text")

    # 摘录所有内容段落
    paras = content_div.find_all('p')

    # 将段落连接成整页内容
    full_page_content = ""
    for para in paras:
        full_page_content += para.text

    # 打印整页内容
    return full_page_content, summary

设置用户界面

接下来,我们使用 Streamlit 设置用户界面。我们首先创建一个标题:

st.markdown("<h1 style='text-align: center; color: Black;'>基于 Web URL 的问答</h1>", unsafe_allow_html=True)

这将为聊天机器人创建一个大而居中的标题。

环境变量配置好OPENAI_BASE_URL和OPENAI_API_KEY

setx OPENAI_BASE_URL "https://api.openai.com/v1"
setx OPENAI_API_KEY "sk-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"

一旦用户输入他们的 OpenAI 密钥,我们就会初始化 GPT 模型并要求他们输入搜索查询,该查询将用于抓取相关的 Wikipedia 页面。get_wiki()函数将返回搜索查询和抓取页面的摘要。现在,如果它返回了一些值,则 Q&A 字段将被激活,用户可以提问。

search = st.text_input("请输入要检索的关键词")
if len(search):
    wiki_content, summary = get_wiki(search)

    if len(wiki_content):
        try:
            # 创建用户发送消息的输入文本框
            st.write(summary)
            user_query = st.text_input("You: ", "", key="input")
            send_button = st.button("Send")

资料里没有你的场景?

把你手上的数据和想解决的那个环节发上来,我们按具体情况回,不复述方法论。

发布需求