基于Langbase Memory Agents將任意LLM轉(zhuǎn)為可對話式AI文檔助手 原創(chuàng)
在 2025 年當(dāng)下,大語言模型(LLM)依舊無法獲取用戶的私有數(shù)據(jù)。當(dāng)用戶向其詢問某些與個人相關(guān)的問題時,大語言模型要么憑借推測進行回應(yīng),要么給出錯誤的解答。這體現(xiàn)了大語言模型存在的固有局限性——它們僅基于公開信息進行訓(xùn)練,無法獲取用戶的私有上下文信息。
內(nèi)存代理(Memory Agent)則通過實時且安全地將用戶的私有數(shù)據(jù)與任意大語言模型進行鏈接,有效解決了上述問題。在本教程中,筆者將詳細指導(dǎo)你如何借助Langbase(一個流行的開發(fā)工具平臺,它提供了一套用于構(gòu)建 AI 應(yīng)用的工具和基礎(chǔ)設(shè)施)內(nèi)存代理,把大語言模型轉(zhuǎn)變?yōu)橐粋€能夠與你的個人文檔進行交互對話的人工智能。
目錄
1. 內(nèi)存代理是什么?
2. 使用內(nèi)存代理保護你的數(shù)據(jù)
3. 內(nèi)存代理的應(yīng)用場景
4. 前提條件
5. 步驟 1:創(chuàng)建一個目錄并初始化npm
6. 步驟 2:創(chuàng)建一個管道代理
7. 步驟 3:添加一個.env文件
8. 步驟 4:創(chuàng)建一個內(nèi)存代理
9. 步驟 5:將文檔添加到內(nèi)存代理
10. 步驟 6:生成內(nèi)存嵌入
- 內(nèi)存嵌入是什么?
- 為什么需要內(nèi)存嵌入?
- 如何生成嵌入?
11. 步驟 7:在管道代理(Pipe Agent)中集成內(nèi)存
12. 步驟 8:在Node.js中集成內(nèi)存代理
13. 步驟 9:啟動BaseAI服務(wù)器
14. 步驟 10:運行內(nèi)存代理
15. 結(jié)果
內(nèi)存代理是什么?
內(nèi)存代理是使人機交互變得有意義的關(guān)鍵,它是系統(tǒng)存儲和檢索先前信息的機制,是構(gòu)建真正智能AI代理的核心要素。
實際上,盡管大型語言模型(LLM)看似人性化,但從設(shè)計本質(zhì)上講,其內(nèi)部并未內(nèi)置的存儲機制,在設(shè)計架構(gòu)上屬于無狀態(tài)模式。鑒于現(xiàn)實世界中的任務(wù)往往具有復(fù)雜性與多樣性,若要讓大語言模型在這些實際任務(wù)中發(fā)揮有效作用,為其增添存儲能力就顯得尤為必要。而內(nèi)存代理恰恰在這一需求場景中發(fā)揮關(guān)鍵作用。
Langbase內(nèi)存代理作為一種長期存儲解決方案,其核心設(shè)計目標就在于實現(xiàn)信息獲取、處理、保留以及檢索各個環(huán)節(jié)之間的無縫銜接。借助該內(nèi)存代理,可以動態(tài)地為任意大語言模型添加私有數(shù)據(jù),這不僅使得大語言模型在交互過程中能夠?qū)崿F(xiàn)實時的上下文感知響應(yīng),還能顯著減少“幻覺生成(指的是大語言模型生成的與當(dāng)前上下文不相符或錯誤的信息)”現(xiàn)象。
這些內(nèi)存代理通過整合向量存儲、檢索增強生成(RAG)以及互聯(lián)網(wǎng)訪問功能,構(gòu)建了一個功能強大的托管上下文搜索API。借助這一API,開發(fā)人員能夠開發(fā)出更加智能、功能更為強大的人工智能應(yīng)用程序。
在檢索增強生成(RAG)的架構(gòu)體系中,當(dāng)內(nèi)存與Langbase管道代理(Pipe Agent:是Langbase框架中的一個核心概念,它本質(zhì)上是一個數(shù)據(jù)處理和流轉(zhuǎn)的管道代理)實現(xiàn)直接連接時,便形成了一個完整意義上的內(nèi)存代理。這種組合方式賦予了大語言模型獲取相關(guān)數(shù)據(jù)的能力,并使其能夠基于這些私有數(shù)據(jù)提供精確且上下文貼合的回答,從而有效克服了大語言模型在處理私有數(shù)據(jù)時面臨的諸多局限性。
需要注意的是,管道是一種無服務(wù)器的AI代理,它集成了代理內(nèi)存和工具。
以下將以圖示的方式,對整個過程進行直觀展示:
使用內(nèi)存代理保護你的數(shù)據(jù)
內(nèi)存代理高度重視數(shù)據(jù)安全,通過將私密信息進行隔離,并在本地環(huán)境或安全的環(huán)境中進行處理,以此作為保障數(shù)據(jù)安全的首要舉措。具體而言,用于創(chuàng)建內(nèi)存嵌入的數(shù)據(jù),在未進行明確配置的情況下,不會被發(fā)送至外部服務(wù)器,這種嚴格的設(shè)定從源頭上確保了敏感信息能夠得到妥善保護。
除此之外,內(nèi)存系統(tǒng)的訪問權(quán)限通過 API 密鑰和相關(guān)權(quán)限設(shè)置進行嚴格管控。只有經(jīng)過授權(quán)的操作才能訪問內(nèi)存系統(tǒng),這一措施有效防止了未經(jīng)授權(quán)的訪問行為發(fā)生。如此一來,這種精心設(shè)計的安全設(shè)置,不僅能夠顯著增強人工智能(AI)能力,更通過全方位保護用戶數(shù)據(jù),切實維護了用戶對系統(tǒng)的信任。
內(nèi)存代理的應(yīng)用場景
以下為這些內(nèi)存代理在實際中的具體應(yīng)用領(lǐng)域:
- 客戶支持:內(nèi)存代理能夠回調(diào)交互歷史記錄,以此為基礎(chǔ)提供個性化且具備上下文感知能力的支持服務(wù)。
- 文檔搜索:在處理大型數(shù)據(jù)集、手冊或者常見問題解答文檔時,內(nèi)存代理可實現(xiàn)快速且語義化的搜索功能。
- 代碼輔助:針對開發(fā)人員,內(nèi)存代理可以提供與項目特定相關(guān)的文檔資料,并基于項目歷史和代碼邏輯給出調(diào)試建議,助力開發(fā)者更高效地完成開發(fā)工作。
- 知識管理:內(nèi)存代理有助于將團隊內(nèi)部信息進行高效集中存儲,并實現(xiàn)便捷的檢索功能。團隊成員能夠快速獲取所需信息,提升團隊整體的知識流轉(zhuǎn)和工作效率。
- 教育與培訓(xùn):在教育與培訓(xùn)場景中,內(nèi)存代理可以為學(xué)生或員工提供定制化的培訓(xùn)材料,通過跟蹤學(xué)習(xí)進度,基于存儲的知識庫回答學(xué)習(xí)者提出的問題。
- 醫(yī)療保?。?/strong>在醫(yī)療領(lǐng)域,內(nèi)存代理可安全地檢索患者記錄或病史信息,為醫(yī)護人員提供準確的數(shù)據(jù)支持,輔助他們做出更精準的醫(yī)療決策。
- 協(xié)調(diào)工作流程:內(nèi)存代理能夠追蹤項目歷史記錄并結(jié)合各類工具來實現(xiàn)團隊成員之間的協(xié)調(diào)與溝通,確保項目順利推進。
- 法律合規(guī):在法律事務(wù)和合規(guī)管理方面,內(nèi)存代理可以幫助相關(guān)人員快速參考法律指南和合規(guī)標準,確保決策過程準確無誤且完全符合法律規(guī)定要求。
上述由內(nèi)存代理所賦能的眾多應(yīng)用場景,正不斷開拓新的可能性,并且逐步改變著人工通用智能(AGI)的發(fā)展格局與能力邊界。
前提條件
在著手創(chuàng)建能夠與文檔進行交互的內(nèi)存代理之前,你需要完成以下設(shè)置并準備相應(yīng)工具。
本教程將采用以下技術(shù)棧:
- BaseAI:一款用于在本地構(gòu)建AI代理的Web框架。
- Langbase:一個專門用于構(gòu)建和部署無服務(wù)器AI代理的平臺。
- OpenAI:通過該平臺獲取首選模型所需的 LLM 密鑰。
此外,你還需完成以下操作:
- 在Langbase平臺上完成注冊,以便獲取API密鑰。
- 在OpenAI平臺上進行注冊,從而生成所需模型(本演示使用的是 GPT - 4o mini)的 LLM 密鑰 。
當(dāng)上述準備工作全部完成后,我們即可正式開啟后續(xù)操作!
步驟 1:創(chuàng)建一個目錄并初始化npm
若要著手創(chuàng)建一個能夠與你的文檔實現(xiàn)交互的內(nèi)存代理,首先需要在本地計算機中創(chuàng)建一個專門的目錄,并在該目錄下安裝所有與之相關(guān)的開發(fā)依賴項。具體操作方法為:導(dǎo)航至目標目錄,然后在終端中運行相應(yīng)命令,以此完成相關(guān)設(shè)置:
mkdir my-project
npm init -y
npm install dotenv
此命令會在你的項目目錄下創(chuàng)建一個具有默認值的package.json文件。與此同時,該命令還會執(zhí)行dotenv包的安裝操作。安裝dotenv包的目的在于,使項目能夠從.env文件中順利讀取環(huán)境變量,從而為項目的運行提供必要的配置支持。
步驟 2:創(chuàng)建一個管道代理
接下來,我們著手創(chuàng)建一個管道代理。管道代理在特性上區(qū)別于其他代理,它屬于無服務(wù)器AI代理,并且配備了代理工具,具備與任意語言或框架協(xié)同運作的能力。管道代理的部署過程較為簡便,僅需借助一個API,就能將 100 多個大型語言模型與任何數(shù)據(jù)相連接,進而助力開發(fā)人員構(gòu)建各類API工作流程。
若要創(chuàng)建你的AI代理管道,請先進入項目目錄,然后運行以下命令:
npx baseai@latest pipe
在運行該命令后,你將會看到如下提示:
BaseAI is not installed but required to run. Would you like to install it? Yes/No
Name of the pipe? pipe-with-memory
Description of the pipe? Pipe attached to a memory
Status of the pipe? Public/Private
System prompt? You are a helpful AI assistant
當(dāng)你完成 AI 管道代理的名稱、描述以及狀態(tài)設(shè)置后,系統(tǒng)會自動完成所有相關(guān)配置,你的管道代理將成功創(chuàng)建在 /baseai/pipes/pipe-with-memory.ts 路徑下。
步驟 3:添加一個.env文件
完成上述操作后,需在項目根目錄中創(chuàng)建一個.env 文件,并在其中添加OpenAI和Langbase的 API 密鑰。你可從指定位置獲取你的Langbase API密鑰 。
步驟 4:創(chuàng)建一個內(nèi)存代理
接下來,我們要創(chuàng)建一個內(nèi)存,并將其附加到管道(Pipe)中,以此讓它轉(zhuǎn)變?yōu)閮?nèi)存代理。要達成這一目標,請在終端中運行以下命令:
npx baseai@latest memory
運行此命令后,將會得到以下提示:
Name of the memory? chat-with-docs-agent
Description of the pipe? FAQs docs
Do you want to create memory from the current project git repository? Yes/No
執(zhí)行上述操作之后,系統(tǒng)會自動完成所有相關(guān)設(shè)置。你便能夠訪問成功創(chuàng)建在 /baseai/memory/chat-with-docs-agent.ts 路徑下的內(nèi)存。
步驟 5:將文檔添加到內(nèi)存代理
在 /baseai/memory/chat-with-docs-agent.ts 路徑下,你會看到一個名為 documents 的文件夾。此文件夾專門用于存儲期望 AI 代理能夠訪問的文件。在本次演示過程中,我先將管道(Pipe)的常見問題頁面另存為.pdf 或.txt 格式的文件。隨后,把該文件轉(zhuǎn)換為markdown格式,并將轉(zhuǎn)換后的文件放置在 baseai/memory/chat-with-docs/documents 目錄中。
執(zhí)行這一步驟,能夠切實保證內(nèi)存代理具備處理和檢索文檔信息的能力。如此一來,AI代理在面對用戶提出的查詢時,便能夠根據(jù)你所提供的文檔內(nèi)容做出準確回答。
步驟 6:生成內(nèi)存嵌入
目前,你已成功將文檔添加至內(nèi)存。接下來的關(guān)鍵步驟是生成內(nèi)存嵌入。不過在此之前,有必要先了解一下:嵌入究竟是什么,以及為什么它們對于整個系統(tǒng)而言是不可或缺的 ?
內(nèi)存嵌入是什么?
嵌入是文檔的一種數(shù)字表現(xiàn)形式。借助這種形式,人工智能能夠理解單詞、短語以及句子之間的上下文關(guān)聯(lián)和語義關(guān)系。我們不妨把嵌入看作是一種將文檔“翻譯”成人工智能能夠處理的“語言”的方式,以便實現(xiàn)語義搜索與檢索功能。
為什么需要內(nèi)存嵌入?
若缺少嵌入這一關(guān)鍵環(huán)節(jié),AI代理便無法將用戶提出的查詢與文檔中的相關(guān)內(nèi)容進行有效匹配。而通過生成嵌入向量,實際上是在創(chuàng)建一個可供搜索的索引。這個索引對于內(nèi)存代理給出準確且高效的響應(yīng)起著至關(guān)重要的支持作用。
如何生成嵌入?
若要為你的文檔生成嵌入,請在終端中執(zhí)行以下命令:
npx baseai@latest embed -m chat-with-docs-agent
至此,你的內(nèi)存已準備就緒,可以與管道(即內(nèi)存代理)進行連接。連接完成后,你的 AI 代理便能從你提供的文檔中獲取精準的、具備上下文感知能力的響應(yīng)。
步驟 7:在管道代理(Pipe Agent)中集成內(nèi)存
接下來,你需要將此前創(chuàng)建的內(nèi)存附加到管道(Pipe)代理上,以此讓它成為一個內(nèi)存代理。要完成這一操作,請進入 /baseai/pipes/pipe-with-memory.ts 文件。以下是該文件目前的內(nèi)容展示:
import { PipeI } from '@baseai/core';
const pipePipeWithMemory = (): PipeI => ({ apiKey: process.env.LANGBASE_API_KEY!, // Replace with your API key https://langbase.com/docs/api-reference/api-keys name: 'pipe-with-memory', description: 'Pipe attached to a memory', status: 'public', model: 'openai:gpt-4o-mini', stream: true, json: false, store: true, moderate: true, top_p: 1, max_tokens: 1000, temperature: 0.7, presence_penalty: 1, frequency_penalty: 1, stop: [], tool_choice: 'auto', parallel_tool_calls: false, messages: [ { role: 'system', content: `You are a helpful AI assistant.` }], variables: [], memory: [], tools: []});
export default pipePipeWithMemory;
現(xiàn)在,需將內(nèi)存集成到管道中。具體做法是在文件頂部導(dǎo)入內(nèi)存,并將其作為內(nèi)存數(shù)組中的函數(shù)進行調(diào)用。以下是完成所有這些操作后代碼呈現(xiàn)的樣子:
import { PipeI } from '@baseai/core';
import chatWithDocsAgentMemory from '../memory/chat-with-docs-agent';
const pipePipeWithMemory = (): PipeI => ({
apiKey: process.env.LANGBASE_API_KEY!, // Replace with your API key https://langbase.com/docs/api-reference/api-keys
name: 'pipe-with-memory',
description: 'Pipe attached to a memory',
status: 'public',
model: 'openai:gpt-4o-mini',
stream: true,
json: false,
store: true,
moderate: true,
top_p: 1,
max_tokens: 1000,
temperature: 0.7,
presence_penalty: 1,
frequency_penalty: 1,
stop: [],
tool_choice: 'auto',
parallel_tool_calls: false,
messages: [
{ role: 'system', content: `You are a helpful AI assistant.` }],
variables: [],
memory: [chatWithDocsAgentMemory()],
tools: []
});
export default pipePipeWithMemory;
步驟 8:在Node.js中集成內(nèi)存代理
接下來,我們要把之前創(chuàng)建的內(nèi)存代理集成到 Node.js 項目中,目的是為所關(guān)聯(lián)的文檔構(gòu)建一個交互式命令行界面(CLI)。這個 Node.js 項目將充當(dāng)測試內(nèi)存代理以及與內(nèi)存代理進行交互的基礎(chǔ)環(huán)境(在本教程開篇部分,我們已經(jīng)通過初始化npm完成了一個 Node.js 項目的初步設(shè)置 )。
現(xiàn)在,創(chuàng)建一個 index.ts 文件:
touch index.ts
在這個TypeScript文件里,需要導(dǎo)入你此前創(chuàng)建的管道代理。后續(xù)我們會借助@baseai/core里的管道原語(pipe primitive:用于構(gòu)建和操作管道的基本元素)來運行該管道。
將以下代碼添加到 index.ts 文件中:
import 'dotenv/config';import { Pipe } from '@baseai/core';import inquirer from 'inquirer';import ora from 'ora';import chalk from 'chalk';import pipePipeWithMemory from './baseai/pipes/pipe-with-memory';
const pipe = new Pipe(pipePipeWithMemory());
async function main() {
const initialSpinner = ora('Conversation with Memory agent...').start(); try { const { completion: calculatorTool} = await pipe.run({ messages: [{ role: 'user', content: 'Hello' }], }); initialSpinner.stop(); console.log(chalk.cyan('Report Generator Agent response...')); console.log(calculatorTool); } catch (error) { initialSpinner.stop(); console.error(chalk.red('Error processing initial request:'), error); }
while (true) { const { userMsg } = await inquirer.prompt([ { type: 'input', name: 'userMsg', message: chalk.blue('Enter your query (or type "exit" to quit):'), }, ]);
if (userMsg.toLowerCase() === 'exit') { console.log(chalk.green('Goodbye!')); break; }
const spinner = ora('Processing your request...').start();
try { const { completion: reportAgentResponse } = await pipe.run({ messages: [{ role: 'user', content: userMsg }], });
spinner.stop(); console.log(chalk.cyan('Agent:')); console.log(reportAgentResponse); } catch (error) { spinner.stop(); console.error(chalk.red('Error processing your request:'), error); } }}
main();
這段代碼旨在創(chuàng)建一個交互式命令行界面(CLI),以便與 AI 代理進行聊天互動,它借助 @baseai/core 庫中的管道來處理用戶輸入。下面為你詳細介紹代碼的運行邏輯及相關(guān)操作:
- 首先,代碼需要導(dǎo)入一些必要的庫。其中,dotenv 用于環(huán)境配置,inquirer 用于獲取用戶輸入,ora 用于加載微調(diào)器,而 chalk 則用于實現(xiàn)彩色輸出。在運行代碼前,請務(wù)必在終端中使用以下命令安裝這些庫:npm install ora inquirer 。
- 接著,管道對象是基于 BaseAI 庫,利用一個名為 pipe-with-memory 的預(yù)定義內(nèi)存創(chuàng)建而成。
然后,在 main() 函數(shù)內(nèi)部:
- 當(dāng)與 AI 代理的初始對話開始時,旋轉(zhuǎn)圖標會隨即啟動,并展示 “Hello” 這條消息。
- 之后,來自 AI 的響應(yīng)將會呈現(xiàn)出來。
- 程序會進入循環(huán)運行狀態(tài),持續(xù)要求用戶輸入內(nèi)容,并將用戶的查詢發(fā)送給 AI 代理。
- 每次接收到 AI 的響應(yīng)后都會顯示出來,這一過程會不斷重復(fù),直至用戶輸入 “exit” 為止。
步驟 9:啟動BaseAI服務(wù)器
若要在本地運行內(nèi)存代理,首先需要啟動 BaseAI 服務(wù)器。請在終端中運行以下命令:
npx baseai@latest dev
步驟 10:運行內(nèi)存代理
使用以下命令運行 index.ts 文件:
npx tsx index.ts
結(jié)果
在你的終端中,系統(tǒng)會提示“輸入你的查詢”。例如,我們不妨提問:“什么是 Langbase 上的管道?” 此時,內(nèi)存代理將會給出回應(yīng),并且還會提供正確的來源或引用信息。
通過上述一系列設(shè)置,我們成功構(gòu)建了一個“Chat with Your Document”代理。該代理充分利用了大型語言模型(LLM)和 Langbase 內(nèi)存代理的強大功能,有效克服了 LLM 自身存在的局限性。它不僅能夠確保給出準確的響應(yīng),而且在處理私有數(shù)據(jù)時不會出現(xiàn)“幻覺”現(xiàn)象。
譯者介紹
劉濤,51CTO社區(qū)編輯,某大型央企系統(tǒng)上線檢測管控負責(zé)人。
原文標題:How to Use Langbase Memory Agents to Make Any LLM a Conversational AI for Your Docs
作者:??Maham Codes??
