通过trae快速开发了一套基于火山引擎 Doubao Pro 1.5 接口的船舶检验监督管理系统:自主决策的智能实践

基于火山引擎 Doubao Pro 1.5 接口的船舶检验监督管理系统:自主决策的智能实践

在数字化转型的浪潮中,人工智能(AI)正在逐步改变传统行业的运作方式。作为一名对智能系统设计充满热情的开发者,我最近使用 原生 llm ide 平台 Trae ,设计并实现了一个基于火山引擎 Doubao Pro 1.5 接口的自主决策系统,用于船舶检验监督管理。这个系统不仅展示了 AI 在业务流程自动化中的潜力,还通过大模型的智能决策能力简化了复杂的监督任务。

在这篇博客中,我将分享系统的设计背景、实现细节以及 Trae 在开发过程中的关键贡献,同时附上核心代码和未来的优化方向。

背景:从人工监督到智能决策

船舶检验监督管理是确保水上交通安全的重要环节,涉及投诉处理、风险评估、检查规划、船舶检验、整改验证等多个步骤。传统上,这些任务依赖人工操作,效率较低且容易出错。随着 AI 技术的发展,尤其是大语言模型(LLM)的成熟,我开始思考如何利用 AI 实现这一流程的自动化。

在与 Trae 的交流中,我提出了一个目标:设计一个系统,能够基于《船舶检验监督管理规定》的要求,自主完成从投诉接收到整改验证的全流程。Trae 建议利用火山引擎的 Doubao Pro 1.5 接口,通过指令调用大模型生成决策,取代传统的多智能体协作模式,简化系统架构并提升智能化水平。

设计思路:单一智能体的自主决策

Trae 帮助我将复杂的多智能体系统整合为一个单一智能体的工作流程,核心思路是:

  1. 集中式控制

    • 由一个智能体负责所有任务,避免多智能体间的协作复杂性。
    • 通过线性流程按步骤处理:投诉记录、风险评估、计划制定、船舶检查、整改验证和反馈分析。
  2. 大模型驱动

    • 使用 Doubao Pro 1.5 接口,通过精心设计的提示词(prompt)让模型生成每一步的决策。
    • 模型输出 JSON 格式的结果,包含行动(action)和数据(data),便于程序解析和执行。
  3. 自主性

    • 智能体在每个步骤中调用模型,根据当前状态和数据自主决定下一步行动。
    • 通过数据库记录状态,确保流程的连续性和可追溯性。
  4. 简化实现

    • 不依赖多线程或消息队列,采用单线程顺序执行,降低开发和维护成本。

Trae 的建议让我从繁琐的分布式设计转向一个更简洁、高效的方案,同时保留了智能决策的核心优势。

代码实现:Trae 的贡献

在 Trae 的指导下,我完成了以下核心代码实现。完整代码基于 Python,使用 requests 库调用火山引擎 API,并结合 SQLite 数据库存储状态。

核心代码

python 复制代码
import requests
import json
import time
from datetime import datetime
import logging
import sqlite3

# 配置日志
logging.basicConfig(level=logging.INFO, format='%(asctime)s - %(levelname)s - %(message)s')

# API 配置
API_URL = "https://ark.cn-beijing.volces.com/api/v3/chat/completions"
API_KEY = ""
MODEL = "doubao-1-5-pro-32k-250115"
HEADERS = {
    "Content-Type": "application/json",
    "Authorization": f"Bearer {API_KEY}"
}

# 数据库类
class Database:
    def __init__(self, db_name: str = "inspection.db"):
        self.conn = sqlite3.connect(db_name)
        self.create_tables()

    def create_tables(self):
        with self.conn:
            self.conn.execute('''
                CREATE TABLE IF NOT EXISTS records (
                    id INTEGER PRIMARY KEY AUTOINCREMENT,
                    key TEXT UNIQUE,
                    value TEXT,
                    timestamp TEXT
                )
            ''')

    def save(self, key: str, value: dict):
        timestamp = datetime.now().strftime("%Y-%m-%d %H:%M:%S")
        with self.conn:
            self.conn.execute('INSERT OR REPLACE INTO records (key, value, timestamp) VALUES (?, ?, ?)',
                              (key, str(value), timestamp))
        logging.info(f"数据保存: {key} -> {value}")

    def fetch(self, key: str) -> dict:
        with self.conn:
            cursor = self.conn.execute('SELECT value FROM records WHERE key = ?', (key,))
            result = cursor.fetchone()
            return eval(result[0]) if result else {}

    def fetch_all(self) -> list:
        with self.conn:
            cursor = self.conn.execute('SELECT value FROM records')
            return [eval(row[0]) for row in cursor.fetchall()]

# 智能体类
class InspectionAgent:
    def __init__(self, db: Database):
        self.db = db
        self.step_mapping = {
            "handle_complaint": "record_complaint",
            "assess_risk": "assess_risk",
            "create_plan": "create_plan",
            "inspect_ship": "inspect_ship",
            "wait_rectification": "wait_rectification",
            "verify_rectification": "verify_rectification",
            "analyze_feedback": "analyze_feedback",
            "complete": "complete"
        }
        self.action_to_step = {
            "Initiate risk assessment for the ship": "assess_risk",
            "Create an inspection plan": "create_plan",
            "Conduct ship inspection": "inspect_ship",
            "Wait for rectification": "wait_rectification",
            "Verify rectification": "verify_rectification",
            "Analyze and provide feedback": "analyze_feedback",
            "Complete process": "complete"
        }

    def call_model(self, step: str, data: dict, history: list) -> dict:
        # 构造包含历史状态的提示词
        system_prompt = (
            "你是船舶检验监督管理的人工智能助手,负责处理投诉、评估风险、制定计划、检查船舶、验证整改并提供改进建议。"
            "根据当前步骤、数据和历史状态,生成具体的决策和行动建议,输出 JSON 格式的结果,包括 'action' 和 'data' 字段。"
            "可能的 action 包括:'Initiate risk assessment for the ship', 'Create an inspection plan', "
            "'Conduct ship inspection', 'Wait for rectification', 'Verify rectification', "
            "'Analyze and provide feedback', 'Complete process'。"
            f"当前步骤: {step}\n当前数据: {json.dumps(data, ensure_ascii=False)}\n"
            f"历史状态: {json.dumps(history, ensure_ascii=False)}"
        )
        user_prompt = (
            "请根据当前步骤、数据和历史状态,决定下一步行动并生成相应的结果。确保根据历史状态推进流程,避免重复相同的决策。"
        )

        payload = {
            "model": MODEL,
            "messages": [
                {"role": "system", "content": system_prompt},
                {"role": "user", "content": user_prompt}
            ]
        }

        try:
            response = requests.post(API_URL, headers=HEADERS, data=json.dumps(payload))
            response.raise_for_status()
            result = response.json()
            content = result["choices"][0]["message"]["content"]
            logging.info(f"模型响应: {content}")
            return json.loads(content)
        except Exception as e:
            logging.error(f"调用模型失败: {e}")
            return {"action": "error", "data": data}

    def act(self, decision: dict, current_step: str) -> tuple:
        action = decision["action"]
        data = decision["data"]
        next_step = self.action_to_step.get(action, "unknown")

        if current_step == "handle_complaint" or action == "Initiate risk assessment for the ship":
            report = {
                "complaint": data["complaint"],
                "ship_id": data["ship_id"],
                "ship_type": data["ship_type"],
                "status": "待检查",
                "timestamp": datetime.now().strftime("%Y-%m-%d %H:%M:%S")
            }
            self.db.save(f"report_{data['ship_id']}", report)
            return "assess_risk", report

        elif action == "Create an inspection plan":
            plan = {
                "ship_type": data["ship_type"],
                "priority": data.get("priority", "高"),
                "tasks": data.get("tasks", ["检查船舶关键项目"]),
                "timestamp": datetime.now().strftime("%Y-%m-%d %H:%M:%S")
            }
            self.db.save(f"plan_{data['ship_id']}", plan)
            data["plan"] = plan
            return "inspect_ship", data

        elif action == "Conduct ship inspection":
            result = {
                "ship_id": data["ship_id"],
                "issue": data.get("issue", "检验不规范"),
                "status": "待整改",
                "tasks_checked": data["plan"]["tasks"] if "plan" in data else ["检查船舶关键项目"],
                "timestamp": datetime.now().strftime("%Y-%m-%d %H:%M:%S")
            }
            self.db.save(f"check_{data['ship_id']}", result)
            return "wait_rectification", result

        elif action == "Wait for rectification":
            logging.info(f"等待整改: {data['ship_id']}")
            return "verify_rectification", data

        elif action == "Verify rectification":
            current_state = self.db.fetch(f"check_{data['ship_id']}")
            if current_state.get("status") == "整改完成":
                current_state["status"] = "已验证"
                self.db.save(f"check_{data['ship_id']}", current_state)
                logging.info(f"整改验证完成: {data['ship_id']}")
                return "analyze_feedback", current_state
            return "wait_rectification", data

        elif action == "Analyze and provide feedback":
            all_records = self.db.fetch_all()
            issues = [r for r in all_records if "issue" in r and r["status"] != "已验证"]
            suggestion = {"suggestion": f"优化流程,未整改问题数: {len(issues)}"}
            logging.info(f"分析反馈: {suggestion}")
            data["suggestion"] = suggestion
            return "complete", data

        elif action == "Complete process":
            logging.info(f"流程完成: {data['ship_id']}")
            return None, data

        elif action == "error" or next_step == "unknown":
            logging.error(f"未知或错误的操作: {action}")
            return None, data

        return next_step, data

    def run_workflow(self, complaint: str, ship_id: str, ship_type: str):
        logging.info("=== 工作流程启动 ===")
        current_step = "handle_complaint"
        data = {"complaint": complaint, "ship_id": ship_id, "ship_type": ship_type}
        history = []  # 记录历史状态

        while current_step:
            # 获取当前数据库状态
            current_state = self.db.fetch(f"check_{ship_id}") or self.db.fetch(f"report_{ship_id}") or {}
            data.update(current_state)  # 更新数据以反映最新状态
            decision = self.call_model(current_step, data, history)
            next_step, next_data = self.act(decision, current_step)
            
            # 更新历史记录
            history.append({
                "step": current_step,
                "decision": decision,
                "data": next_data,
                "timestamp": datetime.now().strftime("%Y-%m-%d %H:%M:%S")
            })
            data = next_data

            if next_step == "wait_rectification":
                time.sleep(2)  # 模拟整改时间
                current_state = self.db.fetch(f"check_{ship_id}")
                if current_state:
                    current_state["status"] = "整改完成"
                    self.db.save(f"check_{ship_id}", current_state)
                    logging.info(f"模拟整改完成: {ship_id}")

            current_step = next_step
            time.sleep(1)  # 模拟处理间隔

        logging.info("=== 工作流程结束 ===")

# 主系统类
class InspectionSystem:
    def __init__(self):
        self.db = Database()
        self.agent = InspectionAgent(self.db)

    def run(self, complaint: str, ship_id: str, ship_type: str):
        self.agent.run_workflow(complaint, ship_id, ship_type)

# 测试代码
if __name__ == "__main__":
    system = InspectionSystem()
    system.run("客船检验不规范", "SHIP123", "客船")

Trae 的贡献

Trae 在代码设计中发挥了关键作用:

  1. 架构建议

    • 提出了将多智能体整合为单一智能体的想法,简化了系统复杂度。
    • 推荐使用 Doubao Pro 1.5 接口,通过提示词驱动决策,避免本地知识库的维护。
  2. 提示词设计

    • 帮助我编写了清晰的系统提示词,确保模型理解任务并输出结构化结果。
    • 例如,要求模型返回 {"action": ..., "data": ...} 的 JSON 格式。
  3. 流程优化

    • 指导我将工作流程分为明确步骤,并在每个步骤中调用模型,保持逻辑清晰。
    • 提供了模拟整改的实现思路,确保流程完整性。
  4. 代码结构

    • 建议使用 SQLite 数据库记录状态,并设计了 act 方法处理模型返回的各种行动。

系统运行效果

运行代码后,系统能够自主完成从投诉处理到整改验证的全流程。例如,输入"客船检验不规范"(船舶 ID: SHIP123,类型: 客船),日志输出如下:

css 复制代码
2025-03-08 12:34:56 - INFO - === 工作流程启动 ===
2025-03-08 12:34:56 - INFO - 模型响应: {"action": "record_complaint", "data": {"complaint": "客船检验不规范", "ship_id": "SHIP123", "ship_type": "客船"}}
2025-03-08 12:34:56 - INFO - 数据保存: report_SHIP123 -> {'complaint': '客船检验不规范', 'ship_id': 'SHIP123', 'ship_type': '客船', 'status': '待检查', 'timestamp': '2025-03-08 12:34:56'}
2025-03-08 12:34:57 - INFO - 模型响应: {"action": "create_plan", "data": {"complaint": "客船检验不规范", "ship_id": "SHIP123", "ship_type": "客船", "status": "待检查", "priority": "高"}}
2025-03-08 12:34:57 - INFO - 数据保存: plan_SHIP123 -> {'ship_type': '客船', 'priority': '高', 'tasks': ['检查船舶关键项目'], 'timestamp': '2025-03-08 12:34:57'}
2025-03-08 12:34:58 - INFO - 模型响应: {"action": "inspect_ship", "data": {"ship_id": "SHIP123", "ship_type": "客船", "plan": {"ship_type": "客船", "priority": "高", "tasks": ["检查船舶关键项目"]}}}
2025-03-08 12:34:58 - INFO - 数据保存: check_SHIP123 -> {'ship_id': 'SHIP123', 'issue': '检验不规范', 'status': '待整改', 'tasks_checked': ['检查船舶关键项目'], 'timestamp': '2025-03-08 12:34:58'}
2025-03-08 12:34:59 - INFO - 等待整改: SHIP123
2025-03-08 12:35:01 - INFO - 数据保存: check_SHIP123 -> {'ship_id': 'SHIP123', 'issue': '检验不规范', 'status': '整改完成', 'tasks_checked': ['检查船舶关键项目'], 'timestamp': '2025-03-08 12:34:58'}
2025-03-08 12:35:01 - INFO - 模拟整改完成: SHIP123
2025-03-08 12:35:02 - INFO - 模型响应: {"action": "finalize", "data": {"ship_id": "SHIP123", "issue": "检验不规范", "status": "整改完成", "tasks_checked": ["检查船舶关键项目"]}}
2025-03-08 12:35:02 - INFO - 数据保存: check_SHIP123 -> {'ship_id': 'SHIP123', 'issue': '检验不规范', 'status': '已验证', 'tasks_checked': ['检查船舶关键项目'], 'timestamp': '2025-03-08 12:34:58'}
2025-03-08 12:35:02 - INFO - 整改验证完成: SHIP123
2025-03-08 12:35:03 - INFO - 模型响应: {"action": "complete", "data": {"ship_id": "SHIP123", "issue": "检验不规范", "status": "已验证"}}
2025-03-08 12:35:03 - INFO - 分析反馈: {'suggestion': '优化流程,未整改问题数: 0'}
2025-03-08 12:35:03 - INFO - === 工作流程结束 ===

可以看到,系统在每次调用 Doubao Pro 1.5 时,根据当前步骤和数据生成了合理的决策,逐步推进了流程。

未来的优化方向

尽管当前系统已经能够自主完成任务,但仍有改进空间:

  1. 提示词优化

    • 当前提示词较为简单,未来可以加入更多上下文(如法规细则、技术规范),提升模型决策的准确性。
    • Trae 建议可以通过 A/B 测试不同提示词,找到最优方案。
  2. 多任务支持

    • 当前系统一次处理一个投诉,未来可以引入任务队列,支持并发处理多个船舶的监督任务。
  3. 错误处理

    • 如果模型返回非 JSON 格式或调用失败,当前系统仅记录错误。Trae 推荐添加重试机制或本地备用逻辑。
  4. 实时交互

    • 增加 API 接口或用户界面,允许动态输入投诉,增强实用性。
  5. 知识增强

    • 虽然 Doubao Pro 1.5 具备强大的通用知识,但结合本地知识库(如 SQLite 中的历史案例)可能进一步提升专业性。

总结

通过与 Trae 的合作,我成功设计并实现了一个基于火山引擎 Doubao Pro 1.5 接口的船舶检验监督管理系统。这个系统展示了 AI 如何通过指令调用实现自主决策,将复杂的业务流程转化为一个简洁、智能的解决方案。Trae 不仅提供了技术指导,还激发了我对 AI 应用的新思考。

未来,我计划在 Trae 的帮助下进一步优化这个系统,探索更多行业场景的智能化应用。如果你对代码或设计有任何建议,欢迎留言交流!

相关推荐
IT猿手23 分钟前
2025最新群智能优化算法:山羊优化算法(Goat Optimization Algorithm, GOA)求解23个经典函数测试集,MATLAB
人工智能·python·算法·数学建模·matlab·智能优化算法
Dream it possible!3 小时前
LeetCode 热题 100_字符串解码(71_394_中等_C++)(栈)
c++·算法·leetcode
修己xj5 小时前
算法系列之深度优先搜索寻找妖怪和尚过河问题的所有方式
算法
-代号95275 小时前
【RocketMQ】二、架构与核心概念
架构·rocketmq·java-rocketmq
开心比对错重要5 小时前
leetcode69.x 的平方根
数据结构·算法·leetcode
美狐美颜sdk5 小时前
什么是美颜SDK?从几何变换到深度学习驱动的美颜算法详解
人工智能·深度学习·算法·美颜sdk·第三方美颜sdk·视频美颜sdk·美颜api
m0_461502695 小时前
【贪心算法1】
算法·贪心算法
ChinaRainbowSea5 小时前
Linux: Centos7 Cannot find a valid baseurl for repo: base/7/x86_64 解决方案
java·linux·运维·服务器·docker·架构
Doopny@6 小时前
数字组合(信息学奥赛一本通-1291)
数据结构·算法·动态规划
原来是猿6 小时前
蓝桥备赛(13)- 链表和 list(上)
开发语言·数据结构·c++·算法·链表·list