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 賽季場均防守得分是多少?與他們上賽季的平均水平相比,百分比變化如何?」
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中文網其他相關文章!

熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

Video Face Swap
使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

熱工具

記事本++7.3.1
好用且免費的程式碼編輯器

SublimeText3漢化版
中文版,非常好用

禪工作室 13.0.1
強大的PHP整合開發環境

Dreamweaver CS6
視覺化網頁開發工具

SublimeText3 Mac版
神級程式碼編輯軟體(SublimeText3)

DALL-E 3 於 2023 年 9 月正式推出,是比其前身大幅改進的車型。它被認為是迄今為止最好的人工智慧圖像生成器之一,能夠創建具有複雜細節的圖像。然而,在推出時,它不包括

譯者|布加迪審校|重樓本文介紹如何使用GroqLPU推理引擎在JanAI和VSCode中產生超快速反應。每個人都致力於建立更好的大語言模型(LLM),例如Groq專注於AI的基礎設施方面。這些大模型的快速響應是確保這些大模型更快捷響應的關鍵。本教學將介紹GroqLPU解析引擎以及如何在筆記型電腦上使用API和JanAI本地存取它。本文也將把它整合到VSCode中,以幫助我們產生程式碼、重構程式碼、輸入文件並產生測試單元。本文將免費創建我們自己的人工智慧程式設計助理。 GroqLPU推理引擎簡介Groq

LeanCopilot,讓陶哲軒等眾多數學家讚不絕口的這個形式化數學工具,又有超強進化了?就在剛剛,加州理工學院教授AnimaAnandkumar宣布,團隊發布了LeanCopilot論文的擴展版本,更新了程式碼庫。圖片論文地址:https://arxiv.org/pdf/2404.12534.pdf最新實驗表明,這個Copilot工具,可以自動化80%以上的數學證明步驟了!這個紀錄,比以前的基線aesop還要好2.3倍。並且,和以前一樣,它在MIT許可下是開源的。圖片他是一位華人小哥宋沛洋,他是

Plaud Note AI 錄音機(亞馬遜上有售,售價 159 美元)背後的公司 Plaud 宣布推出一款新產品。該設備被稱為 NotePin,被描述為人工智慧記憶膠囊,與 Humane AI Pin 一樣,它是可穿戴的。 NotePin 是

想了解更多AIGC的內容,請造訪:51CTOAI.x社群https://www.51cto.com/aigc/譯者|晶顏審校|重樓不同於網路上隨處可見的傳統問題庫,這些問題需要跳脫常規思維。大語言模型(LLM)在數據科學、生成式人工智慧(GenAI)和人工智慧領域越來越重要。這些複雜的演算法提升了人類的技能,並在許多產業中推動了效率和創新性的提升,成為企業保持競爭力的關鍵。 LLM的應用範圍非常廣泛,它可以用於自然語言處理、文字生成、語音辨識和推薦系統等領域。透過學習大量的數據,LLM能夠產生文本

圖檢索增強生成(GraphRAG)正逐漸流行起來,成為傳統向量搜尋方法的強大補充。這種方法利用圖資料庫的結構化特性,將資料以節點和關係的形式組織起來,從而增強檢索資訊的深度和上下文關聯性。圖在表示和儲存多樣化且相互關聯的資訊方面具有天然優勢,能夠輕鬆捕捉不同資料類型間的複雜關係和屬性。而向量資料庫則處理這類結構化資訊時則顯得力不從心,它們更專注於處理高維度向量表示的非結構化資料。在RAG應用中,結合結構化的圖資料和非結構化的文字向量搜索,可以讓我們同時享受兩者的優勢,這也是本文將要探討的內容。構

從主畫面中刪除了重要內容並試圖將其取回?您可以透過多種方式將應用程式圖示放回螢幕。我們已經討論了您可以遵循的所有方法,並將應用程式圖示放回主畫面如何在iPhone中撤消從主畫面中刪除正如我們之前提到的,有幾種方法可以在iPhone上恢復此變更。方法1–替換應用程式庫中的應用程式圖示您可以直接從應用程式庫將應用程式圖示放置在主畫面上。步驟1–橫向滑動以尋找應用程式庫中的所有應用程式。步驟2–找到您先前刪除的應用程式圖示。步驟3–只需將應用程式圖示從主庫拖曳到主畫面上的正確位置即可。這是將應用程式圖

PHP中箭頭符號的作用及實踐應用在PHP中,箭頭符號(->)通常用於存取物件的屬性和方法。物件是PHP中物件導向程式設計(OOP)的基本概念之一,在實際開發中,箭頭符號在操作物件時發揮重要作用。本文將介紹箭頭符號的作用以及實踐應用,並提供具體的程式碼範例來幫助讀者更好地理解。一、箭頭符號的作用存取物件的屬性箭頭符號可以用來存取物件的屬性。當我們實例化一個對
