ARTICLE DETAIL

资讯详情

深耕网站视觉设计与运营推广的一线实战洞察。

PyCharm中AI插件实战,使用例子“RAG检索融合“

PyCharm中AI插件实战,使用例子“RAG检索融合“ 1、先试的AI Chat中添加AI Assistant折腾了好一会儿发现用不了。2、搜了资料可以安装Jetbrains AI Assistantdeepseek插件但是也是不好用。后面安装了qoder插件发现挺好用的。python代码如下#!/usr/bin/env python # -*- coding: UTF-8 -*- import os from langchain_chroma import Chroma from base_llm import llm, embeddings_model from langchain_core.output_parsers import StrOutputParser from langchain_classic import hub # from langsmith import Client from langchain_core.load import dumps, loads texts [ 人工智能在医疗诊断中的应用。, 人工智能如何提升供应链效率。, NBA季后赛最新赛况分析。, 传统法式烘焙的五大技巧。, 红楼梦人物关系图谱分析。, 人工智能在金融风险管理中的应用。, 人工智能如何影响未来就业市场。, 人工智能在制造业的应用。, 今天天气怎么样, 人工智能伦理公平性与透明度。 ] # 创建向量数据库对象 vectorstore Chroma.from_texts( textstexts, embeddingembeddings_model ) retriever vectorstore.as_retriever() prompt hub.pull(langchain-ai/rag-fusion-query-generation, dangerously_pull_public_promptTrue) # client Client() # prompt client.pull_prompt(langchain-ai/rag-fusion-query-generation, dangerously_pull_public_promptTrue) print(prompt) # 创建多重查询chain generate_queries ( prompt | llm | StrOutputParser() | (lambda x: x.split(\n)) ) original_query 人工智能的应用 queries generate_queries.invoke({original_query: original_query}) print(--------------问题检索到的内容-------------) print(queries) print(--------------循环开始-------------) # 我们检索到的内容的位置是不一样的, 需要给查询到的数据进行融合重排 for i in queries: print(retriever.invoke(i)) print(--------------循环结束-------------) def reciprocal_rank_fusion(results: list[list], k60): 互逆排序融合算法用于合并多个排序文档列表 Args: results: 包含多个排序文档列表的二维列表 k: 融合公式中的平滑参数默认60值越小排名影响越大 Returns: 按融合分数降序排列的文档列表每个元素为(文档对象, 分数)元组 # 初始化融合分数字典key序列化文档value累计分数 fused_scores {} # 遍历每个检索结果列表每个查询对应的结果 for docs in results: # 对当前结果列表中的文档进行遍历rank从0开始计算 for rank, doc in enumerate(docs): # 序列化文档对象为字符串用于唯一标识 doc_str dumps(doc) # 初始化文档得分如果是首次出现 if doc_str not in fused_scores: fused_scores[doc_str] 0 # 计算并累加RRF分数1 / (当前排名 k) # 排名越靠前rank值小的文档获得的分数越高 fused_scores[doc_str] 1 / (rank k) # 按融合分数降序排序分数越高排名越前 sorted_Data sorted(fused_scores.items(), keylambda x: x[1], reverseTrue) # print(sorted_Data) reranked_results [ (loads(doc), score) for doc, score in sorted_Data ] return reranked_results print(--------------问题融合后的内容-------------) original_query 人工智能的应用 chain generate_queries | retriever.map() | reciprocal_rank_fusion # 输入结果列表 result_list chain.invoke({original_query: original_query}) print(result_list) print(--------------融合后的循环开始-------------) # 提取文档内容和对应分数 for i in result_list: print(i[0].page_content, i[1])执行报错了报错内容如下C:\Users\lenovo\PycharmProjects\PythonProject\.venv\Scripts\python.exe C:\Users\lenovo\PycharmProjects\PythonProject\rag\day08\05-检索融合.py C:\Users\lenovo\PycharmProjects\PythonProject\.venv\Lib\site-packages\langchain_core\utils\pydantic.py:41: UserWarning: Core Pydantic V1 functionality isnt compatible with Python 3.14 or greater. from pydantic.v1 import BaseModel as BaseModelV1 Loading weights: 100%|██████████| 199/199 [00:0000:00, 65162.50it/s] C:\Users\lenovo\PycharmProjects\PythonProject\rag\day08\05-检索融合.py:33: LangChainDeprecationWarning: langchain_classic.hub.pull is deprecated. Use the LangSmith SDK instead. prompt hub.pull(langchain-ai/rag-fusion-query-generation) Traceback (most recent call last): File C:\Users\lenovo\PycharmProjects\PythonProject\rag\day08\05-检索融合.py, line 33, in module prompt hub.pull(langchain-ai/rag-fusion-query-generation) File C:\Users\lenovo\PycharmProjects\PythonProject\.venv\Lib\site-packages\langchain_core\_api\deprecation.py, line 225, in warning_emitting_wrapper return wrapped(*args, **kwargs) File C:\Users\lenovo\PycharmProjects\PythonProject\.venv\Lib\site-packages\langchain_classic\hub.py, line 117, in pull return client.pull_prompt(owner_repo_commit, include_modelinclude_model) ~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File C:\Users\lenovo\PycharmProjects\PythonProject\.venv\Lib\site-packages\langsmith\client.py, line 9445, in pull_prompt prompt_object self.pull_prompt_commit( prompt_identifier, ...2 lines... dangerously_pull_public_promptdangerously_pull_public_prompt, ) File C:\Users\lenovo\PycharmProjects\PythonProject\.venv\Lib\site-packages\langsmith\client.py, line 9293, in pull_prompt_commit _validate_public_prompt_pull( ~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ prompt_identifier, ^^^^^^^^^^^^^^^^^^ dangerously_pull_public_promptdangerously_pull_public_prompt, ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ) ^ File C:\Users\lenovo\PycharmProjects\PythonProject\.venv\Lib\site-packages\langsmith\client.py, line 370, in _validate_public_prompt_pull raise ValueError( ...4 lines... ) ValueError: Pulling a public prompt by owner/name is disabled by default because prompts may contain untrusted serialized LangChain objects. If you trust this prompt, set dangerously_pull_public_promptTrue to acknowledge the risk.使用qoder插件把错误内容粘贴到对话框请求处理试了2次解决方案最终搞定了代码如下#!/usr/bin/env python # -*- coding: UTF-8 -*- import os from langchain_chroma import Chroma from base_llm import llm, embeddings_model from langchain_core.output_parsers import StrOutputParser # from langchain_classic import hub from langsmith import Client from langchain_core.load import dumps, loads texts [ 人工智能在医疗诊断中的应用。, 人工智能如何提升供应链效率。, NBA季后赛最新赛况分析。, 传统法式烘焙的五大技巧。, 红楼梦人物关系图谱分析。, 人工智能在金融风险管理中的应用。, 人工智能如何影响未来就业市场。, 人工智能在制造业的应用。, 今天天气怎么样, 人工智能伦理公平性与透明度。 ] # 创建向量数据库对象 vectorstore Chroma.from_texts( textstexts, embeddingembeddings_model ) retriever vectorstore.as_retriever() # prompt hub.pull(langchain-ai/rag-fusion-query-generation) client Client() prompt client.pull_prompt(langchain-ai/rag-fusion-query-generation, dangerously_pull_public_promptTrue) print(prompt) # 创建多重查询chain generate_queries ( prompt | llm | StrOutputParser() | (lambda x: x.split(\n)) ) original_query 人工智能的应用 queries generate_queries.invoke({original_query: original_query}) print(--------------问题检索到的内容-------------) print(queries) print(--------------循环开始-------------) # 我们检索到的内容的位置是不一样的, 需要给查询到的数据进行融合重排 for i in queries: print(retriever.invoke(i)) print(--------------循环结束-------------) def reciprocal_rank_fusion(results: list[list], k60): 互逆排序融合算法用于合并多个排序文档列表 Args: results: 包含多个排序文档列表的二维列表 k: 融合公式中的平滑参数默认60值越小排名影响越大 Returns: 按融合分数降序排列的文档列表每个元素为(文档对象, 分数)元组 # 初始化融合分数字典key序列化文档value累计分数 fused_scores {} # 遍历每个检索结果列表每个查询对应的结果 for docs in results: # 对当前结果列表中的文档进行遍历rank从0开始计算 for rank, doc in enumerate(docs): # 序列化文档对象为字符串用于唯一标识 doc_str dumps(doc) # 初始化文档得分如果是首次出现 if doc_str not in fused_scores: fused_scores[doc_str] 0 # 计算并累加RRF分数1 / (当前排名 k) # 排名越靠前rank值小的文档获得的分数越高 fused_scores[doc_str] 1 / (rank k) # 按融合分数降序排序分数越高排名越前 sorted_Data sorted(fused_scores.items(), keylambda x: x[1], reverseTrue) # print(sorted_Data) reranked_results [ (loads(doc), score) for doc, score in sorted_Data ] return reranked_results print(--------------问题融合后的内容-------------) original_query 人工智能的应用 chain generate_queries | retriever.map() | reciprocal_rank_fusion # 输入结果列表 result_list chain.invoke({original_query: original_query}) print(result_list) print(--------------融合后的循环开始-------------) # 提取文档内容和对应分数 for i in result_list: print(i[0].page_content, i[1])控制台打印如下C:\Users\lenovo\PycharmProjects\PythonProject\.venv\Scripts\python.exe C:\Users\lenovo\PycharmProjects\PythonProject\rag\day08\05-检索融合.py C:\Users\lenovo\PycharmProjects\PythonProject\.venv\Lib\site-packages\langchain_core\utils\pydantic.py:41: UserWarning: Core Pydantic V1 functionality isnt compatible with Python 3.14 or greater. from pydantic.v1 import BaseModel as BaseModelV1 Loading weights: 100%|██████████| 199/199 [00:0000:00, 64318.91it/s] input_variables[original_query] input_types{} partial_variables{} metadata{lc_hub_owner: langchain-ai, lc_hub_repo: rag-fusion-query-generation, lc_hub_commit_hash: 478b448e096b977446865108fad34282e6e1a84ae8b8540572ed0df238229a11} messages[SystemMessagePromptTemplate(promptPromptTemplate(input_variables[], input_types{}, partial_variables{}, templateYou are a helpful assistant that generates multiple search queries based on a single input query.), additional_kwargs{}), HumanMessagePromptTemplate(promptPromptTemplate(input_variables[original_query], input_types{}, partial_variables{}, templateGenerate multiple search queries related to: {original_query}), additional_kwargs{}), HumanMessagePromptTemplate(promptPromptTemplate(input_variables[], input_types{}, partial_variables{}, templateOUTPUT (4 queries):), additional_kwargs{})] --------------问题检索到的内容------------- [1. 人工智能在日常生活中的应用场景, 2. 人工智能在医疗和金融领域的应用案例, 3. 生成式人工智能的实际商业应用, 4. 人工智能应用的未来发展趋势与挑战] --------------循环开始------------- [Document(id71aa62c0-c01d-479b-9e53-654d07ee466f, metadata{}, page_content人工智能在制造业的应用。), Document(id627f82c4-1509-4771-85c4-51f0ebe84991, metadata{}, page_content人工智能在金融风险管理中的应用。), Document(idb31bb834-5523-437b-bca6-b85a0dd52714, metadata{}, page_content人工智能在医疗诊断中的应用。), Document(idc42af290-6446-4235-b389-eb4dafe966e2, metadata{}, page_content人工智能如何影响未来就业市场。)] [Document(id627f82c4-1509-4771-85c4-51f0ebe84991, metadata{}, page_content人工智能在金融风险管理中的应用。), Document(idb31bb834-5523-437b-bca6-b85a0dd52714, metadata{}, page_content人工智能在医疗诊断中的应用。), Document(id71aa62c0-c01d-479b-9e53-654d07ee466f, metadata{}, page_content人工智能在制造业的应用。), Document(idc42af290-6446-4235-b389-eb4dafe966e2, metadata{}, page_content人工智能如何影响未来就业市场。)] [Document(id71aa62c0-c01d-479b-9e53-654d07ee466f, metadata{}, page_content人工智能在制造业的应用。), Document(id4f1b555a-711d-46b2-b96e-bda8fb61c463, metadata{}, page_content人工智能如何提升供应链效率。), Document(id627f82c4-1509-4771-85c4-51f0ebe84991, metadata{}, page_content人工智能在金融风险管理中的应用。), Document(idc42af290-6446-4235-b389-eb4dafe966e2, metadata{}, page_content人工智能如何影响未来就业市场。)] [Document(idc42af290-6446-4235-b389-eb4dafe966e2, metadata{}, page_content人工智能如何影响未来就业市场。), Document(id4f1b555a-711d-46b2-b96e-bda8fb61c463, metadata{}, page_content人工智能如何提升供应链效率。), Document(id627f82c4-1509-4771-85c4-51f0ebe84991, metadata{}, page_content人工智能在金融风险管理中的应用。), Document(id71aa62c0-c01d-479b-9e53-654d07ee466f, metadata{}, page_content人工智能在制造业的应用。)] --------------循环结束------------- --------------问题融合后的内容------------- C:\Users\lenovo\PycharmProjects\PythonProject\rag\day08\05-检索融合.py:88: LangChainBetaWarning: The function loads is in beta. It is actively being worked on, so the API may change. (loads(doc), score) for doc, score in sorted_Data C:\Users\lenovo\PycharmProjects\PythonProject\rag\day08\05-检索融合.py:88: LangChainPendingDeprecationWarning: The default value of allowed_objects will change in a future version. Pass an explicit list of allowed classes (or messages for untrusted input that contains only chat messages) to suppress this warning. (loads(doc), score) for doc, score in sorted_Data [(Document(id71aa62c0-c01d-479b-9e53-654d07ee466f, metadata{}, page_content人工智能在制造业的应用。), 0.06612903225806452), (Document(id627f82c4-1509-4771-85c4-51f0ebe84991, metadata{}, page_content人工智能在金融风险管理中的应用。), 0.06453291699193339), (Document(idc42af290-6446-4235-b389-eb4dafe966e2, metadata{}, page_content人工智能如何影响未来就业市场。), 0.048651507139079855), (Document(id4f1b555a-711d-46b2-b96e-bda8fb61c463, metadata{}, page_content人工智能如何提升供应链效率。), 0.04813947436898257), (Document(idb31bb834-5523-437b-bca6-b85a0dd52714, metadata{}, page_content人工智能在医疗诊断中的应用。), 0.03279569892473118)] --------------融合后的循环开始------------- 人工智能在制造业的应用。 0.06612903225806452 人工智能在金融风险管理中的应用。 0.06453291699193339 人工智能如何影响未来就业市场。 0.048651507139079855 人工智能如何提升供应链效率。 0.04813947436898257 人工智能在医疗诊断中的应用。 0.03279569892473118 Process finished with exit code 0但是要先登录登录成功截图
返回列表