主题
基础入门
安装依赖
python:3.9.21
shell
pip install chromadb
指定文件建立向量数据库后查找
文本嵌入
python
from langchain.text_splitter import CharacterTextSplitter
from langchain.document_loaders import TextLoader
from langchain.vectorstores import Chroma
from langchain_community.embeddings import OllamaEmbeddings
def make_embeddings():
# 加载文档并将其拆分成块
loader = TextLoader("./test_data/test.txt",encoding='utf-8')
documents = loader.load()
# 将其拆分成块
text_splitter = CharacterTextSplitter(chunk_size=500, chunk_overlap=0)
docs = text_splitter.split_documents(documents)
embeddings_model = OllamaEmbeddings(model="nomic-embed-text:latest")
# 生成文本嵌入保存到chroma_db目录下
Chroma.from_documents(docs, embeddings_model, persist_directory="chroma_db")
return embeddings_model
shell
make_embeddings()
文本嵌入结果
shell
% tree chrome_db
chroma_db
├── 4856e4b1-ecc7-4b04-afe9-2e6e593b1ff0
│ ├── data_level0.bin
│ ├── header.bin
│ ├── length.bin
│ └── link_lists.bin
└── chroma.sqlite3
数据集
../test/data/test.txt
shell
软件能力成熟度模型
软件能力成熟度模型(CapabilityMaturityModelforSoftware,CMM)是一个概念模型,模型框架和表示是刚性的,不能随意改变,但模型的解释和实现有一定弹性。CMM模型自20世纪80年代末推出,并于20世纪90年代广泛应用于软件过程的改进以来,极大地促进了软件生产率的提高和软件质量的提高。
CMMI(CapabilityMaturityModelIntegrationforSoftware,软件能力成熟度模型集成)是在CMM的基础上发展而来的。CMMI是由美国卡耐基梅隆大学软件工程研究所(SoftwareEngineeringInstitute,SEI)组织全世界的软件过程改进和软件开发管理方面的专家历时四年而开发出来的,并在全世界推广实施的一种软件能力成熟度评估标准,主要用于指导软件开发过程的改进和进行软件开发能力的评估。CMMI的推出,为软件产业的发展和壮大做出了巨大的贡献。
CMMI提供了一个软件能力成熟度的框架,它将软件过程改进的步骤组织成5个成熟度等级,共包括18个关键过程域,52个过程目标,3168种关键时间,它为软件过程不断改进奠定了一个循序渐进的基础。
1)Level1初始级
处于成熟度级别1级时,过程通常是随意且混乱的。这些组织的成功依赖于组织内人员的能力与英雄主义。成熟度1级的组织也常常能产出能用的产品与服务,但它们经常超出在计划中记录的预算与成本。
2)Level2已管理级
在该等级下,意味着组织要确保策划、文档化、执行、监督和控制项目级的过程,并且需要为过程建立明确的目标,并能实现成本、进度和质量目标等
3)Level3已定义级
在这一等级,企业能够根据自身的特殊情况定义适合自己企业和项目的标准流程,将这套管理体系与流程予以制度化,同时企业开始进行项目积累,企业资产的收集,
4)Level4量化管理级
在成熟度4级,组织建立了产品质量、服务质量以及过程性能的定量目标。成熟度级别3级与4级的关键区别在于对过程性能的可预测。
5)Level5优化级
在优化级水平上,企业的项目管理达到了最高的境界。成熟度级别5级关注于通过增量式的与创新式的过程与技术改进,不断地改进过程性能。处于成熟度5级时,组织使用从多个项目收集来的数据对整体的组织级绩效进行关注
有关软件能力成熟度模型的详细介绍,可参考CMM相关专业书籍。
RAG检索
python
from langchain.vectorstores import Chroma
from langchain_core.prompts import PromptTemplate
from langchain_core.output_parsers import StrOutputParser
from langchain_core.runnables import RunnablePassthrough
from langchain_community.chat_models import ChatOllama
def search_rag(query):
# 从磁盘加载
embeddings_model = make_embeddings()
vectorstore = Chroma(persist_directory="chroma_db", embedding_function=embeddings_model)
# 检索
retriever = vectorstore.as_retriever(search_type="similarity", search_kwargs={"k": 6})
retrieved_docs = retriever.invoke(query)
len(retrieved_docs)
print(retrieved_docs[0].page_content)
model = ChatOllama(model="qwen2:1.5b",temperature=0)
def format_docs(docs):
return "\n\n".join(doc.page_content for doc in docs)
template = """使用以下内容回答问题。
如果你不知道答案,就说你不知道,不要试图编造答案。
最多使用三句话,并尽可能简明扼要。
总是在回答的最后说“谢谢你的提问!”。
{context}
问题: {question}
有用的回答:"""
custom_rag_prompt = PromptTemplate.from_template(template)
rag_chain = (
{"context": retriever | format_docs, "question": RunnablePassthrough()}
| custom_rag_prompt
| model
| StrOutputParser()
)
for chunk in rag_chain.stream(query):
print(chunk, end="", flush=True)
测试
python
search_rag("软件能力成熟度模型都有哪些")
输出结果
shell
在优化级水平上,企业的项目管理达到了最高的境界。成熟度级别5级关注于通过增量式的与创新式的过程与技术改进,不断地改进过程性能。处于成熟度5级时,组织使用从多个项目收集来的数据对整体的组织级绩效进行关注
有关软件能力成熟度模型的详细介绍,可参考CMM相关专业书籍。
完整示例代码
python
from langchain.vectorstores import Chroma
from langchain_core.prompts import PromptTemplate
from langchain_core.output_parsers import StrOutputParser
from langchain_core.runnables import RunnablePassthrough
from langchain_community.chat_models import ChatOllama
from langchain.text_splitter import CharacterTextSplitter
from langchain.document_loaders import TextLoader
from langchain.vectorstores import Chroma
from langchain_community.embeddings import OllamaEmbeddings
def make_embeddings():
# 加载文档并将其拆分成块
loader = TextLoader("./test_data/test.txt",encoding='utf-8')
documents = loader.load()
# 将其拆分成块
text_splitter = CharacterTextSplitter(chunk_size=500, chunk_overlap=0)
docs = text_splitter.split_documents(documents)
embeddings_model = OllamaEmbeddings(model="nomic-embed-text:latest")
# 生成文本嵌入保存到chroma_db目录下
Chroma.from_documents(docs, embeddings_model, persist_directory="chroma_db")
return embeddings_model
def search_rag(query):
# 从磁盘加载
embeddings_model = make_embeddings()
vectorstore = Chroma(persist_directory="chroma_db", embedding_function=embeddings_model)
# 检索
retriever = vectorstore.as_retriever(search_type="similarity", search_kwargs={"k": 6})
retrieved_docs = retriever.invoke(query)
len(retrieved_docs)
print(retrieved_docs[0].page_content)
model = ChatOllama(model="qwen2:1.5b",temperature=0)
def format_docs(docs):
return "\n\n".join(doc.page_content for doc in docs)
template = """使用以下内容回答问题。
如果你不知道答案,就说你不知道,不要试图编造答案。
最多使用三句话,并尽可能简明扼要。
总是在回答的最后说“谢谢你的提问!”。
{context}
问题: {question}
有用的回答:"""
custom_rag_prompt = PromptTemplate.from_template(template)
rag_chain = (
{"context": retriever | format_docs, "question": RunnablePassthrough()}
| custom_rag_prompt
| model
| StrOutputParser()
)
for chunk in rag_chain.stream(query):
print(chunk, end="", flush=True)
search_rag("软件能力成熟度模型都有哪些")