当前位置: 首页 > news >正文

广州市网站建设手机网站 微信支付

广州市网站建设,手机网站 微信支付,长沙微网站电话号码,酒泉建设局造价官网站课件链接:https://cloud.189.cn/t/VNvmyimY7Vna(访问码:e4cb)天翼云盘是中国电信推出的云存储服务,为用户提供跨平台的文件存储、备份、同步及分享服务,是国内领先的免费网盘,安全、可靠、稳定、…

课件链接:https://cloud.189.cn/t/VNvmyimY7Vna(访问码:e4cb)天翼云盘是中国电信推出的云存储服务,为用户提供跨平台的文件存储、备份、同步及分享服务,是国内领先的免费网盘,安全、可靠、稳定、快速。天翼云盘为用户守护数据资产。icon-default.png?t=O83Ahttps://cloud.189.cn/t/VNvmyimY7Vna%EF%BC%88%E8%AE%BF%E9%97%AE%E7%A0%81%EF%BC%9Ae4cb%EF%BC%89

原始数据来源于本课程的课件 RAG.pdf 文件,需要Python解析pdf文件,主要使用智谱清言的 embedding-3 将文本转向量化,存储到 ChromaDB向量数据库中,将向量查询的结果投喂给DeepSeek的deepseek-chat模型,由它根据向量查询结果来回答用户提问。

.env文件

OPENAI_API_KEY=sk-a6******9d
OPENAI_BASE_URL=https://api.deepseek.com/v1
OPENAI_MODEL=deepseek-chat
ZHIPU_BASE_URL=https://open.bigmodel.cn/api/paas/v4/
ZHIPU_API_KEY=4923c4dae*******lTGEx7
EMBEDDING_MODEL=embedding-3

启动向量数据库

chroma run --host 127.0.0.1 --port 5333 --path db_data

初始化

from openai import OpenAI
from dotenv import load_dotenv
import os
import chromadb
from chromadb.config import Settingsload_dotenv()# 将 api_key 传入到 openAI 当中
client = OpenAI()
ai_model = os.getenv("OPENAI_MODEL")
embed_model = os.getenv("EMBEDDING_MODEL")from pdfminer.high_level import extract_pages
from pdfminer.layout import LTTextContainerdef get_completion(prompt, model=ai_model):"""封装 openai 接口"""messages = [{"role": "user", "content": prompt}]response = client.chat.completions.create(model=model,messages=messages,temperature=0,)return response.choices[0].message.contentdef build_prompt(prompt_template, **kwargs):'''将 Prompt 模板赋值'''prompt = prompt_templatefor k, v in kwargs.items():if isinstance(v, str):val = velif isinstance(v, list) and all(isinstance(elem, str) for elem in v):val = '\n'.join(v)else:val = str(v)prompt = prompt.replace(f"__{k.upper()}__", val)return prompt

提示词

prompt_template = """
你是一个问答机器人。
你的任务是根据下述给定的已知信息回答用户问题。
确保你的回复完全依据下述已知信息。不要编造答案。
如果下述已知信息不足以回答用户的问题,请直接回复"我无法回答您的问题"。
已知信息:
__INFO__
用户问:
__QUERY__
请用中文回答用户问题。
"""

解析pdf文件

def extract_text_from_pdf(filename, page_numbers=None, min_line_length=1):'''从 PDF 文件中(按指定页码)提取文字'''paragraphs = []ids = []id_counter = 0buffer = ''full_text = ''# 提取全部文本for i, page_layout in enumerate(extract_pages(filename)):# 如果指定了页码范围,跳过范围外的页if page_numbers is not None and i not in page_numbers:continuefor element in page_layout:if isinstance(element, LTTextContainer):full_text += element.get_text() + '\n'# 按空行分隔,将文本重新组织成段落lines = full_text.split('\n')for text in lines:if len(text) >= min_line_length:buffer += (' ' + text) if not text.endswith('-') else text.strip('-')elif buffer:paragraphs.append(buffer)ids.append(f"id{id_counter}")buffer = ''id_counter += 1if buffer:paragraphs.append(buffer)ids.append(f"id{id_counter}")results = {"documents": paragraphs, "ids": ids}return resultsparagraphs = extract_text_from_pdf("RAG.pdf", page_numbers=[4, 5],min_line_length=10)

文本转向量函数

def get_embeddings(texts, model=embed_model):embedClient = OpenAI(api_key=os.getenv("ZHIPU_API_KEY"),base_url=os.getenv("ZHIPU_BASE_URL"))data = embedClient.embeddings.create(input=texts, model=model).datareturn [x.embedding for x in data]

向量数据库连接器

class MyVectorDBConnector:def __init__(self, collection_name, embedding_fn):chroma_client = chromadb.HttpClient(host="127.0.0.1",port=5333,)self.embedding_fn = embedding_fnself.collection = chroma_client.get_or_create_collection(name=collection_name)self.documents = []def add_documents(self, contents):self.collection.add(embeddings=self.embedding_fn(contents.get("documents")),documents=contents.get("documents"),ids=contents.get("ids"),)def search(self, query, top_n):results = self.collection.query(query_embeddings=self.embedding_fn([query]),n_results=top_n)return results# 创建一个向量数据库对象
vector_db = MyVectorDBConnector("demo", get_embeddings)
# 向向量数据库中添加文档
vector_db.add_documents(paragraphs)

RAG机器人

class RAG_Bot:def __init__(self, vector_db, llm_api, n_results=2):self.vector_db = vector_dbself.llm_api = llm_apiself.n_results = n_resultsdef chat(self, user_query):# 1. 检索search_results = self.vector_db.search(user_query, self.n_results)# 2. 构建 Promptprompt = build_prompt(prompt_template, info=search_results['documents'][0], query=user_query)# 3. 调用 LLMresponse = self.llm_api(prompt)return response# 创建一个 RAG 机器人
bot = RAG_Bot(vector_db,llm_api=get_completion
)

最后提问

# 用户查询
user_query = "常用的向量数据库有哪些?"
response = bot.chat(user_query)
print(response)

运行效果:

http://www.yayakq.cn/news/823962/

相关文章:

  • 如何做滴滴网站平台erp系统入门教程
  • 新手做哪类网站欧洲十大服务器的推荐
  • 企业网站建设方案服务镇江网站营销推广
  • 域名的网站建设方案书怎么写做挂网站
  • 成都 企业网站设计1000套网站源码
  • 网站的站内结构锚文本是如何做的wordpress 窗口大小
  • 百度有个学习的网站建设叫什么车务网站开发
  • 曹县有没有做网站海报设计平台
  • 网站 报价方案网页设计策划
  • 无锡网站建站公司上传文件网站根目录
  • 做网站好吗网站可以建几个人
  • 专业做网站优化服务器系统搭建网站源码
  • 出口外贸营销网站湘西泸溪网站建设
  • 告诉搜索引擎网站建设中工信部备案查询系统
  • 怎么制作网站教程步骤视频网页设计教学网站
  • 谷歌搜索关键字网站商城网站规划
  • 网站集群建设解决方案wordpress微商城模板
  • 网站 收费关于建设网站的请示
  • 做网站的好框架广州响应式网站建设
  • 网站备案幕布申请网站快速优化
  • 描述建设一个网站的基本步骤个人网站备案描述
  • tornado网站开发 教程自己建网站收费吗
  • 网站建设材料赣榆哪里有做网站的
  • wordpress修改密码张家港网站优化
  • iis搭建网站教程网站开发php和ui
  • 建网站莱阳哪家强?网站制作 徐州
  • 怎么做网站推广怀化沈阳小程序开发公司哪家好
  • 如何设计网站站点温州网站设计网站建设网站
  • 徐州网站建设方案推广正规网站建设官网
  • 网站开发 wenzhoupython做网站的多吗