AI 大模型之美
徐文浩
bothub 创始人
32335 人已学习
新⼈⾸单¥68
登录后,你可以任选4讲全文学习
课程目录
已完结/共 33 讲
AI 大模型之美
15
15
1.0x
00:00/00:00
登录|注册

14|链式调用,用LangChain简化多步提示语

SimpleSequentialChain 自动链式处理
PromptTemplate 定义动态变量
封装 OpenAI API
英译中
英文问题提问
中译英
通过合理使用接口完成复杂任务
提供 Completion 和 Embedding 接口
llama-index 项目
Langchain 项目发展迭代
触发新问题找答案
利用 Langchain 组合问题
AI 决策支持
调用外部系统
调用语言模型
重试机制
AST 语法解析
Langchain 实现多步提示语
使用 LLMChain 进行链式调用
人工链式调用
集成业务系统
简化开发流程
链式调用
多轮对话撰写单元测试
利用外部知识
利用历史聊天记录
OpenAI 大语言模型
推荐阅读
思考题
Langchain 功能
自动化撰写单元测试
链式调用实例
Langchain 开源库
实现复杂功能
核心概念
Langchain 简化多步提示语

该思维导图由 AI 生成,仅供参考

你好,我是徐文浩。
OpenAI 的大语言模型,只是提供了简简单单的 Completion 和 Embedding 这样两个核心接口。但是你也看到了,在过去的 13 讲里,通过合理使用这两个接口,我们完成了各种各样复杂的任务。
通过提示语(Prompt)里包含历史的聊天记录,我们能够让 AI 根据上下文正确地回答问题。
通过将 Embedding 提前索引好存起来,我们能够让 AI 根据外部知识回答问题。
而通过多轮对话,将 AI 返回的答案放在新的问题里,我们能够让 AI 帮我们给自己的代码撰写单元测试。
这些方法,也是一个实用的自然语言类应用里常见的模式。我之前也都通过代码为你演示过具体的做法。但是,如果我们每次写应用的时候,都需要自己再去 OpenAI 提供的原始 API 里做一遍,那就太麻烦了。于是,开源社区就有人将这些常见的需求和模式抽象了出来,开发了一个叫做 Langchain 的开源库。那么接下来,我们就来看看如何使用 LangChain 来快速实现之前我们利用大语言模型实现过的功能。以及我们如何进一步地,将 Langchain 和我们的业务系统整合,完成更复杂、更有实用价值的功能。

使用 Langchain 的链式调用

如果你观察得比较仔细的话,你会发现在第 11 讲我们使用 llama-index 的时候,就已经装好 LangChain 了。llama-index 专注于为大语言模型的应用构建索引,虽然 Langchain 也有类似的功能,但这一点并不是 Langchain 的主要卖点。Langchain 的第一个卖点其实就在它的名字里,也就是链式调用
确认放弃笔记?
放弃后所记笔记将不保留。
新功能上线,你的历史笔记已初始化为私密笔记,是否一键批量公开?
批量公开的笔记不会为你同步至部落
公开
同步至部落
取消
完成
0/2000
荧光笔
直线
曲线
笔记
复制
AI
  • 深入了解
  • 翻译
    • 英语
    • 中文简体
    • 中文繁体
    • 法语
    • 德语
    • 日语
    • 韩语
    • 俄语
    • 西班牙语
    • 阿拉伯语
  • 解释
  • 总结

LangChain是一个开源库,通过链式调用来简化多步提示语的处理过程。文章通过使用ChatGPT的例子解释了链式调用的需求,并展示了如何使用LangChain来快速实现利用大语言模型的功能。作者介绍了LangChain的主要卖点在于链式调用,以及如何将LangChain和业务系统整合,完成更复杂、更有实用价值的功能。文章还提到了LangChain的三个包:LLM、PromptTemplate和LLMChain,以及如何使用SimpleSequentialChain实现链式调用。另外,文章还展示了如何支持多个变量输入的链式调用,通过一个例子展示了如何使用SequentialChain来处理多个问题。文章内容涉及到了OpenAI的大语言模型,以及如何利用LangChain来简化多步提示语的过程。 LangChain的主要特点在于通过链式调用来简化多步提示语的处理过程,使得利用大语言模型的功能更加便捷。文章通过具体的代码示例展示了如何使用LangChain来实现自动化撰写单元测试,以及如何通过LangChain组合多个问题,并利用前面问题的回答结果触发新的问题,从而找到所需的答案。这种链式调用的能力使得LangChain能够帮助开发者通过AI完成复杂的任务,并将整个任务的完成过程定义成一个固定的流程模板。LangChain还具有更强大的功能,不仅能调用语言模型,还能调用外部系统,甚至能直接让AI做决策,决定系统的行为。这篇文章为读者提供了对LangChain的全面介绍和实际应用示例,展示了其在简化开发工作、完成复杂任务方面的潜力。 总的来说,LangChain作为一个开源库,通过链式调用来简化多步提示语的处理过程,为开发者提供了利用大语言模型的便捷方式,同时具有丰富的功能和潜力,能够帮助开发者完成复杂的任务并简化开发工作。

仅可试看部分内容,如需阅读全部内容,请付费购买文章所属专栏
《AI 大模型之美》
新⼈⾸单¥68
立即购买
登录 后留言

全部留言(18)

  • 最新
  • 精选
  • 智能
    这种链式调用是不是很容易让问题超过token限制,有没有什么办法来自动解决这个问题

    作者回复: 链式调用,后面的步骤不是一定要包含最开头的Prompt的,根据实际情况你可以调整每个步骤实际的Prompt是什么。 目前其实Azure已经有32K Token的gpt-4-32k了,虽然贵一些。但是如果是拿来干写代码这种高价值任务我觉得还是划得来的。

    2023-04-11归属地:北京
    3
    7
  • 老师好,看到LangChain获得1000万美元种子轮融资的新闻。 想问下:像LangChain这种开源的产品,商业模式是怎么样的,投资机构是看中了哪点进行投资的。

    作者回复: 一般都是会提供企业版来获得收入。 1. 企业版本的特有功能,比如更好的管理面板界面等等 2. 提供开源版本,也提供云端版本。云端版本托管或者按照使用量来收费 3. 给500强大企业做私有化部署、服务来收费 看中什么具体我也不知道,但是的确Langchain是现在Hacker们用得最多的一个开发框架,有用户有开发者就有可能性和未来。

    2023-04-11归属地:广东
    3
  • 一叶
    老师我的想问下,国内使用Pinecone的效率如何? 会不会受到网络的影响?

    作者回复: 国内应用的话,自己部署一个postgres + pgvector 插件吧,大部分云平台应该都支持 postgres

    2023-04-11归属地:福建
    3
  • 厚积薄发
    支持多个变量输入的链式调用 这个案例 多运行几次,最后的数据结果,每次都不一样 其中一次是这个‘波尔图更多,他们获得过4次欧冠冠军,而西班牙皇家马德里只获得过3次欧冠冠军。 ’ 老师,知道这个是什么原因吗?

    作者回复: 这个是大语言模型本身潜在的“幻觉”问题,本质上就是一开始的问题他回答错了。 这个解决的办法就是要用类似 Browsing 插件的方式,通过搜索路径拿到正确答案了

    2023-05-11归属地:德国
    2
    2
  • 极客雷
    autowgpt?

    作者回复: 这个不是autogpt,只是通过langchain进行链式调用

    2023-04-29归属地:广东
  • 超超超超人
    老师你好,AutoGPT 本质上是不是也使用了链式调用呢?

    作者回复: 是的,langchain也有如何实现一个autogpt的use case https://python.langchain.com/en/latest/use_cases/autonomous_agents/autogpt.html

    2023-04-19归属地:上海
    2
  • 张弛
    用ChatGPT实测本讲中提到的问题,先翻译英文提问,再翻译回来,好像并未产生更好的结果,跟直接中文提问的结果差不多。我还专门开了新的chat窗口来避免上下文影响。老师能否举个具体的通过这种方式得到更好结果的案例呢?

    作者回复: 我在直播的时候给过,中文你可以翻译过来试一下,GPT-4下中英文的推理过程和结果是不一样的。 question="""You've got to defuse a bomb by placing exactly 5 gallons of water on a sensor. The problem is, you only have a 4 gallon jug and a 3 gallons jug on hand! How can you achieve this task?"""

    2023-04-14归属地:中国台湾
  • Evan
    input_variables=["team1", "team2"], 是怎么传入参数的?

    作者回复: 这是前面两个LLMChain的ouput_key呀,是通过前面两个LLM的输出结果,再输入到这个里面的

    2023-04-11归属地:日本
  • Toni
    part 1 (受限于2000字符,将相应的运行代码放在了part 2) 题目: 通过 Langchain 实现自动化撰写 Python 的一个函数(进行时间格式化输出),并给出对该函数的单元测试,包含对异常输入的测试。 目的: 1. 通过调用 SequentialChain 使与 ChatOpenAI 的第一次对话的结果成为第二次对话的输入,并将一,二次对话的结果显示出来,以备后续调整改进。(注: 在 ChatOpenAI 的对话窗下,ChatGPT 知道上一次对话的内容,无需重复)。 2. 使用自然语言提编程要求。 3. 通过调制 PromptTemplate 中的参数 template 来实现输出结果的最优化。这其实就是设置合适的 Prompt,以期最有效地使用 ChatGPT。 方法: 尝试着调用了 SequentialChain,使用 ChatOpenAI 的 "gpt-3.5-turbo",参数设置 temperature=1 结果: > Entering new SequentialChain chain... > Finished chain. def time_format(seconds): if seconds < 60: return f"{seconds}s" elif seconds < 3600: minutes = seconds // 60 seconds %= 60 return f"{minutes}min{seconds}s" else: hours = seconds // 3600 seconds %= 3600 minutes = seconds // 60 seconds %= 60 return f"{hours}h{minutes}min{seconds}s" > Entering new SequentialChain chain... > Finished chain. import pytest def test_time_format(): assert time_format(1) == '1s' assert time_format(61) == '1min1s' assert time_format(3678) == '1h1min18s' assert time_format(-1) == 'Invalid input' assert time_format('abc') == 'Invalid input' assert time_format(None) == 'Invalid input' assert time_format(999999) == '277h46min39s' # Add a test case for a large input As an AI language model, I cannot run this code, but I can assure you that the above code functions when used in a Python environment with the necessary dependencies and libraries installed. 结论: 输出基本满足了设计要求。ChatGPT3.5 在编程方面有所表现,尤其是考虑到本例中使用的模型是 gpt-3.5-turbo。
    2023-04-11归属地:瑞士
    2
    2
  • Toni
    part 2 在 part 1 中使用的代码如下: import openai, os from langchain.chat_models import ChatOpenAI #from langchain.llms import OpenAI from langchain.prompts import PromptTemplate from langchain.chains import LLMChain from langchain.chains import SequentialChain openai.api_key = os.environ.get("OPENAI_API_KEY") llm = ChatOpenAI(model_name="gpt-3.5-turbo", max_tokens=2048, temperature=1) #text-davinci-003, 2048, max_tokens: 4096 for gpt-3.5-turbo Q1_prompt = PromptTemplate( template="用Python写一个函数,进行时间格式化输出,要求仅需要格式化到小时(?h?min?s)。比如:{Q1}", input_variables=["Q1"] ) Q2_prompt = PromptTemplate( # template="请为程序{A1}用'pytest' 写一个单元测试", template="""请为程序{A1}用'pytest' 写一个单元测试, Besides the test that counts negative numbers, include test cases like the input string "abc", and any other test cases you can think of, 将所有的 Test Cases 写入同一个测试中""", input_variables=["A1"] ) chain1 = LLMChain(llm=llm, prompt=Q1_prompt, output_key="A1") chain2 = LLMChain(llm=llm, prompt=Q2_prompt, output_key="A2") q1=""" 输入 输出 1 1s 61 1min1s """ sequential_chain_p1 = SequentialChain(chains=[chain1], input_variables=["Q1"], verbose=True) answer1 = sequential_chain_p1.run(Q1=q1) print(answer1) sequential_chain_p2 = SequentialChain(chains=[chain1, chain2], input_variables=["Q1"], verbose=True) answer2 = sequential_chain_p2.run(Q1=q1) print(answer2) ----------- ----------- 如何将代码封装在一个 App 中呢? 未来的程序辅助设计是沿这个思路走还是另辟蹊径? 如果有了用户交互界面,如何控制生成的程序不自己乱跑,亦或 '在正确使用的引导下' 让自动又自动生成的程序跑出了 '天际',使得让人百思不得其解的事,豁然开朗了起来。 解了一题留下了更多问题。
    2023-04-11归属地:瑞士
    1
收起评论
显示
设置
留言
18
收藏
沉浸
阅读
分享
手机端
快捷键
回顶部