文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

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

2024-11-30 17:24

关注

2Prompt-Ops下的应用

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

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

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

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应用来说非常重要。下面举几个例子

法律公文和政策条款一般都非常复杂繁琐,这个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   重要组件

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 的最新技术栈:

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应用可能的形态。

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

4总结

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

参考资料:

Tutorial: ChatGPT Over Your Data

Question Answering with LangChain and Qdrant without boilerplate

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

来源:得物技术内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯