423 lines
356 KiB
Plaintext
423 lines
356 KiB
Plaintext
|
|
{
|
|||
|
|
"cells": [
|
|||
|
|
{
|
|||
|
|
"metadata": {},
|
|||
|
|
"cell_type": "markdown",
|
|||
|
|
"source": "1.调用大模型",
|
|||
|
|
"id": "9e40c50a8ee97b77"
|
|||
|
|
},
|
|||
|
|
{
|
|||
|
|
"metadata": {
|
|||
|
|
"collapsed": true,
|
|||
|
|
"ExecuteTime": {
|
|||
|
|
"end_time": "2025-10-01T08:17:20.988900Z",
|
|||
|
|
"start_time": "2025-10-01T08:17:19.707303Z"
|
|||
|
|
}
|
|||
|
|
},
|
|||
|
|
"cell_type": "code",
|
|||
|
|
"source": [
|
|||
|
|
"#导入 dotenv 库的 load_dotenv 函数,用于加载环境变量文件(.env)中的配置\n",
|
|||
|
|
"import dotenv\n",
|
|||
|
|
"from langchain.chains.summarize.refine_prompts import prompt_template\n",
|
|||
|
|
"from langchain_openai import ChatOpenAI\n",
|
|||
|
|
"import os\n",
|
|||
|
|
"dotenv.load_dotenv() #加载当前目录下的 .env 文件\n",
|
|||
|
|
"\n",
|
|||
|
|
"# 设置环境变量\n",
|
|||
|
|
"os.environ['OPENAI_API_KEY'] = os.getenv(\"OPENAI_API_KEY1\")\n",
|
|||
|
|
"os.environ['OPENAI_BASE_URL'] = os.getenv(\"OPENAI_BASE_URL\")\n",
|
|||
|
|
"\n",
|
|||
|
|
"llm = ChatOpenAI(model=\"gpt-4.1-nano\")\n",
|
|||
|
|
"response = llm.invoke(\"什么是大模型?用50字内回答。\")\n",
|
|||
|
|
"print(response)"
|
|||
|
|
],
|
|||
|
|
"id": "5227d025abec86b7",
|
|||
|
|
"outputs": [
|
|||
|
|
{
|
|||
|
|
"name": "stdout",
|
|||
|
|
"output_type": "stream",
|
|||
|
|
"text": [
|
|||
|
|
"content='大模型是指具有大量参数、能处理复杂任务的人工智能模型,通常基于深度学习技术,能进行自然语言理解、图像识别等多种应用。' additional_kwargs={'refusal': None} response_metadata={'token_usage': {'completion_tokens': 41, 'prompt_tokens': 18, 'total_tokens': 59, 'completion_tokens_details': {'accepted_prediction_tokens': 0, 'audio_tokens': 0, 'reasoning_tokens': 0, 'rejected_prediction_tokens': 0}, 'prompt_tokens_details': {'audio_tokens': 0, 'cached_tokens': 0}}, 'model_name': 'gpt-4.1-nano-2025-04-14', 'system_fingerprint': 'fp_f7fece8247', 'id': 'chatcmpl-CLmJUIHppSL7OyLJVwoHwIGQAkA7P', 'service_tier': None, 'finish_reason': 'stop', 'logprobs': None} id='run--94b34538-aee2-4636-94e9-04b2c290a65f-0' usage_metadata={'input_tokens': 18, 'output_tokens': 41, 'total_tokens': 59, 'input_token_details': {'audio': 0, 'cache_read': 0}, 'output_token_details': {'audio': 0, 'reasoning': 0}}\n"
|
|||
|
|
]
|
|||
|
|
}
|
|||
|
|
],
|
|||
|
|
"execution_count": 7
|
|||
|
|
},
|
|||
|
|
{
|
|||
|
|
"metadata": {},
|
|||
|
|
"cell_type": "markdown",
|
|||
|
|
"source": "2.使用提示词模板\n",
|
|||
|
|
"id": "644e5e1ef77919b8"
|
|||
|
|
},
|
|||
|
|
{
|
|||
|
|
"metadata": {
|
|||
|
|
"ExecuteTime": {
|
|||
|
|
"end_time": "2025-10-01T07:53:37.376044Z",
|
|||
|
|
"start_time": "2025-10-01T07:53:36.175178Z"
|
|||
|
|
}
|
|||
|
|
},
|
|||
|
|
"cell_type": "code",
|
|||
|
|
"source": [
|
|||
|
|
"from langchain_core.prompts import ChatPromptTemplate\n",
|
|||
|
|
"# 需要注意的一点是,这里需要指明具体的role,在这里是system和用户\n",
|
|||
|
|
"prompt = ChatPromptTemplate.from_messages([\n",
|
|||
|
|
" (\"system\", \"你是世界级的技术文档编写者\"),\n",
|
|||
|
|
" (\"user\", \"{input}\")\n",
|
|||
|
|
" ])\n",
|
|||
|
|
"# 我们可以把prompt和具体llm的调用和在一起。\n",
|
|||
|
|
"chain = prompt | llm\n",
|
|||
|
|
"message = chain.invoke({\"input\": \"大模型中的LangChain是什么?用50字内回答\"})\n",
|
|||
|
|
"print(message)\n",
|
|||
|
|
"# print(type(message))"
|
|||
|
|
],
|
|||
|
|
"id": "d4d76a55639bc048",
|
|||
|
|
"outputs": [
|
|||
|
|
{
|
|||
|
|
"name": "stdout",
|
|||
|
|
"output_type": "stream",
|
|||
|
|
"text": [
|
|||
|
|
"content='LangChain是用于构建基于大模型的应用的框架,支持集成数据源、工具和自然语言处理能力,实现智能问答、自动化等功能。' additional_kwargs={'refusal': None} response_metadata={'token_usage': {'completion_tokens': 39, 'prompt_tokens': 34, 'total_tokens': 73, 'completion_tokens_details': {'accepted_prediction_tokens': 0, 'audio_tokens': 0, 'reasoning_tokens': 0, 'rejected_prediction_tokens': 0}, 'prompt_tokens_details': {'audio_tokens': 0, 'cached_tokens': 0}}, 'model_name': 'gpt-4.1-nano-2025-04-14', 'system_fingerprint': 'fp_f7fece8247', 'id': 'chatcmpl-CLlwXasOjF9PsGRn6FrzsXBZAk8ij', 'service_tier': None, 'finish_reason': 'stop', 'logprobs': None} id='run--a2bc264b-1c4a-4fa7-a62c-89388b80bc43-0' usage_metadata={'input_tokens': 34, 'output_tokens': 39, 'total_tokens': 73, 'input_token_details': {'audio': 0, 'cache_read': 0}, 'output_token_details': {'audio': 0, 'reasoning': 0}}\n"
|
|||
|
|
]
|
|||
|
|
}
|
|||
|
|
],
|
|||
|
|
"execution_count": 3
|
|||
|
|
},
|
|||
|
|
{
|
|||
|
|
"metadata": {},
|
|||
|
|
"cell_type": "markdown",
|
|||
|
|
"source": "### 3、使用输出解析器",
|
|||
|
|
"id": "23294e19bce4e27b"
|
|||
|
|
},
|
|||
|
|
{
|
|||
|
|
"metadata": {
|
|||
|
|
"ExecuteTime": {
|
|||
|
|
"end_time": "2025-10-01T06:42:00.814552Z",
|
|||
|
|
"start_time": "2025-10-01T06:41:57.718330Z"
|
|||
|
|
}
|
|||
|
|
},
|
|||
|
|
"cell_type": "code",
|
|||
|
|
"source": [
|
|||
|
|
"from langchain_openai import ChatOpenAI\n",
|
|||
|
|
"from langchain_core.prompts import ChatPromptTemplate\n",
|
|||
|
|
"from langchain_core.output_parsers import JsonOutputParser\n",
|
|||
|
|
"\n",
|
|||
|
|
"llm = ChatOpenAI(model=\"gpt-4.1-nano\")\n",
|
|||
|
|
"\n",
|
|||
|
|
"# 创建提示词模板\n",
|
|||
|
|
"prompt = ChatPromptTemplate.from_messages([\n",
|
|||
|
|
" (\"system\", \"你是世界级的技术文档编写者,一切回答使用JSON格式\"),\n",
|
|||
|
|
" (\"user\", \"{input}\")\n",
|
|||
|
|
"])\n",
|
|||
|
|
"\n",
|
|||
|
|
"# 使用输出解析器\n",
|
|||
|
|
"output_parser = JsonOutputParser ()\n",
|
|||
|
|
"\n",
|
|||
|
|
"chain = prompt | llm | output_parser\n",
|
|||
|
|
"\n",
|
|||
|
|
"message = chain.invoke({\"input\": \"大模型中的LangChain是什么?用50字内回答\"})\n",
|
|||
|
|
"print(message)\n",
|
|||
|
|
"\n"
|
|||
|
|
],
|
|||
|
|
"id": "5224cddcdaaaa23",
|
|||
|
|
"outputs": [
|
|||
|
|
{
|
|||
|
|
"name": "stdout",
|
|||
|
|
"output_type": "stream",
|
|||
|
|
"text": [
|
|||
|
|
"{'answer': 'LangChain是一个用于开发语言模型应用的框架,简化了与大模型交互的流程。'}\n"
|
|||
|
|
]
|
|||
|
|
}
|
|||
|
|
],
|
|||
|
|
"execution_count": 10
|
|||
|
|
},
|
|||
|
|
{
|
|||
|
|
"metadata": {},
|
|||
|
|
"cell_type": "markdown",
|
|||
|
|
"source": "4、输出要求JSON格式",
|
|||
|
|
"id": "cc3ac9c9618b5a7f"
|
|||
|
|
},
|
|||
|
|
{
|
|||
|
|
"metadata": {
|
|||
|
|
"ExecuteTime": {
|
|||
|
|
"end_time": "2025-10-01T07:50:39.025259Z",
|
|||
|
|
"start_time": "2025-10-01T07:50:35.630881Z"
|
|||
|
|
}
|
|||
|
|
},
|
|||
|
|
"cell_type": "code",
|
|||
|
|
"source": [
|
|||
|
|
"from langchain_openai import ChatOpenAI\n",
|
|||
|
|
"from langchain_core.prompts import ChatPromptTemplate\n",
|
|||
|
|
"from langchain_core.output_parsers import JsonOutputParser\n",
|
|||
|
|
"\n",
|
|||
|
|
"llm = ChatOpenAI(model=\"gpt-4.1-nano\")\n",
|
|||
|
|
"\n",
|
|||
|
|
"# 创建提示词模板\n",
|
|||
|
|
"prompt = ChatPromptTemplate.from_messages([\n",
|
|||
|
|
" (\"system\", \"你是世界级的技术文档编写者,输出格式要求:{format}\"),\n",
|
|||
|
|
" (\"user\", \"{input}\")\n",
|
|||
|
|
"])\n",
|
|||
|
|
"\n",
|
|||
|
|
"\n",
|
|||
|
|
"# 使用输出解析器\n",
|
|||
|
|
"output_parser = JsonOutputParser ()\n",
|
|||
|
|
"\n",
|
|||
|
|
"chain = prompt | llm | output_parser\n",
|
|||
|
|
"\n",
|
|||
|
|
"format_str = output_parser.get_format_instructions()\n",
|
|||
|
|
"\n",
|
|||
|
|
"print(\"输出要求:\",format_str)\n",
|
|||
|
|
"\n",
|
|||
|
|
"message = chain.invoke({\"input\": \"大模型中的LangChain是什么?用50字内回答\",\"format\": format_str})\n",
|
|||
|
|
"print(message)"
|
|||
|
|
],
|
|||
|
|
"id": "6aa67511d6ca4dac",
|
|||
|
|
"outputs": [
|
|||
|
|
{
|
|||
|
|
"name": "stdout",
|
|||
|
|
"output_type": "stream",
|
|||
|
|
"text": [
|
|||
|
|
"输出要求: Return a JSON object.\n",
|
|||
|
|
"{'answer': 'LangChain是一个用于开发大语言模型应用的框架,简化了与外部数据和工具的集成。'}\n"
|
|||
|
|
]
|
|||
|
|
}
|
|||
|
|
],
|
|||
|
|
"execution_count": 48
|
|||
|
|
},
|
|||
|
|
{
|
|||
|
|
"metadata": {},
|
|||
|
|
"cell_type": "markdown",
|
|||
|
|
"source": "5、使用向量存储",
|
|||
|
|
"id": "6235b8bc9ca70e35"
|
|||
|
|
},
|
|||
|
|
{
|
|||
|
|
"metadata": {
|
|||
|
|
"ExecuteTime": {
|
|||
|
|
"end_time": "2025-10-01T08:08:14.769512Z",
|
|||
|
|
"start_time": "2025-10-01T08:08:10.587795Z"
|
|||
|
|
}
|
|||
|
|
},
|
|||
|
|
"cell_type": "code",
|
|||
|
|
"source": [
|
|||
|
|
"# conda install faiss-cpu\n",
|
|||
|
|
"\n",
|
|||
|
|
"from langchain_community.document_loaders import WebBaseLoader\n",
|
|||
|
|
"from langchain_openai import OpenAIEmbeddings\n",
|
|||
|
|
"import bs4\n",
|
|||
|
|
"\n",
|
|||
|
|
"from langchain_community.vectorstores import FAISS\n",
|
|||
|
|
"from langchain_text_splitters import RecursiveCharacterTextSplitter\n",
|
|||
|
|
"\n",
|
|||
|
|
"# 抓取网页数据 中国政府信息\n",
|
|||
|
|
"loader = WebBaseLoader( web_path=\"https://www.gov.cn/xinwen/2020-06/01/content_5516649.htm\", bs_kwargs=dict(parse_only=bs4.SoupStrainer(id=\"UCAP-CONTENT\")) )\n",
|
|||
|
|
"docs = loader.load()\n",
|
|||
|
|
"print(docs)\n",
|
|||
|
|
"\n",
|
|||
|
|
"# 创建向量存储\n",
|
|||
|
|
"embeddings = OpenAIEmbeddings(model=\"text-embedding-3-small\")\n",
|
|||
|
|
"\n",
|
|||
|
|
"# 使用分割器分割文档\n",
|
|||
|
|
"text_splitter = RecursiveCharacterTextSplitter(chunk_size=500, chunk_overlap=50)\n",
|
|||
|
|
"documents = chunks = text_splitter.split_documents(docs)\n",
|
|||
|
|
"# 向量存储 embeddings 会将 documents 中的每个文本片段转换为向量,并将这些向量存储在 FAISS 向量数据库中\n",
|
|||
|
|
"vector = FAISS.from_documents(documents, embeddings)\n",
|
|||
|
|
"\n",
|
|||
|
|
"# 成功之后,向量数据存储在内存中,未作磁盘持久化\n"
|
|||
|
|
],
|
|||
|
|
"id": "b0fb7fafdfcd6d07",
|
|||
|
|
"outputs": [
|
|||
|
|
{
|
|||
|
|
"name": "stdout",
|
|||
|
|
"output_type": "stream",
|
|||
|
|
"text": [
|
|||
|
|
"[Document(metadata={'source': 'https://www.gov.cn/xinwen/2020-06/01/content_5516649.htm'}, page_content='\\n新华社北京6月1日电\\n中华人民共和国民法典\\n(2020年5月28日第十三届全国人民代表大会第三次会议通过)\\n目录\\n第一编\\u3000总则\\n第一章\\u3000基本规定\\n第二章\\u3000自然人\\n第一节\\u3000民事权利能力和民事行为能力\\n第二节\\u3000监护\\n第三节\\u3000宣告失踪和宣告死亡\\n第四节\\u3000个体工商户和农村承包经营户\\n第三章\\u3000法人\\n第一节\\u3000一般规定\\n第二节\\u3000营利法人\\n第三节\\u3000非营利法人\\n第四节\\u3000特别法人\\n第四章\\u3000非法人组织\\n第五章\\u3000民事权利\\n第六章\\u3000民事法律行为\\n第一节\\u3000一般规定\\n第二节\\u3000意思表示\\n第三节\\u3000民事法律行为的效力\\n第四节\\u3000民事法律行为的附条件和附期限\\n第七章\\u3000代理\\n第一节\\u3000一般规定\\n第二节\\u3000委托代理\\n第三节\\u3000代理终止\\n第八章\\u3000民事责任\\n第九章\\u3000诉讼时效\\n第十章\\u3000期间计算\\n第二编\\u3000物权\\n第一分编\\u3000通则\\n第一章\\u3000一般规定\\n第二章\\u3000物权的设立、变更、转让和消灭\\n第一节\\u3000不动产登记\\n第二节\\u3000动产交付\\n第三节\\u3000其他规定\\n第三章\\u3000物权的保护\\n第二分编\\u3000所有权\\n第四章\\u3000一般规定\\n第五章\\u3000国家所有权和集体所有权、私人所有权\\n第六章\\u3000业主的建筑物区分所有权\\n第七章\\u3000相邻关系\\n第八章\\u3000共有\\n第九章\\u3000所有权取得的特别规定\\n第三分编\\u3000用益物权\\n第十章\\u3000一般规定\\n第十一章\\u3000土地承包经营权\\n第十二章\\u3000建设用地使用权\\n第十三章\\u3000宅基地使用权\\n第十四章\\u3000居住权\\n第十五章\\u3000地役权\\n第四分编\\u3000担保物权\\n第十六章\\u3000一般规定\\n第十七章\\u3000抵押权\\n第一节\\u3000一般抵押权\\n第二节\\u3000最高额抵押权\\n第十八章\\u3000质权\\n第一节\\u3000动产质权\\n第二节\\u3000权利质权\\n第十九章\\u3000留置权\\n第五分编\\u3000占有\\n第二十章\\u3000占有\\n第三编\\u3000合同\\n第一分编\\u3000通则\\n第一章\\u3000一般规定\\n第二章\\u3000合同的订立\\n第三章\\u3000合同的效力\\n第四章\\u3000合同的履行\\n第五章\\u3000合同的保全\\n第六章\\u3000合同的变更和转让\\n第七章\\u3000合同的权利义务终止\\n第八章\\u3000违约责任\\n第二分编\\u3000典型合同\\n第九章\\u3000买卖合同\\n第十章\\u3000供用电、水、气、热力合同\\n第十一章\\u3000赠与合同\\n第十二章\\u3000借款合同\\n第十三章\\u3000保证合同\\n第一节\\u3000一般规定\\n第二节\\u3000保证责任\\n第十四章\\u3000租赁合同\\n第十五章\\u3000融资租赁合同\\n第十六章\\u3000保理合同\\n第十七章\\u3000承揽合同\\n第十八章\\u3000建设工程合同\\n第十九章\\u3000运输合同\\n第一节\\u3000一般规定\\n第二节\\u3000客运合同\\n第三节\\u3000货运合同\\n第四节\\u3000多式联运合同\\n第二十章\\u3000技术合同\\n第一节\\u3000一般规定\\n第二节\\u3000技术开发合同\\n第三节\\u3000技术转让合同和技术许可合同\\n第四节\\u3000技术咨询合同和技术服务合同\\n第二十一章\\u3000保管合同\\n第二十二章\\u3000仓储合同\\n第二十三章\\u3000委托合同\\n第二十四章\\u3000物业服务合同\\n第二十五章\\u3000行纪合同\\n第二十六章\\u3000中介合同\\n第二十七章\\u3000合伙合同\\n第三分编\\u3000准合同\\n第二十八章\\u3000无因管理\\n第二十九章\\u3000不当得利\\n第四编\\u3000人格权\\n第一章\\u3000一般规定\\n第二章\\u3000生命权、身体权和健康权\\n第三章\\u3000姓名权和名称权\\n第四章\\u3000肖像权\\n第五章\\u3000名<30><E5908D>
|
|||
|
|
]
|
|||
|
|
}
|
|||
|
|
],
|
|||
|
|
"execution_count": 4
|
|||
|
|
},
|
|||
|
|
{
|
|||
|
|
"metadata": {},
|
|||
|
|
"cell_type": "markdown",
|
|||
|
|
"source": "6、RNG检索增强",
|
|||
|
|
"id": "5a865b5fe44cae04"
|
|||
|
|
},
|
|||
|
|
{
|
|||
|
|
"metadata": {
|
|||
|
|
"ExecuteTime": {
|
|||
|
|
"end_time": "2025-10-01T08:39:26.175504Z",
|
|||
|
|
"start_time": "2025-10-01T08:39:24.118532Z"
|
|||
|
|
}
|
|||
|
|
},
|
|||
|
|
"cell_type": "code",
|
|||
|
|
"source": [
|
|||
|
|
"from langchain_core.prompts import PromptTemplate\n",
|
|||
|
|
"\n",
|
|||
|
|
"retriver = vector.as_retriever()\n",
|
|||
|
|
"retriver.search_kwargs = {\"k\": 3}\n",
|
|||
|
|
"docs = retriver.get_relevant_documents(\"建设用地使用权是什么?\")\n",
|
|||
|
|
"print(\"以下为检索结果:\")\n",
|
|||
|
|
"print(docs)\n",
|
|||
|
|
"print(\"-----------------------------------------\")\n",
|
|||
|
|
"\n",
|
|||
|
|
"# 定义提示词模板\n",
|
|||
|
|
"prompt_template = \"\"\"\n",
|
|||
|
|
" 你是一个问答机器人。 你的任务是根据下述给定的已知信息回答用户问题。 确保你的回复完全依据下述已知信息。不要编造答案。 如果下述已知信息不足以回答用户的问题,请直接回复\"我无法回答您的问题\"。 已知信息: {info} 用户问: {question} 请用中文回答用户问题。\n",
|
|||
|
|
"\"\"\"\n",
|
|||
|
|
"\n",
|
|||
|
|
"# 提示词模板对象\n",
|
|||
|
|
"template = PromptTemplate(template=prompt_template, input_variables=[\"info\", \"question\"])\n",
|
|||
|
|
"\n",
|
|||
|
|
"# 得到提示词对象\n",
|
|||
|
|
"prompt = template.format(info=docs, question=\"建设用地使用权\")\n",
|
|||
|
|
"\n",
|
|||
|
|
"# 调用llm\n",
|
|||
|
|
"response = llm.invoke( prompt)\n",
|
|||
|
|
"print(response)"
|
|||
|
|
],
|
|||
|
|
"id": "a1c3cd1122e1fa25",
|
|||
|
|
"outputs": [
|
|||
|
|
{
|
|||
|
|
"name": "stdout",
|
|||
|
|
"output_type": "stream",
|
|||
|
|
"text": [
|
|||
|
|
"以下为检索结果:\n",
|
|||
|
|
"[Document(metadata={'source': 'https://www.gov.cn/xinwen/2020-06/01/content_5516649.htm'}, page_content='第三百四十五条\\u3000建设用地使用权可以在土地的地表、地上或者地下分别设立。\\n第三百四十六条\\u3000设立建设用地使用权,应当符合节约资源、保护生态环境的要求,遵守法律、行政法规关于土地用途的规定,不得损害已经设立的用益物权。\\n第三百四十七条\\u3000设立建设用地使用权,可以采取出让或者划拨等方式。\\n工业、商业、旅游、娱乐和商品住宅等经营性用地以及同一土地有两个以上意向用地者的,应当采取招标、拍卖等公开竞价的方式出让。\\n严格限制以划拨方式设立建设用地使用权。\\n第三百四十八条\\u3000通过招标、拍卖、协议等出让方式设立建设用地使用权的,当事人应当采用书面形式订立建设用地使用权出让合同。\\n建设用地使用权出让合同一般包括下列条款:\\n(一)当事人的名称和住所;\\n(二)土地界址、面积等;\\n(三)建筑物、构筑物及其附属设施占用的空间;\\n(四)土地用途、规划条件;\\n(五)建设用地使用权期限;\\n(六)出让金等费用及其支付方式;\\n(七)解决争议的方法。\\n第三百四十九条\\u3000设立建设用地使用权的,应当向登记机构申请建设用地使用权登记。建设用地使用权自登记时设立。登记机构应当向建设用地使用权人发放权属证书。'), Document(metadata={'source': 'https://www.gov.cn/xinwen/2020-06/01/content_5516649.htm'}, page_content='第三百五十条\\u3000建设用地使用权人应当合理利用土地,不得改变土地用途;需要改变土地用途的,应当依法经有关行政主管部门批准。\\n第三百五十一条\\u3000建设用地使用权人应当依照法律规定以及合同约定支付出让金等费用。\\n第三百五十二条\\u3000建设用地使用权人建造的建筑物、构筑物及其附属设施的所有权属于建设用地使用权人,但是有相反证据证明的除外。\\n第三百五十三条\\u3000建设用地使用权人有权将建设用地使用权转让、互换、出资、赠与或者抵押,但是法律另有规定的除外。\\n第三百五十四条\\u3000建设用地使用权转让、互换、出资、赠与或者抵押的,当事人应当采用书面形式订立相应的合同。使用期限由当事人约定,但是不得超过建设用地使用权的剩余期限。\\n第三百五十五条\\u3000建设用地使用权转让、互换、出资或者赠与的,应当向登记机构申请变更登记。\\n第三百五十六条\\u3000建设用地使用权转让、互换、出资或者赠与的,附着于该土地上的建筑物、构筑物及其附属设施一并处分。\\n第三百五十七条\\u3000建筑物、构筑物及其附属设施转让、互换、出资或者赠与的,该建筑物、构筑物及其附属设施占用范围内的建设用地使用权一并处分。'), Document(metadata={'source': 'https://www.gov.cn/xinwen/2020-06/01/content_5516649.htm'}, page_content='第三百五十八条\\u3000建设用地使用权期限届满前,因公共利益需要提前收回该土地的,应当依据本法第二百四十三条的规定对该土地上的房屋以及其他不动产给予补偿,并退还相应的出让金。\\n第三百五十九条\\u3000住宅建设用地使用权期限届满的,自动续期。续期费用的缴纳或者减免,依照法律、行政法规的规定办理。\\n非住宅建设用地使用权期限届满后的续期,依照法律规定办理。该土地上的房屋以及其他不动产的归属,有约定的,按照约定;没有约定或者约定不明确的,依照法律、行政法规的规定办理。\\n第三百六十条\\u3000建设用地使用权消灭的,出让人应当及时办理注销登记。登记机构应当收回权属证书。\\n第三百六十一条\\u3000集体所有的土
|
|||
|
|
"-----------------------------------------\n",
|
|||
|
|
"content='建设用地使用权指在符合相关法律、法规和规定的前提下,土地使用权人可以在土地的地表、地上或地下分别设立的权利。它可以通过出让、划拨等方式设立,通常需要签订书面合同并登记,权利期限可以有限制,期满后可以续期或消灭。使用过程中,权利人应合理利用土地,不得擅自改变用途,并依法支付相关费用。' additional_kwargs={'refusal': None} response_metadata={'token_usage': {'completion_tokens': 105, 'prompt_tokens': 1328, 'total_tokens': 1433, 'completion_tokens_details': {'accepted_prediction_tokens': 0, 'audio_tokens': 0, 'reasoning_tokens': 0, 'rejected_prediction_tokens': 0}, 'prompt_tokens_details': {'audio_tokens': 0, 'cached_tokens': 0}}, 'model_name': 'gpt-4.1-nano-2025-04-14', 'system_fingerprint': 'fp_f7fece8247', 'id': 'chatcmpl-CLmerlT9PLXV7IU8wUCGPcTbLcFpK', 'service_tier': None, 'finish_reason': 'stop', 'logprobs': None} id='run--ae695553-f1d7-4a0d-911d-6ddc8e6943ee-0' usage_metadata={'input_tokens': 1328, 'output_tokens': 105, 'total_tokens': 1433, 'input_token_details': {'audio': 0, 'cache_read': 0}, 'output_token_details': {'audio': 0, 'reasoning': 0}}\n"
|
|||
|
|
]
|
|||
|
|
}
|
|||
|
|
],
|
|||
|
|
"execution_count": 21
|
|||
|
|
},
|
|||
|
|
{
|
|||
|
|
"metadata": {},
|
|||
|
|
"cell_type": "markdown",
|
|||
|
|
"source": "7.使用Agent",
|
|||
|
|
"id": "b598c50296f4c225"
|
|||
|
|
},
|
|||
|
|
{
|
|||
|
|
"metadata": {
|
|||
|
|
"ExecuteTime": {
|
|||
|
|
"end_time": "2025-10-01T08:40:04.472095Z",
|
|||
|
|
"start_time": "2025-10-01T08:40:01.218492Z"
|
|||
|
|
}
|
|||
|
|
},
|
|||
|
|
"cell_type": "code",
|
|||
|
|
"source": [
|
|||
|
|
"from langchain_core.prompts import PromptTemplate\n",
|
|||
|
|
"from langchain.agents import create_openai_functions_agent, AgentExecutor\n",
|
|||
|
|
"from langchain.tools.retriever import create_retriever_tool\n",
|
|||
|
|
"\n",
|
|||
|
|
"# 你的 retriever 对象\n",
|
|||
|
|
"retriever = vector.as_retriever()\n",
|
|||
|
|
"retriever.search_kwargs = {\"k\": 3}\n",
|
|||
|
|
"\n",
|
|||
|
|
"# 创建 retriever 工具\n",
|
|||
|
|
"retriever_tool = create_retriever_tool(\n",
|
|||
|
|
" retriever,\n",
|
|||
|
|
" \"CivilCodeRetriever\",\n",
|
|||
|
|
" \"搜索有关中华人民共和国民法典的信息。关于中华人民共和国民法典的任何问题,您必须使用此工具!\",\n",
|
|||
|
|
")\n",
|
|||
|
|
"tools = [retriever_tool]\n",
|
|||
|
|
"\n",
|
|||
|
|
"# Agent 的 PromptTemplate\n",
|
|||
|
|
"prompt = PromptTemplate(\n",
|
|||
|
|
" input_variables=[\"input\", \"agent_scratchpad\"],\n",
|
|||
|
|
" template=\"\"\"\n",
|
|||
|
|
"你是一个智能助手,能够使用提供的工具回答问题。\n",
|
|||
|
|
"用户输入:{input}\n",
|
|||
|
|
"\n",
|
|||
|
|
"请结合工具给出的结果来回答问题。\n",
|
|||
|
|
"{agent_scratchpad}\n",
|
|||
|
|
"\"\"\"\n",
|
|||
|
|
")\n",
|
|||
|
|
"\n",
|
|||
|
|
"# 创建 Agent\n",
|
|||
|
|
"agent = create_openai_functions_agent(llm, tools, prompt)\n",
|
|||
|
|
"\n",
|
|||
|
|
"# 执行器\n",
|
|||
|
|
"agent_executor = AgentExecutor(agent=agent, tools=tools, verbose=True)\n",
|
|||
|
|
"\n",
|
|||
|
|
"# 运行代理\n",
|
|||
|
|
"response = agent_executor.invoke({\"input\": \"建设用地使用权是什么?\"})\n",
|
|||
|
|
"print(response)\n"
|
|||
|
|
],
|
|||
|
|
"id": "7876478bdef2f682",
|
|||
|
|
"outputs": [
|
|||
|
|
{
|
|||
|
|
"name": "stdout",
|
|||
|
|
"output_type": "stream",
|
|||
|
|
"text": [
|
|||
|
|
"\n",
|
|||
|
|
"\n",
|
|||
|
|
"\u001B[1m> Entering new AgentExecutor chain...\u001B[0m\n",
|
|||
|
|
"\u001B[32;1m\u001B[1;3m\n",
|
|||
|
|
"Invoking: `CivilCodeRetriever` with `{'query': '建设用地使用权'}`\n",
|
|||
|
|
"\n",
|
|||
|
|
"\n",
|
|||
|
|
"\u001B[0m\u001B[36;1m\u001B[1;3m第三百四十五条 建设用地使用权可以在土地的地表、地上或者地下分别设立。\n",
|
|||
|
|
"第三百四十六条 设立建设用地使用权,应当符合节约资源、保护生态环境的要求,遵守法律、行政法规关于土地用途的规定,不得损害已经设立的用益物权。\n",
|
|||
|
|
"第三百四十七条 设立建设用地使用权,可以采取出让或者划拨等方式。\n",
|
|||
|
|
"工业、商业、旅游、娱乐和商品住宅等经营性用地以及同一土地有两个以上意向用地者的,应当采取招标、拍卖等公开竞价的方式出让。\n",
|
|||
|
|
"严格限制以划拨方式设立建设用地使用权。\n",
|
|||
|
|
"第三百四十八条 通过招标、拍卖、协议等出让方式设立建设用地使用权的,当事人应当采用书面形式订立建设用地使用权出让合同。\n",
|
|||
|
|
"建设用地使用权出让合同一般包括下列条款:\n",
|
|||
|
|
"(一)当事人的名称和住所;\n",
|
|||
|
|
"(二)土地界址、面积等;\n",
|
|||
|
|
"(三)建筑物、构筑物及其附属设施占用的空间;\n",
|
|||
|
|
"(四)土地用途、规划条件;\n",
|
|||
|
|
"(五)建设用地使用权期限;\n",
|
|||
|
|
"(六)出让金等费用及其支付方式;\n",
|
|||
|
|
"(七)解决争议的方法。\n",
|
|||
|
|
"第三百四十九条 设立建设用地使用权的,应当向登记机构申请建设用地使用权登记。建设用地使用权自登记时设立。登记机构应当向建设用地使用权人发放权属证书。\n",
|
|||
|
|
"\n",
|
|||
|
|
"第三百五十条 建设用地使用权人应当合理利用土地,不得改变土地用途;需要改变土地用途的,应当依法经有关行政主管部门批准。\n",
|
|||
|
|
"第三百五十一条 建设用地使用权人应当依照法律规定以及合同约定支付出让金等费用。\n",
|
|||
|
|
"第三百五十二条 建设用地使用权人建造的建筑物、构筑物及其附属设施的所有权属于建设用地使用权人,但是有相反证据证明的除外。\n",
|
|||
|
|
"第三百五十三条 建设用地使用权人有权将建设用地使用权转让、互换、出资、赠与或者抵押,但是法律另有规定的除外。\n",
|
|||
|
|
"第三百五十四条 建设用地使用权转让、互换、出资、赠与或者抵押的,当事人应当采用书面形式订立相应的合同。使用期限由当事人约定,但是不得超过建设用地使用权的剩余期限。\n",
|
|||
|
|
"第三百五十五条 建设用地使用权转让、互换、出资或者赠与的,应当向登记机构申请变更登记。\n",
|
|||
|
|
"第三百五十六条 建设用地使用权转让、互换、出资或者赠与的,附着于该土地上的建筑物、构筑物及其附属设施一并处分。\n",
|
|||
|
|
"第三百五十七条 建筑物、构筑物及其附属设施转让、互换、出资或者赠与的,该建筑物、构筑物及其附属设施占用范围内的建设用地使用权一并处分。\n",
|
|||
|
|
"\n",
|
|||
|
|
"第三百五十八条 建设用地使用权期限届满前,因公共利益需要提前收回该土地的,应当依据本法第二百四十三条的规定对该土地上的房屋以及其他不动产给予补偿,并退还相应的出让金。\n",
|
|||
|
|
"第三百五十九条 住宅建设用地使用权期限届满的,自动续期。续期费用的缴纳或者减免,依照法律、行政法规的规定办理。\n",
|
|||
|
|
"非住宅建设用地使用权期限届满后的续期,依照法律规定办理。该土地上的房屋以及其他不动产的归属,有约定的,按照约定;没有约定或者约定不明确的,依照法律、行政法规的规定办理。\n",
|
|||
|
|
"第三百六十条 建设用地使用权消灭的,出让人应当及时办理注销登记。登记机构应当收回权属证书。\n",
|
|||
|
|
"第三百六十一条 集体所有的土地作为建设用地的,应当依照土地管理的法律规定办理。\n",
|
|||
|
|
"第十三章 宅基地使用权\n",
|
|||
|
|
"第三百六十二条 宅基地使用权人依法对集体所有的土地享有占有和使用的权利,有权依法利用该土地建造住宅及其附属设施。\n",
|
|||
|
|
"第三百六十三条 宅基地使用权的取得、行使和转让,适用土地管理的法律和国家有关规定。\n",
|
|||
|
|
"第三百六十四条 宅基地因自然灾害等原因灭失的,宅基地使用权消灭。对失去宅基地的村民,应当依法重新分配宅基地。\u001B[0m\u001B[32;1m\u001B[1;3m建设用地使用权是指在土地的地表、地上或者地下分别设立的土地使用权。根据中华人民共和国民法典的相关规定,设立建设用地使用权应当符合节约资源、保护生态环境的要求,并遵守土地用途的法律、行政法规的规定,不得损害已经设立的用益物权。设立方式可以采取出让或者划拨等方式,工业、商业、旅游、娱乐和商品住宅等经营性用地通常通过招标、拍卖等公开竞价的方式出让。建设用地使用权的出让合同应当采用书面形式,并且需要向登记机构申请登记,登记完成后,建设用地使用权自登记时设立,持有人会获得权属证书。\u001B[0m\n",
|
|||
|
|
"\n",
|
|||
|
|
"\u001B[1m> Finished chain.\u001B[0m\n",
|
|||
|
|
"{'input': '建设用地使用权是什么?', 'output': '建设用地使用权是指在土地的地表、地上或者地下分别设立的土地使用权。根据中华人民共和国民法典的相关规定,设立建设用地使用权应当符合节约资源、保护生态环境的要求,并遵守土地用途的法律、行政法规的规定,不得损害已经设立的用益物权。设立方式可以采取出让或者划拨等方式,工业、商业、旅游、娱乐和商品住宅等经营性用地通常通过招标、拍卖等公开竞价的方式出让。建设用地使用权的出让合同应当采用书面形式,并且需要向登记机构申请登记,登记完成后,建设用地使用权自登记时设立,持有人会获得权属证书。'}\n"
|
|||
|
|
]
|
|||
|
|
}
|
|||
|
|
],
|
|||
|
|
"execution_count": 23
|
|||
|
|
}
|
|||
|
|
],
|
|||
|
|
"metadata": {
|
|||
|
|
"kernelspec": {
|
|||
|
|
"display_name": "Python 3",
|
|||
|
|
"language": "python",
|
|||
|
|
"name": "python3"
|
|||
|
|
},
|
|||
|
|
"language_info": {
|
|||
|
|
"codemirror_mode": {
|
|||
|
|
"name": "ipython",
|
|||
|
|
"version": 2
|
|||
|
|
},
|
|||
|
|
"file_extension": ".py",
|
|||
|
|
"mimetype": "text/x-python",
|
|||
|
|
"name": "python",
|
|||
|
|
"nbconvert_exporter": "python",
|
|||
|
|
"pygments_lexer": "ipython2",
|
|||
|
|
"version": "2.7.6"
|
|||
|
|
}
|
|||
|
|
},
|
|||
|
|
"nbformat": 4,
|
|||
|
|
"nbformat_minor": 5
|
|||
|
|
}
|