文章展示了如何构建基于LangChain的RAG系统,通过初始化LLM和向量化模型连接Chroma数据库,创建判断检索、向量检索和生成答案三个核心节点,定义工作流程并编译为Agent。通过精心设计的prompt,让AI基于检索到的文档片段生成专业准确的回答,解决了传统检索仅返回片段无法直接使用的问题。
AI Agent 系列文章18, 后续会更新 MCP、监控等内容,最后全栈开发一个 Agent 智能体并部署上线。
上一篇 把一个 PDF 文件,拆分文本,生成向量,并存储到本地数据库 Chroma,并进行了向量检索,
但检索的结果只是一些文档片段,无法直接输出给用户。
这一篇 继续下一步:把检索的内容交给 AI ,结合 prompt 让 AI 整理之后再输出结果。
import { ChatDeepSeek } from '@langchain/deepseek' import { AlibabaTongyiEmbeddings } from '@langchain/community/embeddings/alibaba_tongyi' import { Chroma } from '@langchain/community/vectorstores/chroma' import { StateGraph, END, START } from '@langchain/langgraph' import { HumanMessage, AIMessage } from '@langchain/core/messages' import 'dotenv/config' // 初始化大语言模型 const llm = new ChatDeepSeek({ model: 'deepseek-chat', temperature: 0, apiKey: process.env.DEEPSEEK_API_KEY, }) // 初始化向量化模型 const embeddings = new AlibabaTongyiEmbeddings({ apiKey: process.env.ALIBABA_API_KEY, }) // 连接到 ChromaDB const vectorStore = await Chroma.fromExistingCollection(embeddings, { collectionName: 'goods_info_collection', host: 'localhost', port: 8000, }) // 节点 1: 判断是否需要检索 async function shouldRetrieve(state) { console.log('\n--- 判断是否需要检索 ---') // 简单逻辑:如果还没有上下文,就需要检索 const needsRetrieval = !state.context || state.context.length === 0 console.log(`需要检索: ${needsRetrieval}`) // 返回更新后的状态 return { ...state, needsRetrieval, } } // 节点 2: 从向量数据库检索相关文档 async function retrieveDocuments(state) { console.log('\n--- 从向量数据库检索文档 ---') console.log(`问题: ${state.question}`) // 使用相似度搜索检索最相关的文档,增加检索数量 const results = await vectorStore.similaritySearch(state.question, 8) // 将检索到的文档内容合并为上下文 const context = results .map((doc, i) => { console.log(`\n文档 ${i + 1}:`) // 打印文档内容的前 300 个字符作为预览 const content = doc.pageContent.substring(0, 300) console.log(content + '...') // 格式化文档内容 return `[文档 ${i + 1}]\n${doc.pageContent}` }) .join('\n\n') return { ...state, context, } } // 节点 3: 使用 LLM 生成答案 async function generateAnswer(state) { console.log('\n--- 生成答案 ---') const prompt = `请仔细分析以下的上下文信息并回答用户的问题。 上下文信息: ${state.context} 用户问题:${state.question} 请按照以下要求回答: 1. 仔细阅读所有上下文信息,寻找与问题相关的具体数据和事实 2. 如果上下文中确实没有相关信息,请明确告知用户 3. 用中文回答,保持专业和准确 4. 回答时引用相关的上下文片段编号以支持你的回答 5. 如果上下文信息不足以回答问题,请说明原因` // 调用 LLM 生成答案 const response = await llm.invoke([new HumanMessage(prompt)]) // 提取答案 const answer = response.content console.log(`\n答案预览: ${answer.substring(0, 200)}...`) // 返回更新后的状态 return { ...state, answer, messages: [ ...state.messages, new HumanMessage(state.question), new AIMessage(answer), ], } } // 条件路由函数 function routeDecision(state) { if (state.needsRetrieval) { return 'retrieve' } else { return 'generate' } } // 定义工作流,包含状态通道和节点 const workflow = new StateGraph({ // 定义通道(状态变量) channels: { // 记录对话消息,逻辑为追加,next 覆盖 prev,初始为空数组,prev表示之前的消息列表,next表示当前传入的消息列表 messages: { value: (prev, next) => next ?? prev ?? [] }, question: { value: (prev, next) => next ?? prev ?? '' }, context: { value: (prev, next) => next ?? prev ?? '' }, answer: { value: (prev, next) => next ?? prev ?? '' }, needsRetrieval: { value: (prev, next) => next ?? prev ?? true }, }, }) // 添加节点 workflow.addNode('decide', shouldRetrieve) .addNode('retrieve', retrieveDocuments) .addNode('generate', generateAnswer) // 添加边 workflow.addEdge(START, 'decide') .addConditionalEdges('decide', routeDecision, { // 条件路由, routeDecision 如果返回 'retrieve' 则走 retrieve 节点,否则走 generate 节点 retrieve: 'retrieve', generate: 'generate', }) .addEdge('retrieve', 'generate') .addEdge('generate', END) // 编译工作流,生成可执行的 Agent const agent = workflow.compile() // 主函数:执行 RAG Agent async function runRAGAgent(question) { console.log('========================================') console.log('RAG Agent 启动') console.log('========================================') const initialState = { messages: [], question, context: '', answer: '', needsRetrieval: true, } // 执行工作流 const result = await agent.invoke(initialState) console.log('\n========================================') console.log('RAG Agent 完成') console.log('========================================') console.log(`\n最终答案:\n${result.answer}`) return result } // 执行 Agent const testQuestion = "尚品衣橱品牌定位是什么?" await runRAGAgent(testQuestion)执行结果:
现在生成的结果就很清晰和精准了。
把文件追加到 copilot 的上下文附件,提问:
根据当前代码,帮我生成一个 流程图,以便让我更好的理解代码逻辑。输出 mermaid 格式。生成流程编码
flowchart TD Start([START]) Decide[判断是否需要检索<br/>shouldRetrieve] Route{needsRetrieval?} Retrieve[从向量数据库检索文档<br/>retrieveDocuments] Generate[使用LLM生成答案<br/>generateAnswer] End([END]) Start --> Decide Decide --> Route Route -- 是 --> Retrieve Route -- 否 --> Generate Retrieve --> Generate Generate --> End粘贴到 Mermaid在线编译器,生成流程图
核心代码总结:
- 初始化 llm 、 向量化模型、连接到 向量数据库
// 连接到 ChromaDB const vectorStore = await Chroma.fromExistingCollection(embeddings, { collectionName: 'goods_info_collection', host: 'localhost', port: 8000, })添加是否需要向量检索的节点
添加相似性检索节点生成 context 状态(数据)
await vectorStore.similaritySearch(state.question, 8)- 节点3 - 将检索结果整合用户的问题,喂给LLM
- 定义工作流
- 添加节点、边,编译 workflow 为 agent
- 执行agent
const result = await agent.invoke(initialState) console.log(`\n最终答案:\n${ result.answer }`)AI时代,未来的就业机会在哪里?
答案就藏在大模型的浪潮里。从ChatGPT、DeepSeek等日常工具,到自然语言处理、计算机视觉、多模态等核心领域,技术普惠化、应用垂直化与生态开源化正催生Prompt工程师、自然语言处理、计算机视觉工程师、大模型算法工程师、AI应用产品经理等AI岗位。
掌握大模型技能,就是把握高薪未来。
那么,普通人如何抓住大模型风口?
AI技术的普及对个人能力提出了新的要求,在AI时代,持续学习和适应新技术变得尤为重要。无论是企业还是个人,都需要不断更新知识体系,提升与AI协作的能力,以适应不断变化的工作环境。
因此,这里给大家整理了一份《2026最新大模型全套学习资源》,包括2026最新大模型学习路线、大模型书籍、视频教程、项目实战、最新行业报告、面试题、AI产品经理入门到精通等,带你从零基础入门到精通,快速掌握大模型技术!
由于篇幅有限,有需要的小伙伴可以扫码获取!
1. 成长路线图&学习规划
要学习一门新的技术,作为新手一定要先学习成长路线图,方向不对,努力白费。这里,我们为新手和想要进一步提升的专业人士准备了一份详细的学习成长路线图和规划。
2. 大模型经典PDF书籍
书籍和学习文档资料是学习大模型过程中必不可少的,我们精选了一系列深入探讨大模型技术的书籍和学习文档,它们由领域内的顶尖专家撰写,内容全面、深入、详尽,为你学习大模型提供坚实的理论基础。(书籍含电子版PDF)
3. 大模型视频教程
对于很多自学或者没有基础的同学来说,书籍这些纯文字类的学习教材会觉得比较晦涩难以理解,因此,我们提供了丰富的大模型视频教程,以动态、形象的方式展示技术概念,帮助你更快、更轻松地掌握核心知识。
4. 大模型项目实战
学以致用,当你的理论知识积累到一定程度,就需要通过项目实战,在实际操作中检验和巩固你所学到的知识,同时为你找工作和职业发展打下坚实的基础。
5. 大模型行业报告
行业分析主要包括对不同行业的现状、趋势、问题、机会等进行系统地调研和评估,以了解哪些行业更适合引入大模型的技术和应用,以及在哪些方面可以发挥大模型的优势。
6. 大模型面试题
面试不仅是技术的较量,更需要充分的准备。
在你已经掌握了大模型技术之后,就需要开始准备面试,我们将提供精心整理的大模型面试题库,涵盖当前面试中可能遇到的各种技术问题,让你在面试中游刃有余。
为什么大家都在学AI大模型?
随着AI技术的发展,企业对人才的需求从“单一技术”转向 “AI+行业”双背景。企业对人才的需求从“单一技术”转向 “AI+行业”双背景。金融+AI、制造+AI、医疗+AI等跨界岗位薪资涨幅达30%-50%。
同时很多人面临优化裁员,近期科技巨头英特尔裁员2万人,传统岗位不断缩减,因此转行AI势在必行!
这些资料有用吗?
这份资料由我们和鲁为民博士(北京清华大学学士和美国加州理工学院博士)共同整理,现任上海殷泊信息科技CEO,其创立的MoPaaS云平台获Forrester全球’强劲表现者’认证,服务航天科工、国家电网等1000+企业,以第一作者在IEEE Transactions发表论文50+篇,获NASA JPL火星探测系统强化学习专利等35项中美专利。本套AI大模型课程由清华大学-加州理工双料博士、吴文俊人工智能奖得主鲁为民教授领衔研发。
资料内容涵盖了从入门到进阶的各类视频教程和实战项目,无论你是小白还是有些技术基础的技术人员,这份资料都绝对能帮助你提升薪资待遇,转行大模型岗位。
大模型全套学习资料已整理打包,有需要的小伙伴可以
微信扫描下方CSDN官方认证二维码,免费领取【保证100%免费】