项目概述
本项目旨在为易速鲜花电商创建一个人脉工具,通过LangChain技术,自动化地寻找并联系对特定鲜花感兴趣的微博大V,以推广鲜花产品。项目分为五个主要步骤:
- 搜索大V:使用LangChain的搜索工具,模糊搜索可能对特定鲜花感兴趣的大V,并返回UID。
- 爬取信息:根据UID,爬取大V的公开信息,并以JSON格式返回。
- 生成介绍文章:利用LLM生成一篇热情洋溢的介绍型文章,以谋求与大V的合作。
- 输出解析:使用LangChain的输出解析功能,生成格式化的数据结构,便于集成到HTML中展示。
- 部署工具:创建前端页面,并将工具部署到服务器,供市场营销人员使用。
详细步骤与代码解析
第三步:生成介绍文章
- 代码重构:将生成文案的功能封装到
tools/textgen_tool.py中的generate_letter函数。 - 提示模板设计:设计一个提示模板,让LLM根据大V的个人信息生成文案。
- 代码实现:
letter_template = """ 下面是这个人的微博信息 {information} 请你帮我: 1. 写一个简单的总结 2. 挑两件有趣的事情说一说 3. 找一些他比较感兴趣的事情 4. 写一篇热情洋溢的介绍信 """
第四步:加入输出解析
- 创建解析模型:在
tools/ParsingTool.py中定义一个名为TextParsing的Pydantic模型,用于解析大V信息。 - 代码实现:
from pydantic import BaseModel, Field from typing import List class TextParsing(BaseModel): summary: str = Field(description="大V个人简介") facts: List[str] = Field(description="大V的特点") interest: List[str] = Field(description="这个大V可能感兴趣的事情") letter: List[str] = Field(description="一篇联络这个大V的邮件") def to_dict(self): return { "summary": self.summary, "facts": self.facts, "interest": self.interest, "letter": self.letter, }
第五步:部署人脉工具
- HTML文件:创建
templates/index.html,用于用户交互展示。<!-- templates/index.html --> <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <link rel="stylesheet" href="{{ url_for('static', filename='css/style.css') }}"> <script src="https://code.jquery.com/jquery-3.6.0.min.js"></script> <title>Ice Breaker</title> <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.1.0/css/all.min.css" /> <div class="spinner-container" id="spinner-container" style="display: none;"> <i id="loading-spinner" class="fas fa-spinner fa-spin"></i> </div> </head> <body> <div class="container"> <h1>易速鲜花人脉工具</h1> <form id="name-form"> <input type="text" id="flower" name="flower" placeholder="输入一种花(或者其它东西也行)"> <button id="magic-button" type="submit">找到大V</button> </form> <div id="result"> <img id="profile-pic" src="" alt="Profile Picture" style="display: none; max-width: 100%; height: auto; border-radius: 50%; margin-bottom: 20px;"> <h2>基本情况</h2> <p id="summary"></p> <h2>特色内容</h2> <div id="facts"></div> <h2>可能感兴趣的事儿</h2> <div id="interest"></div> <h2>联络邮件</h2> <div id="letter"></div> </div> </div> <script> $(document).ready(function () { $('#name-form').on('submit', function (e) { e.preventDefault(); $('#spinner-container').show(); $.ajax({ url: '/process', data: $('#name-form').serialize(), type: 'POST', success: function (response) { $('#profile-pic').attr('src', '你的URL'); $('#profile-pic').show(); $('#summary').text(response.summary); $('#facts').html('<ul>' + response.facts.map(fact => '<li>' + fact + '</li>').join('') + '</ul>'); $('#interest').html('<ul>' + response.interest.map(interest => '<li>' + interest + '</li>').join('') + '</ul>'); $('#letter').text(response.letter); }, error: function (error) { console.log(error); }, complete: function () { $('#spinner-container').hide(); } }); }); }); </script> </body> </html> - CSS文件:创建
static/css/style.css,美化页面。 - Flask应用:创建
app.py,用于处理用户请求并返回数据。from flask import Flask, render_template, request, jsonify from findbigV import find_bigV import json app = Flask(__name__) @app.route("/") def index(): return render_template("index.html") @app.route("/process", methods=["POST"]) def process(): flower = request.form["flower"] response_str = find_bigV(flower=flower) response = json.loads(response_str) return jsonify( { "summary": response["summary"], "facts": response["facts"], "interest": response["interest"], "letter": response["letter"], } ) if __name__ == "__main__": app.run(host="0.0.0.0", debug=True)
思考题
- 修改提示模板:调整提示模板,生成更贴合业务需求的文案。
- 爬取其他网站数据:尝试爬取豆瓣等其他网站的公开数据,制作更全面的人脉工具。
- 程序鲁棒性:修改程序,提高其鲁棒性,确保在不同情况下都能稳定运行。
总结
本项目是一个结合了LangChain技术和Flask Web开发的实战案例,涵盖了从数据爬取、文本生成到Web部署的全过程。通过这个项目,我们可以学习到如何利用LangChain的链、代理、工具以及LLM的文本摘要和生成功能,来构建一个实用的商业工具。同时,项目也展示了如何通过自定义工具和输出解析,来满足特定的业务需求。