通过TRAE和LLM实现电影数据查询和分析

TRAE 是字节跳动于 2025 年 1 月发布的 AI 原生集成开发环境(AI IDE),其名字源于 "The Real AI Engineer",定位为 "智能协作 AI IDE"。最近又推出了SOLO模式,TRAE 的 SOLO 模式是一种以 AI 为主导的高度自动化开发模式,2025 年 7 月先推出 Beta 版,11 月迭代为正式版并同步上线国内版,国内版所有核心功能均免费开放。它定位为 "The Responsive Coding Agent",能自主完成从需求理解到部署的全流程开发任务。简单来说,就是可以让AI自动进行需求理解,环境配置,代码编写和测试的全流程,只要提出我们的需求,AI就会自己去编程实现,非常方便。最近我也安装了这款IDE,尝鲜试用了一下,还是不错的。我用TRAE和LangChain完成了一个比较简单的电影数据分析案例,目的是从豆瓣电影网站上获取近1年来的电影数据,通过大模型进行查询和分析,用到了postgresql MCP以及阿里推出的mcp-server-chart。

流程图如下:

首先,我们需要设计数据库,因为我们获取的数据需要存储到数据库中,我选择了Postgresql数据库,因为工作中用的比较多。

根据豆瓣电影页面,我设计了11个字段,包括主键id,电影名称name,导演director,主演actor,类型category,制片国家/地区country,语言language,上映日期release_date,片长runtime,简介abstract,评分score。

我输入了如下的请求给SOLO,让他帮我抓取最近1年的电影数据,并存储到数据库中,告诉了他数据库名称和表名,以及数据库用户名和密码,同时,我告诉他需要安装包的时候要从国内清华的镜像上去下载包。

SOLO运行了大约15分钟左右,期间经过了多次尝试,发现了字段名的错误,并自己进行了修改,最终完成了如下的程序(这里只贴了前面的30行),并实现数据的抓取:

自动生成的代码:

数据库查询结果:

可以看到数据已经存储到了数据库中。下一步我们就可以构建一个查询数据库的问答系统。我这里采用了postgresql mcp来查询数据库,并采用阿里巴巴推出的mcp-server-chart。阿里巴巴(蚂蚁集团)AntV 团队开源的mcp-server-chart是一款基于 MCP(Model Context Protocol)协议的图表生成服务,支持大模型与 AI 工具一键调用,可快速生成 20 + 种专业图表,返回高质量图片链接。

核心代码如下,主要是使用了langgraph.prebuilt下的create_react_agent来构建一个智能代理,调用MCP工具进行查询:

python 复制代码
async def stream_answer(query:str):
    # 加载 MCP 配置
    client = MultiServerMCPClient(
        {
            "postgres": {
                "command": "cmd",
                "args": [
                    "/c",
                    "npx",
                    "-y",
                    "@modelcontextprotocol/server-postgres",
                    "postgresql://postgres:123456@localhost:5432/movie"
                ],
                "transport": "stdio",
            },
            "mcp-server-chart": {
                "command": "cmd",
                "args": [
                    "/c",
                    "npx",
                    "-y",
                    "@antv/mcp-server-chart"
                ],
                "transport": "stdio",
            }
        }
    )

    system_prefix = """
        请讲中文
        当用户提问中涉及电影信息时,需要使用postgresql MCP进行数据查询和操作,仅返回前十条数据,表结构如下:
        ## 电影表(tb_movie)
        "table_name": "tb_movie",
            "description": "电影表",
            "columns":[
                {"column_name": "id","chinese_name": "标识码","data_type": "int"},
                {"column_name": "name","chinese_name": "电影名称","data_type": "varchar"},
                {"column_name": "actor","chinese_name": "主演","data_type": "varchar"},
                {"column_name": "director","chinese_name": "导演","data_type": "varchar"},
                {"column_name": "category","chinese_name": "类型","data_type": "varchar"},
                {"column_name": "country","chinese_name": "制片国家/地区","data_type": "varchar"},
                {"column_name": "language","chinese_name": "语言","data_type": "varchar"},
                {"column_name": "release_date","chinese_name": "上映日期","data_type": "varchar"},
                {"column_name": "runtime","chinese_name": "片长","data_type": "varchar"},
                {"column_name": "abstract","chinese_name": "简介","data_type": "varchar"},
                {"column_name": "score","chinese_name": "评分","data_type": "varchar"}            
            ]
        当用户提及画图时,返回数据按照如下格式输出,输出图片URL后直接结束,不要输出多余的内容:
        1.查询结果:{}
        2.图表展示:{图片URL}
        否则,直接输出返回结果。
    """

    tools = await client.get_tools()

    agent = create_react_agent(
        model, # LLM大模型
        tools  # MCP工具
    )

    result = await agent.ainvoke({
        "messages": [
            {"role":"system", "content":system_prefix},
            {"role":"user", "content":query}
        ]
    })
    return result["messages"][-1].content

下面,我们构建应用界面,界面的话使用Streamlit来构建。Streamlit 是一款 开源的 Python 库,专为数据科学家、机器学习工程师设计,核心定位是「快速构建数据应用的低代码工具」------ 无需前端开发经验(HTML/CSS/JS),仅用纯 Python 代码,就能在几分钟内将数据脚本、模型推理逻辑转化为可交互的 Web 应用,大幅降低数据可视化与 AI 应用落地的门槛。Streamlit非常好用,适合用来实现一些简单的应用以及搭建原型,当然如果要产品化的还是建议使用Vue等成熟的Web框架来构建UI。Streamlit构建的UI界面如下,当返回数据中包含图片URL时,自动展示图片,如果没有图片就直接返回文字:

python 复制代码
import streamlit as st
from langchain_openai import ChatOpenAI
import asyncio
from langchain_db import stream_answer
import re

chat = ChatOpenAI(
    streaming=True,
    model='deepseek-chat', 
    openai_api_key=<你的API KEY>, 
    openai_api_base='https://api.deepseek.com',
    max_tokens=1024
)

def find_urls_in_text(text):
    """
    从给定的文本中找出所有的URL。
    参数:
    text (str): 要从中提取URL的文本。
    返回:
    list: 包含所有找到的URL的列表。
    """
    # 正则表达式模式,用于匹配URL
    url_pattern = r'(https?://\S+|www\.\S+)'
    # 使用re.findall()查找所有匹配项
    urls_found = re.findall(url_pattern, text)
    # 确保匹配到的URL包含协议前缀,如果没有,则添加http://
    for i, url in enumerate(urls_found):
        if not re.match(r'^https?:', url):
            urls_found[i] = 'http://' + url
    return urls_found

async def main():
    st.title("电影知识库")
    question = st.text_input("请输入查询内容:")
    
    if st.button("执行查询"):
        if question:
            result = await stream_answer(question)
            urls = find_urls_in_text(result)
            # 如果有图片,则获取URL展示图片
            if(len(urls) > 0):
                result = result.replace(urls[0], "")
                result = result.replace("\n\n", "\n")
                arr = result.split("图表展示:")
                print(len(arr))
                if(len(arr) > 1):
                    result1 = arr[0]
                    result2 = arr[1]
                    st.write(result1)
                    st.image(urls[0])
                    st.write(result2)
                else:
                    result1 = arr[0]
                    st.write(result1)
                    st.image(urls[0])
            else:
                st.write(result)
        else:
            st.write("查询出错,请检查输入或数据库连接。")


if __name__ == "__main__":
    asyncio.run(main())

测试结果如下:

1.当所提问题不需要画图的时候,直接返回查询的结果,大模型会对返回的结果进行包装和总结。

2.当所提的问题需要画图统计图表时,系统会先返回查询结果,再把返回的图片URL直接展示在界面上。

总的来说,TRAE的SOLO模式给我们提供了一种新的编程模式,可以让AI工具辅助我们设计出总体的框架并完成主题功能的编写,不过要注意的是,我们不能完全依赖于AI工具来完成工作,因为AI生成的代码还是有不少问题的,而且效率未必高,因此大多数情况下,我们仍然需要对代码进行微调,不过AI工具确实极大的提高了我们的生产效率。

相关推荐
yuanmenghao几秒前
自动驾驶中间件iceoryx-介绍
人工智能·中间件·自动驾驶
weixin199701080162 分钟前
哔哩哔哩 item_search_video - 根据关键词获取视频列表接口对接全攻略:从入门到精通
人工智能·音视频
山海青风2 分钟前
人工智能基础与应用 - 数据处理、建模与预测流程 2 : 数据与问题类型
人工智能·python
这张生成的图像能检测吗3 分钟前
(论文速读)VJTNN+GAN分子优化的图到图翻译
人工智能·图神经网络·生成模型·分子设计·药物发现
AI营销实验室4 分钟前
2025年AI CRM系统前瞻:原圈科技智能线索分配机制解析
大数据·人工智能
week_泽5 分钟前
7、OpenCV ORB特征检测笔记
人工智能·笔记·opencv
jay神6 分钟前
基于YOLOv8的行人车辆检测系统
人工智能·深度学习·yolo·计算机视觉·毕业设计
橙汁味的风8 分钟前
3机器学习3步走框架
人工智能·机器学习
全栈小51 小时前
【2025年度创作】分享和总结如何通过AI快速开发一款MCP(模型上下文协议)服务插件,并进行本地和线上部署测试,最后上架MCP以及智能体调用MCP插件
人工智能·mcp·博客之星2025
囊中之锥.1 小时前
《深度学习》CUDA安装配置、pytorch库、torchvision库、torchaudio库安装
人工智能·pytorch·深度学习