实践指南:使用LangChain构建鲜花电商人脉工具 | 豆包MarsCode AI刷题

3 阅读4分钟

背景

一家鲜花电商企业希望通过建立一个人脉工具,快速找到微博上的大V来推广鲜花。通过本指南,您将学习如何使用LangChain集成多种技术,包括搜索工具、爬虫工具、大语言模型(LLM) 文案生成、输出解析、以及将其部署到网页端的完整流程。


项目目标

  1. 通过模糊搜索找到微博上可能感兴趣的鲜花推广大V并获取其UID
  2. 根据UID爬取该大V的公开信息
  3. 基于爬取的信息生成总结、推荐文案及联系信
  4. 通过解析器将输出结构化为JSON,方便进一步集成和展示
  5. 将工具部署为Flask Web应用,供运营人员直接使用

所需技术

  • 语言与框架:Python, Flask
  • 依赖库:LangChain, SerpAPI, BeautifulSoup, Requests
  • 工具:自定义爬虫工具、LangChain代理和链、Pydantic解析器

分步实施

步骤一:找到微博大V的UID

通过LangChain的代理结合SerpAPI搜索大V。

  1. 安装所需依赖

    pip install langchain openai requests beautifulsoup4 flask
    
  2. 创建主程序 在项目目录中创建 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
    
  3. 实现查找工具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))
    
  4. 定制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或页面爬取公开数据。

  1. 实现爬取逻辑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()
    
  2. 在主程序中集成 更新 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链生成营销文案。

  1. 定义文案生成工具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)
    
  2. 在主程序中集成 调用 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格式,便于前端展示。

  1. 定义解析器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)
    
  2. 在文案生成中使用 修改 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应用

创建一个用户友好的网页界面。

  1. 创建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)
    
  2. 设计HTML前端templates/index.html 中创建表单和展示区。

    <form id="flower-form">
        <input type="text" name="flower" placeholder="输入一种花">
        <button type="submit">提交</button>
    </form>
    <div id="result"></div>
    
  3. 运行并测试

    python app.py
    

访问 http://localhost:5000,测试工具。


总结

通过这份指南,可以成功实现:

  1. 利用LangChain搜索和爬取微博大V。
  2. 生成精准的营销文案并解析为结构化数据。
  3. 部署Flask应用,将工具提供给用户使用。

接下来,可以通过接口扩展功能,例如:

  • 增加数据来源(如抖音、豆瓣)。
  • 使用机器学习算法推荐最优合作对象。
  • 提供多语言支持,适应国际市场。