使用 LangChain 和 Ollama 開發 Bing 網頁搜尋與摘要整理系統:使 LLM 可以整理新聞資訊
日期:2024-11-26
帶你一步步建立一個簡單的搜尋與摘要系統,結合 Bing API 與 Ollama LLM,實現從網路取得資訊並進行摘要的功能。
需要文件下載
- Github Repository — weitsung50110/Huggingface Langchain kit
本文是使用到裡面的langchain_bing_news_api.py檔案。
成果展示
標題: 12強賽/台灣棒球世界冠軍!28位球員一路創造歷史 劇本太不真 …
連結: https://www.nownews.com/news/6591945
摘要: 2 天前 · 睽違32年,台灣棒球國家隊殺進一級國際賽事(奧運、經典賽、12強)冠軍賽,雖然最終0比4不敵日本,但也追平1992年巴塞隆納奧運銀牌的隊史最佳 ...
標題: 首座世界冠軍!中華隊寫台灣棒球新篇章 總獎金逾3.1億元
連結: https://tw.sports.yahoo.com/news/%E9%A6%96%E5%BA%A7%E4%B8%96%E7%95%8C%E5%86%A0%E8%BB%8D-%E4%B8%AD%E8%8F%AF%E9%9A%8A%E5%AF%AB%E5%8F%B0%E7%81%A3%E6%A3%92%E7%90%83%E6%96%B0%E7%AF%87%E7%AB%A0-%E7%B8%BD%E7%8D%8E%E9%87%91%E9%80%BE3-1%E5%84%84%E5%85%83-135943815.html
摘要: 2 天前 · 台灣奪冠!球迷激動落淚高喊:我們的驕傲 中華隊拿下世界12強棒球賽冠軍!台灣各地球迷踏出家門,與大家齊聚一堂,為遠赴東京巨蛋征戰的英雄們應援,口號從不間斷,看到奪冠當下更是激動流下淚水,中華隊4:0完封日本,讓台灣各地球迷嗨翻天。
標題: 台灣大賽 - 維基百科,自由的百科全書
連結: https://zh.wikipedia.org/zh-tw/%E5%8F%B0%E7%81%A3%E5%A4%A7%E8%B3%BD
摘要: 台灣大賽(Taiwan Series)即中華職棒的總冠軍賽,1990年開始舉行,當年稱為中華大賽,但隔年即不再使用,2003年中華職棒與台灣大聯盟合併,在年度總冠軍賽開打之前,中華職棒認為隨著台灣職棒在國際能見度漸高,有必要和其他國家一樣取一個響亮且能 []
標題: 台灣棒球史上首座世界冠軍!4:0完封日本斷27連勝神話 - Yahoo …
連結: https://tw.news.yahoo.com/%E5%8F%B0%E7%81%A3%E6%A3%92%E7%90%83%E5%8F%B2%E4%B8%8A%E9%A6%96%E5%BA%A7%E4%B8%96%E7%95%8C%E5%86%A0%E8%BB%8D-4-0%E5%AE%8C%E5%B0%81%E6%97%A5%E6%9C%AC%E6%96%B727%E9%80%A3%E5%8B%9D%E7%A5%9E%E8%A9%B1-130339161.html
摘要: 2 天前 · 世界12強棒球賽最終冠軍戰開戰,本屆賽會第3度上演「台日大戰」,台灣隊由林昱珉把關對抗戶鄉翔征,台灣隊長陳傑憲重返打線,前4局雙方形成 ...
標題: 「要看台灣拿世界冠軍」!彭政閔11年前願望成真了...球迷全看哭 …
連結: https://www.ettoday.net/news/20241125/2861406.htm
摘要: 1 天前 · 2024世界棒球12強冠軍戰昨(24日)晚完美落幕,中華隊以4:0的分數完封強敵日本,也是台灣首次在國際成棒3大賽的首座冠軍、最佳成績。賽前有 ...
正在進行摘要...
* 台灣棒球國家隊在2024年12強賽奪得冠軍,追平1992年巴塞隆納奧運銀牌的隊史最佳成績。
* 中華隊在世界12強棒球賽最終冠軍戰中,以4:0完封日本,拿下台灣棒球史上首座世界冠軍,也是國際成棒三大賽(奧運、經典賽、12強)的首次奪冠。
* 這場比賽讓台灣各地球迷嗨翻天,激動落淚高喊「我們的驕傲」,中華隊寫下台灣棒球新篇章。
環境準備
在開始之前,請確保你的環境已安裝以下模組:
requests
:用來與 Bing API 互動。langchain
:處理 LLM 及嵌入式功能。beautifulsoup4
:我們將其替換為 Bing API,但可以保留作為 HTML 資料解析的參考。
安裝模組
如果尚未安裝,可以用以下指令安裝:
pip install requests beautifulsoup4 langchain
第一步:初始化 Ollama 模型與嵌入工具
我們需要導入 Ollama LLM
並初始化它的模型。
from langchain_community.llms import Ollama
from langchain_community.embeddings import OllamaEmbeddings
from langchain_core.prompts import PromptTemplate
from langchain.callbacks.manager import CallbackManager
from langchain.callbacks.streaming_stdout import StreamingStdOutCallbackHandler
# 初始化 Ollama LLM
llm = Ollama(
model="kenneth85/llama-3-taiwan:8b-instruct",
callback_manager=CallbackManager([StreamingStdOutCallbackHandler()])
)
# 初始化 Ollama Embeddings
embeddings = OllamaEmbeddings(model="kenneth85/llama-3-taiwan:8b-instruct")
這段程式碼負責載入我們的 LLM 模型,後續會用來生成摘要。
第二步:用 Bing API 搜尋
我們用 Microsoft 的 Bing Search API
。
設定 Bing API
你需要申請一個 Bing API 金鑰,可參考 Bing Search API 文件。
import requests
# 定義搜尋工具
def simple_search(query, api_key):
"""
使用 Bing API 搜尋關鍵字並返回結果。
"""
global search_results
try:
endpoint = "https://api.bing.microsoft.com/v7.0/search"
headers = {"Ocp-Apim-Subscription-Key": api_key}
params = {"q": query, "count": 5}
response = requests.get(endpoint, headers=headers, params=params, timeout=10)
response.raise_for_status()
data = response.json()
# 解析結果
results = []
for item in data.get("webPages", {}).get("value", []):
result = {
"title": item.get("name"),
"link": item.get("url"),
"snippet": item.get("snippet", "無摘要")
}
results.append(result)
# 格式化結果
search_results = "\n\n".join(
f"標題: {res['title']}\n連結: {res['link']}\n摘要: {res['snippet']}"
for res in results
)
return search_results
except Exception as e:
search_results = f"發生錯誤:{e}"
return search_results
使用 API 搜尋
只需將 API 金鑰傳入 simple_search
函數,就能取得搜尋結果。
第三步:摘要搜尋結果
接下來,我們對搜尋結果進行摘要。利用 LangChain 的 PromptTemplate
,可以根據提示詞讓 LLM 自動提取重點。
def summarize_content():
"""
對搜尋結果進行摘要。
"""
global search_results
if not search_results.strip():
return "無內容可進行摘要。"
# 使用提示模板來改進摘要指令
prompt_template = PromptTemplate(
input_variables=["content"],
template="請對以下內容進行重點摘要,今年是2024年:\n\n{content}"
)
prompt = prompt_template.format(content=search_results)
# 使用 LLM 進行摘要
response = llm.invoke(prompt)
return response.strip()
第四步:主程式
最後將所有功能整合成一個完整的流程,使用者可以直接輸入問題並獲取摘要。
if __name__ == "__main__":
try:
# 輸入 Bing API 金鑰
BING_API_KEY = "你的 Bing API 金鑰"
# 獲取使用者輸入
user_query = input("請輸入您的問題(可用中文):")
# 執行搜尋
print("\n正在執行搜尋...")
simple_search(user_query, BING_API_KEY)
print("\n搜尋結果:")
print(search_results)
# 進行摘要
print("\n正在進行摘要...")
summary = summarize_content()
print("\n摘要結果:")
print(summary)
except Exception as e:
print(f"執行時發生錯誤:{e}")
崴寶結論
這篇文章帶你完成了一個整合 Bing Search API 與 Ollama LLM 的搜尋與摘要工具。透過簡單的程式架構,我們學習到如何:
- 使用 Bing API 有效地
取得網路搜尋結果
。 結合 LLM 模型
處理資料,生成具有高效實用性的摘要。- 將整個
流程串接起來
,建立一個直觀的使用者互動介面。
延伸應用
在此基礎上,你可以:
- 加入
文字分割工具
來處理更大篇幅的資料。 生成嵌入
以進行相似性搜索
。
教學文章之後會貼在這裡!敬請期待! 🎉
喜歡 好崴寶 Weibert Weiberson 的文章嗎?在這裡留下你的評論!本留言區支援 Markdown 語法。