微信扫码
添加专属顾问
我要投稿
用Python+Milvus+Langchain构建智能问答系统,突破传统搜索局限,实现精准上下文理解与回答。 核心内容: 1. 技术栈解析:FastAPI、Milvus、Llama-2等核心组件协同工作 2. 微服务架构设计:从数据索引到检索的完整流程剖析 3. 多索引器扩展方案:支持Milvus和Elasticsearch等不同数据库
etcd: 分布式键值存储,用于Milvus集群元数据管理
minio: 对象存储服务,存储向量数据和索引文件
milvus-standalone: 向量数据库主服务
attu: Milvus的Web管理界面
网站URL → 网页抓取 → HTML解析 → 文本分割 → 向量化 → 存储到Milvus
用户查询 → 向量化 → 相似性搜索 → 知识库检索 → LLM生成答案
fmt = "\n=== {:30} ===\n"search_latency_fmt = "search latency = {:.4f}s"num_entities, dim = 8, 8milvus_collection_name = "ai_answer"class SearchEngine: def __init__(self): connections.connect("default", host="localhost", port="19530") has = utility.has_collection(milvus_collection_name) print(f"Does collection milvus_collection_name exist in Milvus: {has}") milvus_client = Collection(milvus_collection_name) self.milvus_client = milvus_client self.milvus_collection_name = milvus_collection_name openai.api_key = os.environ["OPENAI_API_KEY"] def query_milvus(self, embedding): result = self.milvus_client.search([embedding], "vector", {"metric_type": "L2", "offset": 1}, 1, None, None, ["id", "vector", "path", "text"]) list_of_knowledge_base = list(map(lambda match: match.entity.text, result[0])) return { 'list_of_knowledge_base': list_of_knowledge_base, } def query_vector_db(self, embedding): return self.query_milvus(embedding)# indexer_by_milvus.py def add_html_to_vectordb(self, content, path): text_splitter = RecursiveCharacterTextSplitter( chunk_size = self.MODEL_CHUNK_SIZE, # 8192 chunk_overlap = math.floor(self.MODEL_CHUNK_SIZE/10) # 819 ) docs = text_splitter.create_documents([content]) for doc in docs: embedding = create_embedding(doc.page_content) self.insert_embedding(embedding, doc.page_content, path)def insert_embedding(self, embedding, text, path): try: print(fmt.format("Start inserting entities")) data = [ {"vector": np.array(embedding), "text": text, "path": path}, ] self.milvus_client.insert(data) except Exception as e: print("self.milvus_client.insert exception e: ", e) os._exit(1)# search_engine.pydef search(self, user_query):print("user_query: ", user_query)embedding = create_embedding(user_query)result = self.query_vector_db(embedding)knowledge_base = "\n".join(result['list_of_knowledge_base'])response = self.ask_chatgpt(knowledge_base, user_query)return {'response': response}def ask_chatgpt(self, knowledge_base, user_query):system_content = """你是一个专业的智能问答助手,请严格遵循以下规则:1. 只能基于提供的知识库内容回答问题,不得使用知识库以外的信息;2. 如果知识库中没有相关信息或无法找到准确答案,请明确告知用户"我无法在知识库中找到相关信息来回答这个问题";3. 回答时要客观准确,不得编造或推测信息;4. 尽量使用知识库中的原始表述,确保信息的准确性和权威性。"""user_content = f"""Knowledge Base!---{knowledge_base}---User Query: {user_query}Answer: {user_history_answer}"""system_message = {"role": "system", "content": system_content}user_message = {"role": "user", "content": user_content}chatgpt_response = create_llama2_13b(messages=[system_message, user_message])return chatgpt_response["choices"][0]["message"]["content"]
53AI,企业落地大模型首选服务商
产品:场景落地咨询+大模型应用平台+行业解决方案
承诺:免费POC验证,效果达标后再合作。零风险落地应用大模型,已交付160+中大型企业
2026-03-21
编程选GPT-5.4,还是GPT-5.3-Codex?
2026-03-21
AI Coding前端实践后的复盘总结
2026-03-21
OpenAI 首席科学家:Codex 只是雏形,我们要造的是「全自动 AI 研究员」
2026-03-21
谷歌Stitch「氛围设计」干崩Figma 8.8%股价:十年经验,败给巨头一次更新(附实测)
2026-03-21
为什么 CLI 比 MCP 更适合 LLM
2026-03-21
渐进式披露(Progressive Disclosure):Agent 从 Demo 到企业级落地的 “救命架构”
2026-03-21
AI 编程工具怎么选?Codex 和 Claude Code 的本质区别
2026-03-21
Karpathy 最新播客:我得了 AI 精神病、App 将消失、Agent 将碾压实验室
2026-01-24
2026-01-10
2026-01-01
2026-01-26
2026-01-09
2026-01-09
2026-01-23
2025-12-30
2026-01-14
2026-01-21
2026-03-21
2026-03-20
2026-03-19
2026-03-19
2026-03-19
2026-03-18
2026-03-17
2026-03-17