2.2 第一个LangChain程序
2.2 第一个LangChain程序
调用ChatGPT生成文本
本节将演示如何通过LangChain调用ChatGPT(或GPT-3.5/4)生成文本,仅需几行代码即可实现。
步骤说明
-
安装必要依赖(若未完成):
pip install langchain-openai python-dotenv
-
配置API密钥(推荐通过环境变量):
在项目根目录创建.env
文件:OPENAI_API_KEY=sk-xxx # 替换为你的密钥
-
编写代码:
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)
-
输出示例:
人工智能就像一位不知疲倦的图书管理员。它通过消化海量书籍(数据)建立知识网络, 当遇到新问题时,能快速在记忆迷宫中检索关联信息,最终编织出逻辑缜密的答案锦缎。
构建简单问答链(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):输出更具创造性,适合故事生成。
常见问题排查
-
报错
AuthenticationError
:- 检查
.env
文件中的OPENAI_API_KEY
是否正确。 - 确保代码中调用了
load_dotenv()
。
- 检查
-
响应速度慢:
- 尝试切换模型(如
gpt-3.5-turbo
比gpt-4
更快)。 - 启用流式响应(
stream=True
)逐步获取结果。
- 尝试切换模型(如
-
输出格式不符:
- 在提示模板中明确要求格式(如“用Markdown列表回答”)。
- 使用
Output Parsers
强制结构化输出(JSON/YAML)。