LLM系列 | 18 : 如何用LangChain进行网页问答

简介

一夕轻雷落万丝,霁光浮瓦碧参差。

紧接之前LangChain专题文章:

  • 15:如何用LangChain做长文档问答?
  • 16:如何基于LangChain打造联网版ChatGPT?
  • 17:ChatGPT应用框架LangChain速成大法

今天这篇小作文是LangChain实践专题的第4篇,主要介绍如何用LangChain进行网页问答。前文介绍用LangChain做文档问答,需要先将网页另存为pdf或者其他文档格式,再读取文件做问答。今天这篇小作文介绍如何直接做网页问答 ,本质上是将前文的数据本地存储 改为数据在线爬取

网页爬取

这里使用LLMRequestsChain从 URL 获取 HTML 结果,然后使用 LLM 解析结果。以下以罗大佑百科网页为例,说明如何用LangChain进行web QA。

示例1: 信息抽取

复制代码
import os
os.environ['OPENAI_API_KEY'] ="sk-XXXX"

import warnings
warnings.filterwarnings("ignore")
# model_name = "gpt-3.5-turbo"
model_name = "gpt-3.5-turbo-16k"
task_url = "https://baike.baidu.com/item/%E7%BD%97%E5%A4%A7%E4%BD%91/236869"
llm = OpenAI(model_name=model_name, temperature=0)

template = """在 >>> 和 <<< 之间是网页的返回的HTML内容。
请抽取表格中的信息。

>>> {requests_result} <<<
请使用JSON格式返回你抽取的结果。
Extracted:"""

prompt = PromptTemplate(
    input_variables=["requests_result"],
    template=template
)

chain = LLMRequestsChain(llm_chain=LLMChain(llm=llm, prompt=prompt))
inputs = {
  "url": task_url
}

response = chain(inputs)
print(response['output'])

输出结果如下:

复制代码
{
  "姓名": "罗大佑",
  "性别": "男",
  "民族": "汉族",
  "国籍": "中国",
  "出生地": "台湾省台北市",
  "出生日期": "1954年7月20日",
  "毕业院校": "台湾中山医学院",
  "星座": "巨蟹座",
  "血型": "O型",
  "身高": "172 cm",
  "经纪公司": "种子音乐",
  "擅长乐器": "吉他、钢琴",
  "代表作品": "东方之珠、明天会更好、鹿港小镇、光阴的故事、童年、恋曲1990、之乎者也、你的样子、亚细亚的孤儿、恋曲1980、爱人同志、闪亮的日子、爱的箴言、未来的主人翁、沉默的表示、穿过你的黑发的我的手、野百合也有春天",
  "主要成就": "台湾金曲奖特别贡献奖、hito流行音乐奖颁奖典礼乐坛成就大奖、中国金唱片奖艺术成就奖、音乐风云榜歌坛杰出贡献奖、亚洲最杰出艺人奖"
}

示例2: 指定字段抽取信息

复制代码
template = """在 >>> 和 <<< 之间是网页的返回的HTML内容。
请抽取表格中的信息。

>>> {requests_result} <<<
请使用如下JSON格式返回你抽取的结果。
{{"中文名": "a", "代表作品": "b", "祖籍": "c", "妻子": "d"}}

Extracted:"""

prompt = PromptTemplate(
    input_variables=["requests_result"],
    template=template
)

chain = LLMRequestsChain(llm_chain=LLMChain(llm=llm, prompt=prompt))
inputs = {
  "url": task_url
}

response = chain(inputs)
print(response['output'])

输出结果如下:

复制代码
{"中文名": "罗大佑", "代表作品": "东方之珠、明天会更好、鹿港小镇、光阴的故事、童年、恋曲1990、之乎者也、你的样子、亚细亚的孤儿、恋曲1980、爱人同志、闪亮的日子、爱的箴言、未来的主人翁、沉默的表示、穿过你的黑发的我的手、野百合也有春天", "祖籍": "广东省梅州市梅县区", "妻子": "李烈、Elaine"}

查阅原文:

网页问答

示例1: 数据统计

复制代码
from langchain.prompts import PromptTemplate
from langchain.llms import OpenAI
from langchain.chains import LLMRequestsChain, LLMChain
import os

os.environ['OPENAI_API_KEY'] ="sk-XXXX"
os.environ['HTTP_PROXY'] = "XXX"
os.environ['HTTPS_PROXY'] = "XXX"

import warnings
warnings.filterwarnings("ignore")
# model_name = "gpt-3.5-turbo"
model_name = "gpt-3.5-turbo-16k"
task_url = "https://baike.baidu.com/item/%E7%BD%97%E5%A4%A7%E4%BD%91/236869"
llm = OpenAI(model_name=model_name, temperature=0)

template = """在 >>> 和 <<< 之间是网页的返回的HTML内容。

>>> {requests_result} <<<

根据网页内容,回答问题:{query}。"""

prompt = PromptTemplate(
    input_variables=["requests_result", "query"],
    template=template
)

chain = LLMRequestsChain(llm_chain=LLMChain(llm=llm, prompt=prompt))
inputs = {
  "url": task_url,
  "query":"罗大佑有几个老婆",
}

response = chain(inputs)
print(response['output'])

输出结果如下:

复制代码
根据网页内容,罗大佑有两个老婆。他与李烈结婚后仅维持了一年半的婚姻,然后在2010年与Elaine结婚。

示例2: 时间类

复制代码
# model_name = "gpt-3.5-turbo"
model_name = "gpt-3.5-turbo-16k"
task_url = "https://baike.baidu.com/item/%E7%BD%97%E5%A4%A7%E4%BD%91/236869"
llm = OpenAI(model_name=model_name, temperature=0)

template = """在 >>> 和 <<< 之间是网页的返回的HTML内容。

>>> {requests_result} <<<

根据网页内容,回答问题:{query}。"""

prompt = PromptTemplate(
    input_variables=["requests_result", "query"],
    template=template
)

chain = LLMRequestsChain(llm_chain=LLMChain(llm=llm, prompt=prompt))
inputs = {
  "url": task_url,
  "query":"罗大佑最近获得的奖是什么?",
}

response = chain(inputs)
print(response['output'])

输出结果如下:

复制代码
根据网页内容,罗大佑最近获得的奖是第32届台湾金曲奖特别贡献奖。
相关推荐
众趣科技43 分钟前
数字孪生重构智慧园区:众趣科技何以成为 VR 园区领域标杆
人工智能·3d·智慧城市·空间计算
心勤则明2 小时前
Spring AI 会话记忆实战:从内存存储到 MySQL + Redis 双层缓存架构
人工智能·spring·缓存
ARM+FPGA+AI工业主板定制专家4 小时前
基于GPS/PTP/gPTP的自动驾驶数据同步授时方案
人工智能·机器学习·自动驾驶
长鸳词羡4 小时前
wordpiece、unigram、sentencepiece基本原理
人工智能
ㄣ知冷煖★4 小时前
【GPT5系列】ChatGPT5 提示词工程指南
人工智能
科士威传动4 小时前
丝杆支撑座在印刷设备如何精准运行?
人工智能·科技·自动化·制造
taxunjishu5 小时前
DeviceNet 转 Modbus TCP 协议转换在 S7-1200 PLC化工反应釜中的应用
运维·人工智能·物联网·自动化·区块链
kalvin_y_liu6 小时前
智能体框架大PK!谷歌ADK VS 微软Semantic Kernel
人工智能·microsoft·谷歌·智能体
爱看科技6 小时前
智能眼镜行业腾飞在即,苹果/微美全息锚定“AR+AI眼镜融合”之路抢滩市场!
人工智能·ar
Juchecar9 小时前
LLM模型与ML算法之间的关系
人工智能