毕设做网站可以得高分吗wordpress添加编辑器
毕设做网站可以得高分吗,wordpress添加编辑器,自己怎么搞个软件出来,正鹏建设工程有限公司网站本文详细介绍了LangChain框架下三种数据库操作方法#xff1a;MCP适配器连接、Tools工具调用和直接生成SQL。通过代码示例展示了MCP和Tools的实现流程#xff0c;比较了三种方法的适用场景和效率差异。MCP方式适合需要人性化返回结果的场景#xff0c;而直接生成…本文详细介绍了LangChain框架下三种数据库操作方法MCP适配器连接、Tools工具调用和直接生成SQL。通过代码示例展示了MCP和Tools的实现流程比较了三种方法的适用场景和效率差异。MCP方式适合需要人性化返回结果的场景而直接生成SQL方式适合需要原始数据的场景为开发者提供了灵活的大模型数据库访问解决方案。LangChain是一个专为大语言模型设计的开放框架围绕任务链Chain与内存模块Memory构建了核心架构。这两大组件是LangChain高效构建复杂语言应用的关键所在使模型在多任务环境中得以应对任务管理、上下文维护、记忆存储等多种需求。构建大模型智能应用的时候往往需要对数据库进行查询返回结果如果自己写MCP客户端和Tools工具比较麻烦。如果基于LangChain框架的话可以简化这种方法。本文就来演示一下在LangChain框架下如何使用MCP操作数据库以及如何使用Tools来访问数据库。我这里假设你已经构建了MCP服务或者调用的是公共的MCP服务。使用LangChain访问MCP来调用工具现阶段主要是使用模型上下文协议MCP适配器来实现的。MCP适配器用于连接多个 MCP 服务器并加载 LangChain 兼容资源的客户端。此模块提供 MultiServerMCPClient 类用于管理与多个 MCP 服务器的连接并从中加载工具、提示和资源。要使用MultiServerMCPClient需要先安装langchain_mcp_adapters模块pip install langchain-mcp-adapters -i https://pypi.tuna.tsinghua.edu.cn/simple # 使用清华源会提升速度另一个重要的模块是langgraph.prebuilt。这个模块随langgraph模块的安装会自动安装。pip install langgraph -i https://pypi.tuna.tsinghua.edu.cn/simple这个模块是 LangGraph 库的核心组成部分提供了一系列预构建的组件和工具旨在简化复杂 AI 代理和工作流的开发过程。LangGraph 是 LangChain 生态的扩展框架专注于构建有状态、多步骤的 AI 系统通过状态图StateGraph管理节点和边支持动态路由、循环和状态管理。该模块通过封装常见的代理逻辑、工具执行和状态管理功能显著降低了开发者的编码负担适合快速原型化和生产级应用。这里我们主要使用他的一个函数create_react_agent()。这个函数是用于构建基于 ReAct思考-行动模式 的智能代理Agent的核心函数其作用是将大语言模型LLM与工具调用能力结合实现动态任务处理。其中ReAct是一种结合推理和行动的代理架构。使用示例代码如下from langchain_mcp_adapters.client import MultiServerMCPClient # 配置我们自己构建的MCP服务或者公共的MCP地址 client MultiServerMCPClient( { math: { command: python, # Make sure to update to the full absolute path to your math_server.py file args: [/path/to/math_server.py], transport: stdio, }, weather: { # Make sure you start your weather server on port 8000 url: https://:8000/mcp, transport: streamable_http, }, mcp-server-chart: { command: cmd, args: [ /c, npx, -y, antv/mcp-server-chart ], transport: stdio, } } ) # 获取所有的工具列表 tools await client.get_tools() # 真实调用的时候传入大模型和工具列表构建一个agent agent create_react_agent( model, tools ) # 通过invoke来实现工具的调用 result await agent.ainvoke({ messages: [...] })整体流程就是这里我有一个Postgresql数据库表存储是某市的供地信息使用MCP查询数据库并返回结果代码如下# 调用公开MCP工具---------------------- import asyncio from langchain_mcp_adapters.client import MultiServerMCPClient from langchain.agents import create_openai_tools_agent from langchain_core.messages import HumanMessage from langchain_community.utilities import SQLDatabase from langchain_openai import ChatOpenAI from langgraph.prebuilt import create_react_agent from langchain_core.prompts import ChatPromptTemplate model ChatOpenAI( streamingTrue, modeldeepseek-chat, openai_api_key你的API KEY, openai_api_basehttps://api.deepseek.com, max_tokens1024, temperature0.7 ) async def mcp_main(query:str): # 加载 MCP 配置 client MultiServerMCPClient( { postgres: { command: cmd, args: [ /c, npx, -y, modelcontextprotocol/server-postgres, postgresql://postgres:123456localhost:5432/gtyzt ], transport: stdio, } } ) tools await client.get_tools() agent create_react_agent( model, tools ) system_prefix 你是一个SQL语句生成专家。根据用户的问题和提供的数据库表结构信息生成正确的SQL查询语句。 数据库元数据: {schema} 生成SQL的规则: 1. 只生成SQL语句不要添加任何解释或说明 2. 使用正确的表名和列名与提供的结构一致字段要加上中文别名 3. 确保SQL语法正确适用于PostgreSQL数据库geometry类型的字段要用ST_AsText(字段名)来获取 4. 如果有聚合操作确保使用正确的聚合函数 5. 对于日期类型的条件使用正确的日期格式 6. 如果需要排序添加适当的ORDER BY子句 7. 查询结果要去除重复结果 schema table_name: gd, description: 供地数据表, columns:[ {column_name: ogc_fid,chinese_name: 标识码,data_type: int}, {column_name: wkb_geometry,chinese_name: 地理坐标信息,data_type: geometry}, {column_name: shape_len,chinese_name: 图形长度,data_type: double}, {column_name: shape_area,chinese_name: 图形面积,data_type: double}, {column_name: city,chinese_name: 大市,data_type: varchar}, {column_name: town,chinese_name: 区县只到区县,data_type: varchar}, {column_name: tdzl,chinese_name: 土地坐落包括乡镇街道道路,data_type: varchar}, {column_name: xzqdm,chinese_name: 行政区代码,data_type: varchar}, {column_name: tdyt,chinese_name: 土地用途,data_type: varchar}, {column_name: crnx,chinese_name: 出让年限,data_type: varchar}, {column_name: gyfs,chinese_name: 供应方式,data_type: varchar}, ] # 执行任务访问网页并总结内容 result await agent.ainvoke({ messages: [ {role:system, content:system_prefix.format(schemaschema)}, {role:user, content:query} ] }) print(result[messages][-1].content) return result[messages][-1].content if __name__ __main__: query 告诉我某市土地用途类型 asyncio.run(mcp_main(query))返回结果如下可以看到结论清晰并且如果数据库比较大的话我实测速度上比我们自己让大模型去生成SQL再执行是更快的效率也更高。除了使用MCP还有一种办法就是使用Tools来访问数据库我们自己构建一个查询数据库的工具来进行查询并返回本质上也和前面的MCP一样构建了一个工具一次性的返回查询结果。自己编写工具的最大好处就是比较可控。这里我使用langchain_community模块的create_sql_agent()函数。首先我们需要创建一个数据库连接然后我们可以构建提示词我这里使用了few-shot方法给出了几个示例这样的话有利于提升大模型生成SQL的准确性并且速度更快注意在使用few-shot的时候需要使用embedding模型可以自己本地部署也可以使用网上的模型。接下来根据提示词和大模型调用create_sql_agent函数构建一个sql代理agent。通过agent的invoke方法执行查询并把这个流程封装成一个函数作为tool暴露出来供程序调用。主函数中现在大模型上绑定这个tools工具获取包含工具调用的初始响应通过工具的invoke函数获取数据库查询结果最后把结果传给大模型得到最终的输出。# text2sql工具并以tool格式封装查询结果可以通过大模型返回 from langchain.chains import create_sql_query_chain from langchain_experimental.sql import SQLDatabaseChain from langchain_community.utilities import SQLDatabase from langchain_openai import ChatOpenAI db SQLDatabase.from_uri(postgresql://postgres:123456localhost:5432/gtyzt) model ChatOpenAI( streamingTrue, modeldeepseek-chat, openai_api_key你的APK KEY, openai_api_basehttps://api.deepseek.com, max_tokens1024, temperature0.7 ) from langchain_community.agent_toolkits import create_sql_agent from langchain_core.example_selectors import SemanticSimilarityExampleSelector from langchain_openai import OpenAIEmbeddings from langchain_ollama import OllamaEmbeddings from langchain_community.vectorstores import FAISS examples [ {input: 某某区供地地块数量是多少, query: SELECT COUNT(*) FROM gd WHERE town like 某某区%;}, {input: 查询某某区供地信息,query: SELECT DISTINCT ogc_fid AS 标识码, shape_len AS 图形长度, shape_area AS 图形面积, city AS 大市, town AS 区县只到区县, tdzl AS 土地坐落包括乡镇街道道路, xzqdm AS 行政区代码, tdyt AS 土地用途, crnx AS 出让年限, gyfs AS 供应方式 FROM gd WHERE town like 某某区% } ] embeddings OllamaEmbeddings(modelbge-m3:567m) example_selector SemanticSimilarityExampleSelector.from_examples( examples, embeddings, FAISS, k5, input_keys[input], ) from langchain_core.prompts import ( ChatPromptTemplate, FewShotPromptTemplate, MessagesPlaceholder, PromptTemplate, SystemMessagePromptTemplate, ) system_prefix 你是一个SQL语句生成专家。根据用户的问题和提供的数据库表结构信息生成正确的SQL查询语句。 数据库元数据: {schema} 生成SQL的规则: 1. 只生成SQL语句不要添加任何解释或说明 2. 使用正确的表名和列名与提供的结构一致字段要加上中文别名 3. 确保SQL语法正确适用于PostgreSQL数据库geometry类型的字段要用ST_AsText(字段名)来获取 4. 如果有聚合操作确保使用正确的聚合函数 5. 对于日期类型的条件使用正确的日期格式 6. 如果需要排序添加适当的ORDER BY子句 7. 查询结果要去除重复结果 schema table_name: gd, description: 供地数据表, columns:[ {column_name: ogc_fid,chinese_name: 标识码,data_type: int}, {column_name: wkb_geometry,chinese_name: 地理坐标信息,data_type: geometry}, {column_name: shape_len,chinese_name: 图形长度,data_type: double}, {column_name: shape_area,chinese_name: 图形面积,data_type: double}, {column_name: city,chinese_name: 大市,data_type: varchar}, {column_name: town,chinese_name: 区县只到区县,data_type: varchar}, {column_name: tdzl,chinese_name: 土地坐落包括乡镇街道道路,data_type: varchar}, {column_name: xzqdm,chinese_name: 行政区代码,data_type: varchar}, {column_name: tdyt,chinese_name: 土地用途,data_type: varchar}, {column_name: crnx,chinese_name: 出让年限,data_type: varchar}, {column_name: gyfs,chinese_name: 供应方式,data_type: varchar} ] few_shot_prompt FewShotPromptTemplate( example_selectorexample_selector, example_promptPromptTemplate.from_template( User input: {input}\nSQL query: {query} ), input_variables[input, schema], prefixsystem_prefix, suffix, ) full_prompt ChatPromptTemplate.from_messages( [ SystemMessagePromptTemplate(promptfew_shot_prompt), (human, {input}), MessagesPlaceholder(agent_scratchpad), ] ) agent create_sql_agent( llmmodel, dbdb, promptfull_prompt, verboseTrue, agent_typeopenai-tools, ) from langchain_core.tools import tool from langchain_core.messages import HumanMessage from langchain_core.messages import ToolMessage from langchain_core.messages import AIMessage import os import json os.environ[KMP_DUPLICATE_LIB_OK] TRUE tool(description查询数据库) def query_db(query: str) - str: 查询数据库 Args: query: 用户问题 result agent.invoke({input: query, schema: schema}) return result tool(description查询地理位置信息) def query_map(query: str) - str: 查询地理位置信息 Args: query: 用户问题 result agent.invoke({input: query, schema: schema}) print(result) return result if __name__ __main__: llm_with_tools model.bind_tools([query_db]) query 告诉我某市土地用途类型 messages [HumanMessage(query)] # 获取包含工具调用的初始响应 ai_msg llm_with_tools.invoke(messages) messages.append(ai_msg) # 执行工具并获取结果 if ai_msg.tool_calls: tool_result query_db.invoke(ai_msg.tool_calls[0]) json_str tool_result.content json_obj json.loads(json_str) tool_msg ToolMessage( contentjson_obj[output], tool_call_idai_msg.tool_calls[0][id] ) messages.append(tool_msg) # 流式输出最终响应 for chunk in llm_with_tools.stream(messages): if hasattr(chunk, content) and chunk.content: print(chunk.content, end, flushTrue)执行结果如下Finished chain.根据数据库查询结果某市的土地用途类型非常丰富主要包括以下几大类 工业用地一类工业用地二类工业用地三类工业用地 商业服务业用地商务金融用地零售商业用地旅馆用地其他商服用地其他商业服务业用地… …还有一种方法就是通过大模型生成SQL再执行SQL。这种方法其实也是比较好的定制化比较好而且对于需要直接返回数据结果而不希望经过大模型“提炼”与“总结”的场景来说就比较有用了因为不管是MCP还是tools工具调用查询的结果都会经过大模型再过一边得到的是比较“人性化”的返回结果但如果这个接口就是需要返回某种格式的原始结果那么用这种方式就会比较好了。def generate_sql(query): # 使用 invoke 方法调用链 input_data { input: query, schema: schema } result chain.invoke(input_data) result result.replace(sql, ) result result.replace(, ) print(result) return result import psycopg2 import pandas as pd def execute_query(sql): try: conn psycopg2.connect( dbnamegtyzt, userpostgres, password123456, hostlocalhost, # 例如localhost或者你的数据库服务器IP地址 port5432 # PostgreSQL默认端口是5432 ) df pd.read_sql(sql, conn) conn.close() return df except Exception as e: print(f查询出错: {e}) return None def query_map(query:str) - str: 查询地图 sql generate_sql(query) result execute_query(sql) return result.to_json(force_asciiFalse,orientrecords) if __name__ __main__: sql generate_sql(查询某区供地信息) result execute_query(sql) print(result.head(10).to_json(force_asciiFalse,orientrecords))通过这三种方式基本可以完成基于大模型对数据库进行访问和查询了。最后我在一线科技企业深耕十二载见证过太多因技术卡位而跃迁的案例。那些率先拥抱 AI 的同事早已在效率与薪资上形成代际优势我意识到有很多经验和知识值得分享给大家也可以通过我们的能力和经验解答大家在大模型的学习中的很多困惑。我整理出这套 AI 大模型突围资料包✅AI大模型学习路线图✅Agent行业报告✅100集大模型视频教程✅大模型书籍PDF✅DeepSeek教程✅AI产品经理入门资料完整的大模型学习和面试资料已经上传带到CSDN的官方了有需要的朋友可以扫描下方二维码免费领取【保证100%免费】为什么说现在普通人就业/升职加薪的首选是AI大模型人工智能技术的爆发式增长正以不可逆转之势重塑就业市场版图。从DeepSeek等国产大模型引发的科技圈热议到全国两会关于AI产业发展的政策聚焦再到招聘会上排起的长队AI的热度已从技术领域渗透到就业市场的每一个角落。智联招聘的最新数据给出了最直观的印证2025年2月AI领域求职人数同比增幅突破200%远超其他行业平均水平整个人工智能行业的求职增速达到33.4%位居各行业榜首其中人工智能工程师岗位的求职热度更是飙升69.6%。AI产业的快速扩张也让人才供需矛盾愈发突出。麦肯锡报告明确预测到2030年中国AI专业人才需求将达600万人人才缺口可能高达400万人这一缺口不仅存在于核心技术领域更蔓延至产业应用的各个环节。资料包有什么①从入门到精通的全套视频教程⑤⑥包含提示词工程、RAG、Agent等技术点② AI大模型学习路线图还有视频解说全过程AI大模型学习路线③学习电子书籍和技术文档市面上的大模型书籍确实太多了这些是我精选出来的④各大厂大模型面试题目详解⑤ 这些资料真的有用吗?这份资料由我和鲁为民博士共同整理鲁为民博士先后获得了北京清华大学学士和美国加州理工学院博士学位在包括IEEE Transactions等学术期刊和诸多国际会议上发表了超过50篇学术论文、取得了多项美国和中国发明专利同时还斩获了吴文俊人工智能科学技术奖。目前我正在和鲁博士共同进行人工智能的研究。所有的视频教程由智泊AI老师录制且资料与智泊AI共享相互补充。这份学习大礼包应该算是现在最全面的大模型学习资料了。资料内容涵盖了从入门到进阶的各类视频教程和实战项目无论你是小白还是有些技术基础的这份资料都绝对能帮助你提升薪资待遇转行大模型岗位。智泊AI始终秉持着“让每个人平等享受到优质教育资源”的育人理念通过动态追踪大模型开发、数据标注伦理等前沿技术趋势构建起前沿课程智能实训精准就业的高效培养体系。课堂上不光教理论还带着学员做了十多个真实项目。学员要亲自上手搞数据清洗、模型调优这些硬核操作把课本知识变成真本事如果说你是以下人群中的其中一类都可以来智泊AI学习人工智能找到高薪工作一次小小的“投资”换来的是终身受益应届毕业生无工作经验但想要系统学习AI大模型技术期待通过实战项目掌握核心技术。零基础转型非技术背景但关注AI应用场景计划通过低代码工具实现“AI行业”跨界。业务赋能 突破瓶颈传统开发者Java/前端等学习Transformer架构与LangChain框架向AI全栈工程师转型。获取方式有需要的小伙伴可以保存图片到wx扫描二v码免费领取【保证100%免费】**