LangChain实战:老喻干货店社交网络Agent一

LangChain实战:老喻干货店社交网络Agent一

如果您也在准备AIGC前端全栈,LangChain是最成熟的AI应用开发框架。欢迎点赞收藏,一起学习AI。

LangChain 一 hello LLM

LangChain 二 模型

LangChain 三 Data Connections

LangChain 四 Prompts

LangChain 五 输出解析器

LangChain 六 链

LangChain 七 Memory

前言

在了解LangChain各个模块后,我打算用它来实战一下。最好的方式就是在自己熟悉的业务场景中,使用LangChainLLM,先开发一款效率工具。老喻干货店开门(微博、抖音)营业, 需要一款社交网络工具。开干!

社交网络工具

项目需求

老喻干货店一直以来通过微信、抖音、小红书等自媒体宣传推广,流量还可以。网销团队计划在微博结合一些节日、食补效用来提升品牌公众形象,想联系一些大V。

AIGC开发部门着手开发一个社交网络工具,帮助网销团队在微博上找到适合做干货推广的大V, 再由网销同学联系跟进。

技术分析

  • 利用LangChain的搜索Chain, 找到微博中对干货、食补有兴趣的大V,返回UID。
  • 写爬虫爬取大V公开信息,以JSON格式输出。

image.png

  • 结合爬虫内容,让LLM写一篇热烈的干货店介绍邀请大V合作。这里会用到LangChain的PromptTemplate。

给大V的合作邀请结构是一样的,内容由LLM生成并替换模板占位符。

  • 基于Flask 将以上功能交付给网销部门使用。

查找大V

我们来编写代码,找到大V的微博UID

python复制代码# 环境变量设置
import os
os.environ['OPENAI_API_KEY'] = ''
os.environ['SERPAPI_API_KEY'] = ''
# 正则模块
import re 
# 核心开发一个weibo_agent find_v方法
from agents.weibo_agent import find_Vif __name == "__main__":response_UID = find_v(food_type="助眠")print(response_UID)# 从返回结果中正则所有的UID数字UID = re.findall(r'\d+', response_UID)[0]print("这位大V的微博ID是", UID)

weibo_agent

我们如何在微博中找到合适的UID呢?一起来编写find_V方法吧。

ini复制代码# tools_search_tool后面会编写
from tools_search_tool import get_UID
# 模板
from langchain.prompts import PromptTemplate
from langchain.chat_models import ChatOpenAI
# 准备定制Agent
from langchain.agents import initialize_agent, Tool
from langchain.agents import AgentTypedef find_V(food_type: str):llm = ChatOpenAI(temperature=0,model_name="gpt-3.5-turbo")template = """given the {food} I want you to get a related 微博 UID.Your answer should contain only a UID.The URL always starts with https://weibo.com/u/for example, if https://weibo.com/u/3659536733 is her 微博, then 3659536733 is him UID This is only the example don't give me this, but the actual UID"""
prompt_template = PromptTemplate(input_variables=["food"],template=template
)
tools = [Tool(name="Crawl Google for 微博 page",func=get_UID,description="useful for when you need get the 微博UID")
]agent = initialize_agent(tools,llm,agent=AgentType.ZERO_SHOT_REACT_DESCRIPTION,verbose=True
)ID = agent.run(prompt_template.format_prompt(food=food_type))
return ID

我们在上面的代码里定义了一个agent, 只需要提供食补的类型,就可以拿到agent返回的UID。  怎么才能创建自定义的agent呢?langchain.agents提供了initialize_agentTool, 第一个参数tools,里面会使用SERPAPI 搜索Google 里面关于某食补类型的内容;第二个参数是llm,这里用的是gpt-3.5-turbo

getUID 基于SerpAPI

我们来编写getUID方法,Serapi还是很好用的。

python复制代码# langchain 集成了 SerpAIWrapper
from langchain.utilities import SerpAIWrapper
def get_UID(food: str):"""Searches for Weibo Page."""search = SerpAPIWrapper()res = search.run(f"{food}")return res

我们拿到UID是3659536733。

爬虫爬取大V信息

我们想通过爬虫爬取该博主的更多消息,然后交给LLM,写出来更贴合该博主的信。

scss复制代码import tools.scraping_tool import get_dataperson_info=get_data(UID)
print(person_info)

我们去scraping_tool文件编写get_data方法。

python复制代码import json     # json解析
import requests #发送请求
import time #时间def scrape_weibo(url: str):'''爬取相关博主的资料'''# 请求头 User-Agent 是浏览器, referer 模拟从weibo来的请求headers = { "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/89.0.4389.82 Safari/537.36", "Referer": "https://weibo.com" }cookies = { "cookie": '''XSRF-TOKEN=jCAr102IQXscTQRd7oiWJHNd; _s_tentry=weibo.com; Apache=6810542648902.247.1705544482842; SINAGLOBAL=6810542648902.247.1705544482842; ULV=1705544482874:1:1:1:6810542648902.247.1705544482842:; login_sid_t=4db8114a45221d16e8b2e6615dfe87b6; cross_origin_proto=SSL; WBStorage=267ec170|undefined; wb_view_log=1536*8641.5625; appkey=; ALF=1708172494; SUB=_2A25IrWeeDeRhGeFG4loX9ibNzT2IHXVrw-VWrDV8PUJbkNANLVf4kW1NeEJzgg-RTtGReh4uqIEtPdRGyaHrY8kr; SUBP=0033WrSXqPxfM725Ws9jqgMF55529P9D9WFvfQyx9vEP24qqLWHkWI.e5JpX5KzhUgL.FoMR1KncSonpSo22dJLoIp7LxKML1KBLBKnLxKqL1hnLBoMN1h.RSoqReKqp; WB_register_version=2024011820; PC_TOKEN=1e81ac50e2; geetest_token=c721c191b12c41ef9109dbf095409a17; WBPSESS=msnmVvfK_YdwWssvCXfqySIcW3p-MeD70Q_UYKlHyE5MFdGotEm-s9R7CJhhLso-3Byf6VVu-zl7eoyYKpYLyiw_Yb8Gq9FPyrEe8NCIFDAPC3ycBpeLw_o7C5zaC4VUWv1pe-kTvTKYlHVpFfPCwQ=='''
response = requests.get(url, headers=headers,cookies=cookies)
time.sleep(2) # 加上2秒的延时 防止被反爬
return response.textdef get_data(id):url = "https://weibo.com/ajax/profile/detail?uid={}".format(id)html = scrape_weibo(url)response = json.loads(html)return response

image.png

我们可以通过https://weibo.com/ajax/profile/detail?uid=3659536733页面查找博主的信息,返回的格式为json。

爬虫代码也比较简单,我们使用了headers来模拟了浏览器请求,带上了cookies模拟登录状态,从而获取需要权限的内容。

这样我们就获取了博主的信息,我们再移除一些不重要的内容,等下AIGC需要的是中文,所以非中文可以移除。

python复制代码import redef contains_chinese(s):return bool(re.search('[\u4e00-\u9fa5]', s))def remove_non_chinese_fields(d):if isinstance(d, dict):to_remove = [key for key, value in d.items() if isinstance(value, (str, int, float, bool)) and (not contains_chinese(str(value)))]for key in to_remove:del d[key]for key, value in d.items():if isinstance(value, (dict, list)):remove_non_chinese_fields(value)elif isinstance(d, list):to_remove_indices = []for i, item in enumerate(d):if isinstance(item, (str, int, float, bool)) and (not contains_chinese(str(item))):to_remove_indices.append(i)else:remove_non_chinese_fields(item)for index in reversed(to_remove_indices):d.pop(index)

总结

今天我们完成了查找适合推广食疗干货的大V微博UID, 并且爬取了大V的资料。下篇文章我们将继续生成邀请内容,方便营销同学联系大V,提高其工作效率。

我们使用到了一下LangChain组件:

  • PromptTemplate
  • LLM
  • Chain
  • Agent
  • 定制Agent Tool

参考资料

  • 黄佳老师的LangChain课

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/639485.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

大模型学习与实践笔记(十一)

一、使用OpenCompass 对模型进行测评 1.环境安装: git clone https://github.com/open-compass/opencompass cd opencompass pip install -e . 当github超时无法访问时,可以在原命令基础上加上地址: https://mirror.ghproxy.com git clon…

司铭宇老师:房地产中介销售培训课程:如何打消购房者买房疑虑

房地产中介销售培训课程:如何打消购房者买房疑虑 购房是一项重大的人生决定,它不仅涉及到巨大的经济投入,还关系到购房者未来的生活品质。因此,购房者在做出购买决定前往往会有许多疑虑和担忧。作为房地产销售人员,能够…

VS2022联合Qt5开发学习9(QT5.12.3鼠标按下、释放、移动事件以及Qt上取标注点)

在研究医学图像可视化的时候,鼠标响应这里一直都有问题。研究了几天VTK的取点,还是会和Qt冲突。所以现在试试Qt的方式取点,看看能不能实现我的功能。 查了很多资料,这篇博文里的实例有部分参考了祥知道-CSDN博客这位博主的博客[Q…

超级菜鸟怎么学习数据分析?

如果你有python入门基础,在考虑数据分析岗,这篇文章将带你了解:数据分析人才的薪资水平,数据人应该掌握的技术栈。 首先来看看,我在搜索数据分析招聘时,各大厂开出的薪资: 那各大厂在数据领域…

DC电源模块的特点及应用案例分享

BOSHIDA DC电源模块的特点及应用案例分享 DC电源模块是一种可以将交流电转换为直流电的设备,具有以下特点: 1.高效稳定:DC电源模块采用高效稳定的电源转换技术,可以将输入的交流电转换为输出的稳定直流电,并且具有高…

什么是游戏盾?哪家效果好。

游戏盾是什么呢,很多做游戏开发的客户估计都是听说过的,但是也不是所有的游戏开发者会运用到。因为,游戏盾是针对游戏行业APP业务所推出的高度可定制的网络安全管理解决方案,除了能针对大型DDoS攻击(T级别)进行有效防御外&#xf…

Leetcode的AC指南 —— 栈与队列:232.用栈实现队列

摘要: **Leetcode的AC指南 —— 栈与队列:232.用栈实现队列 **。题目介绍:请你仅使用两个栈实现先入先出队列。队列应当支持一般队列支持的所有操作(push、pop、peek、empty): 实现 MyQueue 类:…

列表列添加千分位保留两位小数

// 千分位无小数部分 function setThousandsMarkNoDecimal(num) {// console.log(num????, num, typeof num)if (!num) return num;let fu false;if (num.toString().includes(-)) {fu true;num Number(num.toString().substr(1));}// num Math.trunc(num); // 保留整数…

【Spring 篇】MyBatis注解开发:编写你的数据乐章

欢迎来到MyBatis的音乐殿堂!在这个充满节奏和韵律的舞台上,注解是我们编写数据乐章的得力助手。无需繁琐的XML配置,通过简单而强大的注解,你将能够轻松地与数据库交互。在这篇博客中,我们将深入探讨MyBatis注解开发的精…

潜水泵如何实现远程状态监测与预测性维护?

在各行各业,潜水泵的健康数据采集一直是一项具有挑战性的任务。然而,一项被称为电气特征分析(ESA)的技术通过在电机控制柜而非泵本身上安装传感器,成功解决了这一问题。 图.泵(iStock) 一、电气…

Ubuntu重设root的密码

重设root的密码 未重设密码之前,Ubuntu 中默认的 root 密码是随机的,即每次开机都会有一个新的root 密码,所以此时的 root 用户密码并不确定; 重设root 密码,使用安装时创建的用户登录后sudo su切换至root用户&#…

云服务器搭建coturn出现Not reachable?

文章目录 问题复现解决方案1. 云服务器端口开放问题2. 检查配置文件3. 浏览器 问题解决 问题复现 使用云服务器搭建coturn服务时,出现not reachable报错 ICE Server配置是正确的 但测试relay时却报错:not reachable? 并且服务器也没输出相应日志。 …

(2021|ICLR,扩散先验,VE-SDE,逼真和忠实的权衡)SDEdit:使用随机微分方程引导图像合成和编辑

SDEdit: Guided Image Synthesis and Editing with Stochastic Differential Equations 公和众和号:EDPJ(进 Q 交流群:922230617 或加 VX:CV_EDPJ 进 V 交流群) 目录 0. 摘要 2. 背景:使用随机微分方程…

vue3-生命周期

生命周期 生命周期 vue 组件实例都有自己的一个生命周期 从创建->初始化数据->编译模版->挂载实例到 DOM->数据变更后更新 DOM ->卸载组件 生命周期简单说就是 vue 实例从创建到销毁的过程 生命周期钩子 在各个周期运行时,会执行钩子函数&…

文件改名大师,随机大小写字母混合,让你的文件名独一无二!

文件重命名,单调又乏味?现在,有了我们的文件改名大师,让你的文件名充满惊喜与创意!厌倦了那些毫无新意的文件名?我们为你提供了一种全新的方式,将文件名随机改名为大小写字母混合,让…

C语言实战系列一:经典贪食蛇

C语言学习必须实战&#xff0c;并且学完语法后就必须立即用实战来巩固。一般需要10来个比较复杂的程序才能掌握C语言。今天就教大家第一个小程序&#xff0c;贪食蛇。 首先上代码 一、代码 #include <stdio.h> #include <stdlib.h> #include <curses.h> #…

【版面稀缺】社科类3区SCI,稳定检索78年!着急毕业可投!

关注公主号【SciencePub学术】&#xff0c;发现期刊更多精彩~ 本期&#xff0c;小编给大家推荐的是一本SAGE旗下3区综合性期刊&#xff0c;均2-3个月左右录用&#xff01; 01 期刊基本信息 【期刊简介】IF&#xff1a;2.0-2.5&#xff0c;JCR3区&#xff0c;中科院4区&#x…

《WebKit 技术内幕》之八(2):硬件加速机制

2 Chromium的硬件加速机制 2.1 GraphicsLayer的支持 GraphicsLayer对象是对一个渲染后端存储中某一层的抽象&#xff0c;同众多其他WebKit所定义的抽象类一样&#xff0c;在WebKit移植中&#xff0c;它还需要具体的实现类来支持该类所要提供的功能。为了完成这一功能&#x…

【活动回顾】ABeam德硕| 艾宾信息技术开发(上海)宣讲会及企业座谈—山西大学专场

近日&#xff0c;ABeam大中华区董事长兼总经理中野洋辅先生带领艾宾上海招聘团队一行来到山西大学举行了校园招聘宣讲会&#xff0c;随后与院领导就校企合作事宜进行了深入的座谈交流。 宣讲会上&#xff0c;中野先生介绍了ABeam Consulting总社及ABeam中国的发展历程、业务版…

PIG框架学习3——Redisson 实现业务接口幂等

零、前言 ​ 业务接口幂等问题是在开发中遇到的&#xff0c;如果对业务接口代码不进行幂等控制&#xff0c;并且在前端没有对请求进行限制的情况下&#xff0c;可能会出现多次对接口调用&#xff0c;导致错误异常的发生。就上述情况&#xff0c;对PIGX自带的业务接口幂等实现进…