真正通俗易懂的Langchain入门学习(五)


四、项目实战:从玩具到工具的蜕变


项目1:智能客服助手(1-2天)

场景需求

  • 用户咨询产品信息 → 自动查询数据库
  • 处理退换货请求 → 生成工单并邮件通知
  • 多轮对话 → 记住用户历史订单

技术栈

产品咨询
售后服务
用户提问
意图识别Chain
类型判断
数据库查询Agent
工单生成Chain
组织回复
回复美化Transform

分步实现

  1. 搭建基础问答链

    from langchain.chains import RetrievalQA
    
    # 连接产品数据库
    qa_chain = RetrievalQA.from_chain_type(
        llm=llm,
        chain_type="stuff",
        retriever=product_db.as_retriever()
    )
    
    print(qa_chain.run("手机X的屏幕尺寸是多少?")) 
    # 输出:6.7英寸,分辨率2400×1080...
    
  2. 添加工单处理功能

    def create_ticket(info):
        ticket_id = db.insert({"user": "张三", "problem": info})
        return f"工单已创建(编号:{ticket_id}),客服将在24小时内联系您"
    
    ticket_tool = Tool(
        name="create_ticket",
        func=create_ticket,
        description="用户发起退换货时调用"
    )
    
  3. 整合记忆模块

    from langchain.memory import ConversationBufferMemory
    
    memory = ConversationBufferMemory()
    memory.save_context(
        {"input": "我的订单号是123456"}, 
        {"output": "已记录您的订单信息"}
    )
    
  4. 完整调用示例

    user_input = "我想退换订单123456的商品"
    if "退换" in user_input:
        # 调用工单工具
        print(agent.run(user_input, tools=[ticket_tool])) 
    else:
        # 常规问答
        print(qa_chain.run(user_input))
    

效果演示

用户:订单123456什么时候发货?
客服:该订单已于今日上午10点发出,预计明天送达。

用户:我要退货这个订单
客服:好的,已为您创建工单T202311001,请保持电话畅通。

项目2:学术论文分析工具(3-4天)

核心功能

  • PDF论文 → 自动生成摘要
  • 输入问题 → 定位相关段落
  • 关键图表 → 提取并生成描述

技术架构

from langchain.document_loaders import PyPDFLoader
from langchain.chains import AnalyzeDocumentChain

# 1. 加载论文
loader = PyPDFLoader("paper.pdf")
pages = loader.load()

# 2. 构建分析链
summary_chain = AnalyzeDocumentChain.from_chain_type(
    llm=llm,
    chain_type="map_reduce",  # 适用于长文本
)

# 3. 执行分析
print(summary_chain.run("请用中文总结这篇论文的创新点"))

高级功能扩展

  1. 图表描述生成

    # 假设已通过OCR提取图表标题
    figure_chain = LLMChain(
        prompt=PromptTemplate(
            template="描述以下图表内容:{caption}",
            input_variables=["caption"]
        )
    )
    print(figure_chain.run("图3: 不同算法在数据集A上的准确率对比"))
    # 输出:本图表对比了CNN、Transformer等模型在数据集A上的表现...
    
  2. 跨论文对比

    compare_prompt = """
    对比两篇论文的核心观点:
    论文1:{paper1_summary}
    论文2:{paper2_summary}
    """
    compare_chain = LLMChain(...)
    

可视化增强

# 生成Markdown格式报告
report = f"""
# 论文分析报告

## 摘要  
{summary}

## 创新点  
1. {innovation_points[0]}  
2. {innovation_points[1]}
"""

项目3:自动化数据分析助手(2-3天)

核心流程

统计
预测
上传CSV
数据清洗Chain
分析类型
描述性分析Agent
模型训练Chain
生成图表
导出报告

关键技术点

  1. 数据预处理

    from langchain.tools import PythonAstREPLTool
    
    data_tool = PythonAstREPLTool(
        description="输入Python代码执行数据分析",
        locals={"df": pd.read_csv("data.csv")}
    )
    
    agent.run("计算销售额的月度增长率", tools=[data_tool])
    
  2. 可视化集成

    # 生成绘图代码
    plot_code = llm.predict("""
    为DataFrame df生成绘制月度销售额折线图的Python代码,
    要求:
    - x轴为月份
    - y轴为销售额
    - 使用seaborn样式
    """)
    
    # 执行代码
    exec(plot_code)  
    plt.savefig("sales_trend.png")
    
  3. 自动生成报告

    report_template = """
    # 数据分析报告
    
    ## 关键指标  
    总销售额:{total_sales}  
    同比增长率:{growth_rate}%  
    
    ## 趋势分析  
    ![销售趋势图](sales_trend.png)
    """
    

完整调用示例

agent.run(
    "分析data.csv,计算各产品线销售额占比,生成饼图",
    tools=[data_tool, plot_tool]
)

项目升级挑战

为已完成项目添加以下进阶功能:

项目 基础功能 挑战任务
客服助手 回答产品问题 接入语音接口实现电话机器人
论文分析 生成摘要 自动提取参考文献生成知识图谱
数据分析 生成统计图表 预测下季度销售额并输出Excel报告

示例:客服助手升级电话版

from langchain.tools import APITool

# 接入Twilio语音API
call_tool = APITool(
    name="make_call",
    endpoint="https://api.twilio.com/...",
    method="POST",
    description="拨打电话并转接AI回复"
)

agent.run("致电13800138000解释退货政策", tools=[call_tool])

项目复盘指南
  1. 性能评估表

    指标 评估方法 优化方向
    响应速度 平均响应时间 启用缓存/异步调用
    准确率 人工抽查100个回答 优化提示词/增加示例
    稳定性 连续运行24小时错误率 添加异常重试机制
  2. 代码优化技巧

    • 模块化拆分
      # 将客服功能拆分为独立类
      class CustomerService:
          def __init__(self, llm):
              self.qa_chain = self._init_qa_chain(llm)
              self.ticket_tool = self._init_ticket_tool()
          
          def _init_qa_chain(self, llm):
              ...
      
    • 配置分离
      创建config.yaml存储API密钥、模型参数等敏感信息

毕业设计建议

结合前三项技术,打造智能办公助手

  1. 会议记录 → 语音转文字 + 提取待办事项
  2. 邮件处理 → 自动分类 + 生成回复草稿
  3. 数据看板 → 定时生成报表并邮件发送

架构设计

from langchain.agents import AgentExecutor
from langchain.tools import BaseTool

class OfficeAssistant:
    def __init__(self):
        self.email_agent = self._init_email_agent()
        self.meeting_chain = self._init_meeting_chain()
    
    def _init_email_agent(self):
        tools = [email_classifier, reply_generator]
        return AgentExecutor.from_agent_and_tools(...)
    
    def process_meeting(self, audio_path):
        text = speech_to_text(audio_path)
        return self.meeting_chain.run(text)

下一步行动

  1. 选择你的启动项目:从三个基础项目中任选其一
  2. 搭建最小可行版本:先实现核心功能再优化细节
  3. 加入LangChain社区:在GitHub分享代码获取反馈

记住:每个复杂的AI应用都是由ChainAgentTool等基础模块组合而成,就像用乐高积木搭建城堡——现在你已拥有所有基础积木块,是时候创造你的AI作品了!

你可能感兴趣的:(智能体,langchain,学习)