微信扫码
添加专属顾问
我要投稿
用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.py
def 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+中大型企业
2025-08-30
大模型的“思维链”(Chain-of-Thought):AI 是怎么一步步“推理”的
2025-08-30
Agentic AI与WorkFlow的相互成就
2025-08-29
刚刚,xAI 发布 Grok Code Fast 1 编程模型,快、便宜、免费
2025-08-29
大模型时代有了自己的「价值高速公路」
2025-08-29
A I智能革命——上下文工程新突破
2025-08-29
知识库检索准不准,关键看模型选没选对!一份评测指南请收好
2025-08-29
我如何用Prompt工程将大模型调教成风控专家
2025-08-29
度小满金融大模型技术创新与应用探索
2025-08-21
2025-06-21
2025-08-21
2025-08-19
2025-06-07
2025-06-12
2025-06-19
2025-06-13
2025-07-29
2025-06-15
2025-08-28
2025-08-28
2025-08-28
2025-08-28
2025-08-27
2025-08-26
2025-08-25
2025-08-25