LangChain作为一个新兴的框架,旨在简化大模型应用的开发过程。它提供了一套工具和接口,帮助开发者将大模型无缝集成到各种应用场景中。通过LangChain,开发者可以更专注于业务逻辑的实现,而不必过多关注底层模型的复杂性。
😀安装
代码语言:javascript
复制
pip install langchain
代码语言:javascript
复制
conda install langchain -c conda-forge
😄开源库
langchain-core:基本抽象和 LangChain 表达式语言。langchain-community:第三方集成。langchain:构成应用程序认知架构的链、代理和检索策略。- LangGraph:用于使用 LLM 构建健壮且有状态的多参与者应用程序。
langSmith:一个开发平台,可以调试、测试、评估和监控基于任何 LLM 框架构建的链。
搭建一个简单的LLM应用
💥我们使用 LangChain 构建的许多应用程序将包含多个步骤,其中包含多次调用 LLM 调用。 随着这些应用程序变得越来越复杂,能够检查我们的链条或代理内部到底发生了什么变得至关重要。 最好的方法是使用 langSmith来查看。

💥我们在langSmith官方注册后,设置环境变量保证记录跟踪:
代码语言:javascript
复制
export LANGCHAIN_TRACING_V2="true"
export LANGCHAIN_API_KEY="..."
ChatModels接收消息对象作为输入,并生成消息对象作为输出。(我这里使用国内的zhipuAI)
代码语言:javascript
复制
from langchain_community.chat_models import ChatZhipuAI
from langchain_core.messages import AIMessage, HumanMessage, SystemMessage
import os
os.environ["ZHIPUAI_API_KEY"] = "*********"
💫构建模型:
代码语言:javascript
复制
chat = ChatZhipuAI(
model="GLM-4-Plus",
temperature=0.5,
)
💫使用消息对象与模型聊天:
代码语言:javascript
复制
messages = [
AIMessage(content="你好呀"), # 模型发出的消息
SystemMessage(content="你是一个助手"), # 系统指令,设置对话的形式
HumanMessage(content="如何吃到健康的蔬菜。"), # 消息的内容
]
response = chat.invoke(messages)
print(response.content)

代码语言:javascript
复制
from langchain_core.prompts import ChatPromptTemplate
system_template = "Translate the following from English into {language}"
# 创建一个提示模板
prompt_template = ChatPromptTemplate.from_messages(
[("system", system_template), ("user", "{text}")]
)
prompt = prompt_template.invoke({"language": "Chinese", "text": "you are happy!,what happend"}) # invoke会根据提供的参数生成最终的提示
response = chat.invoke(prompt)
print(response.content)

💦这时我们的langSmith后台:

构建语义搜索引擎
我们使用LangChain的文档加载器、嵌入、向量库来从其他来源检索数据,与大模型工作集成,这对于获取数据作为模型推理的一部分进行推理的应用程序非常重要,例如检索增强生成或RAG。
💦还是和刚才一样,先构建模型:
代码语言:javascript
复制
from langchain_community.chat_models import ChatZhipuAI
from langchain_core.messages import AIMessage, HumanMessage, SystemMessage
import os
os.environ["ZHIPUAI_API_KEY"] = "******"
chat = ChatZhipuAI(
model="GLM-4-Plus",
temperature=0.5,
)
💯使用 Document 类来创建一个包含多个文档的列表。每个 Document 对象代表一个文档,包含文档的内容和相关的元数据:
代码语言:javascript
复制
from langchain_core.documents import Document
documents = [
Document(
page_content="狗是很好的伴侣,以忠诚和友好而闻名。",
metadata={"source": "哺乳动物宠物医生"},
),
Document(
page_content="猫是独立的宠物,经常享受自己的空间。",
metadata={"source": "哺乳动物宠物医生"},
),
]
💯或者我们拿来PDF文件交给langchain来切割:
代码语言:javascript
复制
from langchain_community.document_loaders import PyPDFLoader
file_path = "./ai-paper.pdf"
loader = PyPDFLoader(file_path)
docs = loader.load() # 会读取整个 PDF 文件,并将每一页的内容作为一个独立的 Document 对象返回
print(len(docs))
- 返回7,说明我们的PDF有七页。
代码语言:javascript
复制
print(f"{docs[0].page_content[:200]}\n") # 输出第一页的前 200 个字符
print(docs[0].metadata) # 输出第一页的元数据

代码语言:javascript
复制
from langchain_text_splitters import RecursiveCharacterTextSplitter
# 将文档列表 docs 分割成多个片段,并将结果存储在 all_splits 列表中
text_splitter = RecursiveCharacterTextSplitter(
chunk_size=1000, chunk_overlap=200, add_start_index=True
) # 每个文档都切分成 1000 个字符的片段,并保留起始索引
all_splits = text_splitter.split_documents(docs)
len(all_splits)
- 16
💫使用huggingface的远程嵌入模型,去获取API KEY即可
代码语言:javascript
复制
from langchain_huggingface.embeddings import HuggingFaceEmbeddings
import getpass
inference_api_key = getpass.getpass("Enter your HF Inference API Key:\n\n")
💫将文本转换为数值向量
代码语言:javascript
复制
from langchain_community.embeddings import HuggingFaceInferenceAPIEmbeddings
embeddings = HuggingFaceInferenceAPIEmbeddings(
api_key=inference_api_key, model_name="sentence-transformers/all-MiniLM-l6-v2"
)
vector_1 = embeddings.embed_query(all_splits[0].page_content)
vector_2 = embeddings.embed_query(all_splits[1].page_content)
assert len(vector_1) == len(vector_2)
# assert 确保 vector_1 和 vector_2 的长度相同。如果长度不同,会抛出一个异常
print(f"Generated vectors of length {len(vector_1)}\n")
print(vector_1[:10])
输出:
代码语言:javascript
复制
Generated vectors of length 384
[-0.00249505159445107, -0.03488101065158844, 0.042455967515707016, -0.02823253720998764, 0.02634383551776409, 0.017963005229830742, -0.053410954773426056, 0.04642432555556297, 0.030810562893748283, -0.02615123614668846]
💫进行向量存储:(以FAISS为例)

代码语言:javascript
复制
from langchain_community.vectorstores import FAISS
vector_store = FAISS.from_documents(documents=all_splits, embedding=embeddings)
# 添加文档并返回添加的文档的 ID
ids = vector_store.add_documents(documents=all_splits)
💥查询
嵌入向量通常将文本表示为“密集”向量,以便具有相似含义的文本在语义上非常接近。这样,我们只需传入一个问题即可检索相关信息,而无需了解文档中使用的任何特定关键术语。
1️⃣根据与字符串查询的相似性返回文档:
代码语言:javascript
复制
# 接受一个文本字符串作为输入,并返回与该文本最相似的向量
results = vector_store.similarity_search(
"大模型的发展和繁荣既是当前AI时代的顶峰"
)
print(results)

2️⃣根据与嵌入式查询的相似性返回文档:
代码语言:javascript
复制
# 首先将文本“大模型的发展是顶峰”转换为嵌入向量 embedding
embedding = embeddings.embed_query("大模型的发展是顶峰")
# 接受一个嵌入向量作为输入,并返回与该向量最相似的向量
results = vector_store.similarity_search_by_vector(embedding)
print(results[0])

如何学习大模型
现在社会上大模型越来越普及了,已经有很多人都想往这里面扎,但是却找不到适合的方法去学习。
作为一名资深码农,初入大模型时也吃了很多亏,踩了无数坑。现在我想把我的经验和知识分享给你们,帮助你们学习AI大模型,能够解决你们学习中的困难。
下面这些都是我当初辛苦整理和花钱购买的资料,现在我已将重要的AI大模型资料包括市面上AI大模型各大白皮书、AGI大模型系统学习路线、AI大模型视频教程、实战学习,等录播视频免费分享出来,需要的小伙伴可以扫取。
一、AGI大模型系统学习路线
很多人学习大模型的时候没有方向,东学一点西学一点,像只无头苍蝇乱撞,我下面分享的这个学习路线希望能够帮助到你们学习AI大模型。

二、AI大模型视频教程

三、AI大模型各大学习书籍

四、AI大模型各大场景实战案例

五、结束语
学习AI大模型是当前科技发展的趋势,它不仅能够为我们提供更多的机会和挑战,还能够让我们更好地理解和应用人工智能技术。通过学习AI大模型,我们可以深入了解深度学习、神经网络等核心概念,并将其应用于自然语言处理、计算机视觉、语音识别等领域。同时,掌握AI大模型还能够为我们的职业发展增添竞争力,成为未来技术领域的领导者。
再者,学习AI大模型也能为我们自己创造更多的价值,提供更多的岗位以及副业创收,让自己的生活更上一层楼。
因此,学习AI大模型是一项有前景且值得投入的时间和精力的重要选择。
850

被折叠的 条评论
为什么被折叠?



