网站建设用户需求分析秘塔猫ai写作官网

张小明 2026/1/7 20:21:20
网站建设用户需求分析,秘塔猫ai写作官网,网站广告联盟怎么做的,自助商城网站建设目录 整体架构#xff08;检索增强生成 — RAG#xff09; 准备工作与依赖 文档入库#xff08;生成 embeddings 并存入 FAISS#xff09;—— ingest.py 后端#xff08;FastAPI#xff09;#xff1a;查询路由 检索 调用 OpenAI Responses —— app.py 示例运行…目录整体架构检索增强生成 — RAG准备工作与依赖文档入库生成 embeddings 并存入 FAISS——ingest.py后端FastAPI查询路由 检索 调用 OpenAI Responses ——app.py示例运行 测试调优建议、成本/安全注意、常见问题1. 整体架构RAG — Retrieval-Augmented Generation我们用检索增强生成(RAG)离线把知识文档、FAQ、代码片段等拆分成段落并用 OpenAI Embeddings 转成向量把向量保存到本地向量库示例用 FAISS。用户问题到后端 → 先用同样的 embedding 将问题向量化 → 在向量库里检索 top-k 相关段落 → 把这些相关上下文拼接进 prompt或 input发送给 OpenAI Responses或 Chat Completions。优点回答能基于你自己的知识库且更可控、不容易 hallucinate同时要在 prompt 里用“source”策略减少错误。2. 准备工作与依赖示例用 Python FastAPI FAISS OpenAI 官方 Python SDK示例基于官方 quickstart。你需要先在 OpenAI 控制台创建 API Key 并导出环境变量或用 .env 存。官方文档说明了如何创建与使用 API Key。依赖示例python 3.10 pip install openai faiss-cpu fastapi uvicorn python-dotenv tiktoken aiofiles # 若想用更方便的文本分段工具可加: pip install nltk sentencepiece注意示例使用from openai import OpenAI的新式 SDK 客户端若你用旧版openai包openai.ChatCompletion.create请参考官方迁移说明。OpenAI 平台1在项目根目录建立.envOPENAI_API_KEYsk-... EMBED_MODELtext-embedding-3-small GEN_MODELgpt-5.2 FAISS_INDEX_PATH./data/faiss_index.bin DOCS_DIR./docs TOP_K4 MAX_CONTEXT_TOKENS20003. 文档入库脚本ingest.py把文档拆段 - 生成 embeddings - 存 FAISS下面脚本做三件事读取docs/下的文本文件、按段落分割、用 OpenAI embeddings 生成向量并保存到 FAISS并把元数据文本、来源保存在并行 JSON 文件里便于后续返回来源。# ingest.py import os, json, glob from openai import OpenAI import numpy as np import faiss from dotenv import load_dotenv load_dotenv() client OpenAI(api_keyos.getenv(OPENAI_API_KEY)) EMBED_MODEL os.getenv(EMBED_MODEL,text-embedding-3-small) DOCS_DIR os.getenv(DOCS_DIR,./docs) INDEX_PATH os.getenv(FAISS_INDEX_PATH,./data/faiss_index.bin) META_PATH ./data/metadata.json def chunk_text(text, max_chars1000): # 简单按段落切分可换更复杂的 chunker根据句子边界 / token parts [] for para in text.split(\n\n): para para.strip() if not para: continue if len(para) max_chars: parts.append(para) else: # 强制切分 for i in range(0, len(para), max_chars): parts.append(para[i:imax_chars]) return parts def collect_docs(): files glob.glob(os.path.join(DOCS_DIR, **/*.txt), recursiveTrue) docs [] for f in files: with open(f, r, encodingutf-8) as fh: text fh.read() chunks chunk_text(text) for i,ch in enumerate(chunks): docs.append({ id: f{os.path.basename(f)}_chunk{i}, source: f, text: ch }) return docs def embed_texts(texts): # texts: list[str] resp client.embeddings.create(modelEMBED_MODEL, inputtexts) # 返回 embeddings 列表 embeddings [e.embedding for e in resp.data] return embeddings def build_faiss(docs, embeddings, dim): xb np.array(embeddings).astype(float32) index faiss.IndexFlatIP(dim) # 余弦相似度 (先 normalize) faiss.normalize_L2(xb) index.add(xb) faiss.write_index(index, INDEX_PATH) # 保存 metadata meta {i: {id: docs[i][id], source: docs[i][source], text: docs[i][text]} for i in range(len(docs))} os.makedirs(os.path.dirname(META_PATH), exist_okTrue) with open(META_PATH, w, encodingutf-8) as f: json.dump(meta, f, ensure_asciiFalse, indent2) print(fSaved index to {INDEX_PATH}, metadata to {META_PATH}) def main(): docs collect_docs() texts [d[text] for d in docs] batch 64 embeddings [] for i in range(0, len(texts), batch): slice_texts texts[i:ibatch] embs embed_texts(slice_texts) embeddings.extend(embs) print(fembedded {ilen(slice_texts)}/{len(texts)}) dim len(embeddings[0]) build_faiss(docs, embeddings, dim) if __name__ __main__: main()说明与来源上面用法参考官方 Embeddings 文档与 Web-QA 教程示例流程先嵌入再检索。4. 后端实现app.pyFastAPI查询 → 检索 top-k → 拼接上下文 → 调用 OpenAI Responses注意这里用 Responses API官方推荐给新项目把生成 prompt 的上下文直接作为input传入。你也可以改为 chat 风格 messages看你用的 SDK 版本。OpenAI 平台1# app.py import os, json from fastapi import FastAPI, HTTPException from pydantic import BaseModel from openai import OpenAI import faiss, numpy as np from dotenv import load_dotenv load_dotenv() app FastAPI() client OpenAI(api_keyos.getenv(OPENAI_API_KEY)) GEN_MODEL os.getenv(GEN_MODEL,gpt-5.2) EMBED_MODEL os.getenv(EMBED_MODEL,text-embedding-3-small) INDEX_PATH os.getenv(FAISS_INDEX_PATH,./data/faiss_index.bin) META_PATH ./data/metadata.json TOP_K int(os.getenv(TOP_K,4)) MAX_CONTEXT_TOKENS int(os.getenv(MAX_CONTEXT_TOKENS,2000)) # 加载 index 与 metadata if not os.path.exists(INDEX_PATH) or not os.path.exists(META_PATH): raise RuntimeError(请先运行 ingest.py 生成向量索引与 metadata) index faiss.read_index(INDEX_PATH) with open(META_PATH, r, encodingutf-8) as f: metadata json.load(f) def embed_query(q): resp client.embeddings.create(modelEMBED_MODEL, inputq) return np.array(resp.data[0].embedding, dtypefloat32) def search_top_k(query_embedding, kTOP_K): # faiss.IndexFlatIP 需要先 normalize q query_embedding.reshape(1, -1) faiss.normalize_L2(q) D, I index.search(q, k) hits [] for score, idx in zip(D[0], I[0]): if idx -1: continue meta metadata[str(idx)] hits.append({score: float(score), id: meta[id], source: meta[source], text: meta[text]}) return hits def build_prompt(question, hits): # 把 top-k 文本拼成上下文截断以满足 token 限制 context_parts [] token_count 0 for h in hits: context_parts.append(f来源: {h[source]}\n内容:\n{h[text]}\n---) context \n.join(context_parts) prompt f你是一个知识型问答助手。请基于下列提供的 “来源内容” 回答用户的问题。 如果来源无法支持问题的具体答案请诚实说明并尽可能给出基于常识的推断标注为推断。 不要编造不在来源中的事实。 来源内容 {context} 用户问题 {question} 请给出简明直接的答案并在答案后列出引用到的来源按文件名或路径。 return prompt class QueryIn(BaseModel): question: str app.post(/query) async def query(qin: QueryIn): q qin.question.strip() if not q: raise HTTPException(status_code400, detail问题不能为空) q_emb embed_query(q) hits search_top_k(q_emb, TOP_K) prompt build_prompt(q, hits) # 调用 Responses API resp client.responses.create( modelGEN_MODEL, inputprompt, # 可加参数控制长度/温度 max_output_tokens800, temperature0.0 ) # 官方 Responses 返回结构中输出文本可从 resp.output 或 resp.output_text 获取取决 SDK 版本 answer getattr(resp, output_text, None) or .join([o.get(content, ) for o in resp.output]) if hasattr(resp, output) else str(resp) return {answer: answer, sources: hits}说明与要点检索使用 FAISS 的内积IP normalize等同余弦相似度。FAISS 配置与用法来源广泛示例简洁。在build_prompt中把检索到的段落以“来源 内容”风格传入明确要求模型“不要捏造、引用来源”。这是减少 hallucination 的常见做法RAG 实践。可进一步在 prompt 中要求模型把答案分成“答复 引用”两部分。OpenAI 平台temperature0.0更偏确定性适合知识型问答。可根据需求调整。Responses API 的字段结构可能随 SDK/version 有微差异示例使用通用访问方式参考官方 quickstart。OpenAI 平台5. 示例运行 测试把你的知识文档放到docs/支持.txt。运行入库python ingest.py # 会在 ./data/ 生成 faiss_index.bin 和 metadata.json启动后端uvicorn app:app --reload --port 8000测试curlcurl -X POST http://127.0.0.1:8000/query -H Content-Type: application/json \ -d {question:XXX 你的测试问题}6. 调优建议、成本与安全注意调优建议向量切分策略短段200–800 字符通常效果好确保不把重要上下文切断。可以用 sentence tokenizer 进行智能切分。Top-k 与 prompt 长度k 越大上下文越多但 token 也越多你可以把检索到的段落再做简单过滤基于相似度阈值或摘要后再传给生成模型。官方 Web-QA 教程也提到类似策略。使用检索结果做“tool”或“function call”结构进阶当需要从多个来源调用外部工具时可考虑 agent/函数调用框架Agents但复杂度更高。成本 token 管理Embeddings 与生成均会产生成本。embedding 逐段做批处理以节省时间与 cost。使用 Responses API 时注意max_output_tokens与上下文 token 数量。官方文档解释了模型与 token 限制与计费安全与隐私切勿把你的 OPENAI_API_KEY 放到前端或公开仓库。只在后端服务器加载。官方文档强调 API key 的保密与认证措施。若你的知识库包含敏感数据个人信息、机密代码等请在入库前脱敏或加访问控制。7. FAQ常见问题Q为什么有时模型还是会“胡扯”ARAG 可以显著降低 hallucination但不能完全消除。注意 prompt 明确要求“只用来源回答无法回答请说明”并尽量把检索到的最相关片段放在前面。若仍有问题可把temperature设为 0 并限制max_output_tokens。Q能否使用 Milvus / Weaviate 等向量库A可以。本文示例用 FAISS本地、轻量。如果需要分布式、持久化、并发大流量推荐 Milvus / Weaviate / Pinecone 等生产级向量数据库。Q如何把系统部署到线上并保证可扩展性A把 embedding 与构建 index 的任务放到离线批处理或异步 Worker。后端只做检索与调用模型。使用 Docker、Kubernetes 与云向量 DB或托管 FAISS 服务提升可用性与扩展性。参考与文档OpenAI Developer quickstartPython SDK 示例、Responses API官方Embeddings 指南模型与使用示例官方Web QA with embeddings官方 tutorial完整 RAG 示例官方Chat/Responses API 参考官方 API 文档
版权声明:本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!

网站建设所需硬件参数有实力高端网站设计地址

方案概述 本方案基于 Redisson 实现分布式锁,结合重试机制和双重检查模式,确保在高并发场景下的数据一致性和系统稳定性。 核心特性 ✅ 分布式锁:防止多实例/多线程并发执行✅ 重试机制:提高系统容错能力✅ 双重检查&#xff1…

张小明 2026/1/8 5:52:59 网站建设

手机php网站开发工具wordpress设置登录和跳转到主页

第一章:Open-AutoGLM开源模型快速上手Open-AutoGLM 是一个基于 AutoGLM 架构的开源大语言模型,旨在为开发者提供高效、可定制的自然语言处理能力。其模块化设计和开放许可协议使其适用于从研究实验到生产部署的多种场景。环境准备与依赖安装 在开始使用 …

张小明 2026/1/5 22:02:59 网站建设

asp提高网站安全性的措施房产官网查询系统

Windows Shell脚本条件逻辑应用指南 1. IF NOT EXIST语句 在Windows Shell脚本中, IF NOT EXIST 语句是支持 NOT 关键字的 IF 语句的一种形式,其语法如下: IF NOT EXIST file command使用该语句,你可以在尝试对文件或文件夹进行操作之前,先判断其是否存在。例如…

张小明 2026/1/5 18:36:09 网站建设

用虚拟主机做网站后端开发工程师是做什么的

深度剖析OllyDbg部署背后的系统依赖与实战配置 你有没有遇到过这样的情况:兴冲冲地从网上搜“ollydbg下载及安装”,解压后双击 ollydbg.exe ,结果程序一闪而退?或者刚打开就弹出杀毒软件警告:“检测到调试工具&…

张小明 2026/1/6 13:19:49 网站建设

网站开发外包维护合同范本个人定制网站怎么做

什么是数据同步?想想这样一个场景:今天10点开放考试成绩查询的入口,那么在10点钟会有一大波流量高峰,一台服务器肯定扛不住了。而且这种情况几乎没有数据更新操作,都是数据查询。类似这样的查询请求非常高的情况下&…

张小明 2026/1/7 22:06:03 网站建设