还能用的wap网站简单的企业网站制作
2026/4/18 11:27:53 网站建设 项目流程
还能用的wap网站,简单的企业网站制作,南昌优易科 网站建设,微信商城小程序官网GLM-4.7-Flash代码实例#xff1a;向量数据库#xff08;Chroma#xff09;与RAG检索增强集成 1. 为什么需要RAG#xff1f;——让大模型“有据可查” 你有没有遇到过这种情况#xff1a;问GLM-4.7-Flash一个专业领域的问题#xff0c;它回答得头头是道#xff0c;但翻…GLM-4.7-Flash代码实例向量数据库Chroma与RAG检索增强集成1. 为什么需要RAG——让大模型“有据可查”你有没有遇到过这种情况问GLM-4.7-Flash一个专业领域的问题它回答得头头是道但翻查资料却发现关键数据或术语其实是错的这不是模型“撒谎”而是它在凭记忆作答——而记忆可能过时、模糊甚至混杂了训练数据里的噪声。RAGRetrieval-Augmented Generation检索增强生成就是来解决这个问题的。它不靠模型硬记而是像一位随时查阅资料库的专家你提问时它先快速从你自己的文档库里找出最相关的几段内容再把这些“证据”连同问题一起交给GLM-4.7-Flash去理解、整合、生成答案。这带来的变化很实在答案更准确不再凭空编造所有结论都有原文支撑知识可更新不用重新训练模型只要更新你的文档库答案就自动变新领域更专精把公司产品手册、内部技术规范、客户合同等喂给它它立刻变成你团队的“活百科”本文不讲抽象概念直接带你用50行以内可运行的Python代码把GLM-4.7-Flash和轻量级向量数据库Chroma连起来跑通一个真实可用的RAG流程——从准备文档、切片嵌入到提问获取带引用的答案。全程无需GPU笔记本就能跑通。2. 环境准备三步完成本地部署别被“向量数据库”“嵌入模型”这些词吓住。我们用的是最轻量、最易上手的组合Chroma纯Python无服务依赖 sentence-transformers免费开源嵌入模型 GLM-4.7-Flash本地API你已有的镜像。整个过程就像搭积木每一步都清晰可见。2.1 安装必要依赖打开终端执行以下命令已预装vLLM和Web界面的镜像中只需补全RAG相关组件# 进入工作目录 cd /root/workspace # 安装Chroma和嵌入模型工具 pip install chromadb sentence-transformers python-dotenv # 验证GLM-4.7-Flash服务是否就绪返回200即正常 curl -s http://127.0.0.1:8000/health | head -c 50小提示Chroma默认使用内存存储适合快速验证。如需持久化保存文档库只需加一行persist_directory./chroma_db即可无需额外配置数据库服务。2.2 准备你的第一份“知识源”RAG的效果高度依赖输入文档的质量。我们用一份真实的AI开发文档片段作为示例——你可以随时替换成自己的PDF、Word或网页文本。# 创建一个模拟的“技术文档”内容实际使用时替换为你的文件 docs [ GLM-4.7-Flash采用MoE混合专家架构总参数量30B在中文任务上表现优异。, 该模型支持最大4096 tokens上下文长度适合处理长篇技术文档摘要。, vLLM推理引擎已深度优化4卡RTX 4090 D下显存利用率达85%响应延迟低于800ms。, Web界面默认运行在7860端口状态栏绿色表示模型已就绪可立即对话。, OpenAI兼容API地址为http://127.0.0.1:8000/v1/chat/completions支持流式输出。 ]这段代码里没有魔法只是五句你镜像说明文档里的原话。RAG的强大之处正在于此它不挑食你给什么它就学什么。3. 构建你的专属知识库从文档到向量传统数据库存的是关键词Chroma存的是“语义”。比如你搜索“模型多快”它不会只找含“快”字的句子而是理解“响应延迟低于800ms”和“推理速度快”是同一类信息。这个转换过程叫“嵌入Embedding”我们用开源模型all-MiniLM-L6-v2——它小89MB、快、对中文友好。3.1 文档切片与向量化from langchain_community.vectorstores import Chroma from langchain_community.embeddings import HuggingFaceEmbeddings from langchain_text_splitters import CharacterTextSplitter # 初始化嵌入模型自动下载首次运行稍慢 embeddings HuggingFaceEmbeddings( model_namesentence-transformers/all-MiniLM-L6-v2 ) # 将文档按标点切分成更小的语义块避免单条过长影响检索精度 text_splitter CharacterTextSplitter( separator. , # 按句号空格切分 chunk_size100, # 每块约100字符 chunk_overlap20 # 相邻块重叠20字符保证语义连贯 ) texts text_splitter.create_documents(docs) # 构建Chroma向量库数据存在内存关机即清空 vectorstore Chroma.from_documents( documentstexts, embeddingembeddings, collection_nameglm47_flash_docs )运行这段代码后你的5句话就被拆成8个语义块并各自转换成一串400维的数字向量——这就是Chroma能“读懂”它们的方式。整个过程在CPU上2秒内完成无需GPU。3.2 验证检索效果看看它到底“懂”什么别急着接大模型先单独测试检索模块是否靠谱# 搜索“模型速度怎么样” results vectorstore.similarity_search(模型速度怎么样, k2) for i, doc in enumerate(results): print(f匹配度#{i1}: {doc.page_content})你会看到类似这样的输出匹配度#1: vLLM推理引擎已深度优化4卡RTX 4090 D下显存利用率达85%响应延迟低于800ms。 匹配度#2: GLM-4.7-Flash采用MoE混合专家架构总参数量30B在中文任务上表现优异。注意第二条没提“速度”但因为“MoE架构”和“30B参数”常与高性能关联Chroma依然把它列为次优结果——这正是语义检索的智能所在。4. RAG流水线实战三步串联生成带依据的答案现在把检索Retrieve和生成Generate真正串起来。核心逻辑就三行用户提问 → 2. Chroma找出最相关的1-3个文档块 → 3. 把这些块原始问题一起发给GLM-4.7-Flash生成答案4.1 构建RAG提示模板大模型需要明确指令才知道如何利用检索结果。我们设计一个简洁有效的提示词def build_rag_prompt(query: str, context_docs: list) - str: context_str \n\n.join([f参考信息{i1}{doc.page_content} for i, doc in enumerate(context_docs)]) return f你是一个严谨的技术助手所有回答必须严格基于提供的参考信息。 如果参考信息中未提及明确回答“根据提供的资料无法确定”。 参考信息 {context_str} 用户问题{query} 请用中文回答答案控制在100字以内不要添加额外解释。这个模板的关键在于强约束“必须严格基于”“未提及则明确说明”杜绝幻觉结构化输入用“参考信息1/2/3”清晰分隔避免模型混淆结果导向限定字数确保答案精炼不拖泥带水4.2 调用GLM-4.7-Flash API完成生成import requests import json def rag_query(query: str): # 步骤1检索相关文档 relevant_docs vectorstore.similarity_search(query, k2) # 步骤2构建RAG提示 prompt build_rag_prompt(query, relevant_docs) # 步骤3调用本地GLM-4.7-Flash API response requests.post( http://127.0.0.1:8000/v1/chat/completions, json{ model: /root/.cache/huggingface/ZhipuAI/GLM-4.7-Flash, messages: [{role: user, content: prompt}], temperature: 0.1, # 降低随机性答案更稳定 max_tokens: 256, stream: False } ) # 解析返回结果 result response.json() answer result[choices][0][message][content].strip() # 打印答案和所用依据调试用 print( 检索依据) for i, doc in enumerate(relevant_docs): print(f {i1}. {doc.page_content[:50]}...) print(f\n 最终答案{answer}) return answer # 测试 rag_query(GLM-4.7-Flash的上下文长度是多少)运行后你会得到类似这样的结果检索依据 1. 该模型支持最大4096 tokens上下文长度适合处理长篇技术文档摘要... 2. GLM-4.7-Flash采用MoE混合专家架构总参数量30B... 最终答案GLM-4.7-Flash支持最大4096 tokens上下文长度。看答案精准对应第一条依据且没有添加任何额外信息——这才是RAG该有的样子。5. 进阶技巧让RAG更稳、更快、更准上面的代码已能工作但真实场景中还需几处关键优化。这些不是“炫技”而是工程落地的必备经验。5.1 处理长文档PDF/Word一键导入你不可能手动复制粘贴上百页PDF。用pymupdffitz和python-docx两行代码搞定# 读取PDF需先pip install PyMuPDF import fitz doc fitz.open(your_manual.pdf) pdf_text for page in doc: pdf_text page.get_text() # 读取Word需先pip install python-docx from docx import Document doc Document(your_spec.docx) word_text \n.join([p.text for p in doc.paragraphs])然后把pdf_text或word_text传给前面的text_splitter.create_documents()即可。实测一份50页PDF切片嵌入全程不到20秒。5.2 提升检索精度关键词语义双路召回纯语义检索有时会漏掉精确匹配。加入关键词过滤效果立竿见影# 在similarity_search后增加关键词粗筛 def hybrid_search(query: str, k3): # 先用语义检索初选 candidates vectorstore.similarity_search(query, kk*2) # 再用关键词筛选简单版检查是否含query中的核心词 core_words [w for w in query.split() if len(w) 2] filtered [doc for doc in candidates if any(word in doc.page_content for word in core_words)] return filtered[:k] or candidates[:k] # 退回到纯语义结果5.3 防止“一本正经胡说”答案溯源与置信度用户有权知道答案来自哪。我们在最终输出中自动标注依据编号# 修改build_rag_prompt让模型在答案末尾注明依据 return f...同上... 请用中文回答答案控制在100字以内。若答案来自参考信息1请在句末加[1]来自参考信息2加[2]若综合两者加[1][2]。 # 示例输出GLM-4.7-Flash支持最大4096 tokens上下文长度。[1]这不仅是透明化更是责任追溯——当答案出错时你能立刻定位到是文档本身有误还是检索环节出了偏差。6. 总结RAG不是功能而是工作方式的升级回顾整个过程你其实只做了三件事准备文档、切片入库、写几行胶水代码。但带来的改变是质的对开发者不再需要微调大模型用现有镜像自己数据30分钟上线一个垂直领域问答机器人对业务方知识更新零成本销售手册改版后客服机器人答案自动同步无需等待AI团队排期对模型本身GLM-4.7-Flash从“全能但偶尔出错的学霸”变成了“专注且言之有据的专家”RAG的价值从来不在技术多炫酷而在于它把大模型从“黑盒生成器”变成了“可验证、可审计、可迭代”的生产力工具。你今天跑通的这50行代码就是撬动这个转变的第一根杠杆。下一步你可以尝试把Chroma的persist_directory指向一个固定路径让知识库永久保存用Gradio快速封装一个Web界面让非技术人员也能提问将API接入企业微信/钉钉让RAG成为团队日常协作的一部分真正的智能不在于模型多大而在于它能否无缝融入你的工作流——而这一切已经开始了。获取更多AI镜像想探索更多AI镜像和应用场景访问 CSDN星图镜像广场提供丰富的预置镜像覆盖大模型推理、图像生成、视频生成、模型微调等多个领域支持一键部署。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询