1、什么是LangChain?

LangChain 是一种强大的框架,旨在帮助开发人员使用语言模型构建端到端的应用程序。它提供了一套工具、组件和接口,可简化创建由大型语言模型(LLM)和聊天模型提供支持的应用程序的过程。通过组件、链、提示模板、输出解析器、索引、检索器、聊天消息历史记录和代理等核心概念,开发人员可以创建适合其特定需求的自定义解决方案。在广泛的用例中,LangChain 的适应性和易用性使其成为开发人员的宝贵工具,使他们能够释放语言模型的全部潜力,创建智能的、上下文感知的应用程序。

LangChain就是一个适配层,上层由开发者构建应用,下层对接各种AI、大模型之类。

为了提升构建一个和大型语言模型相关的软件的效率。

协议、标准化。

【13分钟解读LangChain(精译中字)】 https://www.bilibili.com/video/BV14o4y1K7y3/?share_source=copy_web&vd_source=507b050f5ff710165428f63dfb2ce30b

【LangChain + GLM =本地知识库】 https://www.bilibili.com/video/BV1dv4y1J77z/?share_source=copy_web&vd_source=507b050f5ff710165428f63dfb2ce30b

【简直逆天!我居然只花了2小时就掌握了吴恩达教授讲的【LangChain+ChatGLM-6B】LLM应用开发实践!强烈推荐!! 人工智能|深度学习】 https://www.bilibili.com/video/BV1pz4y1e7T9/?share_source=copy_web&vd_source=507b050f5ff710165428f63dfb2ce30b

【吴恩达与LangChain创始人最新课程《LangChain:与你的数据对话》whisper转文本+GPT翻译中文字幕】 https://www.bilibili.com/video/BV148411D7d2/?share_source=copy_web&vd_source=507b050f5ff710165428f63dfb2ce30b


2、核心元素(6大核心)

【1】LLMs and Prompts

关键词、提示、前言


【2】Chains

链式操作:一步操作到两步或者多部操作。

问:你帮我计算 1 + 1 等于多少

问题拆解:①将 1+1人所问的提问转为python代码。 ②执行代码

Chain解决的问题:让自然语言模型去完成自然语言擅长的事情,根据自然语言的输出采取其他不同的操作。


【3】Data Augmented Generation

API Core(OpenAI服务等)


【4】Agents

对任务进行分发和管理。调度器。他可以动态的帮我们选择和调用chain或者已有的工具。

image-20230406213322739


【5】Memory

长期记忆,已经在模型内部的已知的知识,而不是通过输入给他。(Prompts为短期记忆)

如果此memory以vector方式或者是embedding的方式存在某个地方,每次运行大语言模型就会读取出,可以认为是长期记忆。


【6】Evaluation

用于衡量文本的相关性。这个也是 OpenAI API 能实现构建自己知识库的关键所在。

他相比 fine-tuning 最大的优势就是,不用进行训练,并且可以实时添加新的内容,而不用加一次新的内容就训练一次,并且各方面成本要比 fine-tuning 低很多。


3、项目推荐

【1】LangChain接入本地知识库

zhaoqingpu/LangChainTest (github.com)

1
2
3
4
5
6
7
8
9
10
11
12
13
# 1、准备环境
Python:版本大于3.9
LangChain:`pip install langchain`
向量数据库-Chroma:`pip install chromadb`

# 2、准备本地数据
将袭击需要接入的数据准备好,支持doc、txt、pdf等格式。

# 3、本地数据切片向量化
Docs ——> Embeddings ——> Chromadb
中文文档要使用中文Embeddings模型


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
import argparse
import os

from langchain import PromptTemplate
from langchain.chains import RetrievalQA
from langchain.llms import OpenAI, openai
from dotenv import load_dotenv
from langchain.embeddings import HuggingFaceEmbeddings, OpenAIEmbeddings
from langchain.vectorstores import Chroma

from ChatGLM import ChatGLM

load_dotenv("config.env")
embeddings_model_name = os.environ.get("EMBEDDINGS_MODEL_NAME")
persist_directory = os.environ.get('PERSIST_DIRECTORY')
target_source_chunks = int(os.environ.get('TARGET_SOURCE_CHUNKS', 4))
# openai.api_key = os.getenv("OPENAI_API_KEY")
from constants import CHROMA_SETTINGS


if __name__ == '__main__':
# 初始化emb、向量数据库、llm
embeddings = HuggingFaceEmbeddings(model_name=embeddings_model_name)
db = Chroma(persist_directory=persist_directory, embedding_function=embeddings, client_settings=CHROMA_SETTINGS)

"""
使用文档查询
print(db.similarity_search("如何增强体质"))
"""

retriever = db.as_retriever(search_kwargs={"k": target_source_chunks})

# llm = OpenAI(model_name="text-ada-001", n=2, best_of=2)
llm = ChatGLM()

# 提示词
prompt_template = """基于以下已知信息,简洁和专业的来回答用户的问题。
如果无法从中得到答案,请说 "根据已知信息无法回答该问题" 或 "没有提供足够的相关信息",不允许在答案中添加编造成分,答案请使用中文。
已知内容:
{context}
问题:
{question}"""

promptA = PromptTemplate(template=prompt_template, input_variables=["context", "question"])
chain_type_kwargs = {"prompt": promptA}

# 用以上变量初始化LangChain的RetrievalQA问答模块
qa = RetrievalQA.from_chain_type(llm=llm, retriever=retriever, chain_type="stuff",
chain_type_kwargs=chain_type_kwargs, return_source_documents=True)
while True:
query = input("\n请输入问题: ")
if query == "exit":
break

res = qa(query)
answer, docs = res['result'], res['source_documents']

print("\n\n> 问题:")
print(query)
print("\n> 回答:")
print(answer)

for document in docs:
print("\n> " + document.metadata["source"] + ":")

4、资料推荐

liaokongVFX/LangChain-Chinese-Getting-Started-Guide: LangChain 的中文入门教程 (github.com)