LangChain 的核心组件
- 模型 I/O 封装
- LLMs:大语言模型
- Chat Models:一般基于 LLMs,但按对话结构重新封装
- PromptTemple:提示词模板
- OutputParser:解析输出
- 数据连接封装
- Document Loaders:各种格式文件的加载器
- Document Transformers:对文档的常用操作,如:split, filter, translate, extract metadata, etc
- Text Embedding Models:文本向量化表示,用于检索等操作(啥意思?别急,后面详细讲)
- Verctorstores: (面向检索的)向量的存储
- Retrievers: 向量的检索
- 记忆封装
- Memory:这里不是物理内存,从文本的角度,可以理解为“上文”、“历史记录”或者说“记忆力”的管理
- 架构封装
- Chain:实现一个功能或者一系列顺序功能组合
- Agent:根据用户输入,自动规划执行步骤,自动选择每步需要的工具,最终完成用户指定的功能
- Tools:调用外部功能的函数,例如:调 google 搜索、文件 I/O、Linux Shell 等等
- Toolkits:操作某软件的一组工具集,例如:操作 DB、操作 Gmail 等等
- Callbacks
官方文档地址:https://python.langchain.com/docs/get_started
多轮对话封装
AIMessage, #等价于OpenAI接口中的assistant role 大模型的回复
HumanMessage, #等价于OpenAI接口中的user role
SystemMessage #等价于OpenAI接口中的system role
import os
from dotenv import load_dotenv
load_dotenv()from langchain_openai import AzureChatOpenAI
model = AzureChatOpenAI(azure_endpoint=os.environ["AZURE_OPENAI_ENDPOINT"],azure_deployment=os.environ["AZURE_OPENAI_DEPLOYMENT_NAME"],openai_api_version=os.environ["AZURE_OPENAI_API_VERSION"],temperature=0,model_kwargs={"seed": 42})from langchain.schema import (AIMessage, #等价于OpenAI接口中的assistant roleHumanMessage, #等价于OpenAI接口中的user roleSystemMessage #等价于OpenAI接口中的system role
)messages = [SystemMessage(content="你是一个课程助理。"),HumanMessage(content="我来上课了")
]
response = model(messages)
print(response) # AIMessage
Prompt模板封装
import os
from dotenv import load_dotenv, find_dotenv_ = load_dotenv(find_dotenv())
from langchain.prompts import ChatPromptTemplate
from langchain.prompts.chat import SystemMessagePromptTemplate, HumanMessagePromptTemplate
from langchain_openai import AzureChatOpenAItemplate = ChatPromptTemplate.from_messages([SystemMessagePromptTemplate.from_template("你是{product}的客服助手。你的名字叫{name}"),HumanMessagePromptTemplate.from_template("{query}"),]
)
llm = AzureChatOpenAI(azure_endpoint=os.environ["AZURE_OPENAI_ENDPOINT"],azure_deployment=os.environ["AZURE_OPENAI_DEPLOYMENT_NAME"],openai_api_version=os.environ["AZURE_OPENAI_API_VERSION"],temperature=0,model_kwargs={"seed": 42})prompt = template.format_messages(product="AGI课堂",name="瓜瓜",query="你是谁")response = llm(prompt)# chain = template | llm
# response = chain.invoke({"product": "AGI课堂",
# "name": "瓜瓜",
# "query": "你是谁"})print(response) # AIMessage
从文件加载Prompt模板
yaml格式
_type: prompt
input_variables:["adjective", "content"]
template: Tell me a {adjective} joke about {content}.
json格式
{"_type": "prompt","input_variables": ["adjective", "content"],"template": "Tell me a {adjective} joke about {content}."
}
Template可以单独存放在.txt文件夹中
{"_type": "prompt","input_variables": ["adjective", "content"],"template_path": "simple_template.txt"
}
# cat simple_template.txt
# Tell me a {adjective} joke about {content}.from langchain.prompts import load_promptprompt = load_prompt("test.json")print(prompt.format(adjective="funny", content="fox"))
# Tell me a funny joke about fox.