文章目录

AI Agent 开发实战指南

LangChain 深度解析

深入解析 LangChain 的功能模块及其在 AI Agent 开发中的作用。 内容规划: LangChain 的架构与核心理念 Prompt 模版的设计与优化 Chains 和工具集成 Memory 模块的实现与持久化 LangChain 的高级功能(如动态调用工具、异步处理等) 结合案例:使用 LangChain 构建多功能 Agent

文章大纲

2.2 第一个LangChain程序


2.2 第一个LangChain程序

调用ChatGPT生成文本

本节将演示如何通过LangChain调用ChatGPT(或GPT-3.5/4)生成文本,仅需几行代码即可实现。

步骤说明
  1. 安装必要依赖(若未完成):

    pip install langchain-openai python-dotenv
    
  2. 配置API密钥(推荐通过环境变量):
    在项目根目录创建.env文件:

    OPENAI_API_KEY=sk-xxx  # 替换为你的密钥
    
  3. 编写代码

    from langchain_openai import ChatOpenAI
    from dotenv import load_dotenv
    
    # 加载环境变量(自动读取.env文件)
    load_dotenv()  
    
    # 初始化ChatGPT模型
    llm = ChatOpenAI(model="gpt-3.5-turbo")  # 可选:temperature=0.7 调整创造性
    
    # 调用模型生成文本
    response = llm.invoke("用比喻解释人工智能的工作原理")
    print(response.content)
    
  4. 输出示例

    人工智能就像一位不知疲倦的图书管理员。它通过消化海量书籍(数据)建立知识网络,
    当遇到新问题时,能快速在记忆迷宫中检索关联信息,最终编织出逻辑缜密的答案锦缎。
    

构建简单问答链(QA Chain)

问答链(QA Chain)是LangChain的核心应用之一,可实现“用户提问→模型回答”的标准化流程。以下是构建过程:

1. 定义提示模板

通过模板控制模型回答风格:

from langchain_core.prompts import ChatPromptTemplate

# 创建带有变量的提示模板
template = """
你是一个专业的技术导师,回答需简洁且包含代码示例。
用户问题:{question}
答案:
"""
prompt = ChatPromptTemplate.from_template(template)
2. 绑定模型与模板为链

使用LLMChain将组件串联:

from langchain.chains import LLMChain

# 创建链(模型 + 模板)
qa_chain = LLMChain(llm=llm, prompt=prompt)

# 调用链
question = "如何在Python中反转列表?"
result = qa_chain.invoke({"question": question})
print(result["text"])
3. 输出示例
在Python中反转列表的两种方法:

1. 使用切片操作:
   my_list = [1, 2, 3]
   reversed_list = my_list[::-1]

2. 使用reverse()方法:
   my_list = [1, 2, 3]
   my_list.reverse()  # 原地修改

问答链的扩展:添加检索功能(可选)

若要实现基于文档的精准回答(RAG模式),可扩展为检索增强链:

from langchain.chains import RetrievalQA
from langchain_community.vectorstores import FAISS
from langchain_openai import OpenAIEmbeddings

# 1. 加载文档并向量化(此处为伪代码示例)
docs = [...]  # 假设已从PDF/文本加载文档分块
vector_db = FAISS.from_documents(docs, OpenAIEmbeddings())

# 2. 创建检索增强链
retrieval_qa = RetrievalQA.from_chain_type(
    llm=llm,
    retriever=vector_db.as_retriever(),
    chain_type="stuff"  # 简单合并检索结果
)

# 3. 提问(自动检索相关文档片段)
answer = retrieval_qa.invoke("LangChain的核心组件有哪些?")

关键概念解析

  • invoke方法:LangChain的标准执行入口,支持输入字典传递变量。
  • 链(Chain)的复用性:一旦定义qa_chain,可重复调用处理不同问题。
  • 温度参数(temperature)
    • 低值(如0.2):输出确定性高,适合技术问答。
    • 高值(如0.8):输出更具创造性,适合故事生成。

常见问题排查

  1. 报错AuthenticationError

    • 检查.env文件中的OPENAI_API_KEY是否正确。
    • 确保代码中调用了load_dotenv()
  2. 响应速度慢

    • 尝试切换模型(如gpt-3.5-turbogpt-4更快)。
    • 启用流式响应(stream=True)逐步获取结果。
  3. 输出格式不符

    • 在提示模板中明确要求格式(如“用Markdown列表回答”)。
    • 使用Output Parsers强制结构化输出(JSON/YAML)。