目录
1​背景​
2Prompt-Ops下的应用
2.1   Langchain等工程框架解决了这些工程上的问题
2.2    一些Langchain的开发例子
2.2.1   结合搜索的GPT
2.2.2   将自然语言转为Python代码并自行纠错
2.2.3   使用GPT-3 + Statmuse + Langchain查询NBA数据
2.2.4   连接Python REPL打开浏览器播放音乐
2.2.5   连接私有数据
2.3   结合私有数据问答
2.3.1   如何构建一个基于私有数据的LLM问答系统
2.3.2   结合私有数据问答的抽象流程
2.3.3   重要组件
2.3.4   OpenAI私有部署与成本的问题
2.5   Prompt-Ops 目前最大的问题
3未来可能的一些产品形态
4总结
首页 科技周边 人工智能 ChatGPT分享-如何开发一个LLM应用

ChatGPT分享-如何开发一个LLM应用

Apr 12, 2023 pm 09:43 PM
chatgpt llm 应用

1​背景​

ChatGPT引起巨大的业界震撼,各行各业都在讨论大语言模型、通用人工智能。AI经历了五十多年的发展,现在正处于产业结构水平化发展的关键时期。这一变化源于NLP领域范式的转变,从“预训练+微调”向“预训练、提示、预测”模式演进。在这一新模式下,下游任务适应预训练模型,使得一个大型模型能适用于多个任务。这一变化为AI产业的水平化分工奠定了基础,大型语言模型成为基础设施,Prompt Engineering公司层出不穷,专注于连接用户和模型。AI产业的分工初步形成,包括底层基础设施(云服务商)、大型模型、Prompt Engineering平台和终端应用。随着AI产业变革,开发者可以充分利用大型语言模型(LLM)和Prompt Engineering来开发创新应用。

2Prompt-Ops下的应用

目前要开发一个基于LLM的应用,我们面临最大的工程上的问题是什么?

  • 大语言模型不能联网,无法获取最新的信息
  • 大语言模型没有我们私有的数据,无法回答垂直方向的问题
  • 大语言模型的开放API(text-davinci-003)没有像ChatGPT那样优秀的上下文能力
  • 大语言模型无法驱动其他工具。

2.1   Langchain等工程框架解决了这些工程上的问题

以Langchain为例简单来说:LangChain是 LLM 底层能力的封装,是一种 Prompt Engineering或者说是Prompt-Ops。

  • 它可以接入各种不同LLM的服务,抽象了各种大语言模型的调用
  • 它可以创建各种PromptTemplate,实现定制化的Prompt模版
  • 它可以创建链来组合调用PromptTemplate
  • 它可以通调用各种工具,实现GPT-3目前不擅长的事情,比如搜索/数学/链接私有数据库/Python代码
  • 它可以使用代理, 驱动LLM 来确定采取哪些行动以及采取何种顺序。动作可以是使用工具并观察其输出,也可以是返回给用户。
  • 它可以通过它的Memory模块,来实现对话历史的建模。

2.2    一些Langchain的开发例子

2.2.1   结合搜索的GPT

图片

图片

这是一个用ChatGPT和LangChain开发的Demo对比的例子,输入的都是“谁是周杰伦的老婆?她当前的年龄乘以0.23是多少?”。可以看出ChatGPT或者GPT-3.5因为没有搜索能力,回答的结果是错误的。右边用LangChain结合OpenAI的GPT-3.5的API则输出了正确的结果,他会逐步去搜索获得正确信息,得出正确结果,而且中间的过程是框架自动处理的,我除了输入问题没有其他操作。

2.2.2   将自然语言转为Python代码并自行纠错

这是一个非常令人震惊的例子,在这个流程中,它自己发现函数未定义的报错并自行纠正。

图片

图片

2.2.3   使用GPT-3 + Statmuse + Langchain查询NBA数据

Fuzzy API composition: querying NBA stats with GPT-3 + Statmuse + Langchain

使用Langchain与体育数据搜索网站相结合,提问复杂的数据问题并得到准确的回复。例如:“波士顿凯尔特人队在这个 2022-2023 赛季的 NBA 赛季场均防守得分是多少?与他们上赛季的平均水平相比,百分比变化如何?”

图片

2.2.4   连接Python REPL打开浏览器播放音乐

一个蛮科幻的场景,我用Langchain接入了Python REPL工具,输入“给我放一首歌”,它导入了webBrowser包,调用代码打开了浏览器,给我播放了一首 《never gonna give you up》

def pythonTool():
bash = BashProcess()
python_repl_util = Tool(
"Python REPL",
PythonREPL().run,
"""A Python shell. Use this to execute python commands. 
Input should be a valid python command.
If you expect output it should be printed out.""",
)
command_tool = Tool(
name="bash",
descriptinotallow="""A Bash shell. Use this to execute Bash commands. Input should be a valid Bash command.
If you expect output it should be printed out.""",
func=bash.run,
)
# math_tool = _get_llm_math(llm)
# search_tool = _get_serpapi()
tools = [python_repl_util, command_tool]
agent = initialize_agent(tools, llm, agent="zero-shot-react-description", verbose=True)
agent.run("给我播放一首音乐")
登录后复制

图片

2.2.5 连接私有数据

连接私有数据对第三方企业做LLM应用来说非常重要。下面举几个例子

  • LangchainJs的文档,结合了Langchain:AI-powered search for LangchainJS Documentation,你可以直接问文档内容、技术细节。

图片

  • 数据库产品 Supabase也做了同样的事情,将自己的文档与ChatGPT相连接,使得开发者可以很方便的询问/查找自己遇到的技术问题。https://supabase.com/docs

图片

  • 政府信息问答的一个例子:Co-pilot for government

法律公文和政策条款一般都非常复杂繁琐,这个demo中将旧金山政府的信息用Langchain与GPT结合,做到询问其中细节能获得准确回复的效果。

图片

> Entering new AgentExecutor chain...
I need to find out the size limit for a storage shed without a permit and then search for sheds that are smaller than that size.
Action: SF Building Codes QA System
Action Input: "What is the size limit for a storage shed without a permit in San Francisco?"
Observation: The size limit for a storage shed without a permit in San Francisco is 100 square feet (9.29 m2).


Thought:Now that I know the size limit, I can search for sheds that are smaller than 100 square feet.
Action: Google
Action Input: "Storage sheds smaller than 100 square feet"
Observation: Results 1 - 24 of 279 ...


Thought:I need to filter the Google search results to only show sheds that are smaller than 100 square feet and suitable for backyard storage.
Action: Google
Action Input: "Backyard storage sheds smaller than 100 square feet"
Thought:I have found several options for backyard storage sheds that are smaller than 100 square feet and do not require a permit. 
Final Answer: The size limit for a storage shed without a permit in San Francisco is 100 square feet. There are many options for backyard storage sheds that are smaller than 100 square feet and do not require a permit, including small sheds under 36 square feet and medium sheds between 37 and 100 square feet.
登录后复制

2.3   结合私有数据问答

LLM应用与私有数据交互非常重要,我看到无数人在问一些ChatGPT无法回答的问题了:问认不认识谁、问自己公司业务细节、问各种可能不包含在预训练数据集里的东西。这些都已用Langchain和LlaMaIndex来解决。试想一下,将私有数据与LLM相结合,将改变数据原有的访问方式,通过问答能很自然地获取到自己需要的信息,这是比当前的搜索/打标分类都要高效的数据交互方式。

2.3.1   如何构建一个基于私有数据的LLM问答系统

图片

向量数据库现在看起来是构建LLM App中很关键的一个组件。首先 LLM 的预训练和微调过程不可能包含我们所期待的私有数据,因此如何将LLM关联到私有数据成为一个很关键的需求。而且LLM的“接口”-自然语言通常不是像Key-Value的映射那样精确地。而且在这一阶段我们希望LLM去理解我们的知识库,而不是简单的在其中搜索相同的字符串,我们希望询问关于我们知识库的细节,并给出一定理解后的答案(以及来源),这样匹配向量这样的搜索方式是一个非常合适且关键的解决方案。还有一个关键点是,LLM在每次调用是按token计费(即文本量),并且目前的接口的上下文有着4096 tokens的限制。,因此面对庞大的数据,我们也不可能将所有的数据一次性传给LLM。因此才有了第一张图那个流程图的结构。本地预先将我们私有的数据转成向量存在Qdrant里,用户问答时,将用户的问题转为向量,然后去Qdrant里进行搜索(相似性匹配)得到Top K个结果,然后将这些结果(注意这里的结果已经是自然语言了)传给LLM进行总结输出。

2.3.2   结合私有数据问答的抽象流程

这里使用Langchain社区博客的流程图为例

图片

私有数据分割成小于LLM上下文的分块,创建向量后存入向量数据库

图片

将问题计算向量后在向量数据库进行相似性搜索,算出相关性较高的top k个结果后拼接prompt送往LLM获得答案。

2.3.3   重要组件

  • OpenAI Ada模型:text-embedding-ada-002模型可以快速编码一个1536维的向量,我们可以使用这个向量来计算文本之间的相似性。
  • Langchain / LLamaIndex:Langchain包含多种文本拆分器与文档连接器,方便将文件进行拆分并且在向量数据库中索引;LlamaIndex 可以从向量存储加载数据,类似于任何其他数据连接器。然后可以在 LlamaIndex 数据结构中使用此数据。
  • 向量数据库,选型比较多:Chroma / FAISS / Milvus / PGVector / Qdrant / Pinecone等等。

2.3.4   OpenAI私有部署与成本的问题

再来聊聊最近那个OpenAI私有部署的新闻,如果用Langchain来做链接,面对庞大的私有数据,用一个embedding模型(OpenAI的ada)计算输入问题向量,用Qdrant等向量数据库来管理私有数据的向量和向量搜索,用Langchain来做中间的链接虽然可以解决问题,但是token的消耗却是不容忽视的成本问题。私有部署+微调可能能解决大部分前面提到的问题。可能是有钱大公司用Model instance和fine-tuning,小公司独立开发者用Langchain等框架。更未来OpenAI的LLM服务能力外溢,可能不需要Prompt了,甚至把Langchain的功能都能包括了,LLM应用的开发接入也许只需要一个接口调用。

2.4    2023年的LLM应用技术栈

2023 用来简单搭建 AI Demo 的最新技术栈:

  • 托管: Vercel
  • 前端: Next.js
  • 后端: Vercel with flask
  • 数据库: Supabase
  • AI 模型: OpenAI / Replicate / Hugging Face
  • LLM框架层: LangChain / LLaMaIndex
  • 向量存储/搜索: Pinecone / FAISS

2.5   Prompt-Ops 目前最大的问题

一些关于 Langchain 这类Prompt-Ops这类工具的反对观点:stream.thesephist.com主要问题是在这类工具/框架,将自然语言作为代码和LLM的连接,使用非确定性语言本身作为控制流,有点疯狂。而且本身评估模型输出效果现在是个很麻烦的事,没有很好的解决方案,很多都是维护一个巨大的电子表格,靠人去评估。(也有用LLM评估LLM的方案,还比较早期)所以要投入生产,真实面对用户而不是作为twitter演示可能还有很多工作要做。

详细说说测试环节面临的巨大挑战。假如你的产品有一套研发阶段效果很好的prompt,交给测试后,可能测试上百条上千条就能看出问题了。由于效果无法保证,真正推出给c端用户会面临很大的挑战。而且没有用微调服务或者model instance的话,如果OpenAI更新了模型,你的生产环境的prompt可能需要全部重新测试一下效果。你的prompt也需要和代码一样按版本来管理,不管有没有prompt变更,每个版本上线前都需要进行回归测试。没有好的自动化评估方案的话,大量的case都需要测试人工来看会耗费非常多的人力。

结合私有数据的LLM应用目前开发起来在工程上已经有很多不错的方案了,很容易跑出效果不错的demo,但还是需要非常谨慎对待这样一种应用。毕竟我们不只是要做一个在社交媒体或者Leader面前演示的项目。提供给用户输入的是一个对话框,自然语言宽泛到即使你测试上万条结果也可能出现意想不到的结果,毕竟像new bing和chatGPT这样的产品也会被Prompt Injection。面对这种不确定性,工程上如何去避免,测试如何去覆盖都是一个成熟产品待解决或者说还有很多工作可以做的问题。

但我觉得也不必完全否定这类Prompt-Ops工具/框架,毕竟现阶段确实能做出很多不错的demo来验证想法。

3未来可能的一些产品形态

聊聊ChatGPT API开放后LLM应用可能的形态。

  • 对话聊天,是最直观的应用方式,在API上做好对话历史的管理。
  • 虚拟角色聊天,在基础对话聊天上,对API的prefix_message上做一些角色定义的prompt,可以实现类似Character.ai的效果。更深入可能是作为游戏角色、虚拟人、XR助手等。
  • 类似Notion的文本辅助撰写工具,目前Notion、FlowUs都做了类似的应用。未来各家社区的发布器集成也是一个趋势,减低用户发布门槛,提升发布质量。
  • 数据总结性工具,实现Chat-Your-Data,提供文档的输入给用户,让用户可以与自己提供的数据聊天,本质只涉及到互联网公开的数据与用户私有的数据。
  • 大企业的Chat-Your-Data,各家大公司在原有业务基础上,结合大企业的私有数据,提供更优质的服务。比如结合用户点评的大众点评,能够用“想去放neo-soul和R&B音乐的酒吧”,比如我们的商详页,能够总结所有用户对这个商品的评价,并且可以让用户对这个商品的资料进行问答。
  • 与政务、医疗、教育等领域结合,融合线上机构官网、线下大屏,提供更好的市民服务。
  • 与其他工具比如IFTTT或者各种私有协议相结合,实现LLM可以访问更多的工具和系统,举个例子:iot场景,Office Copilot。

LLM应用实际是一种新的人机交互方式,能够让用户用自然语言与我们目前的系统沟通,很多应用甚至可以简化到只有一个聊天窗口。

4总结

目前来说由于通用大模型训练/部署的高成本来说,产业水平化分工的条件基本成熟,世界上并不需要很多个大模型,做LLM的应用将会是中小型企业和个人开发者的必然选择。新形态的编程/工程范式需要工程师去及时学习理解。目前的开源技术栈已经能满足大部分产品的需求,可以尝试快速实践demo来验证想法。

参考资料:

  • https://blog.langchain.dev/tutorial-chatgpt-over-your-data/

Tutorial: ChatGPT Over Your Data

  • https://qdrant.tech/articles/langchain-integration/

Question Answering with LangChain and Qdrant without boilerplate

  • https://mp.weixin.qq.com/s/VZ6n4qlDx4bh41YvD1HqgQ

Atom Capital:深入探讨ChatGPT带来的产业变革

以上是ChatGPT分享-如何开发一个LLM应用的详细内容。更多信息请关注PHP中文网其他相关文章!

本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

热AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover

AI Clothes Remover

用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool

Undress AI Tool

免费脱衣服图片

Clothoff.io

Clothoff.io

AI脱衣机

AI Hentai Generator

AI Hentai Generator

免费生成ai无尽的。

热工具

记事本++7.3.1

记事本++7.3.1

好用且免费的代码编辑器

SublimeText3汉化版

SublimeText3汉化版

中文版,非常好用

禅工作室 13.0.1

禅工作室 13.0.1

功能强大的PHP集成开发环境

Dreamweaver CS6

Dreamweaver CS6

视觉化网页开发工具

SublimeText3 Mac版

SublimeText3 Mac版

神级代码编辑软件(SublimeText3)

ChatGPT 现在允许免费用户使用 DALL-E 3 生成每日限制的图像 ChatGPT 现在允许免费用户使用 DALL-E 3 生成每日限制的图像 Aug 09, 2024 pm 09:37 PM

DALL-E 3 于 2023 年 9 月正式推出,是比其前身大幅改进的型号。它被认为是迄今为止最好的人工智能图像生成器之一,能够创建具有复杂细节的图像。然而,在推出时,它不包括

本地使用Groq Llama 3 70B的逐步指南 本地使用Groq Llama 3 70B的逐步指南 Jun 10, 2024 am 09:16 AM

译者|布加迪审校|重楼本文介绍了如何使用GroqLPU推理引擎在JanAI和VSCode中生成超快速响应。每个人都致力于构建更好的大语言模型(LLM),例如Groq专注于AI的基础设施方面。这些大模型的快速响应是确保这些大模型更快捷地响应的关键。本教程将介绍GroqLPU解析引擎以及如何在笔记本电脑上使用API和JanAI本地访问它。本文还将把它整合到VSCode中,以帮助我们生成代码、重构代码、输入文档并生成测试单元。本文将免费创建我们自己的人工智能编程助手。GroqLPU推理引擎简介Groq

加州理工华人用AI颠覆数学证明!提速5倍震惊陶哲轩,80%数学步骤全自动化 加州理工华人用AI颠覆数学证明!提速5倍震惊陶哲轩,80%数学步骤全自动化 Apr 23, 2024 pm 03:01 PM

LeanCopilot,让陶哲轩等众多数学家赞不绝口的这个形式化数学工具,又有超强进化了?就在刚刚,加州理工教授AnimaAnandkumar宣布,团队发布了LeanCopilot论文的扩展版本,并且更新了代码库。图片论文地址:https://arxiv.org/pdf/2404.12534.pdf最新实验表明,这个Copilot工具,可以自动化80%以上的数学证明步骤了!这个纪录,比以前的基线aesop还要好2.3倍。并且,和以前一样,它在MIT许可下是开源的。图片他是一位华人小哥宋沛洋,他是

Plaud 推出 NotePin AI 可穿戴录音机,售价 169 美元 Plaud 推出 NotePin AI 可穿戴录音机,售价 169 美元 Aug 29, 2024 pm 02:37 PM

Plaud Note AI 录音机(亚马逊有售,售价 159 美元)背后的公司 Plaud 宣布推出一款新产品。该设备被称为 NotePin,被描述为人工智能记忆胶囊,与 Humane AI Pin 一样,它是可穿戴的。 NotePin 是

七个很酷的GenAI & LLM技术性面试问题 七个很酷的GenAI & LLM技术性面试问题 Jun 07, 2024 am 10:06 AM

想了解更多AIGC的内容,请访问:51CTOAI.x社区https://www.51cto.com/aigc/译者|晶颜审校|重楼不同于互联网上随处可见的传统问题库,这些问题需要跳出常规思维。大语言模型(LLM)在数据科学、生成式人工智能(GenAI)和人工智能领域越来越重要。这些复杂的算法提升了人类的技能,并在诸多行业中推动了效率和创新性的提升,成为企业保持竞争力的关键。LLM的应用范围非常广泛,它可以用于自然语言处理、文本生成、语音识别和推荐系统等领域。通过学习大量的数据,LLM能够生成文本

如何在iPhone中撤消从主屏幕中删除 如何在iPhone中撤消从主屏幕中删除 Apr 17, 2024 pm 07:37 PM

从主屏幕中删除了重要内容并试图将其取回?您可以通过多种方式将应用程序图标放回屏幕。我们已经讨论了您可以遵循的所有方法,并将应用程序图标放回主屏幕如何在iPhone中撤消从主屏幕中删除正如我们之前提到的,有几种方法可以在iPhone上恢复此更改。方法1–替换应用程序库中的应用程序图标您可以直接从应用程序库将应用程序图标放置在主屏幕上。第1步–横向滑动以查找应用程序库中的所有应用程序。步骤2–找到您之前删除的应用程序图标。步骤3–只需将应用程序图标从主库拖动到主屏幕上的正确位置即可。这是将应用程序图

PHP中箭头符号的作用及实践应用 PHP中箭头符号的作用及实践应用 Mar 22, 2024 am 11:30 AM

PHP中箭头符号的作用及实践应用在PHP中,箭头符号(->)通常用于访问对象的属性和方法。对象是PHP中面向对象编程(OOP)的基本概念之一,在实际开发中,箭头符号在操作对象时发挥着重要作用。本文将介绍箭头符号的作用以及实践应用,并提供具体的代码示例来帮助读者更好地理解。一、箭头符号的作用访问对象的属性箭头符号可以用来访问对象的属性。当我们实例化一个对

知识图谱检索增强的GraphRAG(基于Neo4j代码实现) 知识图谱检索增强的GraphRAG(基于Neo4j代码实现) Jun 12, 2024 am 10:32 AM

图检索增强生成(GraphRAG)正逐渐流行起来,成为传统向量搜索方法的有力补充。这种方法利用图数据库的结构化特性,将数据以节点和关系的形式组织起来,从而增强检索信息的深度和上下文关联性。图在表示和存储多样化且相互关联的信息方面具有天然优势,能够轻松捕捉不同数据类型间的复杂关系和属性。而向量数据库则处理这类结构化信息时则显得力不从心,它们更专注于处理高维向量表示的非结构化数据。在RAG应用中,结合结构化化的图数据和非结构化的文本向量搜索,可以让我们同时享受两者的优势,这也是本文将要探讨的内容。构

See all articles