背景
一家鲜花电商企业希望通过建立一个人脉工具,快速找到微博上的大V来推广鲜花。通过本指南,您将学习如何使用LangChain集成多种技术,包括搜索工具、爬虫工具、大语言模型(LLM) 文案生成、输出解析、以及将其部署到网页端的完整流程。
项目目标
- 通过模糊搜索找到微博上可能感兴趣的鲜花推广大V并获取其UID。
- 根据UID爬取该大V的公开信息。
- 基于爬取的信息生成总结、推荐文案及联系信。
- 通过解析器将输出结构化为JSON,方便进一步集成和展示。
- 将工具部署为Flask Web应用,供运营人员直接使用。
所需技术
- 语言与框架:Python, Flask
- 依赖库:LangChain, SerpAPI, BeautifulSoup, Requests
- 工具:自定义爬虫工具、LangChain代理和链、Pydantic解析器
分步实施
步骤一:找到微博大V的UID
通过LangChain的代理结合SerpAPI搜索大V。
-
安装所需依赖
pip install langchain openai requests beautifulsoup4 flask
-
创建主程序 在项目目录中创建
findbigV.py
文件,完成UID查找逻辑。# findbigV.py import re from agents.weibo_agent import lookup_V def find_bigV(flower: str): response_UID = lookup_V(flower_type=flower) UID = re.findall(r'\d+', response_UID)[0] print(f"这位鲜花大V的微博ID是 {UID}") return UID
-
实现查找工具 在
agents/weibo_agent.py
中创建微博UID搜索逻辑。# weibo_agent.py from langchain.prompts import PromptTemplate from langchain.chat_models import ChatOpenAI from langchain.agents import initialize_agent, Tool from tools.search_tool import get_UID def lookup_V(flower_type: str): llm = ChatOpenAI(temperature=0, model_name="gpt-3.5-turbo") prompt_template = PromptTemplate( input_variables=["flower"], template="""给定 {flower},找到一个相关的微博UID。""" ) tools = [Tool(name="Search Weibo", func=get_UID, description="Search for Weibo UID.")] agent = initialize_agent(tools, llm, agent_type="zero-shot-react-description", verbose=True) return agent.run(prompt_template.format_prompt(flower=flower_type))
-
定制SerpAPI搜索工具 修改
tools/search_tool.py
返回微博链接而非摘要。from langchain.utilities import SerpAPIWrapper class CustomSerpAPIWrapper(SerpAPIWrapper): def _process_response(self, res: dict) -> str: snippets = [item['link'] for item in res.get("organic_results", [])] return "\n".join(snippets)
步骤二:爬取微博大V的公开信息
通过UID访问微博API或页面爬取公开数据。
-
实现爬取逻辑 在
tools/scraping_tool.py
中定义数据爬取逻辑。import requests def scrape_weibo(uid): url = f"https://weibo.com/ajax/profile/detail?uid={uid}" headers = {"User-Agent": "Mozilla/5.0"} response = requests.get(url, headers=headers) return response.json()
-
在主程序中集成 更新
findbigV.py
,使用scrape_weibo
函数获取公开信息。from tools.scraping_tool import scrape_weibo def find_bigV(flower: str): UID = lookup_V(flower) person_info = scrape_weibo(UID) print(person_info) return person_info
步骤三:生成推荐文案
利用LangChain LLM链生成营销文案。
-
定义文案生成工具 在
tools/textgen_tool.py
创建generate_letter
函数。from langchain.prompts import PromptTemplate from langchain.chat_models import ChatOpenAI from langchain.chains import LLMChain def generate_letter(information): template = """ 下面是一个微博用户的信息:{information} 请生成: 1. 简洁的个人简介。 2. 2个有趣的特点。 3. 一封热情的合作邀请信。 """ prompt = PromptTemplate(input_variables=["information"], template=template) llm = ChatOpenAI(temperature=0) chain = LLMChain(llm=llm, prompt=prompt) return chain.run(information=information)
-
在主程序中集成 调用
generate_letter
生成文案。from tools.textgen_tool import generate_letter def find_bigV(flower: str): UID = lookup_V(flower) person_info = scrape_weibo(UID) result = generate_letter(person_info) print(result) return result
步骤四:解析生成结果
使用Pydantic解析文案为JSON格式,便于前端展示。
-
定义解析器 在
tools/parsing_tool.py
中实现解析器。from pydantic import BaseModel, Field from langchain.output_parsers import PydanticOutputParser class TextParsing(BaseModel): summary: str facts: list[str] letter: str parser = PydanticOutputParser(pydantic_object=TextParsing)
-
在文案生成中使用 修改
generate_letter
函数,将结果解析为JSON。def generate_letter(information): template = """ 下面是一个微博用户的信息:{information} {format_instructions} """ prompt = PromptTemplate( input_variables=["information"], template=template, partial_variables={"format_instructions": parser.get_format_instructions()} ) chain = LLMChain(llm=ChatOpenAI(), prompt=prompt) result = chain.run(information=information) return parser.parse(result)
步骤五:部署工具为Flask应用
创建一个用户友好的网页界面。
-
创建Flask应用 在
app.py
中实现主程序。from flask import Flask, render_template, request, jsonify from findbigV import find_bigV app = Flask(__name__) @app.route("/") def index(): return render_template("index.html") @app.route("/process", methods=["POST"]) def process(): flower = request.form["flower"] result = find_bigV(flower) return jsonify(result) if __name__ == "__main__": app.run(debug=True)
-
设计HTML前端 在
templates/index.html
中创建表单和展示区。<form id="flower-form"> <input type="text" name="flower" placeholder="输入一种花"> <button type="submit">提交</button> </form> <div id="result"></div>
-
运行并测试
python app.py
访问 http://localhost:5000
,测试工具。
总结
通过这份指南,可以成功实现:
- 利用LangChain搜索和爬取微博大V。
- 生成精准的营销文案并解析为结构化数据。
- 部署Flask应用,将工具提供给用户使用。
接下来,可以通过接口扩展功能,例如:
- 增加数据来源(如抖音、豆瓣)。
- 使用机器学习算法推荐最优合作对象。
- 提供多语言支持,适应国际市场。