文章目录
- langchain介绍
- 安装依赖
- 大模型类别
- 千帆大模型案例
- 常见问题
langchain介绍
-
是一个开源大语言模型框架,本身不提供大模型算法,只提供对接大模型算法平台的接口(模型包裹器);langchain官网v0.2,内部涉及的OpenAI的大模型使用都可以都可以替换为国内的大模型平台;
-
用于开发大模型应用的框架;
-
具有五大核心:
- 模型IO,即模型包裹器,对接各个平台的大语言模型;
- 数据增强,加载数据文档、转换、嵌入、向量化存储、检索等;
- 链,将多个组件连接起来,完成特定的操作;
- Agent代理,核心思想就是LLM选择操作序列,调用其他的API等;
- indexes 索引快速检索信息;
另外还有回调处理器、记忆等模块。
-
优点:
- 允许将大语言模型连接到自己的数据源,如内网中的数据库、pdf等文档;
- 可以根据提取的信息完成相应的操作;
-
应用场景:
- 问答系统;
- 自动问答和客服机器人;
- 数据处理、管理,如RAG;
-
工作原理
- 用户输入问题,从数据库中进行相似性搜索,找到相关的信息;
- 找到的信息与问题一同传给大语言模型,得到一个答案;
- 输出该答案 或者 根据该答案做出动作(接口调用等);
安装依赖
pip install -U langchain langchain-community langchain-openai langchain-chroma
# 核心包langchain_core
from langchain_core.prompts import ChatPromptTemplate, MessagesPlaceholder
from langchain_core.messages import SystemMessage, HumanMessage, AIMessage
# SystemMessage 用于系统设定
# HumanMessage(content="xxx") # 用户输入的信息
# AIMessage 大模型的输出
# 输出解析器,解析AIMessage
from langchain_core.output_parsers import StrOutputParser, JsonOutputParser
# langchain_community
# 模型包裹器
from langchain_community.chat_models import ChatOpenAI
from langchain_community.chat_models import QianfanChatEndpoint
# 聊天信息历史
from langchain_community.chat_message_histories import ChatMessageHistory
#
大模型类别
-
百度千帆大模型,需要注册百度智能云;
在开发千帆大模型应用程序时,需要创建应用以获取ak/sk,并购买调用的服务;调用示例代码
-
华为盘古大模型;
-
阿里通义千问大模型;
-
OpenAI chat-gpt;
千帆大模型案例
基于 千帆大模型(文心一言) 创建一个聊天机器人:
import os
from langchain_community.chat_models import QianfanChatEndpoint
from langchain_core.prompts import ChatPromptTemplate
from langchain_core.messages import SystemMessage, HumanMessage, AIMessage
from langchain_core.output_parsers import StrOutputParser
# 环境变量方式,指定ak/sk
os.environ["QIANFAN_AK"] = "your api key"
os.environ["QIANFAN_SK"] = "your secret key"
# 千帆大模型 (文心一言)
qianfan_chat = QianfanChatEndpoint(
model="ERNIE-3.5-8K",
temperature=0.2, # 越大越随机回答
timeout=50, # 有时网络不好,可能会超时,可以指定长些
# api_key="...",
# secret_key="...",
# top_p="...",
# other params...
)
# 对象可以直接调用
# res = qianfan_chat.invoke(([HumanMessage(content="讲一个故事")]))
# messages 转为提示词
prompt = ChatPromptTemplate.from_messages([
("system", "你是一个python技术专家,请尽力回答如下问题。"), # message元组或者SystemMessage(content="xx")
HumanMessage(content="写出一个{lang}的工厂设计模式。") # 占位符
])
# 模型输出的为 AIMessage,需解析为对应的数据格式
parser = StrOutputParser()
# 组装链
chat_chain = prompt | qianfan_chat | parser
# 调用链,并传入占位符
res = chat_chain.invoke({"lang": "python"}) # 链调用,传入占位符的key
# 打印响应 的字符串
print("res:", res)
常见问题
- urllib3.exceptions.ReadTimeoutError: HTTPSConnectionPool(host=‘aip.baidubce.com’, port=443): Read timed out. (read timeout=30)
接口调用时,网络IO可能较慢,在chat model中延长timeout的时间