Bootstrap

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


三、核心模块深入:像搭积木一样组装AI能力


1. Models(模型层):给你的AI换个“大脑”

场景需求

  • 需要更高精度的回答?→ 换GPT-4
  • 数据敏感必须本地部署?→ 用开源模型
  • 想节省成本?→ 选择按量付费的模型

实操演示

# 使用OpenAI的GPT-4(需账户有访问权限)
from langchain.chat_models import ChatOpenAI
gpt4 = ChatOpenAI(model="gpt-4", temperature=0.5)

# 使用开源的Llama2(需先下载模型文件)
from langchain.llms import LlamaCpp
llama = LlamaCpp(
    model_path="./llama-2-7b-chat.ggmlv3.q4_0.bin",
    temperature=0.8
)

# 对比两者的诗歌生成
print("GPT-4:", gpt4.predict("用'月光'开头写一句诗"))
print("Llama2:", llama.predict("用'月光'开头写一句诗"))

输出对比

GPT-4:月光如水洗尘心,星河若梦照古今  
Llama2:月光白如雪,照在青石街  

小贴士

  • 云端模型:响应快、效果稳定,但需付费
  • 本地模型:数据隐私好,但需要显卡资源

2. Chains(任务链):把AI变成流水线工人

典型案例:自动客服工单处理系统

咨询类
投诉类
用户输入
分类链
知识库查询链
情绪安抚链
生成回复
格式美化链

代码实现

from langchain.chains import TransformChain, LLMChain, SequentialChain

# 第一步:工单分类
classify_prompt = PromptTemplate(...)
classify_chain = LLMChain(...)

# 第二步:根据类型处理
def routing_logic(inputs):
    if "投诉" in inputs["type"]:
        return "complaint_chain"
    else:
        return "query_chain"

# 组装完整流程
full_chain = SequentialChain(
    chains=[classify_chain, complaint_chain, query_chain],
    routing=routing_logic  # 自定义路由逻辑
)

调试技巧

# 查看每个步骤的输入输出
full_chain.run("你们的产品有问题!", verbose=True)

# 输出日志示例:
# [分类链] 输入:"你们的产品有问题!" → 输出:{"type": "投诉"}
# [投诉处理链] 输入:投诉内容 → 输出:安抚话术

3. Agents(智能代理):给你的AI发瑞士军刀

工具包配置

from langchain.agents import Tool
from langchain.utilities import GoogleSearchAPIWrapper

# 创建三个工具
search = GoogleSearchAPIWrapper()
tools = [
    Tool(
        name="网络搜索",
        func=search.run,
        description="用于查询实时信息"
    ),
    Tool(
        name="计算器",
        func=lambda x: str(eval(x)),
        description="用于数学计算"
    ),
    Tool(
        name="翻译器",
        func=translate_api,
        description="中英互译"
    )
]

实战场景:全能旅行助手

agent.run("帮我查巴厘岛下周天气,预算1万元玩3天怎么安排?")

AI的思考过程(通过设置verbose=True可见):

1. 需要天气数据 → 调用「网络搜索」工具  
2. 计算每日预算:10000/3 ≈ 3333 → 调用「计算器」  
3. 生成行程建议 → 使用LLM本身能力  
4. 翻译酒店名称 → 调用「翻译器」  

常见问题

  • 工具选择错误:在工具描述中强调使用场景
  • 无限循环:设置最大迭代次数max_iterations=5

4. Memory(记忆管理):让AI记住你的喜好

记忆类型对比表

类型适用场景代码示例
对话缓存记忆短期聊天ConversationBufferMemory
实体记忆记住用户特定信息EntityMemory
知识图谱记忆复杂关系记忆KGMemory

用户偏好记忆案例

from langchain.memory import ConversationEntityMemory

# 创建带实体识别的记忆
memory = ConversationEntityMemory(llm=llm)
memory.save_context(
    {"input": "我咖啡只喝美式"}, 
    {"output": "已记录您的咖啡偏好"}
)

# 后续对话
print(memory.load_memory_variables({"input": "推荐个饮品?"}))
# 输出:{'history': ..., 'entities': {'用户': {'咖啡偏好': '美式'}}}

记忆丢失问题解决

  • 定期将记忆存储到数据库
  • 使用VectorStoreRetrieverMemory向量记忆

5. Indexes(数据索引):让AI读懂你的文档

企业知识库搭建四部曲

  1. 文档加载:支持PDF/Word/网页

    from langchain.document_loaders import PyPDFLoader
    loader = PyPDFLoader("企业章程.pdf")
    pages = loader.load()
    
  2. 文本分割:防止超过模型token限制

    from langchain.text_splitter import RecursiveCharacterTextSplitter
    text_splitter = RecursiveCharacterTextSplitter(chunk_size=1000)
    docs = text_splitter.split_documents(pages)
    
  3. 向量存储:把文字变成数学向量

    from langchain.embeddings import OpenAIEmbeddings
    from langchain.vectorstores import FAISS
    db = FAISS.from_documents(docs, OpenAIEmbeddings())
    
  4. 语义检索

    query = "年假制度是怎样的?"
    similar_docs = db.similarity_search(query)
    

效果对比

传统关键词搜索 → 匹配"年假"出现次数  
语义搜索 → 理解"带薪休假怎么计算"也能找到答案

6. 模块组合实战:智能会议助手

需求场景

  1. 自动总结会议录音(语音转文字 + 摘要生成)
  2. 根据讨论内容生成待办事项
  3. 关联历史会议记录

代码架构

# 1. 语音处理链
audio_chain = SpeechToTextChain() 

# 2. 摘要生成链
summary_chain = LLMChain(...)

# 3. 待办事项抽取链
todo_chain = TransformChain(...)

# 4. 记忆存储
memory = CombinedMemory(memories=[buffer_memory, entity_memory])

# 整合所有模块
assistant_chain = SequentialChain(
    chains=[audio_chain, summary_chain, todo_chain],
    memory=memory,
    input_variables=["audio_file"]
)

7. 调试与优化指南

常见问题诊断表

现象可能原因解决方案
响应速度慢链过长/模型延迟高异步调用/换轻量模型
输出结果不稳定temperature值过高降低temperature至0.3-0.6
记忆丢失未正确传递memory对象检查chain的memory参数是否设置
工具调用失败API密钥失效/网络问题添加重试机制/异常捕获

性能优化技巧

  • 缓存机制:对常见查询结果缓存
    from langchain.cache import InMemoryCache
    langchain.llm_cache = InMemoryCache()
    
  • 批量处理:同时处理多个输入
    inputs = [{"query": "巴黎天气"}, {"query": "伦敦天气"}]
    chain.apply(inputs)
    

8. 阶段练习:打造你的第一个智能应用

任务选择

  • 选项1:电商客服机器人(需对接产品数据库)
  • 选项2:个人健康助手(记录运动饮食数据)
  • 选项3:学习监督员(检查作业生成错题集)

实现步骤提示

  1. 画出功能流程图
  2. 列出需要的模块(如:需要Agent吗?需要哪种Memory?)
  3. 分模块编写测试代码
  4. 组装调试时使用verbose=True观察执行过程

示例代码框架

# 健康助手骨架代码
from langchain import LLMChain, Agent, Memory

class HealthAssistant:
    def __init__(self):
        self.memory = ConversationEntityMemory()
        self.food_chain = LLMChain(...)
        self.exercise_agent = Agent(...)
    
    def log_meal(self, food):
        self.memory.save_context(...)
        return self.food_chain.run(food)
    
    def suggest_exercise(self):
        return self.exercise_agent.run(
            inputs={"memory": self.memory},
            tools=[BMI_calculator, workout_generator]
        )

下一步学习预告

在第四部分项目实战中,你将:
🔧 用1小时搭建智能客服系统
📊 实现自动分析Excel生成可视化报告
🤖 创建能记住300轮对话的聊天机器人

现在先做个选择题检验学习效果吧!

Q:当需要处理“用户咨询→数据库查询→生成报告”流程时,应该使用?
A) 单个LLM直接处理
B) Chain串联多个步骤
C) 训练新模型

(答案:B。Chain就像流水线,适合多步骤任务)

;