场景需求:
实操演示:
# 使用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:月光白如雪,照在青石街
小贴士:
典型案例:自动客服工单处理系统
代码实现:
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": "投诉"}
# [投诉处理链] 输入:投诉内容 → 输出:安抚话术
工具包配置:
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
记忆类型对比表:
类型 | 适用场景 | 代码示例 |
---|---|---|
对话缓存记忆 | 短期聊天 | 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
向量记忆企业知识库搭建四部曲:
文档加载:支持PDF/Word/网页
from langchain.document_loaders import PyPDFLoader
loader = PyPDFLoader("企业章程.pdf")
pages = loader.load()
文本分割:防止超过模型token限制
from langchain.text_splitter import RecursiveCharacterTextSplitter
text_splitter = RecursiveCharacterTextSplitter(chunk_size=1000)
docs = text_splitter.split_documents(pages)
向量存储:把文字变成数学向量
from langchain.embeddings import OpenAIEmbeddings
from langchain.vectorstores import FAISS
db = FAISS.from_documents(docs, OpenAIEmbeddings())
语义检索:
query = "年假制度是怎样的?"
similar_docs = db.similarity_search(query)
效果对比:
传统关键词搜索 → 匹配"年假"出现次数
语义搜索 → 理解"带薪休假怎么计算"也能找到答案
需求场景:
代码架构:
# 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"]
)
常见问题诊断表:
现象 | 可能原因 | 解决方案 |
---|---|---|
响应速度慢 | 链过长/模型延迟高 | 异步调用/换轻量模型 |
输出结果不稳定 | 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)
任务选择:
实现步骤提示:
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就像流水线,适合多步骤任务)