LangChain 入门指南
一、什么是 LangChain?
LangChain 是一个用于简化大语言模型(LLM)应用开发的框架,支持将以下组件链接成工作流:
- 大语言模型(如GPT-3.5、Llama)
- 外部数据源(数据库、API)
- 记忆模块(对话历史记录)
二、核心概念与模块
模块名称 | 作用 |
---|---|
Models | 对接多种LLM提供商(OpenAI/HuggingFace等) |
Prompts | 管理动态提示模板 |
Chains | 将多个模块组合成工作流 |
Memory | 记录对话历史实现上下文感知 |
Indexes | 连接外部数据源进行文档检索 |
Agents | 根据需求自主选择工具(计算/搜索等) |
三、基础语法与代码示例
1. 环境安装
pip install langchain==0.2.0 langchain-openai python-dotenv
2. 模型调用
from langchain_openai import OpenAI
# 初始化OpenAI模型(需要设置OPENAI_API_KEY环境变量)
llm = OpenAI(temperature=0.9) # temperature控制生成随机性
print(llm.invoke("如何制作三明治?"))
3. 提示模板
from langchain.prompts import PromptTemplate
template = "给一个制作{product}的公司起个名字"
prompt = PromptTemplate(input_variables=["product"], template=template)
formatted_prompt = prompt.format(product="环保餐具")
print(formatted_prompt) # 输出:给一个制作环保餐具的公司起个名字
4. 链式调用
from langchain.chains import LLMChain
chain = LLMChain(llm=llm, prompt=prompt)
print(chain.run("智能手表")) # 输出示例:"智界时刻科技"
5. 记忆模块
from langchain.memory import ConversationBufferMemory
memory = ConversationBufferMemory()
memory.save_context({"input": "你好"}, {"output": "有什么可以帮助您?"})
print(memory.load_memory_variables({}))
# 输出:{'history': 'Human: 你好\nAI: 有什么可以帮助您?'}
6. 代理工具
from langchain.agents import load_tools, initialize_agent
tools = load_tools(["llm-math"], llm=llm) # 加载数学计算工具
agent = initialize_agent(tools, llm, agent="zero-shot-react-description", verbose=True)
agent.run("2的128次方是多少?") # 会自动调用计算器工具
四、综合应用示例
from langchain.chains import SimpleSequentialChain
# 创建第一个链:生成公司名称
name_chain = LLMChain(llm=llm, prompt=prompt)
# 创建第二个链:生成宣传口号
slogan_template = "为名为{company_name}的公司写一条宣传语"
slogan_prompt = PromptTemplate(input_variables=["company_name"], template=slogan_template)
slogan_chain = LLMChain(llm=llm, prompt=slogan_prompt)
# 连接两条链
overall_chain = SimpleSequentialChain(chains=[name_chain, slogan_chain], verbose=True)
overall_chain.run("太空探索")
五、注意事项
-
需要注册并配置OpenAI API Key
- 使用OpenAI模型前需注册OpenAI平台并获取API密钥
- 配置方式示例:
import os os.environ["OPENAI_API_KEY"] = "您的密钥"
-
实际使用中建议增加错误处理机制
try: response = llm.invoke("输入问题") except Exception as e: print(f"API调用失败: {str(e)}")