基于Langbase Memory Agents將任意LLM轉為可對話式AI文檔助手 原創(chuàng)
在 2025 年當下,大語言模型(LLM)依舊無法獲取用戶的私有數(shù)據(jù)。當用戶向其詢問某些與個人相關的問題時,大語言模型要么憑借推測進行回應,要么給出錯誤的解答。這體現(xiàn)了大語言模型存在的固有局限性——它們僅基于公開信息進行訓練,無法獲取用戶的私有上下文信息。
內(nèi)存代理(Memory Agent)則通過實時且安全地將用戶的私有數(shù)據(jù)與任意大語言模型進行鏈接,有效解決了上述問題。在本教程中,筆者將詳細指導你如何借助Langbase(一個流行的開發(fā)工具平臺,它提供了一套用于構建 AI 應用的工具和基礎設施)內(nèi)存代理,把大語言模型轉變?yōu)橐粋€能夠與你的個人文檔進行交互對話的人工智能。
目錄
1. 內(nèi)存代理是什么?
2. 使用內(nèi)存代理保護你的數(shù)據(jù)
3. 內(nèi)存代理的應用場景
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服務器
14. 步驟 10:運行內(nèi)存代理
15. 結果
內(nèi)存代理是什么?
內(nèi)存代理是使人機交互變得有意義的關鍵,它是系統(tǒng)存儲和檢索先前信息的機制,是構建真正智能AI代理的核心要素。
實際上,盡管大型語言模型(LLM)看似人性化,但從設計本質上講,其內(nèi)部并未內(nèi)置的存儲機制,在設計架構上屬于無狀態(tài)模式。鑒于現(xiàn)實世界中的任務往往具有復雜性與多樣性,若要讓大語言模型在這些實際任務中發(fā)揮有效作用,為其增添存儲能力就顯得尤為必要。而內(nèi)存代理恰恰在這一需求場景中發(fā)揮關鍵作用。
Langbase內(nèi)存代理作為一種長期存儲解決方案,其核心設計目標就在于實現(xiàn)信息獲取、處理、保留以及檢索各個環(huán)節(jié)之間的無縫銜接。借助該內(nèi)存代理,可以動態(tài)地為任意大語言模型添加私有數(shù)據(jù),這不僅使得大語言模型在交互過程中能夠實現(xiàn)實時的上下文感知響應,還能顯著減少“幻覺生成(指的是大語言模型生成的與當前上下文不相符或錯誤的信息)”現(xiàn)象。
這些內(nèi)存代理通過整合向量存儲、檢索增強生成(RAG)以及互聯(lián)網(wǎng)訪問功能,構建了一個功能強大的托管上下文搜索API。借助這一API,開發(fā)人員能夠開發(fā)出更加智能、功能更為強大的人工智能應用程序。
在檢索增強生成(RAG)的架構體系中,當內(nèi)存與Langbase管道代理(Pipe Agent:是Langbase框架中的一個核心概念,它本質上是一個數(shù)據(jù)處理和流轉的管道代理)實現(xiàn)直接連接時,便形成了一個完整意義上的內(nèi)存代理。這種組合方式賦予了大語言模型獲取相關數(shù)據(jù)的能力,并使其能夠基于這些私有數(shù)據(jù)提供精確且上下文貼合的回答,從而有效克服了大語言模型在處理私有數(shù)據(jù)時面臨的諸多局限性。
需要注意的是,管道是一種無服務器的AI代理,它集成了代理內(nèi)存和工具。
以下將以圖示的方式,對整個過程進行直觀展示:

使用內(nèi)存代理保護你的數(shù)據(jù)
內(nèi)存代理高度重視數(shù)據(jù)安全,通過將私密信息進行隔離,并在本地環(huán)境或安全的環(huán)境中進行處理,以此作為保障數(shù)據(jù)安全的首要舉措。具體而言,用于創(chuàng)建內(nèi)存嵌入的數(shù)據(jù),在未進行明確配置的情況下,不會被發(fā)送至外部服務器,這種嚴格的設定從源頭上確保了敏感信息能夠得到妥善保護。
除此之外,內(nèi)存系統(tǒng)的訪問權限通過 API 密鑰和相關權限設置進行嚴格管控。只有經(jīng)過授權的操作才能訪問內(nèi)存系統(tǒng),這一措施有效防止了未經(jīng)授權的訪問行為發(fā)生。如此一來,這種精心設計的安全設置,不僅能夠顯著增強人工智能(AI)能力,更通過全方位保護用戶數(shù)據(jù),切實維護了用戶對系統(tǒng)的信任。
內(nèi)存代理的應用場景
以下為這些內(nèi)存代理在實際中的具體應用領域:
- 客戶支持:內(nèi)存代理能夠回調(diào)交互歷史記錄,以此為基礎提供個性化且具備上下文感知能力的支持服務。
 - 文檔搜索:在處理大型數(shù)據(jù)集、手冊或者常見問題解答文檔時,內(nèi)存代理可實現(xiàn)快速且語義化的搜索功能。
 - 代碼輔助:針對開發(fā)人員,內(nèi)存代理可以提供與項目特定相關的文檔資料,并基于項目歷史和代碼邏輯給出調(diào)試建議,助力開發(fā)者更高效地完成開發(fā)工作。
 - 知識管理:內(nèi)存代理有助于將團隊內(nèi)部信息進行高效集中存儲,并實現(xiàn)便捷的檢索功能。團隊成員能夠快速獲取所需信息,提升團隊整體的知識流轉和工作效率。
 - 教育與培訓:在教育與培訓場景中,內(nèi)存代理可以為學生或員工提供定制化的培訓材料,通過跟蹤學習進度,基于存儲的知識庫回答學習者提出的問題。
 - 醫(yī)療保健:在醫(yī)療領域,內(nèi)存代理可安全地檢索患者記錄或病史信息,為醫(yī)護人員提供準確的數(shù)據(jù)支持,輔助他們做出更精準的醫(yī)療決策。
 - 協(xié)調(diào)工作流程:內(nèi)存代理能夠追蹤項目歷史記錄并結合各類工具來實現(xiàn)團隊成員之間的協(xié)調(diào)與溝通,確保項目順利推進。
 - 法律合規(guī):在法律事務和合規(guī)管理方面,內(nèi)存代理可以幫助相關人員快速參考法律指南和合規(guī)標準,確保決策過程準確無誤且完全符合法律規(guī)定要求。
 
上述由內(nèi)存代理所賦能的眾多應用場景,正不斷開拓新的可能性,并且逐步改變著人工通用智能(AGI)的發(fā)展格局與能力邊界。
前提條件
在著手創(chuàng)建能夠與文檔進行交互的內(nèi)存代理之前,你需要完成以下設置并準備相應工具。
本教程將采用以下技術棧:
- BaseAI:一款用于在本地構建AI代理的Web框架。
 - Langbase:一個專門用于構建和部署無服務器AI代理的平臺。
 - OpenAI:通過該平臺獲取首選模型所需的 LLM 密鑰。
 
此外,你還需完成以下操作:
- 在Langbase平臺上完成注冊,以便獲取API密鑰。
 - 在OpenAI平臺上進行注冊,從而生成所需模型(本演示使用的是 GPT - 4o mini)的 LLM 密鑰 。
 
當上述準備工作全部完成后,我們即可正式開啟后續(xù)操作!
步驟 1:創(chuàng)建一個目錄并初始化npm
若要著手創(chuàng)建一個能夠與你的文檔實現(xiàn)交互的內(nèi)存代理,首先需要在本地計算機中創(chuàng)建一個專門的目錄,并在該目錄下安裝所有與之相關的開發(fā)依賴項。具體操作方法為:導航至目標目錄,然后在終端中運行相應命令,以此完成相關設置:
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ū)別于其他代理,它屬于無服務器AI代理,并且配備了代理工具,具備與任意語言或框架協(xié)同運作的能力。管道代理的部署過程較為簡便,僅需借助一個API,就能將 100 多個大型語言模型與任何數(shù)據(jù)相連接,進而助力開發(fā)人員構建各類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當你完成 AI 管道代理的名稱、描述以及狀態(tài)設置后,系統(tǒng)會自動完成所有相關配置,你的管道代理將成功創(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)中,以此讓它轉變?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)會自動完成所有相關設置。你便能夠訪問成功創(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 格式的文件。隨后,把該文件轉換為markdown格式,并將轉換后的文件放置在 baseai/memory/chat-with-docs/documents 目錄中。
執(zhí)行這一步驟,能夠切實保證內(nèi)存代理具備處理和檢索文檔信息的能力。如此一來,AI代理在面對用戶提出的查詢時,便能夠根據(jù)你所提供的文檔內(nèi)容做出準確回答。
步驟 6:生成內(nèi)存嵌入
目前,你已成功將文檔添加至內(nèi)存。接下來的關鍵步驟是生成內(nèi)存嵌入。不過在此之前,有必要先了解一下:嵌入究竟是什么,以及為什么它們對于整個系統(tǒng)而言是不可或缺的 ?
內(nèi)存嵌入是什么?
嵌入是文檔的一種數(shù)字表現(xiàn)形式。借助這種形式,人工智能能夠理解單詞、短語以及句子之間的上下文關聯(lián)和語義關系。我們不妨把嵌入看作是一種將文檔“翻譯”成人工智能能夠處理的“語言”的方式,以便實現(xiàn)語義搜索與檢索功能。
為什么需要內(nèi)存嵌入?
若缺少嵌入這一關鍵環(huán)節(jié),AI代理便無法將用戶提出的查詢與文檔中的相關內(nèi)容進行有效匹配。而通過生成嵌入向量,實際上是在創(chuàng)建一個可供搜索的索引。這個索引對于內(nèi)存代理給出準確且高效的響應起著至關重要的支持作用。
如何生成嵌入?
若要為你的文檔生成嵌入,請在終端中執(zhí)行以下命令:
npx baseai@latest embed -m chat-with-docs-agent至此,你的內(nèi)存已準備就緒,可以與管道(即內(nèi)存代理)進行連接。連接完成后,你的 AI 代理便能從你提供的文檔中獲取精準的、具備上下文感知能力的響應。
步驟 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)存集成到管道中。具體做法是在文件頂部導入內(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 項目中,目的是為所關聯(lián)的文檔構建一個交互式命令行界面(CLI)。這個 Node.js 項目將充當測試內(nèi)存代理以及與內(nèi)存代理進行交互的基礎環(huán)境(在本教程開篇部分,我們已經(jīng)通過初始化npm完成了一個 Node.js 項目的初步設置 )。
現(xiàn)在,創(chuàng)建一個 index.ts 文件:
touch index.ts在這個TypeScript文件里,需要導入你此前創(chuàng)建的管道代理。后續(xù)我們會借助@baseai/core里的管道原語(pipe primitive:用于構建和操作管道的基本元素)來運行該管道。
將以下代碼添加到 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 庫中的管道來處理用戶輸入。下面為你詳細介紹代碼的運行邏輯及相關操作:
- 首先,代碼需要導入一些必要的庫。其中,dotenv 用于環(huán)境配置,inquirer 用于獲取用戶輸入,ora 用于加載微調(diào)器,而 chalk 則用于實現(xiàn)彩色輸出。在運行代碼前,請務必在終端中使用以下命令安裝這些庫:npm install ora inquirer 。
 - 接著,管道對象是基于 BaseAI 庫,利用一個名為 pipe-with-memory 的預定義內(nèi)存創(chuàng)建而成。
 
然后,在 main() 函數(shù)內(nèi)部:
- 當與 AI 代理的初始對話開始時,旋轉圖標會隨即啟動,并展示 “Hello” 這條消息。
 - 之后,來自 AI 的響應將會呈現(xiàn)出來。
 - 程序會進入循環(huán)運行狀態(tài),持續(xù)要求用戶輸入內(nèi)容,并將用戶的查詢發(fā)送給 AI 代理。
 - 每次接收到 AI 的響應后都會顯示出來,這一過程會不斷重復,直至用戶輸入 “exit” 為止。
 
步驟 9:啟動BaseAI服務器
若要在本地運行內(nèi)存代理,首先需要啟動 BaseAI 服務器。請在終端中運行以下命令:
npx baseai@latest dev步驟 10:運行內(nèi)存代理
使用以下命令運行 index.ts 文件:
npx tsx index.ts結果
在你的終端中,系統(tǒng)會提示“輸入你的查詢”。例如,我們不妨提問:“什么是 Langbase 上的管道?” 此時,內(nèi)存代理將會給出回應,并且還會提供正確的來源或引用信息。
通過上述一系列設置,我們成功構建了一個“Chat with Your Document”代理。該代理充分利用了大型語言模型(LLM)和 Langbase 內(nèi)存代理的強大功能,有效克服了 LLM 自身存在的局限性。它不僅能夠確保給出準確的響應,而且在處理私有數(shù)據(jù)時不會出現(xiàn)“幻覺”現(xiàn)象。
譯者介紹
劉濤,51CTO社區(qū)編輯,某大型央企系統(tǒng)上線檢測管控負責人。
原文標題:How to Use Langbase Memory Agents to Make Any LLM a Conversational AI for Your Docs
作者:??Maham Codes??


















