OneAPI矿业勘探辅助:调用Moonshot地质报告解读+通义万相矿脉可视化+ChatGLM储量估算

张开发
2026/4/9 23:08:20 15 分钟阅读

分享文章

OneAPI矿业勘探辅助:调用Moonshot地质报告解读+通义万相矿脉可视化+ChatGLM储量估算
OneAPI矿业勘探辅助调用Moonshot地质报告解读通义万相矿脉可视化ChatGLM储量估算你是不是觉得矿业勘探还停留在老师傅拿着地质锤、对着图纸研究的阶段那你就落伍了。今天我要带你体验一个全新的工作流用AI把一份几十页的复杂地质报告在几分钟内变成一份图文并茂、带有储量估算的智能分析报告。想象一下这个场景你拿到一份新的勘探区地质报告里面充满了专业术语、复杂数据和冗长描述。传统方法下你需要花几天时间去阅读、理解、提取关键信息再手动绘制图表、估算储量。而现在通过一个统一的AI接口平台——One API我们可以串联起多个顶尖的大模型让Moonshot帮你解读报告通义万相帮你把文字描述变成直观的矿脉图最后让ChatGLM给出初步的储量估算。这一切都通过标准的OpenAI API格式调用开箱即用。下面我就手把手带你搭建这套“AI地质分析师”系统。1. 为什么需要One API一个接口管理所有模型在开始之前你可能会有疑问Moonshot、通义千问、ChatGLM都是不同公司的模型各有各的API调用起来不是很麻烦吗这正是One API要解决的问题。它是一个LLM API 管理与分发系统你可以把它理解为一个“万能转换器”。它支持包括OpenAI、Azure OpenAI、Anthropic Claude、Google Gemini、DeepSeek、字节豆包、文心一言、讯飞星火、通义千问、智谱ChatGLM等几乎所有主流大模型。它的核心价值在于统一API格式无论后端对接哪个模型前端你都用同样的OpenAI API格式去调用大大降低了开发复杂度。密钥管理与分发你可以集中管理各个平台的API密钥还能二次分发给团队使用设置额度、过期时间等。一键部署它提供Docker镜像基本上就是下载、配置、运行三步对运维非常友好。对于我们这个矿业勘探场景来说One API让我们可以像搭积木一样自由组合不同模型的特长而不用关心底层复杂的API差异。安全提示使用root用户初次登录One API管理系统后务必立即修改默认密码123456这是保护你密钥和配置的第一道防线。2. 快速部署One API十分钟搭建你的AI网关理论说再多不如动手做。One API的部署非常简单我们以最常用的Docker方式为例。2.1 环境准备与部署首先确保你的服务器上已经安装了Docker和Docker Compose。然后创建一个docker-compose.yml文件version: 3 services: oneapi: image: justsong/one-api:latest container_name: one-api ports: - 3000:3000 volumes: - ./data:/data environment: - SQL_DSNsqlite:///data/oneapi.db - REDIS_CONN_STRINGredis://redis:6379 - SESSION_SECRETyour_session_secret_here_change_me restart: unless-stopped redis: image: redis:7-alpine container_name: one-api-redis restart: unless-stopped保存文件后在终端运行一条命令docker-compose up -d等待几分钟访问http://你的服务器IP:3000就能看到One API的登录界面了。首次登录使用账号root密码123456记得登录后第一时间在“系统设置”中修改密码。2.2 配置你的第一个模型渠道登录成功后我们需要添加“渠道”也就是配置各个大模型的访问权限。以配置Moonshot为例点击左侧菜单的“渠道”点击“添加渠道”选择渠道类型为“Moonshot”填写渠道名称比如“Moonshot-地质分析”在“密钥”栏填入你在Moonshot平台获取的API Key其他参数可以保持默认点击“提交”同样的步骤你可以继续添加“通义千问”用于调用通义万相和“ChatGLM”的渠道。添加完成后One API会自动测试连接状态显示为“正常”就说明配置成功了。现在你的AI网关就准备好了。所有对这些模型的调用都会通过http://你的服务器IP:3000/v1这个统一的端点使用OpenAI API格式进行。3. 第一步用Moonshot解读地质报告地质报告是勘探工作的核心文档但往往篇幅长、专业性强。Moonshot在处理长文本和理解复杂逻辑方面表现出色非常适合这个任务。3.1 准备报告与设计提示词假设我们有一份PDF格式的地质报告首先需要将其转换为文本。你可以使用Python的pdfplumber或PyPDF2库来提取文字。这里假设我们已经得到了报告文本geological_report.txt。接下来设计一个能让Moonshot高效工作的提示词Prompt。好的提示词是获得高质量结果的关键。import requests import json # One API的统一端点 ONE_API_BASE_URL http://你的服务器IP:3000/v1 # 在One API中创建的访问令牌 API_KEY 你的One-API访问令牌 def analyze_geological_report(report_text): 使用Moonshot模型解读地质报告 headers { Authorization: fBearer {API_KEY}, Content-Type: application/json } # 精心设计的提示词 system_prompt 你是一位资深地质学家和矿业工程师。请仔细分析以下地质报告并提取关键信息。请用清晰、结构化的方式回答。 user_prompt f请分析以下地质报告并提取以下信息 报告内容 {report_text[:8000]} # 限制长度实际可分段处理 请提取 1. 【矿区概况】位置、面积、地形地貌等基本信息 2. 【地质特征】地层、构造、岩浆岩等地质情况 3. 【矿化信息】矿体形态、产状、规模、矿石类型、品位等 4. 【勘探工程】已完成的钻探、槽探等工程情况 5. 【关键数据】所有提到的化验品位、厚度、深度等数值数据请整理成表格 6. 【初步结论】报告中的主要结论和建议 请用中文回答确保专业准确。 payload { model: moonshot-v1-8k, # 通过One API指定使用Moonshot模型 messages: [ {role: system, content: system_prompt}, {role: user, content: user_prompt} ], temperature: 0.2, # 较低的温度值让输出更确定、更专业 max_tokens: 4000 } response requests.post( f{ONE_API_BASE_URL}/chat/completions, headersheaders, jsonpayload, timeout60 ) if response.status_code 200: result response.json() analysis result[choices][0][message][content] return analysis else: print(f请求失败: {response.status_code}) print(response.text) return None # 读取地质报告文本 with open(geological_report.txt, r, encodingutf-8) as f: report_text f.read() # 调用分析函数 analysis_result analyze_geological_report(report_text) if analysis_result: print(地质报告分析结果) print(analysis_result) # 保存结果 with open(report_analysis.txt, w, encodingutf-8) as f: f.write(analysis_result)这段代码的核心是通过One API调用Moonshot模型。注意model参数我们指定为moonshot-v1-8kOne API会根据你在渠道中的配置将请求路由到正确的Moonshot服务。3.2 处理长报告与优化结果如果报告特别长超过了模型的上下文限制我们需要分段处理。这里提供一个简单的分段处理思路def process_long_report(report_text, chunk_size6000): 处理超长地质报告分段分析后汇总 # 按段落或章节分割文本这里简化处理按固定长度分割 chunks [report_text[i:ichunk_size] for i in range(0, len(report_text), chunk_size)] all_analyses [] for i, chunk in enumerate(chunks): print(f正在处理第 {i1}/{len(chunks)} 段...) chunk_prompt f这是地质报告的第{i1}部分共{len(chunks)}部分 {chunk} 请提取这部分中的 1. 地质特征描述 2. 矿化信息矿体、品位、厚度等 3. 勘探工程数据 4. 其他关键信息 请用简洁的要点形式列出。 chunk_analysis analyze_geological_chunk(chunk_prompt) if chunk_analysis: all_analyses.append(chunk_analysis) # 最后将所有分段分析结果汇总 summary_prompt f以下是地质报告各部分的分析结果 {\n\n.join(all_analyses)} 请将这些分析整合成一份完整、连贯的地质报告摘要包括 1. 完整的矿区概况 2. 综合地质特征 3. 完整的矿化信息汇总 4. 勘探工程总结 5. 关键数据表格 6. 总体结论 确保信息完整、不重复结构清晰。 final_summary analyze_geological_chunk(summary_prompt) return final_summary通过这种方式即使上百页的地质报告我们也能让AI有效地提取出关键信息。Moonshot输出的结果已经是结构化的文本包含了我们需要的所有关键点。4. 第二步用通义万相实现矿脉可视化文字分析虽然详细但不如一张图直观。地质工程师最需要看到的是矿体的空间形态和分布。这里我们使用通义千问的万相模型通义万相来根据文字描述生成矿脉示意图。4.1 从文本分析到图像描述首先我们需要把Moonshot生成的地质描述转换成适合图像生成的提示词。通义万相是文生图模型我们需要告诉它要画什么。def generate_vein_description(geological_analysis): 将地质分析转换为图像生成描述 prompt f根据以下地质分析生成一个详细的图像描述用于创建矿脉地质剖面图 {geological_analysis} 请生成一个详细的、适合AI绘画的提示词描述一个地质剖面图包括 1. 地层序列从老到新 2. 矿体形态、产状走向、倾向、倾角 3. 构造特征断层、褶皱等 4. 勘探工程位置钻孔、探槽等 5. 图例和标注要求 描述要具体、可视化适合生成科学插图风格的地质图。 # 通过One API调用通义千问用于生成描述 headers { Authorization: fBearer {API_KEY}, Content-Type: application/json } payload { model: qwen-plus, # 使用通义千问模型生成描述 messages: [ {role: system, content: 你是一位地质绘图专家擅长将地质描述转化为可视化指导。}, {role: user, content: prompt} ], temperature: 0.7, max_tokens: 1500 } response requests.post( f{ONE_API_BASE_URL}/chat/completions, headersheaders, jsonpayload ) if response.status_code 200: result response.json() image_description result[choices][0][message][content] return image_description else: print(生成图像描述失败) return None # 使用之前Moonshot的分析结果 with open(report_analysis.txt, r, encodingutf-8) as f: geological_analysis f.read() image_description generate_vein_description(geological_analysis) print(生成的图像描述) print(image_description)4.2 调用通义万相生成地质图拿到详细的图像描述后我们就可以调用通义万相来生成图像了。通义万相也支持通过OpenAI兼容的API调用。def generate_geological_image(image_description): 调用通义万相生成地质剖面图 headers { Authorization: fBearer {API_KEY}, Content-Type: application/json } # 通义万相的图像生成参数 payload { model: wanx-v1, # 通义万相模型 input: { prompt: f专业地质剖面图科学插图风格{image_description}, negative_prompt: 卡通风格抽象艺术不准确的地质特征模糊, size: 1024x1024, n: 1, steps: 30, scale: 7 } } # 注意这里使用的是images/generation端点 response requests.post( f{ONE_API_BASE_URL}/images/generations, headersheaders, jsonpayload ) if response.status_code 200: result response.json() # 通义万相的返回格式可能略有不同需要适配 if data in result and len(result[data]) 0: image_url result[data][0].get(url) if image_url: # 下载图像 img_response requests.get(image_url) if img_response.status_code 200: with open(geological_profile.png, wb) as f: f.write(img_response.content) print(地质剖面图已生成并保存为 geological_profile.png) return geological_profile.png # 如果上述格式不匹配尝试其他可能的格式 print(响应格式:, json.dumps(result, indent2, ensure_asciiFalse)) else: print(f图像生成失败: {response.status_code}) print(response.text) return None # 生成图像 image_path generate_geological_image(image_description) if image_path: print(f图像已保存至: {image_path})这里有几个关键点需要注意模型标识在One API中我们需要正确指定模型名称。对于通义万相可能是wanx-v1或类似的标识具体取决于你在One API中配置的渠道名称。参数适配不同图像生成模型的参数可能略有不同需要参考对应模型的文档。提示词优化我们添加了negative_prompt负面提示词来排除不想要的风格确保生成的地质图更专业。4.3 多角度可视化与迭代优化一张图可能不够我们可以生成多个视角或不同类型的图def generate_multiple_views(geological_analysis): 生成多张不同视角的地质图 views [ 地质剖面图显示地层序列和矿体形态, 矿体平面分布图显示矿体在地表的投影, 三维矿体形态示意图显示矿体的空间形态, 钻孔柱状图合集显示各个钻孔的岩性和品位变化 ] generated_images [] for i, view_type in enumerate(views): print(f生成 {view_type}...) # 为每种视图生成专门的描述 view_prompt f生成{view_type}基于以下地质信息 {geological_analysis} 要求专业、准确、清晰适合矿业勘探使用。 # 调用通义千问生成具体描述 view_description generate_vein_description(view_prompt) if view_description: # 生成图像 image_filename fgeological_view_{i1}.png success generate_specific_view(view_description, image_filename) if success: generated_images.append(image_filename) return generated_images这样我们就得到了一套完整的地质可视化图件包括剖面图、平面图、三维示意图等比纯文字报告直观得多。5. 第三步用ChatGLM进行储量估算地质报告的最终目的之一就是估算矿产资源量。ChatGLM在逻辑推理和数学计算方面表现不错我们可以用它来基于提取的数据进行初步储量估算。5.1 提取关键数据并格式化首先我们需要从Moonshot的分析结果中提取出储量计算所需的关键参数def extract_reserve_parameters(geological_analysis): 从地质分析中提取储量计算参数 prompt f请从以下地质分析中提取储量估算所需的所有参数 {geological_analysis} 请提取以下参数如果存在 1. 矿体长度米 2. 矿体宽度或厚度米 3. 矿体延深或深度米 4. 矿石体重吨/立方米 5. 平均品位主要有用组分如金 g/t铜 % 6. 矿体形态板状、透镜状、筒状等 7. 勘探工程间距用于资源量分类 如果某些参数没有直接给出请根据上下文进行合理推断并注明是推断值。 请以JSON格式返回包含参数名称、数值、单位和数据来源直接给出/推断。 headers { Authorization: fBearer {API_KEY}, Content-Type: application/json } payload { model: chatglm3-6b, # 使用ChatGLM进行数据提取 messages: [ {role: system, content: 你是一位矿产资源储量估算专家擅长从地质报告中提取关键参数。}, {role: user, content: prompt} ], temperature: 0.1, # 低温度确保提取准确 max_tokens: 2000 } response requests.post( f{ONE_API_BASE_URL}/chat/completions, headersheaders, jsonpayload ) if response.status_code 200: result response.json() extraction result[choices][0][message][content] # 尝试解析JSON try: # 提取JSON部分模型可能返回带解释的文本 import re json_match re.search(r\{.*\}, extraction, re.DOTALL) if json_match: params_json json_match.group() params json.loads(params_json) return params else: # 如果没有找到JSON返回原始文本 print(未找到JSON格式返回原始文本) return extraction except json.JSONDecodeError: print(JSON解析失败返回原始文本) return extraction else: print(参数提取失败) return None # 提取参数 reserve_params extract_reserve_parameters(geological_analysis) print(提取的储量计算参数) print(json.dumps(reserve_params, indent2, ensure_asciiFalse))5.2 储量计算方法与模型选择根据矿体形态和勘探程度选择合适的储量计算方法。这里我们让ChatGLM根据提取的参数自动选择方法并计算def estimate_reserves(parameters): 基于提取的参数进行储量估算 prompt f作为矿产资源储量估算专家请基于以下参数进行储量估算 {json.dumps(parameters, indent2, ensure_asciiFalse)} 请按照以下步骤进行 1. 根据矿体形态和勘探工程间距确定资源量分类推断的/控制的/探明的 2. 选择适当的储量计算方法地质块段法/断面法/等高线法等 3. 计算矿石量体积×体重 4. 计算金属量矿石量×平均品位 5. 考虑可信度系数根据勘探程度 6. 给出估算结果包括矿石量、金属量和资源量类别 请详细展示计算过程最后以表格形式总结结果。 headers { Authorization: fBearer {API_KEY}, Content-Type: application/json } payload { model: chatglm3-6b, messages: [ {role: system, content: 你是一位资深矿产资源储量估算工程师熟悉各种储量计算方法和规范。}, {role: user, content: prompt} ], temperature: 0.2, max_tokens: 3000 } response requests.post( f{ONE_API_BASE_URL}/chat/completions, headersheaders, jsonpayload ) if response.status_code 200: result response.json() reserve_estimation result[choices][0][message][content] return reserve_estimation else: print(储量估算失败) return None # 进行储量估算 if reserve_params: reserve_estimation estimate_reserves(reserve_params) print(\n储量估算结果) print(reserve_estimation) # 保存结果 with open(reserve_estimation.txt, w, encodingutf-8) as f: f.write(reserve_estimation)5.3 生成完整的勘探报告最后我们把所有结果整合成一份完整的智能勘探报告def generate_final_report(analysis, images, reserves): 生成最终的综合勘探报告 prompt f请基于以下分析结果生成一份完整的矿业勘探智能分析报告 一、地质报告智能分析结果 {analysis} 二、矿脉可视化图件 已生成{len(images)}张地质图件包括剖面图、平面图等。 三、储量估算结果 {reserves} 请组织成一份专业的勘探报告包括 1. 报告摘要Executive Summary 2. 矿区地质概况 3. 矿化特征与矿体地质 4. 勘探工程与数据 5. 矿脉空间分布配合可视化图件描述 6. 矿产资源储量估算 7. 结论与建议 8. 附录关键数据表 报告要求专业、完整、可直接用于内部汇报或初步勘探决策。 headers { Authorization: fBearer {API_KEY}, Content-Type: application/json } payload { model: moonshot-v1-8k, # 用Moonshot生成最终报告因为它擅长长文本 messages: [ {role: system, content: 你是一位资深矿业勘探报告撰写专家擅长整合地质、物探、化探和储量估算数据生成专业报告。}, {role: user, content: prompt} ], temperature: 0.3, max_tokens: 5000 } response requests.post( f{ONE_API_BASE_URL}/chat/completions, headersheaders, jsonpayload ) if response.status_code 200: result response.json() final_report result[choices][0][message][content] return final_report else: print(报告生成失败) return None # 生成最终报告 final_report generate_final_report(geological_analysis, [image_path], reserve_estimation) if final_report: with open(智能勘探分析报告.md, w, encodingutf-8) as f: f.write(final_report) print(完整报告已生成智能勘探分析报告.md)6. 总结AI如何改变矿业勘探工作流通过这个完整的实践我们可以看到One API作为统一的AI网关让多模型协作变得异常简单。我们来回顾一下这个工作流的价值6.1 工作流效率提升传统的地质报告分析需要地质工程师数天甚至数周的时间而我们的AI工作流可以在几十分钟内完成报告解读从几小时到几分钟图件制作从几天到几分钟储量估算从几天到几分钟报告整合从几天到几分钟这不是要替代地质专家而是将专家从繁琐的信息提取和初步计算中解放出来让他们专注于更重要的地质解释和决策。6.2 技术要点回顾One API的核心价值统一接口、简化管理、灵活组合不同模型模型特长利用Moonshot长文本理解专业报告分析通义万相文本到图像地质可视化ChatGLM逻辑推理数学计算储量估算提示词工程针对不同任务设计专门的提示词是获得好结果的关键错误处理实际应用中需要完善的错误处理和重试机制6.3 实际应用建议如果你要在实际工作中应用这个方案数据质量是关键AI的分析结果取决于输入数据的质量确保地质报告清晰、完整结果需要验证AI的估算结果需要地质专家审核和验证特别是储量估算循序渐进应用可以从辅助工具开始逐步建立信任再扩大应用范围关注成本控制大模型调用有成本需要合理设计流程避免不必要的调用6.4 扩展可能性这个工作流还可以进一步扩展加入物探、化探数据的人工智能解释连接GIS系统生成更精确的矿体模型集成实时数据实现动态资源模型更新添加风险评估模块评估开采技术条件矿业勘探正在从“经验驱动”向“数据驱动AI增强”转变。通过One API这样的统一平台我们可以灵活组合最适合的AI工具构建智能化的勘探解决方案。这不仅仅是效率的提升更是工作方式的变革。获取更多AI镜像想探索更多AI镜像和应用场景访问 CSDN星图镜像广场提供丰富的预置镜像覆盖大模型推理、图像生成、视频生成、模型微调等多个领域支持一键部署。

更多文章