[AI]算法小抄-你不知道的LangChain原理

这篇具有很好参考价值的文章主要介绍了[AI]算法小抄-你不知道的LangChain原理。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

LangChain的原理

系列文章主要目的快速厘清不同方法的原理差异和应用场景,

对于理论的细节请参考文末的Reference,

Reference中会筛选较为正确,细节的说明

你知道ChatGPT Plugin,AutoGPT和AgentGPT的工作原理吗?其实主要都是基于对于LLMs的Prompt工程,这篇文章主要就是透过目前最活跃的开源框架LangChain进行原理剖析,一览这类型框架背后的工作原理

Langchaing是一个语言模型的开发框架,主要是利用大型LLMs的强大得few-shot以及zero-shot泛化能力作为基础,以Prompt控制为核心基础,让开发者可以根据需求,往上快速堆叠应用,简单来说:

LangChain 是基于提示词工程(Prompt Engineering),提供一个桥接大型语言模型(LLMs)以及实际应用App的胶水层框架。

具体LangChain的原理是什么呢?我们基于LangChain的源码快速剖析:

LangChain最底层的核心其实都放在了langchain/agents/structured_chat/prompt.py

# flake8: noqa
PREFIX = """Respond to the human as helpfully and accurately as possible. You have access to the following tools:"""
FORMAT_INSTRUCTIONS = """Use a json blob to specify a tool by providing an action key (tool name) and an action_input key (tool input).

Valid "action" values: "Final Answer" or {tool_names}

Provide only ONE action per $JSON_BLOB, as shown:

```
{{{{
  "action": $TOOL_NAME,
  "action_input": $INPUT
}}}}
```

Follow this format:

Question: input question to answer
Thought: consider previous and subsequent steps
Action:
```
$JSON_BLOB
```
Observation: action result
... (repeat Thought/Action/Observation N times)
Thought: I know what to respond
Action:
```
{{{{
  "action": "Final Answer",
  "action_input": "Final response to human"
}}}}
```"""
SUFFIX = """Begin! Reminder to ALWAYS respond with a valid json blob of a single action. Use tools if necessary. Respond directly if appropriate. Format is Action:```$JSON_BLOB```then Observation:.
Thought:"""

从上面的代码片段可以主要分成PRIFIXFORMAT_INSTRUCTIONS, SUFFIX,当你建构好基础的工程代码后,其实LangCahin底层会将这些PRIFIXFORMAT_INSTRUCTIONS, SUFFIX加入到LLMs的语言模型中,这里举个简单的例子

toolbox.description = ["use this tool used to find weather information", 
                       "this tool is used to find travel information", 
                       "this tool if use to find food",
                       "this tool if use to search information on websites",
                       "Multiply the provided floats",
                       "add the provided floats"]

首先基于LangChain建构了6种工具提供给agent,然后简单运行一下agent

llm = OpenAI(temperature=1, model="text-davinci-003", max_tokens=2048)
agent_executor = initialize_agent(
    tools,
    llm,
    agent=AgentType.STRUCTURED_CHAT_ZERO_SHOT_REACT_DESCRIPTION,
    verbose=True)

[AI]算法小抄-你不知道的LangChain原理,人工智能

 从运行结果可以很明显看到除了我们设置好的tools描述之外PRIFIXFORMAT_INSTRUCTIONS, SUFFIX分别按照固定的格式加入到对agent的请求,而agent返回的时候你会发现确实就是按照prompt指定的格式进行返回,这就是LLMs强大的所在。

[AI]算法小抄-你不知道的LangChain原理,人工智能

总结

 如果在LangChain原始工程中搜索promt.py,你会发现有非常多的相关文件。这是因为对于LangChain底层不同的功能,都是需要依赖不同的prmpt进行控制,虽然简单粗暴好理解,但是也不是没有副作用的,以下总结这种框架共有优缺点,这个优缺点同样适用于ChatGPT Plugin和LlmaIndex...等,Prompt Egineering框架

优势

  • 简单快速:不需要训练特定任务模型就能完成各种应用的适配,而且代码入口单一简洁,简单拆解LangChain底层无非就是Prompt指定大模型API,以及三方应用API调用三个个核心模块。
  • 泛用性广:基于自然语言对任务的描述进行模型控制,对于任务类型没有任何限制,只有说不出来,没有做不到的事情。这也是ChatGPT Plugin能够快速接入各种应用的主要原因。

劣势

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

Reference

GitHub - hwchase17/langchain: ⚡ Building applications with LLMs through composability ⚡

Welcome to LangChain — 🦜🔗 LangChain 0.0.180
https://www.reddit.com/r/MachineLearning/comments/10o96k8/d_gptindex_vs_langchain/文章来源地址https://www.toymoban.com/news/detail-558446.html

到了这里,关于[AI]算法小抄-你不知道的LangChain原理的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Stable Diffusion你需要知道的算法原理;ChatGPT新增函数调用;Adobe Illustrator引入AI工具Firefly;

    🦉 AI新闻 🚀 OpenAI更新ChatGPT,新增函数调用、4倍上下文长度、更低的嵌入成本 摘要 :OpenAI在官网发布了ChatGPT的更新细节,包括新增函数调用、GPT-4和GPT-3.5-Turbo的升级、降低成本等。其中,新增函数调用能力使得模型能够直接支持Agent或Plugin,并且能够更可靠地从模型中获

    2024年02月16日
    浏览(26)
  • 【大数据&AI人工智能】HBase的核心数据结构和算法原理是什么?给出代码实例

    HBase是一个开源的非关系型分布式数据库,它参考了Google的BigTable模型,实现语言为 Java。它是Apache软件基金会的Hadoop项目的一部分,运行在HDFS文件系统之上,为 Hadoop 提供类BigTable 的服务。 HBase的核心数据结构和算法原理是什么?给出代码实例。HBase的核心数据结构和算法原

    2024年02月09日
    浏览(41)
  • 人工智能时代,你知道ai绘画如何使用吗?

    在数字时代的今天,人工智能正逐渐渗透到我们生活的方方面面,艺术创作也不例外。ai绘画软件作为一种创新的工具,为艺术爱好者、设计师和创作者提供了崭新的创作方式。但是,对于初次接触这类软件的人来说,可能会感到一些困惑和不知所措。如果你对ai绘画软件感兴

    2024年02月15日
    浏览(54)
  • 你不知道的 ES2023

    6 月 27 日 ECMA 大会批准了 ECMAScript 2023 (es14)规范,意味着新的一些语法将正式成为标准。下面来看看 ECMAScript 2023 有哪些值得我们关注的新特性。 具体相关提案原文详情可以跳转:已完成提案 •从后往前查找数组 •Hashbang 语法 •Symbol 类型作为 WeakMap 类型的键 •不改变原数组

    2024年02月15日
    浏览(27)
  • 记录--你不知道的Js高级方法

    在 Js 中有一些比较冷门但是非常好用的方法,我在这里称之为高级方法,这些方法没有被广泛使用或多或少是因为存在一些兼容性的问题,不是所有的浏览器都读得懂的。这篇文章主要就是对这些方法做一个总结,有些方法在我们开发过程中有着重要的作用,我们一起来看一

    2024年02月15日
    浏览(24)
  • 你不知道的自动装箱和拆箱

    “改天是明天,下次是每一次,以后是以后的每一天” 装箱就是自动将基本数据类型转换为包装器类型(int–Integer);调用方法:Integer的valueOf(int) 方法 拆箱就是自动将包装器类型转换为基本数据类型(Integer–int);调用方法:Integer的intValue方法 在Java SE5之前,如果要生成一个数值为

    2024年02月02日
    浏览(31)
  • 无效数据大揭秘——你不知道的那些坑!

    进行数据管理时,无效数据可能会对生产力和决策质量造成严重的影响。如何发现和处理无效数据变得愈发重要。一起来唠唠各位大佬是如何处理的? 无效数据是指在某个特定领域或目的中,不符合要求或无意义的数据。它通常是由于数据收集或处理过程中的错误、不一致或

    2024年02月05日
    浏览(46)
  • element - - - - - 你不知道的loading使用方式

    求人不如求己 关于页面交互,最害怕的就是接口等待时间太长,用户体验不好。 而如何提高用户体验呢? 接口返回速度 这个是后端同学去优化,前端同学也可通过 加载loading 来优化体验 Element 提供了两种调用 Loading 的方法:指令和服务 详情可查看官网 : Element Loading 加载

    2024年02月02日
    浏览(28)
  • 你不知道的几个JavaScript 高阶技巧

    基础: 高阶: 基础: 高阶: 基础: 高阶: 基础: 高阶: 基础: 高阶: 基础: 高阶: 基础: 高阶: 基础 高阶 更简单的方法: null 是一个  value ,然而 undefined 不是. null 像一个空盒子,但 undefined 不是. 传递 null 时, 不采用 默认值。然而,当未定义或未传递任何内容时,

    2024年02月08日
    浏览(38)
  • 【MySQL】不允许你不知道如何插入数据

    🎬 博客主页:博主链接 🎥 本文由 M malloc 原创,首发于 CSDN🙉 🎄 学习专栏推荐:LeetCode刷题集 🏅 欢迎点赞 👍 收藏 ⭐留言 📝 如有错误敬请指正! 📆 未来很长,值得我们全力奔赴更美好的生活✨ 😁大家好呀,今天是我第N次写MySQL,也是最近才学习MySQL,也想着记录一

    2024年02月15日
    浏览(25)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包