Initial commit
This commit is contained in:
@@ -0,0 +1,75 @@
|
||||
import os
|
||||
# hugging face镜像设置,如果国内环境无法使用启用该设置
|
||||
# os.environ['HF_ENDPOINT'] = 'https://hf-mirror.com'
|
||||
from dotenv import load_dotenv
|
||||
from langchain_community.document_loaders import UnstructuredMarkdownLoader
|
||||
from langchain_text_splitters import RecursiveCharacterTextSplitter
|
||||
from langchain_huggingface import HuggingFaceEmbeddings
|
||||
from langchain_core.vectorstores import InMemoryVectorStore
|
||||
from langchain_core.prompts import ChatPromptTemplate
|
||||
from langchain_openai import ChatOpenAI
|
||||
|
||||
load_dotenv()
|
||||
|
||||
markdown_path = "../../data/C1/markdown/easy-rl-chapter1.md"
|
||||
|
||||
# 加载本地markdown文件
|
||||
loader = UnstructuredMarkdownLoader(markdown_path)
|
||||
docs = loader.load()
|
||||
|
||||
# 文本分块
|
||||
text_splitter = RecursiveCharacterTextSplitter()
|
||||
chunks = text_splitter.split_documents(docs)
|
||||
|
||||
# 中文嵌入模型
|
||||
embeddings = HuggingFaceEmbeddings(
|
||||
model_name="BAAI/bge-small-zh-v1.5",
|
||||
model_kwargs={'device': 'cpu'},
|
||||
encode_kwargs={'normalize_embeddings': True}
|
||||
)
|
||||
|
||||
# 构建向量存储
|
||||
vectorstore = InMemoryVectorStore(embeddings)
|
||||
vectorstore.add_documents(chunks)
|
||||
|
||||
# 提示词模板
|
||||
prompt = ChatPromptTemplate.from_template("""请根据下面提供的上下文信息来回答问题。
|
||||
请确保你的回答完全基于这些上下文。
|
||||
如果上下文中没有足够的信息来回答问题,请直接告知:“抱歉,我无法根据提供的上下文找到相关信息来回答此问题。”
|
||||
|
||||
上下文:
|
||||
{context}
|
||||
|
||||
问题: {question}
|
||||
|
||||
回答:"""
|
||||
)
|
||||
|
||||
# 配置大语言模型
|
||||
|
||||
# 使用 AIHubmix
|
||||
llm = ChatOpenAI(
|
||||
model="glm-4.7-flash-free",
|
||||
temperature=0.7,
|
||||
max_tokens=4096,
|
||||
api_key=os.getenv("DEEPSEEK_API_KEY"),
|
||||
base_url="https://aihubmix.com/v1"
|
||||
)
|
||||
|
||||
# llm = ChatOpenAI(
|
||||
# model="deepseek-chat",
|
||||
# temperature=0.7,
|
||||
# max_tokens=4096,
|
||||
# api_key=os.getenv("DEEPSEEK_API_KEY"),
|
||||
# base_url="https://api.deepseek.com"
|
||||
# )
|
||||
|
||||
# 用户查询
|
||||
question = "文中举了哪些例子?"
|
||||
|
||||
# 在向量存储中查询相关文档
|
||||
retrieved_docs = vectorstore.similarity_search(question, k=3)
|
||||
docs_content = "\n\n".join(doc.page_content for doc in retrieved_docs)
|
||||
|
||||
answer = llm.invoke(prompt.format(question=question, context=docs_content))
|
||||
print(answer)
|
||||
Reference in New Issue
Block a user