LangChain基础:开启AI应用开发之门
什么是 LangChain?🤔
想象你在搭建一个乐高城堡,你需要:
- 各种形状的积木(模型、工具)
- 连接积木的方法(链式调用)
- 建造的说明书(提示模板)
- 特殊功能积木(代理、记忆)
LangChain 就像是一个强大的乐高工具箱,它提供了:
- 统一的接口调用各种语言模型
- 灵活的组件连接方式
- 丰富的工具和集成
- 完整的应用开发框架
为什么选择 LangChain?
简化开发
- 统一的接口
- 丰富的组件
- 快速原型开发
功能强大
- 支持多种模型
- 提供各类工具
- 灵活的扩展性
生产可用
- 完善的文档
- 活跃的社区
- 企业级支持
环境配置 🛠️
1. 安装 Python
确保你的系统已安装 Python 3.8.1 或更高版本:
# 检查 Python 版本
python --version
# 如果需要安装或升级
brew install python # macOS
# 或访问 python.org 下载安装包
2. 安装 LangChain
# 使用 pip 安装
pip install langchain
# 安装常用依赖
pip install openai chromadb tiktoken
3. 配置环境变量
# 设置环境变量
import os
os.environ["OPENAI_API_KEY"] = "你的OpenAI API密钥"
# 或者在终端中设置
export OPENAI_API_KEY="你的OpenAI API密钥"
第一个 LangChain 应用 🚀
让我们从一个简单的翻译应用开始:
from langchain.chat_models import ChatOpenAI
from langchain.prompts import ChatPromptTemplate
from langchain.schema import HumanMessage
# 1. 创建聊天模型
chat = ChatOpenAI(temperature=0)
# 2. 创建提示模板
template = """你是一个专业的翻译助手。
请将以下文本翻译成{target_language}:
{text}
"""
prompt = ChatPromptTemplate.from_template(template)
# 3. 准备消息
messages = prompt.format_messages(
target_language="中文",
text="The early bird catches the worm."
)
# 4. 获取回复
response = chat.invoke(messages)
print(response.content)
# 输出: 早起的鸟儿有虫吃。
让我们来分析这个简单应用的每个部分:
导入必要模块
from langchain.chat_models import ChatOpenAI # 聊天模型 from langchain.prompts import ChatPromptTemplate # 提示模板
创建模型实例
chat = ChatOpenAI(temperature=0) # temperature=0 表示输出最确定的答案
定义提示模板
template = """你是一个专业的翻译助手。 请将以下文本翻译成{target_language}: {text} """
格式化提示
messages = prompt.format_messages( target_language="中文", text="The early bird catches the worm." )
获取回复
response = chat.invoke(messages)
基础概念 📚
1. Models(模型)
LangChain 支持多种类型的模型:
# 聊天模型
from langchain.chat_models import ChatOpenAI
chat = ChatOpenAI()
# 文本生成模型
from langchain.llms import OpenAI
llm = OpenAI()
# 嵌入模型
from langchain.embeddings import OpenAIEmbeddings
embeddings = OpenAIEmbeddings()
2. Prompts(提示)
提示是与模型交互的关键:
# 简单提示模板
from langchain.prompts import PromptTemplate
prompt = PromptTemplate.from_template(
"给我讲一个关于{topic}的笑话"
)
# 聊天提示模板
from langchain.prompts import ChatPromptTemplate
chat_prompt = ChatPromptTemplate.from_messages([
("system", "你是一个幽默的助手"),
("human", "讲个笑话吧"),
("assistant", "好的,这是一个关于程序员的笑话..."),
("human", "{input}")
])
3. Chains(链)
链可以将多个组件连接起来:
from langchain.chains import LLMChain
from langchain.chat_models import ChatOpenAI
# 创建链
chain = LLMChain(
llm=ChatOpenAI(),
prompt=prompt
)
# 运行链
result = chain.invoke({"topic": "程序员"})
print(result["text"])
实用技巧 💡
1. 调试输出
# 启用详细输出
import langchain
langchain.debug = True
# 使用 verbose 参数
chain = LLMChain(
llm=ChatOpenAI(),
prompt=prompt,
verbose=True
)
2. 错误处理
from langchain.callbacks.manager import CallbackManager
from langchain.callbacks.streaming_stdout import StreamingStdOutCallbackHandler
# 创建带有回调的模型
chat = ChatOpenAI(
streaming=True,
callback_manager=CallbackManager([
StreamingStdOutCallbackHandler()
]),
verbose=True
)
# 使用异常处理
try:
response = chat.invoke([HumanMessage(content="Hello")])
except Exception as e:
print(f"发生错误:{str(e)}")
3. 模型参数调优
# 调整创造性
creative_chat = ChatOpenAI(temperature=0.9) # 更有创意的回答
# 调整确定性
precise_chat = ChatOpenAI(temperature=0) # 更确定的回答
# 限制输出长度
short_chat = ChatOpenAI(max_tokens=50) # 限制回答长度
应用示例 🌟
1. 智能问答
from langchain.chains import ConversationChain
from langchain.memory import ConversationBufferMemory
# 创建带记忆的对话链
conversation = ConversationChain(
llm=ChatOpenAI(),
memory=ConversationBufferMemory()
)
# 进行对话
response1 = conversation.predict(input="你好!")
print(response1)
# 输出: 你好!很高兴见到你。有什么我可以帮你的吗?
response2 = conversation.predict(input="我们刚才说了什么?")
print(response2)
# 输出: 我们刚才打了招呼。你说"你好!",我回复了问候并表示很高兴见到你。
2. 文本摘要
from langchain.chains.summarize import load_summarize_chain
# 创建摘要链
chain = load_summarize_chain(
llm=ChatOpenAI(),
chain_type="map_reduce" # 使用map_reduce方式处理长文本
)
# 准备文档
from langchain.docstore.document import Document
doc = Document(
page_content="""
人工智能(AI)正在改变我们的生活方式。从智能手机助手到自动驾驶汽车,
AI技术已经渗透到了我们生活的方方面面。未来,AI将继续发展,
可能带来更多令人兴奋的创新。但同时,我们也需要注意AI发展带来的挑战,
确保技术发展服务于人类福祉。
"""
)
# 生成摘要
summary = chain.invoke([doc])
print(summary["output_text"])
# 输出: AI技术正在改变生活,带来创新的同时也需关注其挑战,确保造福人类。
最佳实践 ✨
1. 提示设计
# 好的提示模板
good_prompt = PromptTemplate.from_template("""
请完成以下任务:
1. {task_1}
2. {task_2}
3. {task_3}
注意事项:
- 请逐步完成每个任务
- 清晰说明每步的理由
- 最后总结所有结果
""")
# 不好的提示模板
bad_prompt = PromptTemplate.from_template("""
完成{task_1}{task_2}{task_3}
""") # 缺乏结构和清晰的指示
2. 链式设计
# 好的链式设计
from langchain.chains import SimpleSequentialChain
# 第一个链:生成大纲
outline_chain = LLMChain(
llm=ChatOpenAI(),
prompt=PromptTemplate.from_template("为{topic}生成大纲")
)
# 第二个链:扩展内容
content_chain = LLMChain(
llm=ChatOpenAI(),
prompt=PromptTemplate.from_template("基于以下大纲生成详细内容:{outline}")
)
# 组合链
full_chain = SimpleSequentialChain(
chains=[outline_chain, content_chain]
)
# 运行组合链
result = full_chain.invoke({"topic": "人工智能的未来"})
3. 错误处理和日志
import logging
# 配置日志
logging.basicConfig(level=logging.INFO)
logger = logging.getLogger(__name__)
class SafeChain:
def __init__(self, chain):
self.chain = chain
def run(self, input_data):
try:
# 记录输入
logger.info(f"输入: {input_data}")
# 运行链
result = self.chain.invoke(input_data)
# 记录输出
logger.info(f"输出: {result}")
return result
except Exception as e:
# 记录错误
logger.error(f"错误: {str(e)}")
# 返回友好的错误信息
return {
"error": "处理过程中出现错误",
"details": str(e)
}
小结 📝
LangChain 是一个强大的框架,它能帮助我们:
- 快速构建 AI 应用
- 灵活组合各种组件
- 处理复杂的应用场景
关键要点:
- 理解基础概念
- 掌握核心组件
- 注重实践应用
下一步:
- 探索更多组件
- 尝试实际项目
- 参与社区讨论
记住:好的应用是一步步构建的。从简单的例子开始,逐步添加更多功能,最终打造出强大的应用。