环境:
本地部署的LLM:Qwen2-72B-Instruct-GPTQ-Int4
使用vllm启动提供服务,并且采用兼容OPENAI接口服务
嵌入模型:bge-large-zh-v1.5
简单代码:
from langchain_openai import ChatOpenAI
from langchain_core.prompts import ChatPromptTemplate
from langchain_community.document_loaders import WebBaseLoader
from langchain_community.vectorstores import FAISS
from langchain_text_splitters import RecursiveCharacterTextSplitter
from langchain.chains.combine_documents import create_stuff_documents_chain
from langchain.chains import create_retrieval_chain
from langchain_community.embeddings import HuggingFaceBgeEmbeddings
openai_api_key = 'token-abc123'
openai_api_base = 'http://172.18.25.21:8000/v1'
mode_id = 'Qwen2-72B-Instruct-GPTQ-Int4'
embedding_id = '/bge-large-zh-v1.5'
llm = ChatOpenAI(api_key=openai_api_key, base_url=openai_api_base, temperature=0, model=mode_id)
# L
loader = WebBaseLoader("https://docs.smith.langchain.com/user_guide")
docs = loader.load()
# E
embeddings = HuggingFaceBgeEmbeddings(model_name=embedding_id)
# D
text_splitter = RecursiveCharacterTextSplitter(chunk_size=1000, chunk_overlap=0)
documents = text_splitter.split_documents(docs)
# V
vector = FAISS.from_documents(documents, embeddings)
# R
retriever = vector.as_retriever()
prompt = ChatPromptTemplate.from_template("""基于以下已知信息,简洁和专业的来回答用户的问题。
如果无法从中得到答案,请说"根据已知信息无法回答该问题",不允许在答案中添加编造成分,答案请使用中文。
已知信息:
{context}
问题:
{input}""")
document_chain = create_stuff_documents_chain(llm, prompt)
retrieval_chain = create_retrieval_chain(retriever, document_chain)
ret = retrieval_chain.invoke({"input": "langsmith如何帮助测试?"})
print(ret["answer"])
得到的回答:
LangSmith通过以下方式帮助测试:
1. **创建数据集**:允许开发者创建包含输入和预期输出的数据集,用于测试LLM(大型语言模型)应用。
2. **批量上传测试案例**:测试案例可以批量上传,即时创建,或从应用跟踪中导出,便于全面评估应用性能。
3. **自定义评估**:提供工具运行自定义评估,包括基于LLM和启发式的评分,以量化测试结果。
4. **比较视图**:在应用不同版本间进行比较,检查是否因提示、检索策略或模型选择的改变而导致性能退化。
5. **反馈过滤**:通过应用内的反馈按钮收集用户反馈,过滤并分析具有特定反馈标签和评分的跟踪,以识别问题点。
6. **注释跟踪**:支持将运行发送到注释队列,让注释者根据不同标准详细检查和注释跟踪,帮助捕捉性能退化。
7. **数据集扩展**:在应用测试阶段,可以将运行作为示例添加到数据集中,以覆盖更多真实场景,持续收集数据以优化应用。
8. **调试支持**:LangSmith默认启用跟踪,提供每一步的清晰可见性和调试信息,便于快速定位和解决问题。