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

网站设计用的技术网站备案 拉黑

网站设计用的技术,网站备案 拉黑,有哪些做动图的网站,网站开发简历 自我评价前言 Speckly 是一个基于 检索增强生成 (RAG) 技术的智能问答机器人#xff0c;它能像一位经验丰富的工程师#xff0c;理解你的问题#xff0c;并从 Speckle 文档中精准地找到答案。更厉害的是#xff0c;它甚至可以帮你生成代码片段#xff01;#x1f680; 本文将详…前言 Speckly 是一个基于 检索增强生成 (RAG) 技术的智能问答机器人它能像一位经验丰富的工程师理解你的问题并从 Speckle 文档中精准地找到答案。更厉害的是它甚至可以帮你生成代码片段 本文将详细介绍 Speckly 的完整开发流程涵盖从创建图管道到搭建服务器再到设计用户界面的所有环节最终实现一个可交互的智能问答系统。 您将学习如何 构建处理用户提问和文档信息的核心逻辑图管道。搭建本地服务器模拟 Speckly 的线上运行环境。使用 Streamlit 和 Gradio 设计用户友好的交互界面。 通过学习本项目您将掌握在部署模型到生产环境之前进行本地测试的方法并了解如何构建简洁易用的用户界面。 步骤 1导入 API 密钥 首先我们从 .env 文件中导入 API 密钥。另外我们还可以使用 LangSmith 设置跟踪。 import osfrom dotenv import load_dotenv, find_dotenvload_dotenv(find_dotenv()) 重要提示如果无法加载 API 密钥请检查此行Getting the api keys from the .env fileos.environ[OPENAI_API_KEY] os.getenv(OPENAI_API_KEY)os.environ[LANGCHAIN_API_KEY] os.getenv(LANGCHAIN_API_KEY)Langsmith Tracingos.environ[LANGCHAIN_TRACING_V2] os.getenv(LANGCHAIN_TRACING_V2)os.environ[LANGCHAIN_ENDPOINT] os.getenv(LANGCHAIN_ENDPOINT)os.environ[LANGCHAIN_PROJECT] os.getenv(LANGCHAIN_PROJECT)Fire Crawl APIos.environ[FIRE_API_KEY]os.getenv(FIRE_API_KEY)以下是一个示例 .env 文件。请获取您的 API 密钥如果您没有并将它们粘贴在字符串之间。我在第一篇博文中详细描述了这一点。 OPENAI_API_KEY LANGCHAIN_API_KEY LANGCHAIN_TRACING_V2true LANGCHAIN_ENDPOINThttps://api.smith.langchain.com LANGCHAIN_PROJECT步骤 2加载文档 我们将使用 Mendable.ai 创建的名为 FireCrawl 的产品它可以将网站转换为对大语言模型友好的文档。这正是我们想要的。我们将抓取 Speckle 的开发者文档并将所有页面和子页面转换为文档列表。您需要一个 API 密钥才能在加载器函数中使用。 我创建了 DocumentLoader 类它将 API 密钥作为字符串输入并使用 get_docs 函数该函数将 URL 作为输入并提供一个文档列表包括元数据作为输出。 from typing import List from langchain_community.document_loaders import FireCrawlLoader from document import Documentclass DocumentLoader:def __init__(self, api_key: str):self.api_key api_keydef get_docs(self, url: str) - List[Document]:使用 FireCrawlLoader 从指定的 URL 检索文档。Args:url (str): 要抓取文档的 URL。Returns:List[Document]: 包含检索到的内容的 Document 对象列表。loader FireCrawlLoader(api_keyself.api_key, urlurl, modecrawl)raw_docs loader.load()docs [Document(page_contentdoc.page_content, metadatadoc.metadata) for doc in raw_docs]return docs就我而言我已经抓取了文档并将文档保存在本地这样我就不会重复这个过程并浪费我的积分了。第一次使用时您可以使用 get_docs 函数之后您可以直接加载文档。 import pickle# 从本地文件加载已抓取并保存的文档 with open(crawled_docs/saved_docs.pkl, rb) as f:saved_docs pickle.load(f)步骤 3创建向量存储和检索器 现在我们有了文档我们希望将它们分成更小的部分并将嵌入存储在一个开源向量存储中以供检索。我们将依赖 OpenAI 嵌入模型和 FAISS 向量存储。您还可以选择提供一个路径以便将向量存储保存在本地。 from typing import List, Optional from langchain_openai import OpenAIEmbeddings from langchain.vectorstores import FAISS from langchain.text_splitter import RecursiveCharacterTextSplitterdef create_vector_store(docs, store_path: Optional[str] None) - FAISS:从文档列表创建 FAISS 向量存储。Args:docs (List[Document]): 包含要存储的内容的 Document 对象列表。store_path (Optional[str]): 用于在本地存储向量存储的路径。如果为 None则不会存储向量存储。Returns:FAISS: 包含文档的 FAISS 向量存储。# 创建文本拆分器text_splitter RecursiveCharacterTextSplitter(chunk_size1000,chunk_overlap200,)texts text_splitter.split_documents(docs)# 嵌入对象embedding_model OpenAIEmbeddings()# 创建 FAISS 向量存储store FAISS.from_documents(texts, embedding_model)# 如果提供了路径则将向量存储保存在本地if store_path:store.save_local(store_path)return store# 创建向量存储 store create_vector_store(saved_docs)# 创建检索器 retriever store.as_retriever()步骤 4创建用于响应生成的检索链 现在我们将创建 create_generate_chain 函数来创建一个响应生成链。该函数首先使用一个 generate_template 来提供有关该过程的详细说明。这个模板有两个占位符{context} 用于存储相关信息{input} 用于存储问题。然后使用 LangChain 中的 PromptTemplate 模块它接受两个变量template generate_template 和 input_variables [context, input]。最后一步是使用 generate_prompt、大语言模型和 StrOutputParser() 创建 generate_chain。 # generate_chain.py from langchain.prompts import PromptTemplate from langchain_core.output_parsers import StrOutputParserdef create_generate_chain(llm):创建一个用于回答代码相关问题的生成链。Args:llm (LLM): 用于生成响应的语言模型。Returns:一个可调用函数它接受上下文和问题作为输入并返回字符串响应。generate_template 你是一个名为 Speckly 的乐于助人的代码助手。用户向你提供了一个与代码相关的问题其内容由以下上下文部分表示由 context/context 分隔。使用这些来回答最后的问题。这些文件涉及 Speckle 开发者文档。你可以假设用户是土木工程师、建筑师或软件开发人员。如果你不知道答案就说你不知道。不要试图编造答案。如果问题与上下文无关请礼貌地回复说你只回答与上下文相关的问题。提供尽可能详细的答案并使用 Python默认生成代码除非用户在问题中特别说明。context{context}/contextquestion{input}/questiongenerate_prompt PromptTemplate(templategenerate_template, input_variables[context, input])# 创建生成链generate_chain generate_prompt | llm | StrOutputParser()return generate_chain# 创建生成链 generate_chain create_generate_chain(llm)这里需要注意的是StrOutputParser() 用于从大语言模型获取字符串输出。否则输出可能很复杂例如 JSON 或结构化消息对象这些对象无法直接用于进一步处理或向用户显示。没有 StrOutputParser() 的输出可能如下所示 {content: This is the response from the LLM.,metadata: {confidence: 0.8,response_time: 0.5} }而使用 StrOutputParser()输出如下所示 This is the response from the LLM.步骤 5创建评分器 在这一步中我们将创建不同的评分器用于评估检索到的文档与用户问题的相关性、评估生成的答案、检查答案是否合理以及在没有获得相关文档时重新编写查询。 检索评分器 首先我们创建一个检索评分器以评估检索到的文档与用户问题的相关性。为此我们定义一个 create_retrieval_grader 函数该函数接受一个带有新指令的提示模板 grade_prompt。该函数指示评分器在文档中查找与用户问题相关的关键字。如果存在此类关键字则该文档被视为相关。评分器应该提供一个二进制分数“yes” 或 “no”表示该文档是否与问题相关并以 JSON 格式提供结果其中包含一个键“score”。 def create_retrieval_grader(model):创建一个检索评分器用于评估检索到的文档与用户问题的相关性。Returns:一个可调用函数它接受文档和问题作为输入并返回一个 JSON 对象其中包含一个二进制分数表示该文档是否与问题相关。grade_prompt PromptTemplate(template|begin_of_text||start_header_id|system|end_header_id|你是一个评分器负责评估检索到的文档与用户问题的相关性。如果文档包含与用户问题相关的关键字则将其评级为相关。它不需要是一个严格的测试。目标是过滤掉错误的检索结果。给出一个二进制分数“yes”或“no”表示该文档是否与问题相关。以 JSON 格式提供二进制分数其中包含一个键“score”并且没有前言或解释。|eot_id||start_header_id|user|end_header_id|以下是检索到的文档 \n\n {document} \n\n以下是用户问题 {input} \n|eot_id||start_header_id|assistant|end_header_id|,input_variables[document, input],)# 创建检索器链retriever_grader grade_prompt | model | JsonOutputParser()return retriever_grader以下是一个示例 model ... 在此处提供您的 llm grader create_retrieval_grader(model) document France is a country in Europe. Paris is the capital of France. question What is the capital of France? score grader(document, question) print(score) 输出 {score: yes}幻觉评分器 接下来我们定义一个幻觉评分器用于评估从大语言模型获得的答案是否基于一组事实。该评分器提供一个二进制分数“yes”或“no”表示答案是否合理。提示模板将包括事实 ({documents}) 和答案 ({generation}) 的占位符这些占位符将在使用提示时填充。 def create_hallucination_grader(self):创建一个幻觉评分器用于评估答案是否基于/得到一组事实的支持。Returns:一个可调用函数它接受生成答案和文档列表事实作为输入并返回一个 JSON 对象其中包含一个二进制分数表示答案是否基于/得到事实的支持。hallucination_prompt PromptTemplate(template|begin_of_text||start_header_id|system|end_header_id|你是一个评分器负责评估答案是否基于/得到一组事实的支持。给出一个二进制分数“yes”或“no”表示答案是否基于/得到一组事实的支持。以 JSON 格式提供二进制分数其中包含一个键“score”并且没有前言或解释。|eot_id||start_header_id|user|end_header_id|以下是事实\n ------- \n{documents}\n ------- \n以下是答案 {generation}|eot_id||start_header_id|assistant|end_header_id|,input_variables[generation, documents],)hallucination_grader hallucination_prompt | self.model | JsonOutputParser()return hallucination_grader以下是一个示例 from langchain_openai import ChatOpenAI## LLM model model ChatOpenAI(modelgpt-4o, temperature0) ## Grader grader create_hallucination_grader(model) answer The capital of France is Paris. facts [France is a country in Europe., Paris is the capital of France.] score grader(answer, facts) print(score) # 输出 {score: yes}代码评估器 接下来我们定义一个 create_code_evaluator 函数该函数创建一个代码评估器以评估生成的代码是否正确以及是否与给定问题相关。它使用 PromptTemplate 指示评估器提供一个带有二进制分数和反馈的 JSON 响应。评估器接受生成代码、问题和文档列表作为输入并返回一个 JSON 对象其中包含一个分数表示代码是否正确和相关以及对评估的简要说明。 def create_code_evaluator(self):创建一个代码评估器用于评估生成的代码是否正确以及是否与给定问题相关。Returns:一个可调用函数它接受生成代码、问题和文档列表作为输入并返回一个带有二进制分数和反馈的 JSON 对象。eval_template PromptTemplate(template|begin_of_text||start_header_id|system|end_header_id| 你是一个代码评估器负责评估生成的代码是否正确以及是否与给定问题相关。提供一个带有以下键的 JSON 响应“score”一个二进制分数“yes”或“no”表示代码是否正确和相关。“feedback”对你的评估的简要说明包括任何问题或需要改进的地方。|eot_id||start_header_id|user|end_header_id|以下是生成的代码\n ------- \n{generation}\n ------- \n以下是问题 {input}\n ------- \n以下是相关文档 {documents}|eot_id||start_header_id|assistant|end_header_id|,input_variables[generation, input, documents],)code_evaluator eval_template | self.model | JsonOutputParser()return code_evaluator以下是一个使用示例 model ... # 初始化一个语言模型code_evaluator create_code_evaluator(model)code def greet(name): return fHello, {name}! question Write a function to greet someone by name. documents [A function should take a name as input and return a greeting message.]result code_evaluator(code, question, documents) print(result) # 输出 {score: yes, feedback: The code is correct and relevant to the question.}最后我们创建 create_question_rewriter 函数该函数构建一个重写器链用于优化给定问题以增强其清晰度和相关性。此函数返回一个可调用函数该函数接受一个问题作为输入并输出重写后的问题作为字符串。 def create_question_rewriter(model):创建一个问题重写器链用于重写给定问题以提高其清晰度和相关性。Returns:一个可调用函数它接受一个问题作为输入并返回重写后的问题作为字符串。re_write_prompt hub.pull(efriis/self-rag-question-rewriter)question_rewriter re_write_prompt | self.model | StrOutputParser()return question_rewriter以下是一个使用示例 rewriter create_question_rewriter() original_question how to use speckles python sdk? rewritten_question rewriter(original_question) print(rewritten_question) # 输出 How to install speckles python sdk?现在我们已经定义了所有组件我们可以创建一个名为 GraderUtils 的类来包含所有这些函数。然后我们可以使用我们的 LLM 模型作为唯一必要的输入来初始化这个类的一个实例。 from langchain_openai import ChatOpenAIclass GraderUtils:def __init__(self, model):self.model modeldef create_retrieval_grader(self):...def create_hallucination_grader(self):...def create_code_evaluator(self):... def create_question_rewriter(self):...## LLM model llm ChatOpenAI(modelgpt-4o, temperature0)# 创建 GraderUtils 类的一个实例 grader GraderUtils(llm)# 获取检索评分器 retrieval_grader grader.create_retrieval_grader()# 获取幻觉评分器 hallucination_grader grader.create_hallucination_grader()# 获取代码评估器 code_evaluator grader.create_code_evaluator()# 获取问题重写器 question_rewriter grader.create_question_rewriter()想要了解更多信息您可以参考 langchain-ai 仓库中的 RAG 笔记本。 步骤 6创建图 现在我们已经拥有了所有组件接下来我们将使用 LangGraph 创建图。 定义图的状态 首先我们定义一个 GraphState 类来表示图的状态该状态包含三个关键属性input、generation 和 documents。其中input 属性存储用户输入的问题generation 属性存储大语言模型根据输入生成的答案documents 属性存储相关文档列表。 from typing_extensions import TypedDict from typing import Listclass GraphState(TypedDict):表示图的状态。Attributes:question: 问题generation: LLM 生成documents: 文档列表input: strgeneration: strdocuments: str #List[str]GraphState 中定义的状态在整个图中全局可访问并且这些属性是节点函数可以修改的唯一变量。 节点 接下来我们定义节点。节点是 Python 函数它们接收图的状态执行一些操作并修改状态变量。我们定义一个名为 GraphNodes 的类来包含所有节点函数。 from document import Document from utils.generate_chain import create_generate_chainclass GraphNodes:def __init__(self, llm, retriever, retrieval_grader, hallucination_grader, code_evaluator, question_rewriter):self.llm llmself.retriever retrieverself.retrieval_grader retrieval_graderself.hallucination_grader hallucination_graderself.code_evaluator code_evaluatorself.question_rewriter question_rewriterself.generate_chain create_generate_chain(llm)def retrieve(self, state):检索文档Args:state (dict): 当前图状态Returns:state (dict): 添加到状态的新键文档其中包含检索到的文档print(---RETRIEVE---)question state[input]# 检索documents self.retriever.invoke(question)return {documents: documents, input: question}def generate(self, state):生成答案Args:state (dict): 当前图状态Returns:state (dict): 添加到状态的新键生成其中包含 LLM 生成print(---GENERATE---)question state[input]documents state[documents]# RAG 生成generation self.generate_chain.invoke({context: documents, input: question})return {documents: documents, input: question, generation: generation}def grade_documents(self, state):确定检索到的文档是否与问题相关。Args:state (dict): 当前图状态Returns:state (dict): 使用仅过滤后的相关文档更新文档键print(---CHECK DOCUMENT RELEVANCE TO QUESTION---)question state[input]documents state[documents]# 对每个文档进行评分filtered_docs []for d in documents:score self.retrieval_grader.invoke({input: question, document: d.page_content})grade score[score]if grade yes:print(---GRADE: DOCUMENT RELEVANT---)filtered_docs.append(d)else:print(---GRADE: DOCUMENT IR-RELEVANT---)continuereturn {documents: filtered_docs, input: question}def transform_query(self, state):转换查询以生成更好的问题。Args:state (dict): 当前图状态Returns:state (dict): 使用重新表述的问题更新问题键print(---TRANSFORM QUERY---)question state[input]documents state[documents]# 重新编写问题better_question self.question_rewriter.invoke({input: question})return {documents: documents, input: better_question}retrieve根据输入问题检索文档并将它们添加到图状态中。generate使用输入问题和检索到的文档生成答案并将生成添加到图状态中。grade_documents根据检索到的文档与输入问题的相关性对其进行过滤仅使用相关文档更新图状态。transform_query重新表述输入问题以提高其清晰度和相关性使用转换后的问题更新图状态。 边 边函数引导图处理流程根据当前状态和各种节点函数的结果做出决策。 class EdgeGraph:def __init__(self, hallucination_grader, code_evaluator):self.hallucination_grader hallucination_graderself.code_evaluator code_evaluatordef decide_to_generate(self, state):确定是生成答案还是重新生成问题。Args:state (dict): 当前图状态Returns:str: 对要调用的下一个节点的二进制决策print(---ASSESS GRADED DOCUMENTS---)question state[input]filtered_documents state[documents]if not filtered_documents:# 所有文档都已过滤 check_relevance# 我们将重新生成一个新查询print(---DECISION: ALL DOCUMENTS ARE NOT RELEVANT TO QUESTION, TRANSFORM QUERY---)return transform_query # retrieve_from_community_page, transform_queryelse:# 我们有相关文档因此生成答案print(---DECISION: GENERATE---)return generatedef grade_generation_v_documents_and_question(self, state):确定生成是否基于文档并回答问题。Args:state (dict): 当前图状态Returns:str: 对要调用的下一个节点的决策print(---CHECK HALLUCINATIONS---)question state[input]documents state[documents]generation state[generation]score self.hallucination_grader.invoke({documents: documents, generation: generation})grade score[score]# 检查幻觉if grade yes:print(---DECISION: GENERATION IS GROUNDED IN DOCUMENTS---)# 检查问答print(---GRADE GENERATION vs QUESTION---)score self.code_evaluator.invoke({input: question, generation: generation, documents: documents})grade score[score]if grade yes:print(---DECISION: GENERATION ADDRESSES QUESTION---)return usefulelse:print(---DECISION: GENERATION DOES NOT ADDRESS QUESTION---)return not usefulelse:print(---DECISION: GENERATIONS ARE HALLUCINATED, RE-TRY---)return not supported EdgeGraph 类定义了以下边函数 decide_to_generate根据过滤后的文档与输入问题的相关性决定是生成答案还是重新生成问题。grade_generation_v_documents_and_question根据生成的答案是否基于文档及其回答问题的能力来评估生成的答案。 构建图 现在我们已经定义了图状态、节点和边函数我们可以开始构建图了。 # 初始化图 workflow StateGraph(GraphState) # 创建 GraphNodes 类的一个实例 graph_nodes GraphNodes(llm, retriever, retrieval_grader, hallucination_grader, code_evaluator, question_rewriter) # 创建 EdgeGraph 类的一个实例 edge_graph EdgeGraph(hallucination_grader, code_evaluator) # 定义节点 workflow.add_node(retrieve, graph_nodes.retrieve) # 检索文档 workflow.add_node(grade_documents, graph_nodes.grade_documents) # 对文档进行评分 workflow.add_node(generate, graph_nodes.generate) # 生成答案 workflow.add_node(transform_query, graph_nodes.transform_query) # 转换查询 # 构建图 workflow.set_entry_point(retrieve) workflow.add_edge(retrieve, grade_documents) workflow.add_conditional_edges(grade_documents,edge_graph.decide_to_generate,{transform_query: transform_query, # transform_query: transform_query,generate: generate,}, ) workflow.add_edge(transform_query, retrieve) workflow.add_conditional_edges(generate,edge_graph.grade_generation_v_documents_and_question,{not supported: generate,useful: END,not useful: transform_query, # transform_query}, ) # 编译 chain workflow.compile()首先我们使用 StateGraph 类初始化图。然后我们创建 GraphNodes 和 EdgeGraph 类的实例。接下来我们添加已经定义函数的节点 retrieve根据输入问题检索相关文档。grade_documents根据检索到的文档与问题的相关性对其进行过滤。generate根据过滤后的文档生成答案。transform_query转换输入问题以提高其清晰度和相关性。 图的起始节点是 retrieve 节点。retrieve 节点和 grade_documents 节点之间有一条普通边连接。在 grade_documents 节点之后工作流到达一个条件边。此时会调用 edge_graph.decide_to_generate 函数来决定工作流的下一步。该函数评估已评分的文档并决定是转换查询还是生成答案。如果函数返回 transform_query则工作流将移动到 transform_query 节点该节点转换输入问题以提高其清晰度和相关性。如果函数返回 generate则工作流将移动到 generate 节点该节点根据过滤后的文档生成答案。 transform_query 和 retrieve 之间也有一条普通边连接。这是因为在转换查询之后工作流会移回 retrieve 节点以根据转换后的查询检索新文档。 生成答案后工作流到达一个条件边。此时会调用 edge_graph.grade_generation_v_documents_and_question 函数根据生成的答案是否基于文档及其回答问题的能力来评估生成的答案。如果函数返回 not supported则工作流将移回 generate 节点以重新生成答案。此步骤对于确保工作流生成受文档支持的答案是必需的。如果函数返回 useful则工作流将结束表示已生成有用的答案。如果函数返回 not useful则工作流将移动到 transform_query 节点以再次转换查询。 最后我们将编译图以将其转换为可执行链。 步骤 7使用 FastAPI 启动服务器 现在我们将使用 FastAPI 启动服务器。 首先我们创建一个 FastAPI 应用程序。 app FastAPI(titleSpeckle服务器,version1.0,description用于回答有关Speckle Developer Docs的问题的API服务器 )接下来我们为根 URL (/) 定义一个路由该路由重定向到文档 URL (/docs)。 app.get(/) async def redirect_root_to_docs():return RedirectResponse(/docs)然后我们使用 Pydantic 的 BaseModel 定义两个模型Input 和 Output。这些模型将用于定义 API 的输入和输出数据的结构。 class Input(BaseModel):input: strclass Output(BaseModel):output: dict接下来我们使用 add_routes 函数向应用程序添加路由。 add_routes(app,chain.with_types(input_typeInput, output_typeOutput),path/speckle_chat, )最后我们使用 Uvicorn 运行服务器。 if __name__ __main__:import uvicornuvicorn.run(app, hostlocalhost, port8000)现在我们已经创建了一个 FastAPI 应用程序并启动了一个可以从 http://localhost:8000 访问的服务器。 步骤 8使用 Streamlit/Gradio 创建客户端 现在我们将创建客户端来与服务器进行交互。 使用 Streamlit 创建 UI 首先我们使用 Python 中的 Streamlit 库创建一个客户端。 import streamlit as st from langserve import RemoteRunnable from pprint import pprintst.title(Welcome to Speckle Server) input_text st.text_input(ask speckle related question here)if input_text:with st.spinner(Processing...):try:app RemoteRunnable(http://localhost:8000/speckle_chat/)for output in app.stream({input: input_text}):for key, value in output.items():# 节点pprint(fNode {key}:)# 可选在每个节点打印完整状态# pprint.pprint(value[keys], indent2, width80, depthNone)pprint(\n---\n)output value[generation] st.write(output)except Exception as e:st.error(fError: {e})我们首先设置 Streamlit 应用程序包括一个标题和一个文本输入字段供用户输入问题。当用户输入任何文本时应用程序会显示一个微调器表示正在处理输入。然后应用程序使用 langserve 中的 RemoteRunnable 模块和服务器 URL 连接到服务器。它使用 stream 命令流式传输来自大语言模型的响应同时打印图工作流中触发的节点。最后我们从存储在值字典中的 generation 键中检索最终输出。如果在处理过程中出现错误它将显示错误消息。 使用 Gradio 创建 UI 我们还可以使用 Gradio 来创建客户端 UI。Gradio 是一个开源 Python 库用于为机器学习模型、API 和任意 Python 函数创建交互式基于 Web 的用户界面。 首先我们创建一个函数该函数将允许从大语言模型中获取最终响应。 def get_response(input_text):app RemoteRunnable(http://localhost:8000/speckle_chat/)for output in app.stream({input: input_text}):for key, value in output.items():# 节点pprint(fNode {key}:)# 可选在每个节点打印完整状态# pprint.pprint(value[keys], indent2, width80, depthNone)pprint(\n---\n)output value[generation]return output然后我们创建一个简单的 Gradio UI。 import gradio as gr from langserve import RemoteRunnable from pprint import pprint# 在 Gradio 中创建 UI iface gr.Interface(fnget_response, inputsgr.Textbox(valueEnter your question), outputstextbox, titleQA over Speckles developer docs,descriptionAsk a question about Speckles developer docs and get an answer from the code assistant. This assistant looks up relevant documents and answers your code-related question.,examples[[How do I install Speckles python sdk?], [How to commit and retrieve an object from Speckle?],],themegr.themes.Soft(),allow_flaggingnever,)iface.launch(shareTrue) # 将 share 设置为 True 以获取公共 URL在 launch 函数中设置 shareTrue 可以获取公共 URL。 总结 今天我们探讨了如何为包含高级 RAG检索增强生成概念的图工作流开发服务器-客户端架构。我们创建了一个服务器组件该组件涵盖了一个全面的管道包括对检索到的文档进行评分、对响应进行评分、检查幻觉和查询重写。为了与此本地服务器交互我们创建了两个客户端应用程序一个使用 Streamlit另一个使用 Gradio。这两个 UI 都为用户提供了一个友好的界面让他们可以输入查询并实时接收服务器的响应。这是一个端到端的项目允许开发人员在将应用程序部署到生产环境之前构建应用程序并在本地对其进行测试。 ​ 如何学习AI大模型 作为一名热心肠的互联网老兵我决定把宝贵的AI知识分享给大家。 至于能学习到多少就看你的学习毅力和能力了 。我已将重要的AI大模型资料包括AI大模型入门学习思维导图、精品AI大模型学习书籍手册、视频教程、实战学习等录播视频免费分享出来。 这份完整版的大模型 AI 学习资料已经上传CSDN朋友们如果需要可以微信扫描下方CSDN官方认证二维码免费领取【保证100%免费】 一、全套AGI大模型学习路线 AI大模型时代的学习之旅从基础到前沿掌握人工智能的核心技能 二、640套AI大模型报告合集 这套包含640份报告的合集涵盖了AI大模型的理论研究、技术实现、行业应用等多个方面。无论您是科研人员、工程师还是对AI大模型感兴趣的爱好者这套报告合集都将为您提供宝贵的信息和启示。 三、AI大模型经典PDF籍 随着人工智能技术的飞速发展AI大模型已经成为了当今科技领域的一大热点。这些大型预训练模型如GPT-3、BERT、XLNet等以其强大的语言理解和生成能力正在改变我们对人工智能的认识。 那以下这些PDF籍就是非常不错的学习资源。 四、AI大模型商业化落地方案 作为普通人入局大模型时代需要持续学习和实践不断提高自己的技能和认知水平同时也需要有责任感和伦理意识为人工智能的健康发展贡献力量。
http://www.hkea.cn/news/14553426/

相关文章:

  • 国产做爰网站昆明网站开发价格
  • 网站建设虚拟主机移动网站建设信息
  • 学技巧网站制作竞价在什么网站上做
  • 如何做一个个人网站免费货源在线永久
  • 无锡做网站首选众诺网站规划方案模板
  • 建设网站英语上海展览设计制作公司
  • 网站策划工具个人网站建设素材
  • 郑州网站建设(智巢)南沙网站制作
  • 西安那些做网站的公司公司变更注册地址的流程
  • 网站建设模板怎么用如何用服务器搭建网站
  • 哈尔滨网站制作建设廊坊seo管理
  • 在社保网站做调动肇庆seo排名外包
  • 吉林省住房和城乡建设厅网站沈阳网站优化哪家好
  • 做网站和APP需要多少钱盐城网站开发建设
  • 网站建设找哪一家比较好4.9.8wordpress
  • 如何设立外贸网站网站开发目录static
  • 政务网站建设和技术维护制度建筑招工找活平台
  • 在哪里查网站是什么时候建站德清网站制作
  • 网站开发的主要工作步骤超酷个人网站欣赏
  • 唯品会 一家专门做特卖的网站手机版深圳便宜做网站
  • 建设部颁发的证书网站合肥网站建设企业
  • 自适应网站方案seo关键词优化最多可以添加几个词
  • 企业网站建设需注意点wordpress 股票 插件
  • 阿里云 拦截网站团购网站系统建设进度安排
  • 建设网站增城查询公司营业执照的网站
  • 做编程网站有哪些方面包装模板网站
  • 网站推广费用视觉创意设计公司
  • 建设网站具体的步骤模板网站视频
  • 西安建设网站首页谷歌搜索引擎免费
  • 烟台城乡建设学校96级给排水网站工业设计专业大学排名