LangChain实战分享
1、基于 LangChain 和 FAISS 的大型文档检索问答系统
构建一个问答系统,支持从大规模文档集合中检索信息并生成答案。可用在企业知识库、客户服务系统等场景中。
from langchain.vectorstores import FAISS
from langchain.embeddings import OpenAIEmbeddings
from langchain.retrievers import RetrievalQAChain
from langchain.llms import OpenAI
# 假设有一批文档
documents = ["Document 1 content here...", "Document 2 content here...", "Document 3 content here..."]
# 构建嵌入
embedding = OpenAIEmbeddings()
faiss_index = FAISS.from_texts(documents, embedding)
# 设置 LLM 检索问答链
retrieval_qa_chain = RetrievalQAChain(llm=llm, retriever=faiss_index.as_retriever())
# 查询
query = "What information does Document 1 provide about X?"
result = retrieval_qa_chain.run(query)
print(result)
2、结合 GPT-4 和实时数据源进行动态问答
LangChain 可以与实时数据源(如 API)结合,实现动态问答,例如天气、股票、新闻等实时信息的获取。以下是如何通过自定义工具调用实时 API 的示例。
import requests
from langchain.tools import BaseTool
class WeatherTool(BaseTool):
name = "weather"
def call(self, location: str) -> str:
# 调用天气 API (以一个虚构的 API 为例)
response = requests.get(f"https://api.weatherapi.com/v1/current.json?key=your_api_key&q={location}")
data = response.json()
return f"The weather in {location} is {data['current']['condition']['text']} with a temperature of {data['current']['temp_c']}°C."
# 初始化天气工具
weather_tool = WeatherTool()
# 创建带工具的 Agent
agent_with_weather = initialize_agent(tools=[weather_tool], llm=llm, agent="zero-shot-react-description")
# 查询天气信息
result = agent_with_weather("What's the weather like in New York?")
print(result)
3、多步骤数据处理 Pipeline:多模态数据处理
如果数据包含文本和图像,可以使用多模态处理来实现 Pipeline。LangChain 可以与其他库如 PIL 等结合,将图像和文本数据同时传递。
示例:图像文本描述生成
from langchain.chains import PromptPipelineChain
from PIL import Image
def image_to_text(image: Image.Image) -> str:
# 假设是一个图像描述生成模型(例如 BLIP、CLIP),返回图片描述
return "A description of the image based on analysis"
# 定义一个多步骤 Chain,其中包括图像描述和文本生成
pipeline_chain = PromptPipelineChain(
steps=[
{"llm": OpenAI(model_name="gpt-4"), "prompt": "Describe this image: {image_description}"},
{"llm": OpenAI(model_name="gpt-4"), "prompt": "Write a short story based on the image description: {text}"}
]
)
# 加载图片
image = Image.open("example_image.jpg")
image_description = image_to_text(image=image)
# 运行 Pipeline
result = pipeline_chain.run(image_description=image_description)
print(result)
4、自定义自动化逻辑的Agent
构建一个具有自动化逻辑的自定义 Agent,该 Agent 可以根据预设的规则选择不同的工具、执行不同的操作。例如,您可以根据问题类型,动态选择要执行的链或工具。
示例:带有条件逻辑的 Agent,这个 Agent 将根据问题内容,自动选择调用天气查询工具、搜索工具或常规问答。适用于需要处理多种问题类型的场景
from langchain.agents import initialize_agent, Tool
from langchain.llms import OpenAI
from langchain.prompts import PromptTemplate
# 自定义逻辑,选择不同的 Chain 或工具
def conditional_tool_selector(query: str) -> str:
if "weather" in query:
return "weather_tool"
elif "search" in query:
return "search_tool"
else:
return "general_qa"
# 初始化所需工具
weather_tool = Tool(name="weather_tool", function=WeatherTool().call)
search_tool = Tool(name="search_tool", function=DuckDuckGoSearchResults())
general_qa_tool = Tool(name="general_qa", function=lambda x: llm(x))
# 初始化带条件选择的 Agent
conditional_agent = initialize_agent(
tools=[weather_tool, search_tool, general_qa_tool],
llm=llm,
agent=conditional_tool_selector,
)
# 测试条件选择
response = conditional_agent("What's the weather in London?")
print(response)
5、自动化报告生成 Pipeline:分析数据并自动生成 PDF 报告
可以利用 LangChain 和报告生成工具(如 reportlab),实现自动化的分析和报告生成。
from langchain.prompts import PromptTemplate
from langchain.chains import LLMChain
from reportlab.lib.pagesizes import letter
from reportlab.pdfgen import canvas
# 1. 分析数据并生成总结
data_summary_prompt = PromptTemplate(
input_variables=["data"],
template="Analyze the following data and summarize key insights: {data}",
)
summary_chain = LLMChain(llm=llm, prompt=data_summary_prompt)
# 2. 使用总结生成 PDF 报告
def generate_pdf_report(data_summary, filename="report.pdf"):
c = canvas.Canvas(filename, pagesize=letter)
c.drawString(100, 750, "Data Analysis Report")
c.drawString(100, 725, f"Summary: {data_summary}")
c.showPage()
c.save()
# 使用链分析数据并生成报告
data = "Sample data content here..."
data_summary = summary_chain.run(data=data)
generate_pdf_report(data_summary)
6、结合时间调度和 LangChain 实现自动化任务
可以结合调度任务库(例如 schedule 或 APScheduler),让 LangChain 自动化定时执行任务,例如定时发送报告、数据监控或实时新闻推送。
import schedule
import time
from datetime import datetime
# 定义一个定时任务函数
def scheduled_task():
current_time = datetime.now().strftime("%Y-%m-%d %H:%M:%S")
print(f"Task executed at: {current_time}")
# 这里可以添加 LangChain 的查询和分析逻辑
result = agent_with_weather("What's the latest news in AI?")
print(result)
# 设置任务每小时执行一次
schedule.every().hour.do(scheduled_task)
# 运行任务调度器
while True:
schedule.run_pending()
time.sleep(1)
7、自动生成分析摘要
自动化数据处理与洞察生成,LangChain 可用于实时或批量数据分析,通过解析复杂数据生成洞察报告,适用于金融或电商业务。
实战示例:电商销售数据分析报告生成
通过对历史订单数据的分析,生成电商业务的洞察报告,帮助决策团队了解销售趋势和客户行为。
from langchain.chains import PromptPipelineChain
from langchain.llms import OpenAI
from langchain.prompts import PromptTemplate
# 定义模板生成报告的总结部分
report_prompt = PromptTemplate(
input_variables=["sales_data"],
template="Analyze the following sales data and provide key insights: {sales_data}",
)
llm = OpenAI()
report_chain = LLMChain(llm=llm, prompt=report_prompt)
# 假设已经获得销售数据的字符串形式
sales_data = "Order data and details..."
report_summary = report_chain.run(sales_data=sales_data)
# 输出报告总结
print(report_summary)
8、跨部门智能问答系统:企业知识库问答
可以将企业不同部门的知识文件输入 LangChain,利用嵌入与检索模型来构建跨部门问答系统。例如,对于大企业,可以实现人力资源、客户服务和技术支持的自动化。
实战示例:多部门知识库问答系统,可以解答来自公司不同部门的常见问题,提高企业内部的信息获取效率
from langchain.vectorstores import Chroma
from langchain.retrievers import RetrievalQAChain
# 假设我们有来自不同部门的文档
hr_docs = ["HR document content...", "Another HR document..."]
tech_docs = ["Tech support doc...", "Another tech support doc..."]
customer_service_docs = ["Customer service doc..."]
# 使用嵌入模型创建知识库
from langchain.embeddings import OpenAIEmbeddings
embedding = OpenAIEmbeddings()
chroma_store = Chroma.from_texts(hr_docs + tech_docs + customer_service_docs, embedding)
# 构建检索问答链
llm = OpenAI()
qa_chain = RetrievalQAChain(llm=llm, retriever=chroma_store.as_retriever())
# 用户查询的示例
query = "What is the process to request leave in the HR system?"
response = qa_chain.run(query)
print(response)
9、智能营销助手:个性化内容生成
LangChain 可用于营销自动化,生成个性化文案和推荐内容,提升用户互动率。例如,电商领域可为每个用户定制推荐内容和促销文案
实战示例:定制化营销邮件生成
from langchain.prompts import PromptTemplate
# 营销邮件生成的提示模板
email_template = PromptTemplate(
input_variables=["user_name", "product_recommendations"],
template="Hi {user_name},\n\nBased on your recent activity, we thought you might love these products:\n{product_recommendations}\n\nDon't miss out on our special discounts!\nBest regards,\nYour Store",
)
# 假设用户的推荐内容已生成
user_name = "Alice"
product_recommendations = "- Product A\n- Product B\n- Product C"
# 生成邮件内容
email_content = email_template.format(user_name=user_name, product_recommendations=product_recommendations)
print(email_content)
10、智能监控与预警系统:数据异常检测
通过 LangChain,结合数据监控服务,可以构建实时数据监控系统,在数据发生异常时发送警报。适用于工业、金融等需要实时监控的行业。
实战示例:实时数据监控报警系统
这种自动化报警系统能在检测到异常后立即采取行动,适合金融系统、制造业或供应链管理中的实时监控
import schedule
import time
from langchain.llms import OpenAI
def anomaly_detection(data: str):
llm = OpenAI()
prompt = f"Analyze the following data for anomalies: {data}"
return llm(prompt)
def monitor_system():
# 假设我们每小时获取一次系统数据
data = "System performance data here..."
result = anomaly_detection(data)
if "anomaly" in result:
print("Alert: Anomaly detected in system data!")
# 设置每小时监控任务
schedule.every().hour.do(monitor_system)
while True:
schedule.run_pending()
time.sleep(1)
11、法律和合规文档生成
通过 LangChain 自动生成标准化的合同、协议,确保合规性。适用于法律团队和企业的合规部门
实战示例:合同生成
这种方法适用于自动生成标准化合同,并可以在生成过程中根据不同客户需求进行自定义,帮助减少法律团队的文案生成工作量
from langchain.chains import LLMChain
from langchain.prompts import PromptTemplate
# 定义合同模板
contract_prompt = PromptTemplate(
input_variables=["company_name", "client_name", "project_details"],
template="Generate a contract for {company_name} with client {client_name} for the project: {project_details}. Ensure it includes payment terms, confidentiality clauses, and project scope.",
)
# 构建合同生成链
llm = OpenAI()
contract_chain = LLMChain(llm=llm, prompt=contract_prompt)
# 填写合同信息
contract_text = contract_chain.run(
company_name="Your Company",
client_name="Client Name",
project_details="Web development project with specific deliverables..."
)
print(contract_text)
12、个性化学习路径推荐系统
对于教育行业,LangChain 可用来根据学生的历史表现和兴趣生成个性化学习路径或推荐课程。特别是对于线上教育或企业内部培训系统,这种推荐能大幅提高学习效果。
实战示例:生成个性化学习路径
from langchain.prompts import PromptTemplate
from langchain.chains import LLMChain
# 学习路径推荐的提示模板
learning_path_prompt = PromptTemplate(
input_variables=["student_profile", "learning_goals"],
template="Based on the student profile {student_profile}, generate a personalized learning path to achieve their goals: {learning_goals}.",
)
# 学生的资料与学习目标
student_profile = "Student with a background in biology, interested in data science."
learning_goals = "Learn Python for data analysis and statistics."
# 生成学习路径
llm = OpenAI()
learning_path_chain = LLMChain(llm=llm, prompt=learning_path_prompt)
learning_path = learning_path_chain.run(student_profile=student_profile, learning_goals=learning_goals)
print(learning_path)