• Stars
    star
    169
  • Rank 224,453 (Top 5 %)
  • Language
  • Created over 1 year ago
  • Updated over 1 year ago

Reviews

There are no reviews yet. Be the first to send feedback to the community and the maintainers!

Repository Details

langchain学习笔记,包含langchain源码解读、langchain中使用中文模型、langchain实例等。

langchain-learning

langchain的学习笔记。依赖:

openai==0.27.8
langchian==0.0.225

和langchain相类似的一些工具:

文章

注意:由于langchain或langchain-ChatGLM的更新,可能导致部分源码和讲解的有所差异。

有的一些文章直接放的是一些链接,从网上收集整理而来。


  • langchain组件-数据连接(data connection)
  • langchain组件-模型IO(model IO)
  • langchain组件-链(chains)
  • langchain组件-代理(agents)
  • langchain组件-内存(memory)
  • langchain组件-回调(callbacks)
  • langchain中ChatOpenAI背后做了什么.md
  • langchain.load.serializable.py.md
  • langchain中的一些schema.md
  • langchain中是怎么调用chatgpt的接口的.md
  • langchain结构化输出背后的原理,md
  • langchain中memory的工作原理.md
  • langchain怎么确保输出符合道德期望.md
  • langchain中路由链LLMRouterChain的原理.md
  • langchain中的EmbeddingRouterChain原理.md
  • langchain集成GPTCache.md
  • langchain集成Mivus向量数据库.md
  • langchain中的StreamingStdOutCallbackHandler原理.md
  • pydantic中config的一些配置.md
  • pydantic中的Serializable和root_validator.md
  • python中常用的一些魔术方法.md
  • python的typing常用的类型.md
  • python中functools的partial的用法.md
  • python中inspect的signature用法.md
  • python中args和kwargs.md
  • 我为什么放弃了 LangChain? - 知乎 (zhihu.com)

目前基于langchain的中文项目有两个:

我们从中可以学到不少。

langchain-ChatGLM

中文例子

英文例子

prompt工程.md

一个优化的prompt对结果至关重要,感兴趣的可以去看看这个。

yzfly/LangGPT: LangGPT: Empowering everyone to become a prompt expert!🚀 Structured Prompt,结构化提示词。 (github.com):构建结构化的高质量prompt

langchain可能存在一些问题

虽然langchain给我们提供了一些便利,但是也存在一些问题:

  • 无法解决大模型基础技术问题,主要是prompt重用问题:首先很多大模型应用的问题都是大模型基础技术的缺陷,并不是LangChain能够解决的。其中核心的问题是大模型的开发主要工作是prompt工程。而这一点的重用性很低。但是,这些功能都需要非常定制的手写prompt。链中的每一步都需要手写prompt。输入数据必须以非常特定的方式格式化,以生成该功能/链步骤的良好输出。设置DAG编排来运行这些链的部分只占工作的5%,95%的工作实际上只是在提示调整和数据序列化格式上。这些东西都是不可重用的。

  • LangChain糟糕的抽象与隐藏的垃圾prompt造成开发的困难:简单说,就是LangChain的抽象工作不够好,所以很多步骤需要自己构建。而且LangChain内置的很多prompt都很差,不如自己构造,但是它们又隐藏了这些默认prompt。

  • LangChain框架很难debug尽管LangChain很多方法提供打印详细信息的参数,但是实际上它们并没有很多有价值的信息。例如,如果你想看到实际的prompt或者LLM查询等,都是十分困难的。原因和刚才一样,LangChain大多数时候都是隐藏了自己内部的prompt。所以如果你使用LangChain开发效果不好,你想去调试代码看看哪些prompt有问题,那就很难。

  • LangChain鼓励工具锁定:LangChain鼓励用户在其平台上进行开发和操作,但是如果用户需要进行一些LangChain文档中没有涵盖的工作流程,即使有自定义代理,也很难进行修改。这就意味着,一旦用户开始使用LangChain,他们可能会发现自己被限制在LangChain的特定工具和功能中,而无法轻易地切换到其他可能更适合他们需求的工具或平台。

以上内容来自:

有时候一些简单的任务,我们完全可以自己去实现相关的流程,这样每一部分都由我们自己把控,更易于修改。

使用langchain解决复杂任务

方法一:领域微调LLM

使用领域数据对LLM进行微调,受限于计算资源和模型参数的大小,而且模型会存在胡言乱语的情况。这里面涉及到一系列的问题:

  • 数据怎么获取,怎么进行数据清理。
  • 分词使用什么方式。
  • 模型采用什么架构,怎么训练,怎么评估模型。
  • 模型怎么进行有效推理,怎么进行部署。
  • 领域预训练、领域指令微调、奖励模型、结果对齐。

方法二:langchain + LLM + tools

基本思路:

1、用户提问:请对比下商品雅诗兰黛特润修护肌活精华露和SK-II护肤精华?

2、RouterChain问题路由,即使用哪种方式回答问题:(调用一次LLM)

  • RouterChain可以是一个LLM,也可以是一个embedding,去匹配到合适的解决方案,如果没有匹配到任何解决方案,则使用模型内部知识进行回答。
  • 这里匹配到商品对比这一问题,得到解决方案:(1)调用商品搜索工具得到每一个商品的介绍。(2)通过搜索结果对比这些商品。

3、使用Planner生成step:(调用一次LLM)

  • 根据解决方案生成合适的steps,比如:(1)搜索雅诗兰黛特润修护肌活精华露。(2)搜索SK-II护肤精华。(3)对比上述商品。

4、执行者Executer执行上述步骤:(调用steps次LLM,n是超参数表明调用的最大次数)

  • 需要提供工具,每个step的问题,需要调用llm生成每个工具的调用参数。
  • 调用工具获取结果。

5、对所有的结果进行汇总。(调用一次LLM)

方法三:langchain + LLM + 检索

相比于方案1,不使用工具,直接根据问题进行对数据库进行检索,然后对检索到的结果进行回答。

检索的方式可以是基于给定问题的关键字,使用ES工具从海量数据库中检索到可能存在答案的topk段落。把这topk个段落连同问题一起发送给LLM,进行回答。

检索的方式改成向量的形式,先对所有已知资料按照300个字切分成小的段落,然后对这些段落进行编码成向量,当用户提问时,把用户问题同样编码成向量,然后对这些段落进行检索,得到topk最相关的段落,把这topk个段落连同问题一起发送给LLM,进行回答。

图片

上述方法的优缺点:

领域微调LLM:需要耗费很多的人力收集领域内数据和问答对,需要耗费很多算力进行微调。

langchain + LLM + tools:是把LLM作为一个子的服务,LangChain作为计划者和执行者的大脑,合适的时机调用LLM,优点是解决复杂问题,缺点是不可靠。LLM生成根据问题和工具调用工具获取数据时不可靠。可以不能很好的利用工具。可能不能按照指令调用合适的工具,还可能设定计划差,难以控制。优点是:用于解决复杂的问题。

langchain + LLM + 检索:优点是现在的领域内主流问答结构,缺点:是根据问题对可能包含答案的段落检索时可能检索不准。不适用于复杂问答

总结:最大的问题还是LLM本身:

  • LLM输出的不可控性,会导致后续步骤出现偏差。
  • LLM的输入的context的长度问题:目前已经可以把长度推广到10亿以上了。
  • 训练一个LLM需要的成本:对于数据而言,除了人工收集整理外,也可以使用大模型进行生成;对于训练而言,目前也有不少基于参数有效微调的例子。
  • LLM的部署问题:也已经有不少加速推理的方法,比如量化、压缩、使用分布式进行部署、使用C++进行部署等。

LLM是整个系统的基座,目前还是有不少选择的余地的,网上开源了不少中文大语言模型,但大多都是6B/7B/13B的,要想有一个聪明的大脑,模型的参数量还是需要有保证的。

以上参考:https://mp.weixin.qq.com/s/FvRchiT0c0xHYscO_D-sdA

扩展

留出一些问题以待思考:可能和langchain相关,也可能和大模型相关

  • **怎么根据垂直领域的数据选择中文大模型?**1、是否可以商用。2、根据各评测的排行版。3、在自己领域数据上进行评测。4、借鉴现有的垂直领域模型的选择,比如金融大模型、法律大模型、医疗大模型等。

  • **数据的一个答案由一系列相连的句子构成,怎么对文本进行切分以获得完整的答案?**比如:

    怎么能够解决失眠1保持良好的心情2进行适当的训练3可适当使用药物

    1、尽量将划分的文本的长度设置大一些。2、为了避免答案被分割,可以设置不同段之间可以重复一定的文本。3、检索时可返回前top_k个文档。4、融合查询出的多个文本,利用LLM进行总结。

  • 怎么构建垂直领域的embedding?

  • 怎么存储获得的embedding?

  • 如何引导LLM更好的思考? 可使用:chain of thoughts、self ask、ReAct,具体介绍可以看这一篇文章:https://zhuanlan.zhihu.com/p/622617292 实际上,langchain中就使用了ReAct这一策略。

参考

Introduction | 🦜️🔗 Langchain

API Reference — 🦜🔗 LangChain 0.0.229

https://mp.weixin.qq.com/s/FvRchiT0c0xHYscO_D-sdA

https://python.langchain.com.cn/docs/modules/agents/how_to/custom_llm_chat_agent

More Repositories

1

awesome-chinese-ner

中文命名实体识别。包含目前最新的中文命名实体识别论文、中文实体识别相关工具、数据集,以及中文预训练模型、词向量、实体识别综述等。
575
star
2

pytorch_bert_bilstm_crf_ner

基于pytorch的bert_bilstm_crf中文命名实体识别
Python
503
star
3

pytorch_triple_extraction

基于pytorch的中文三元组提取(命名实体识别+关系抽取)
Python
320
star
4

BERT-BILSTM-CRF

使用BERT-BILSTM-CRF进行中文命名实体识别。
Python
303
star
5

chinese_information_extraction

中文信息抽取,包含实体抽取、关系抽取、事件抽取
Python
220
star
6

pytorch_bert_intent_classification_and_slot_filling

基于pytorch的中文意图识别和槽位填充
Python
129
star
7

BERT-Relation-Extraction

使用bert进行关系三元组抽取。
Python
125
star
8

PointerNet_Chinese_Information_Extraction

利用指针网络进行信息抽取,包含命名实体识别、关系抽取、事件抽取。
Python
115
star
9

OneRel_chinese

OneRel在中文关系抽取中的使用
Roff
111
star
10

Llama3.1-Finetuning

对llama3进行全参微调、lora微调以及qlora微调。
Python
108
star
11

sentencepiece_chinese_bpe

使用sentencepiece中BPE训练中文词表,并在transformers中进行使用。
Python
106
star
12

pytorch_HAN

异构图神经网络HAN。Heterogeneous Graph Attention Network (HAN) with pytorch
Python
99
star
13

qlora-chinese-LLM

使用qlora对中文大语言模型进行微调,包含ChatGLM、Chinese-LLaMA-Alpaca、BELLE
Python
86
star
14

pytorch_bert_multi_classification

基于pytorch_bert的中文多标签分类
Python
79
star
15

pytorch_bert_chinese_text_classification

基于pytorch+bert的中文文本分类
Python
75
star
16

DGL_Chinese_Manual

DGL中文文档。This is the Chinese manual of the graph neural network library DGL, currently contains the User Guide.
71
star
17

pytorch_GlobalPointer_triple_extraction

基于pytorch的GlobalPointer进行三元组抽取。
Python
67
star
18

pytorch_bert_event_extraction

基于pytorch+bert的中文事件抽取
Python
63
star
19

pytorch-distributed-NLP

pytorch分布式训练
Python
57
star
20

prompt_text_classification

基于prompt的中文文本分类。
Python
53
star
21

pytorch_uie_ner

基于pytorch的百度UIE命名实体识别。
Python
52
star
22

awesome-relation-extraction

关系抽取
51
star
23

W2NER_predict

[Unofficial] Predict code for AAAI 2022 paper: Unified Named Entity Recognition as Word-Word Relation Classification
Python
49
star
24

ChatGLM-LoRA-Tuning

使用LoRA对ChatGLM进行微调。
Python
46
star
25

awesome-chinese-text-correction

中文文本纠错相关的论文、比赛和工具。
46
star
26

ChatABSA

基于ChatGPT的情感分析
Python
46
star
27

python_common_code_collection

收集经常用到的一些python代码
Python
44
star
28

sbert_text_similarity

使用sentence-transformers(SBert)训练自己的文本相似度数据集并进行评估。
Python
43
star
29

BERT_MRC_NER_chinese

基于bert_mrc的中文命名实体识别
Python
43
star
30

pytorch_GlobalPointer_Ner

基于pytorch的GlobalPointer进行中文命名实体识别。
Python
37
star
31

BERT-Event-Extraction

使用bert进行事件抽取。
Python
34
star
32

pytorch_casrel_triple_extraction

基于pytorch的CasRel进行三元组抽取。
Python
34
star
33

Chinese-LLaMA-Alpaca-LoRA-Tuning

使用LoRA对Chinese-LLaMA-Alpaca进行微调。
Python
33
star
34

pytorch_bert_chinese_spell_correction

基于pytorch的中文拼写纠错,使用的模型是Bert以及SoftMaskedBert
Python
30
star
35

pytorch_bert_relation_extraction

基于pytorch+bert的中文关系抽取
Python
29
star
36

SpERT_chinese

基于论文SpERT: "Span-based Entity and Relation Transformer"的中文关系抽取,同时抽取实体、实体类别和关系类别。
Python
29
star
37

pytorch_bert_entity_linking

基于bert的中文实体链接
Python
27
star
38

Gector_chinese

基于seq2edit (Gector) 的中文文本纠错。
Python
26
star
39

taishan1994

22
star
40

address_normalize

根据地址提取省、市、区/县、街道,并进行标准化
Python
20
star
41

tensorflow-text-classification

基于tensorflow的中文文本分类(复旦中文语料)
Python
20
star
42

pytorch_uie_re

基于百度uie的关系抽取
Python
20
star
43

BERT-ABSA

使用bert进行中文方面级情感识别。
Python
19
star
44

baichuan-Qlora-Tuning

基于qlora对baichuan-7B大模型进行指令微调。
Python
18
star
45

pytorch_Cascade_Bert_Ner

基于pytorch的级联Bert用于中文命名实体识别。
Python
18
star
46

stroke2vec

获取中文的笔画向量
Python
17
star
47

doccano_export

使用doccano标注工具同时导出实体和关系数据为空的解决办法。
Python
17
star
48

pytorch_TPLinker_Plus_Ner

基于pytorch的TPLinker_plus进行中文命名实体识别
Python
17
star
49

chinese_sentence_embeddings

bert_avg,bert_whitening,sbert,consert,simcse,esimcse 中文句向量表示
Python
16
star
50

pytorch_knowledge_distillation

基于Pytorch的知识蒸馏(中文文本分类)
Python
15
star
51

pytorch_bert_coreference_resolution

基于pytorch+bert的指代消解
Python
15
star
52

simcse_chinese_sentence_vector

基于simcse的中文句向量生成
Python
14
star
53

pytorch_bilstm_crf_chinese_ner

基于pytorch+bilstm_crf的中文命名实体识别
Python
13
star
54

chinese_keyword_extraction

中文关键词提取
Python
12
star
55

dpcq_new_word_find

斗破苍穹小说的新词发现
Python
12
star
56

tensorflow-bilstm-crf

基于tensorflow的bilstm+crf的命名实体识别
12
star
57

python3_wiki_word2vec

基于python3训练中文wiki词向量、字向量、拼音向量
Python
11
star
58

chinese_llm_pretrained

使用自己的tokenizer继续预训练大语言模型。
Python
9
star
59

genius_for_your_data

使用GENIUS文本生成模型训练自己的数据集。
Python
9
star
60

train_bert_use_your_data

基于pytorch使用自己的数据继续训练bert
Python
9
star
61

pytorch_Multi_Head_Selection_Ner

基于pytorch的多头选择方法进行中文命名实体识别。
Python
9
star
62

pytorch_chinese_biaffine_ner

使用biaffine的中文命名实体识别
Python
9
star
63

pytorch_unbalanced_text_classification

基于pytorch的不平衡数据的文本分类
Python
9
star
64

pytorch_lightning_text_classification

基于pytorch_lightning的中文文本分类样例
Python
8
star
65

medical_question_and_answer_knowledge_graph

Python
8
star
66

fasttext_chinese_ABSA

基于fasttext的中文细粒度情感分类
Python
8
star
67

PPO_Chinese_Generate

Python
8
star
68

pytorch_simple_bert

更直接的bert代码,可以加载hugging face上的预训练权重,目前支持中文文本分类以及MLM语言模型训练任务。
Python
8
star
69

classical_chinese_extraction

文言文信息抽取(实体识别+关系抽取)
Python
7
star
70

lol_knowledge_graph_qa

基于英雄联盟知识图谱的问答
Python
7
star
71

pytorch_gat

Pytorch implementation of graph attention network
Python
7
star
72

chinese_llm_sft

使用指令微调对大模型进行微调。
Python
7
star
73

bert-sklearn-chinese

像使用sklearn那样来使用bert进行中文文本分类、命名实体识别、句子相似度判别
Python
6
star
74

pytorch_cnn_rnn_transformer

pytorch版本的三大特征提取器
Python
6
star
75

pytorch_ner_v1

中文命名实体识别的三种架构实现
Python
6
star
76

UIE_CLUENER

用百度的UIE解决CLUENER2020细粒度实体识别数据集。
Python
6
star
77

pytorch_Chinese_Generate

基于pytorch的中文文本生成。
Python
6
star
78

ltp_triple_extraction

Python
6
star
79

pytorch_bert_english_ner

基于bert的英文实体识别
Python
5
star
80

transformer-examples

从头开始使用transfomer构建seq2seq(对对联)、自编码(新闻文本分类)、自回归(斗破苍穹小说续写)任务。
Python
5
star
81

pytorch_chinese_QANet_cmrc2018

基于QANet的中文阅读理解。
Python
5
star
82

hugging-face-course

hugging face的官方教程中文翻译
5
star
83

Qwen2-UIE

基于Qwen2模型进行通用信息抽取【实体/关系/事件抽取】
Python
5
star
84

eda_for_chinese_text_classification

基于EDA进行中文文本分类
Python
5
star
85

pytorch_chinese_text_classification

基于pytorch的中文文本分类,包含fasttext、textcnn、textrnn、textrnn_att、textrnn_bc、transformer、dpcnn
Python
5
star
86

pytorch_bert_chinese_ner

基于bert的中文实体识别,并使用字形嵌入和拼音嵌入。
Python
4
star
87

pytorch_chinese_albert_attribute_extraction

基于pytorch_albert的属性抽取
Python
4
star
88

xiximayou-arxiv

用于定制化arxiv文章。
CSS
3
star
89

pytorch_peot_rnn

基于pytorch_rnn的古诗词生成
Python
3
star
90

ChatCTG

基于ChatGPT的可控文本生成。这里主要是使用ChatGPT实现一些文本生成相关的项目。
Python
3
star
91

seq2seq_english_to_chinese

基于pytorch的英文翻译成中文
Python
3
star
92

chinese_chengyujielong

本仓库包含4万多条成语,并提供成语接龙实例。
Python
3
star
93

Chinese-BELLE-LoRA-Tuning

使用LoRA对BELLE发布的BELLE-7B-2M进行微调。
Python
3
star
94

phishing_url_recognition

恶意域名识别
Python
3
star
95

pytorch_chinese_multiple_choice

基于pytorch+lstm的中文多项选择。
Python
2
star
96

WebQA_tfidf

针对于百度WebQA数据集,利用TF-IDF等模型构建的问答系统
Python
2
star
97

pytorch_albert_qa

基于albert的中文问答
Python
2
star
98

pytorch_OneVersusRest_Ner

基于pytorch的one vs rest中文命名实体识别。
Python
1
star
99

learn_django

django的一些学习笔记
HTML
1
star
100

DPO-Finetuning

专门用于训练DPO模型的仓库。
Python
1
star