开启左侧

小白入门大模型:LangChain(附教程)

[复制链接]
耶稣爱iphone 发表于 昨天 07:47 | 显示全部楼层 |阅读模式 打印 上一主题 下一主题
作者:CSDN博客
一、什么是LangChain
Langchain是一个语言模型的开发框架,主要是利用大型LLMs的强大得few-shot以及zero-shot泛化能力作为基础,以Prompt控制为核心基础,让开发者可以根据需求,往上快速堆叠应用,简单来说:
LangChain 是基于提示词工程(Prompt Engineering),提供一个桥接大型语言模型(LLMs)以及实际应用App的胶水层框架。
优势:
简单快速:不需要训练特定任务模型就能完成各种应用的适配,而且代码入口单一简洁,简单拆解LangChain底层无非就是Prompt指定,大模型API,以及三方应用API调用三个个核心模块。
泛用性广:基于自然语言对任务的描述进行模型控制,对于任务类型没有任何限制,只有说不出来,没有做不到的事情。这也是ChatGPT Plugin能够快速接入各种应用的主要原因。
劣势

大模型替换困难:LangChain主要是基于GPT系列框架进行设计,其适用的Prompt不代表其他大模型也能有相同表现,所以如果要自己更换不同的大模型(如:文心一言,通义千问…等),则很有可能底层prompt都需要跟著微调。
迭代优化困难:在实际应用中,我们很常定期使用用户反馈的bad cases持续迭代模型,但是Prompt Engeering的工程是非常难进行的微调的,往往多跟少一句话对于效果影响巨大,因此这类型产品达到80分是很容易的,但是要持续迭代到90分甚至更高基本上是不太很能的。
新手应该了解哪些模块?

目前有七个模块在 LangChain 中提供,新手应该了解这些模块,包括模型(models)、提示(prompts)、索引(indexes)、内存(memory)、链(chains)和代理(agents)。
核心模块的概述

模型在高层次上有两种不同类型的模型:语言模型(language models)和文本嵌入模型(text embedding models)。文本嵌入模型将文本转换为数字数组,然后我们可以将文本视为向量空间。
小白入门大模型:LangChain(附教程)-1.jpeg


在上面这个图像中,我们可以看到在一个二维空间中,“king”是“man”,“queen”是“woman”,它们代表不同的事物,但我们可以看到一种相关性模式。这使得语义搜索成为可能,我们可以在向量空间中寻找最相似的文本片段,以满足给定的论点。
例如,OpenAI 的文本嵌入模型可以精确地嵌入大段文本,具体而言,8100 个标记,根据它们的词对标记比例 0.75,大约可以处理 6143 个单词。它输出 1536 维的向量。
小白入门大模型:LangChain(附教程)-2.jpeg


我们可以使用 LangChain 与多个嵌入提供者进行接口交互,例如 OpenAI 和 Cohere 的 API,但我们也可以通过使用 Hugging Faces 的开源嵌入在本地运行,以达到 免费和数据隐私 的目的。
小白入门大模型:LangChain(附教程)-3.jpeg


现在,您可以使用仅四行代码在自己的计算机上创建自己的嵌入。但是,维度数量可能会有所不同,嵌入的质量可能会较低,这可能会导致检索不太准确。
LangChain中的模块,每个模块如何使用?

前提:运行一下代码,需要OPENAI_API_KEY(OpenAI申请的key),同时统一引入这些库:
  1. # 导入LLM包装器  
  2. from langchain import OpenAI, ConversationChain  
  3. from langchain.agents import initialize_agent  
  4. from langchain.agents import load_tools  
  5. from langchain.chains import LLMChain  
  6. from langchain.prompts import PromptTemplate
复制代码
LLM:从语言模型中输出预测结果,和直接使用OpenAI的接口一样,输入什么就返回什么。
  1. llm = OpenAI(model_name="text-davinci-003", temperature=0.9) // 这些都是OpenAI的参数  
  2. text = "What would be a good company name for a company that makes colorful socks?"  
  3. print(llm(text))   
  4. // 以上就是打印调用OpenAI接口的返回值,相当于接口的封装,实现的代码可以看看github.com/hwchase17/langchain/llms/openai.py的OpenAIChat
复制代码
以上代码运行结果:
  1. Cozy Colours Socks.
复制代码
Prompt Templates:管理LLMs的Prompts,就像我们需要管理变量或者模板一样。
  1. prompt = PromptTemplate(  
  2.     input_variables=["product"],  
  3.     template="What is a good name for a company that makes {product}?",  
  4. )  
  5. // 以上是两个参数,一个输入变量,一个模板字符串,实现的代码可以看看github.com/hwchase17/langchain/prompts  
  6. // PromptTemplate实际是基于StringPromptTemplate,可以支持字符串类型的模板,也可以支持文件类型的模板
复制代码
以上代码运行结果:
  1. What is a good name for a company that makes colorful socks?
复制代码
Chains:将LLMs和prompts结合起来,前面提到提供了OpenAI的封装和你需要问的字符串模板,就可以执行获得返回了。
  1. from langchain.chains import LLMChain  
  2. chain = LLMChain(llm=llm, prompt=prompt) // 通过LLM的llm变量,Prompt Templates的prompt生成LLMChain  
  3. chain.run("colorful socks") // 实际这里就变成了实际问题:What is a good name for a company that makes colorful socks?
复制代码
Agents:基于用户输入动态地调用chains,LangChani可以将问题拆分为几个步骤,然后每个步骤可以根据提供个Agents做相关的事情。
  1. # 导入一些tools,比如llm-math  
  2. # llm-math是langchain里面的能做数学计算的模块  
  3. tools = load_tools(["llm-math"], llm=llm)  
  4. # 初始化tools,models 和使用的agent  
  5. agent = initialize_agent(  
  6.     tools, llm, agent="zero-shot-react-description", verbose=True)  
  7. text = "12 raised to the 3 power and result raised to 2 power?"  
  8. print("input text: ", text)  
  9. agent.run(text)
复制代码
通过如上的代码,运行结果(拆分为两个部分):
  1. > Entering new AgentExecutor chain...  
  2. I need to use the calculator for this  
  3. Action: Calculator  
  4. Action Input: 12^3  
  5. Observation: Answer: 1728  
  6. Thought: I need to then raise the previous result to the second power  
  7. Action: Calculator  
  8. Action Input: 1728^2  
  9. Observation: Answer: 2985984  
  10.   
  11. Thought: I now know the final answer  
  12. Final Answer: 2985984  
  13. > Finished chain.
复制代码
Memory:就是提供对话的上下文存储,可以使用Langchain的ConversationChain,在LLM交互中记录交互的历史状态,并基于历史状态修正模型预测。
  1. # ConversationChain用法  
  2. llm = OpenAI(temperature=0)  
  3. # 将verbose设置为True,以便我们可以看到提示  
  4. conversation = ConversationChain(llm=llm, verbose=True)  
  5. print("input text: conversation")  
  6. conversation.predict(input="Hi there!")  
  7. conversation.predict(  
  8.   input="I'm doing well! Just having a conversation with an AI.")
复制代码
通过多轮运行以后,就会出现:
  1. Prompt after formatting:  
  2. The following is a friendly conversation between a human and an AI. The AI is talkative and provides lots of specific details from its context. If the AI does not know the answer to a question, it truthfully says it does not know.  
  3.   
  4. Current conversation:  
  5.   
  6. Human: Hi there!  
  7. AI:  Hi there! It's nice to meet you. How can I help you today?  
  8. Human: I'm doing well! Just having a conversation with an AI.  
  9. AI:  That's great! It's always nice to have a conversation with someone new. What would you like to talk about?
复制代码
具体代码

如下:
  1. # 导入LLM包装器  
  2. from langchain import OpenAI, ConversationChain  
  3. from langchain.agents import initialize_agent  
  4. from langchain.agents import load_tools  
  5. from langchain.chains import LLMChain  
  6. from langchain.prompts import PromptTemplate  
  7. # 初始化包装器,temperature越高结果越随机  
  8. llm = OpenAI(temperature=0.9)  
  9. # 进行调用  
  10. text = "What would be a good company name for a company that makes colorful socks?"  
  11. print("input text: ", text)  
  12. print(llm(text))  
  13.   
  14. prompt = PromptTemplate(  
  15.   input_variables=["product"],  
  16.   template="What is a good name for a company that makes {product}?",  
  17. )  
  18. print("input text: product")  
  19. print(prompt.format(product="colorful socks"))  
  20.   
  21. chain = LLMChain(llm=llm, prompt=prompt)  
  22. chain.run("colorful socks")  
  23.   
  24. # 导入一些tools,比如llm-math  
  25. # llm-math是langchain里面的能做数学计算的模块  
  26. tools = load_tools(["llm-math"], llm=llm)  
  27. # 初始化tools,models 和使用的agent  
  28. agent = initialize_agent(tools,  
  29.                          llm,  
  30.                          agent="zero-shot-react-description",  
  31.                          verbose=True)  
  32. text = "12 raised to the 3 power and result raised to 2 power?"  
  33. print("input text: ", text)  
  34. agent.run(text)  
  35.   
  36. # ConversationChain用法  
  37. llm = OpenAI(temperature=0)  
  38. # 将verbose设置为True,以便我们可以看到提示  
  39. conversation = ConversationChain(llm=llm, verbose=True)  
  40. print("input text: conversation")  
  41. conversation.predict(input="Hi there!")  
  42. conversation.predict(  
  43.   input="I'm doing well! Just having a conversation with an AI.")
复制代码
如何系统的去学习大模型LLM ?

大模型时代,火爆出圈的LLM大模型让程序员们开始重新评估自己的本领。 “AI会取代那些行业?”“谁的饭碗又将不保了?”等问题热议不断。
事实上,抢你饭碗的不是AI,而是会利用AI的人。
继科大讯飞、阿里、华为等巨头公司发布AI产品后,很多中小企业也陆续进场!超高年薪,挖掘AI大模型人才! 如今大厂老板们,也更倾向于会AI的人,普通程序员,还有应对的机会吗?
与其焦虑……

不如成为「掌握AI工具的技术人」,毕竟AI时代,谁先尝试,谁就能占得先机!
但是LLM相关的内容很多,现在网上的老课程老教材关于LLM又太少。所以现在小白入门就只能靠自学,学习成本和门槛很高。
基于此,我用做产品的心态来打磨这份大模型教程,深挖痛点并持续修改了近70次后,终于把整个AI大模型的学习门槛,降到了最低!
在这个版本当中:

第一您不需要具备任何算法和数学的基础
第二不要求准备高配置的电脑
第三不必懂Python等任何编程语言
您只需要听我讲,跟着我做即可,为了让学习的道路变得更简单,这份大模型教程已经给大家整理并打包,现在将这份 LLM大模型资料 分享出来:包括LLM大模型书籍、640套大模型行业报告、LLM大模型学习视频、LLM大模型学习路线、开源大模型学习教程等,
小白入门大模型:LangChain(附教程)-4.png
小白入门大模型:LangChain(附教程)-5.jpg
小白入门大模型:LangChain(附教程)-6.jpg
小白入门大模型:LangChain(附教程)-7.jpeg
小白入门大模型:LangChain(附教程)-8.jpeg
小白入门大模型:LangChain(附教程)-9.jpg
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

发布主题
阅读排行更多+

Powered by Discuz! X3.4© 2001-2013 Discuz Team.( 京ICP备17022993号-3 )