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

张小明 2026/1/17 6:01:56
网站建设用户需求分析,秘塔猫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进行投诉反馈,一经查实,立即删除!

佘山做网站公司淘宝网网站建设的的意见

百度正式发布ERNIE 4.5系列大模型,其中旗舰版ERNIE-4.5-300B-A47B-Base-PT(以下简称ERNIE 4.5 300B)凭借3000亿总参数的混合专家(MoE)架构和多模态异构训练技术,再次刷新国内大模型技术天花板,标…

张小明 2026/1/10 11:35:04 网站建设

网站建设包括哪些技术做网站怎么建文件夹

深入探索Objective - C与iPhone开发:协议、异常处理及应用部署调试 1. Objective - C协议的独特之处 在Objective - C编程中,协议的运用有其独特的逻辑。从Java程序员的视角来看,对于带有可选方法声明的协议可能会存在疑问,因为Java里若依据协议编写代码,会期望协议中的方…

张小明 2026/1/10 14:16:41 网站建设

广州网站建设公司哪个好打字赚钱平台 学生一单一结

利用PyTorch-CUDA镜像降低新人入职AI项目的上手门槛 在一家AI初创公司,新来的算法工程师小李花了整整三天才跑通第一个训练脚本——不是模型写错了,而是环境问题:CUDA版本不匹配、cuDNN没装对、PyTorch编译时找不到GPU支持……这样的场景&…

张小明 2026/1/10 12:02:24 网站建设

网站域名注册基本流程做网站怎么接活

[算法设计与分析-从入门到入土] 复杂算法 个人导航 知乎:https://www.zhihu.com/people/byzh_rc CSDN:https://blog.csdn.net/qq_54636039 注:本文仅对所述内容做了框架性引导,具体细节可查询其余相关资料or源码 参考文章&am…

张小明 2026/1/9 16:57:58 网站建设

南阳专业做网站公司哪家好建手机端网站

快速体验 打开 InsCode(快马)平台 https://www.inscode.net输入框内输入如下内容: 使用SeleniumBase框架创建一个自动化Web测试脚本,用于测试一个电商网站的商品搜索功能。要求包括:1. 自动打开浏览器并导航到指定电商网站;2. 在…

张小明 2026/1/10 13:46:23 网站建设

门户网站开发 项目实施方案去电商公司上班怎么样

Apache Iceberg性能终极指南:如何实现3倍查询加速 【免费下载链接】iceberg Apache Iceberg 项目地址: https://gitcode.com/gh_mirrors/iceberg4/iceberg 痛点直击:大数据查询为何越来越慢? 当你面对TB级数据分析任务时,…

张小明 2026/1/10 14:16:44 网站建设