部队内网网站建设方案,小程序制作需要什么语言,制作网站的最大公司,网络建站一、设置API Key
import os
from zhipuai import ZhipuAI
from dotenv import load_dotenv, find_dotenv# 读取本地/项目的环境变量。# find_dotenv()寻找并定位.env文件的路径
# load_dotenv()读取该.env文件#xff0c;并将其中的环境变量加载到当前的运行环境中
# 如果你…一、设置API Key
import os
from zhipuai import ZhipuAI
from dotenv import load_dotenv, find_dotenv# 读取本地/项目的环境变量。# find_dotenv()寻找并定位.env文件的路径
# load_dotenv()读取该.env文件并将其中的环境变量加载到当前的运行环境中
# 如果你设置的是全局的环境变量这行代码则没有任何作用。
_ load_dotenv(find_dotenv())# 获取环境变量 OPENAI_API_KEY
key
client ZhipuAI(api_key key)
二、 创建LLM应用
按照langchain链的方式进行构建
from langchain.chains.retrieval_qa.base import RetrievalQA #检索QA链在文档上进行检索
from langchain_community.chat_models.zhipuai import ChatZhipuAI #openai模型
from langchain.document_loaders import CSVLoader #文档加载器采用csv格式存储
from langchain.indexes import VectorstoreIndexCreator #导入向量存储索引创建器
from langchain.vectorstores import DocArrayInMemorySearch #向量存储
#加载中文数据
file ./data/product_data.csv
loader CSVLoader(file_pathfile,encodingutf-8)
data loader.load()
#查看数据
import pandas as pd
test_data pd.read_csv(file,headerNone)
test_data from langchain_community.embeddings.zhipuai import ZhipuAIEmbeddings# 使用智谱 AI 嵌入模型
embeddings ZhipuAIEmbeddings(modelembedding-2, # 智谱 AI 的嵌入模型名称api_keykey # 替换为你的智谱 AI API Key
)将指定向量存储类,创建完成后我们将从加载器中调用,通过文档记载器列表加载index VectorstoreIndexCreator(embeddingembeddings,vectorstore_clsDocArrayInMemorySearch
).from_loaders([loader])
#通过指定语言模型、链类型、检索器和我们要打印的详细程度来创建检索QA链
llm ChatZhipuAI(model_nameglm-3-turbo,temperature 0.0, zhipuai_api_keykey)
qa RetrievalQA.from_chain_type(llmllm, chain_typestuff, retrieverindex.vectorstore.as_retriever(), verboseTrue,chain_type_kwargs {document_separator: }
)
2.1 创建评估数据点
1、将数据点作为例子查看一些数据然后想出例子问题和答案以便以后用于评估
data[10]#查看这里的一些文档我们可以对其中发生的事情有所了解 Document(metadata{source: ./data/product_data.csv, row: 10}, page_contentproduct_name: 高清电视机\ndescription: 规格:\r\n尺寸50。\r\n\r\n为什么我们热爱它:\r\n我们的高清电视机拥有出色的画质和强大的音效带来沉浸式的观看体验。\r\n\r\n材质与护理:\r\n使用干布清洁。\r\n\r\n构造:\r\n由塑料、金属和电子元件制成。\r\n\r\n其他特性:\r\n支持网络连接可以在线观看视频。\r\n配备遥控器。\r\n在韩国制造。\r\n\r\n有问题请随时联系我们的客户服务团队他们会解答您的所有问题。) data[11] Document(metadata{source: ./data/product_data.csv, row: 11}, page_contentproduct_name: 旅行背包\ndescription: 规格:\r\n尺寸18 x 12 x 6。\r\n\r\n为什么我们热爱它:\r\n我们的旅行背包拥有多个实用的内外袋轻松装下您的必需品是短途旅行的理想选择。\r\n\r\n材质与护理:\r\n可以手洗自然晾干。\r\n\r\n构造:\r\n由防水尼龙制成。\r\n\r\n其他特性:\r\n附带可调节背带和安全锁。\r\n在中国制造。\r\n\r\n有问题请随时联系我们的客户服务团队他们会解答您的所有问题。) 创建测试用例数据
examples [{query: 高清电视机怎么进行护理,answer: 使用干布清洁。},{query: 旅行背包有内外袋吗,answer: 有。}
]
通过LLM生成测试用例
from langchain.evaluation.qa import QAGenerateChain #导入QA生成链它将接收文档并从每个文档中创建一个问题答案对
由于QAGenerateChain类中使用的PROMPT是英文故我们继承QAGenerateChain类将PROMPT加上“请使用中文输出”。
下面是generate_chain.py文件中的QAGenerateChain类的源码
LLM Chain specifically for generating examples for question answering.
from __future__ import annotationsfrom typing import Anyfrom langchain.base_language import BaseLanguageModel
from langchain.chains.llm import LLMChain
from langchain.evaluation.qa.generate_prompt import PROMPTclass QAGenerateChain(LLMChain):LLM Chain specifically for generating examples for question answering.classmethoddef from_llm(cls, llm: BaseLanguageModel, **kwargs: Any) - QAGenerateChain:Load QA Generate Chain from LLM.return cls(llmllm, promptPROMPT, **kwargs)
# 下面是langchain.evaluation.qa.generate_prompt中的源码我们在template的最后加上“请使用中文输出”
# flake8: noqa
from langchain.output_parsers.regex import RegexParser
from langchain.prompts import PromptTemplatetemplate You are a teacher coming up with questions to ask on a quiz.
Given the following document, please generate a question and answer based on that document.Example Format:
Begin Document
...
End Document
QUESTION: question here
ANSWER: answer hereThese questions should be detailed and be based explicitly on information in the document. Begin!Begin Document
{doc}
End Document
请使用中文输出。output_parser RegexParser(regexrQUESTION: (.*?)\nANSWER: (.*), output_keys[query, answer]
)
PROMPT PromptTemplate(input_variables[doc], templatetemplate, output_parseroutput_parser
)PROMPT
# 继承QAGenerateChain
class MyQAGenerateChain(QAGenerateChain):LLM Chain specifically for generating examples for question answering.classmethoddef from_llm(cls, llm: BaseLanguageModel, **kwargs: Any) - QAGenerateChain:Load QA Generate Chain from LLM.return cls(llmllm, promptPROMPT, **kwargs)
example_gen_chain MyQAGenerateChain.from_llm(ChatZhipuAI(zhipuai_api_keykey))#通过传递chat open AI语言模型来创建这个链
new_examples example_gen_chain.apply_and_parse([{doc: t} for t in data[:5]]
) #我们可以创建许多例子
new_examples #查看用例数据 [{query: 这款全自动咖啡机有哪几种预设的咖啡模式,answer: 文档中并未明确列出全自动咖啡机具体有多少种预设的咖啡模式但提到了“预设多种咖啡模式”所以可以推断至少有不止一种咖啡模式供选择。具体模式需要在其他产品说明或客户服务处获取详细信息。 },{query: 这款电动牙刷具有哪些特性使其在市场上受到欢迎,answer: 这款电动牙刷采用先进的刷头设计和强大的电机提供了超凡的清洁力和舒适的刷牙体验。它还具有多种清洁模式和定时功能并且可以通过USB充电而且是在日本制造的。这些特性使其受到市场的欢迎。},{query: 这款橙味维生素C泡腾片每片含有多少毫克的维生素C, answer: 每片含有500mg的维生素C。},{query: 根据产品描述这款无线蓝牙耳机单个耳机的尺寸是多少, answer: 单个耳机尺寸为1.5寸 x 1.3寸。},{query: 这款瑜伽垫的尺寸是多少, answer: 这款瑜伽垫的尺寸是24 x 68。}] new_examples[0] {query: 这款全自动咖啡机有哪几种预设的咖啡模式,answer: 文档中并未明确列出全自动咖啡机具体有多少种预设的咖啡模式但提到了“预设多种咖啡模式”所以可以推断至少有不止一种咖啡模式供选择。具体模式需要在其他产品说明或客户服务处获取详细信息。 } 组合用例数据
examples new_examples
qa.run(examples[0][query]) Entering new RetrievalQA chain... Finished chain.
根据提供的资料高清电视机的护理方法是使用干布清洁。 三、 人工评估
3.1 如何评估新创建的实例 LingChainDebug工具可以了解运行一个实例通过链中间所经历的步骤import langchain
langchain.debug True
qa.run(examples[0][query])#重新运行与上面相同的示例可以看到它开始打印出更多的信息
如何评估新创建的实例
与创建它们类似可以运行链条来处理所有示例然后查看输出并尝试弄清楚发生了什么它是否正确
四、 通过LLM进行评估实例
predictions qa.apply(examples) #为所有不同的示例创建预测对预测的结果进行评估导入QA问题回答评估链通过语言模型创建此链from langchain.evaluation.qa import QAEvalChain #导入QA问题回答评估链
llm ChatZhipuAI(model_nameglm-3-turbo,temperature 0.0, zhipuai_api_keykey)
eval_chain QAEvalChain.from_llm(llm)
graded_outputs eval_chain.evaluate(examples, predictions)#在此链上调用evaluate进行评估
4.1 评估思路
当它面前有整个文档时它可以生成一个真实的答案我们将打印出预测的答当它进行QA链时使用embedding和向量数据库进行检索时将其传递到语言模型中然后尝试猜测预测的答案我们还将打印出成绩这也是语言模型生成的。当它要求评估链评估正在发生的事情时以及它是否正确或不正确。因此当我们循环遍历所有这些示例并将它们打印出来时可以详细了解每个示例
#我们将传入示例和预测得到一堆分级输出循环遍历它们打印答案
for i, eg in enumerate(examples):print(f例 {i}:)print(问题: predictions[i][query])print(真实答案: predictions[i][answer])print(预测答案: predictions[i][result])print(预测成绩: graded_outputs[i][results])print() 例 0:
问题: 高清电视机怎么进行护理
真实答案: 使用干布清洁。
预测答案: 根据提供的资料高清电视机的护理方法是使用干布清洁。
预测成绩: CORRECT例 1:
问题: 旅行背包有内外袋吗
真实答案: 有。
预测答案: 是的旅行背包拥有多个实用的内外袋。
预测成绩: CORRECT例 2:
问题: 这款全自动咖啡机有哪几种预设的咖啡模式
真实答案: 文档中并未明确列出全自动咖啡机具体有多少种预设的咖啡模式但提到了“预设多种咖啡模式”所以可以推断至少有不止一种咖啡模式供选择。具体模式需要在其他产品说明或客户服务处获取详细信息。
预测答案: 根据提供的文本信息这款全自动咖啡机有“预设多种咖啡模式”但具体是哪几种模式并未列出。
预测成绩: CORRECT例 3:
问题: 这款电动牙刷具有哪些特性使其在市场上受到欢迎
真实答案: 这款电动牙刷采用先进的刷头设计和强大的电机提供了超凡的清洁力和舒适的刷牙体验。它还具有多种清洁模式和定时功能并且可以通过USB充电而且是在日本制造的。这些特性使其受到市场的欢迎。
预测答案: 根据提供的描述这款电动牙刷在市场上受到欢迎的原因包括1. **先进的刷头设计和强大的电机**这提供了超凡的清洁力。
2. **舒适的刷牙体验**除了清洁力它也注重使用感受。
3. **多种清洁模式**可以满足不同用户的需求。
4. **定时功能**有助于用户保持良好的刷牙习惯。
5. **USB充电**提供了便捷的充电方式。
6. **在日本制造**可能暗示着较高的品质或工艺标准。
预测成绩: CORRECT例 4:
问题: 这款橙味维生素C泡腾片每片含有多少毫克的维生素C
真实答案: 每片含有500mg的维生素C。
预测答案: 这款橙味维生素C泡腾片每片含有500毫克的维生素C。
预测成绩: CORRECT例 5:
问题: 根据产品描述这款无线蓝牙耳机单个耳机的尺寸是多少
真实答案: 单个耳机尺寸为1.5寸 x 1.3寸。
预测答案: 根据产品描述这款无线蓝牙耳机单个耳机的尺寸是1.5 x 1.3。
预测成绩: CORRECT例 6:
问题: 这款瑜伽垫的尺寸是多少
真实答案: 这款瑜伽垫的尺寸是24 x 68。
预测答案: 根据您提供的上下文有两款瑜伽垫1. **瑜伽垫 (Yoga Mat):** 尺寸是 24 x 68。
2. **防滑瑜伽垫 (Non-slip Yoga Mat):** 尺寸是 72 x 24。
预测成绩: CORRECT 4.2 结果分析
对于每个示例它看起来都是正确的让我们看看第一个例子。 这里的问题是舒适的套头衫套装有侧口袋吗真正的答案我们创建了这个是肯定的。模型预测的答案是舒适的套头衫套装条纹确实有侧口袋。因此我们可以理解这是一个正确的答案。它将其评为正确。
使用模型评估的优势
你有这些答案它们是任意的字符串。没有单一的真实字符串是最好的可能答案有许多不同的变体只要它们具有相同的语义它们应该被评为相似。如果使用正则进行精准匹配就会丢失语义信息到目前为止存在的许多评估指标都不够好。目前最有趣和最受欢迎的之一就是使用语言模型进行评估。