一、langchain是什么
langchain是一个框架,用于开发由llm驱动的应用程序。可以简单认为是llm领域的spring,以及开源版的chatgpt插件系统。核心的2个功能为:
1)可以将 llm 模型与外部数据源进行连接。
2)允许与 llm 模型与环境进行交互,通过agent使用工具。
二、langchain核心组件
langchain提供了各种不同的组件帮助使用llm,如下图所示,核心组件有models、indexes、chains、memory以及agent。
2.1 models
langchain本身不提供llm,提供通用的接口访问llm,可以很方便的更换底层的llm以及自定义自己的llm。主要有2大类的models:
1)llm:将文本字符串作为输入并返回文本字符串的模型,类似openai的text-davinci-003
2)chat models:由语言模型支持但将聊天消息列表作为输入并返回聊天消息的模型。一般使用的chatgpt以及claude为chat models。
与模型交互的,基本上是通过给予prompt的方式,langchain通过prompttemplate的方式方便我们构建以及复用prompt。
from langchain import prompttemplateprompt_template = '''作为一个资深编辑,请针对 >>> 和 <> {text} <<>> 和 <> {text} << str: 返回今天的日期。 return str(date.today())tools = load_tools(['llm-math'], llm=llm)tools.append(time)agent_math = initialize_agent(agent=agenttype.zero_shot_react_description, tools=tools, llm=llm, verbose=true)print(agent_math(计算45 * 54))print(agent_math(今天是哪天?))
输出为:
三、langchain落地实践
3.1 文档生成总结
1)通过loader加载远程文档
2)通过splitter基于token进行文档拆分
3)加载summarize链,链类型为refine,迭代进行总结
from langchain.prompts import prompttemplatefrom langchain.document_loaders import playwrighturlloaderfrom langchain.chains.summarize import load_summarize_chainfrom langchain.text_splitter import recursivecharactertextsplitterfrom azure_chat_llm import llmloader = playwrighturlloader(urls=[https://content.jr.jd.com/article/index.html?pageid=708258989])data = loader.load()text_splitter = recursivecharactertextsplitter.from_tiktoken_encoder( model_name=gpt-3.5-turbo, allowed_special=all, separators=[, , 。, ,], chunk_size=7000, chunk_overlap=0)prompt_template = '''作为一个资深编辑,请针对 >>> 和 <> {text} <> 和 <> {text} <<<'''prompt = prompttemplate(template=prompt_template, input_variables=[text])refine_prompt = prompttemplate( template=refine_template, input_variables=[existing_answer, text])chain = load_summarize_chain(llm, chain_type=refine, question_prompt=prompt, refine_prompt=refine_prompt, verbose=false)docs = text_splitter.split_documents(data)result = chain.run(docs)print(result)
3.2 基于外部文档的问答
1)通过loader加载远程文档
2)通过splitter基于token进行文档拆分
3)通过faiss向量存储文档,embedding加载huggingface的text2vec-base-chinese模型
4)自定义qa的prompt,通过retrievalqa回答相关的问题
from langchain.chains import retrievalqafrom langchain.document_loaders import webbaseloaderfrom langchain.embeddings.huggingface import huggingfaceembeddingsfrom langchain.prompts import prompttemplatefrom langchain.text_splitter import recursivecharactertextsplitterfrom langchain.vectorstores import faissfrom azure_chat_llm import llmloader = webbaseloader(https://in.m.jd.com/help/app/register_info.html)data = loader.load()text_splitter = recursivecharactertextsplitter.from_tiktoken_encoder( model_name=gpt-3.5-turbo, allowed_special=all, separators=[, , 。, ,], chunk_size=800, chunk_overlap=0)docs = text_splitter.split_documents(data)#设置自己的模型路径embeddings = huggingfaceembeddings(model_name=text2vec-base-chinese, cache_folder=model)vectorstore = faiss.from_documents(docs, embeddings)template = 请使用下面提供的背景信息来回答最后的问题。 如果你不知道答案,请直接说不知道,不要试图凭空编造答案。回答时最多使用三个句子,保持回答尽可能简洁。 回答结束时,请一定要说谢谢你的提问!{context}问题: {question}有用的回答:qa_chain_prompt = prompttemplate(input_variables=[context, question], template=template)qa_chain = retrievalqa.from_chain_type(llm, retriever=vectorstore.as_retriever(), return_source_documents=true, chain_type_kwargs={prompt: qa_chain_prompt})result = qa_chain({query: 用户注册资格})print(result[result])print(len(result['source_documents'])) 四、未来发展方向
随着大模型的发展,langchain应该是目前最火的llm开发框架,能和外部数据源交互、能集成各种常用的组件等等,大大降低了llm应用开发的门槛。其创始人harrison chase也和andrew ng联合开发了2门短课程,帮忙大家快速掌握langchain的使用。
目前大模型的迭代升级特别快,作为一个框架,langchain也得保持特别快的迭代速度。其开发特别拼,每天都会提交大量的commit,基本隔几天就会发布一个新版本,其contributor也达到了1200多人,特别活跃。
个人认为,除了和业务结合落地llm应用外,还有2个大的方向可以进一步去探索:
1)通过低代码的形式进一步降低llm应用的开发门槛。类似langflow这样的可视化编排工具发展也很快
2)打造更加强大的agent。agent之于大模型,个人觉得类似sql之于db,能大幅度提升llm的应用场景
在ARM工控机上实现SQLite3的优势
可不使用微控制器配置Dallas Semiconductor
浩轩论币:3.19数字货币比特币行情分析,4000能否保持?
日本松下第一财季营业利润同比下降44% 与特斯拉合资电池生产厂回本速度放缓
怎么通过红外传感器与DS18B20来认识单总线?
探索LangChain:构建专属LLM应用的基石
电容爆浆原因
TPS65987D应用电路以及200W USB-C PD参考设计
一名浑噩大学生的嵌入式工程师经历
在可穿戴设计中使用离散实时时钟的3个理由
TI推出业内速度最快的600V栅极驱动器
康敬伟:物联网时代 智能硬件将成下个入口
紫光国微5G超级SIM卡在长沙市正式开售
中国工程院院士沈昌祥:人机交互可信是发挥 5G、数据中心的源头和前提
一加5、小米6、锤子T3、魅族MX7,2017国产旗舰花落谁家?
MAX16835高压、350mA、可调节、高亮度LED线性驱动器
木林森2018第一季度业绩预增超1.5亿
岩土工程安全监测振弦传感器的发展史
Facebook如何使用人工智能来创建市场
我国正式具备量子计算机整机交付能力