14|链式调用,用LangChain简化多步提示语
14|链式调用,用LangChain简化多步提示语
讲述:徐文浩
时长08:11大小7.47M
使用 Langchain 的链式调用
人工链式调用
使用 LLMChain 进行链式调用
支持多个变量输入的链式调用
通过 Langchain 实现自动化撰写单元测试
小结
思考题
推荐阅读
LangChain是一个开源库,通过链式调用来简化多步提示语的处理过程。文章通过使用ChatGPT的例子解释了链式调用的需求,并展示了如何使用LangChain来快速实现利用大语言模型的功能。作者介绍了LangChain的主要卖点在于链式调用,以及如何将LangChain和业务系统整合,完成更复杂、更有实用价值的功能。文章还提到了LangChain的三个包:LLM、PromptTemplate和LLMChain,以及如何使用SimpleSequentialChain实现链式调用。另外,文章还展示了如何支持多个变量输入的链式调用,通过一个例子展示了如何使用SequentialChain来处理多个问题。文章内容涉及到了OpenAI的大语言模型,以及如何利用LangChain来简化多步提示语的过程。 LangChain的主要特点在于通过链式调用来简化多步提示语的处理过程,使得利用大语言模型的功能更加便捷。文章通过具体的代码示例展示了如何使用LangChain来实现自动化撰写单元测试,以及如何通过LangChain组合多个问题,并利用前面问题的回答结果触发新的问题,从而找到所需的答案。这种链式调用的能力使得LangChain能够帮助开发者通过AI完成复杂的任务,并将整个任务的完成过程定义成一个固定的流程模板。LangChain还具有更强大的功能,不仅能调用语言模型,还能调用外部系统,甚至能直接让AI做决策,决定系统的行为。这篇文章为读者提供了对LangChain的全面介绍和实际应用示例,展示了其在简化开发工作、完成复杂任务方面的潜力。 总的来说,LangChain作为一个开源库,通过链式调用来简化多步提示语的处理过程,为开发者提供了利用大语言模型的便捷方式,同时具有丰富的功能和潜力,能够帮助开发者完成复杂的任务并简化开发工作。
赞 32
提建议
全部留言(18)
- 最新
- 精选
- 智能2023-04-11 来自北京这种链式调用是不是很容易让问题超过token限制,有没有什么办法来自动解决这个问题
作者回复: 链式调用,后面的步骤不是一定要包含最开头的Prompt的,根据实际情况你可以调整每个步骤实际的Prompt是什么。 目前其实Azure已经有32K Token的gpt-4-32k了,虽然贵一些。但是如果是拿来干写代码这种高价值任务我觉得还是划得来的。
共 3 条评论7 - 意2023-04-11 来自广东老师好,看到LangChain获得1000万美元种子轮融资的新闻。 想问下:像LangChain这种开源的产品,商业模式是怎么样的,投资机构是看中了哪点进行投资的。
作者回复: 一般都是会提供企业版来获得收入。 1. 企业版本的特有功能,比如更好的管理面板界面等等 2. 提供开源版本,也提供云端版本。云端版本托管或者按照使用量来收费 3. 给500强大企业做私有化部署、服务来收费 看中什么具体我也不知道,但是的确Langchain是现在Hacker们用得最多的一个开发框架,有用户有开发者就有可能性和未来。
4 - 一叶2023-04-11 来自福建老师我的想问下,国内使用Pinecone的效率如何? 会不会受到网络的影响?
作者回复: 国内应用的话,自己部署一个postgres + pgvector 插件吧,大部分云平台应该都支持 postgres
4 - 厚积薄发2023-05-11 来自德国支持多个变量输入的链式调用 这个案例 多运行几次,最后的数据结果,每次都不一样 其中一次是这个‘波尔图更多,他们获得过4次欧冠冠军,而西班牙皇家马德里只获得过3次欧冠冠军。 ’ 老师,知道这个是什么原因吗?
作者回复: 这个是大语言模型本身潜在的“幻觉”问题,本质上就是一开始的问题他回答错了。 这个解决的办法就是要用类似 Browsing 插件的方式,通过搜索路径拿到正确答案了
共 2 条评论2 - 极客雷2023-04-29 来自广东autowgpt?
作者回复: 这个不是autogpt,只是通过langchain进行链式调用
- 超超超超人2023-04-19 来自上海老师你好,AutoGPT 本质上是不是也使用了链式调用呢?
作者回复: 是的,langchain也有如何实现一个autogpt的use case https://python.langchain.com/en/latest/use_cases/autonomous_agents/autogpt.html
共 2 条评论 - 张弛2023-04-14 来自中国台湾用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?"""
- Evan2023-04-11 来自日本input_variables=["team1", "team2"], 是怎么传入参数的?
作者回复: 这是前面两个LLMChain的ouput_key呀,是通过前面两个LLM的输出结果,再输入到这个里面的
- Toni2023-04-11 来自瑞士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。展开共 2 条评论2
- Toni2023-04-11 来自瑞士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 中呢? 未来的程序辅助设计是沿这个思路走还是另辟蹊径? 如果有了用户交互界面,如何控制生成的程序不自己乱跑,亦或 '在正确使用的引导下' 让自动又自动生成的程序跑出了 '天际',使得让人百思不得其解的事,豁然开朗了起来。 解了一题留下了更多问题。展开1