在现代软件开发中,大模型(如 OpenAI 的 GPT 系列)已经成为解决复杂问题的强大工具。本文将通过一个实际案例,展示如何利用大模型辅助处理具体任务的全过程。我们将从问题定义、代码实现、调试优化到最终解决方案,逐步展开。


1. 问题定义

我们的任务是:

  • 输入:一个公司列表(如 ["阿里巴巴", "腾讯", "百度", "华为", "字节跳动"])。
  • 输出:每个公司的主营业务、公司性质和成立年份,并以 JSON 格式输出。
  • 最终目标:将结果整理成 DataFrame,并导出为 Excel 文件。

2. 利用大模型生成代码

第一步:生成初始代码

我们向大模型描述了任务需求,并请求生成 Python 代码。大模型返回了以下代码:

from openai import OpenAI
import pandas as pd
import json

client = OpenAI(
  api_key="your_api_key_here",
  base_url="https://api.deepseek.com",
)

system_prompt = """
你是一个资深的商业分析师,擅长做公司研究,用户将提供一个公司名称,请提供公司的主营业务、公司性质和成立年份,并且用JSON的格式输出。 

EXAMPLE INPUT: 
华为

EXAMPLE JSON OUTPUT:
{
    "主营业务": "通信业",
    "公司性质": "民营企业",
    "成立年份": "1987"
}
"""

companies = ["阿里巴巴", "腾讯", "百度", "华为", "字节跳动"]

# 存储结果的列表
results = []

# 遍历公司列表
for company in companies:
    # 构造提示词
    user_prompt = f"{company}"

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

    response = client.chat.completions.create(
        model="deepseek-chat",
        messages=messages,
        response_format={
            'type': 'json_object'
        }
    )

    print(json.loads(response.choices[0].message.content))

    # 检查请求是否成功
    if response:
        # 解析 API 返回的 JSON 数据
        api_response = json.loads(response.choices[0].message.content)

        # 提取需要的信息
        company_info = {
            "公司名称": company,
            "主营业务": api_response.get("主营业务", "未知"),
            "公司性质": api_response.get("公司性质", "未知"),
            "成立年份": api_response.get("成立年份", "未知")
        }
        results.append(company_info)
    else:
        print(f"请求失败:{company}")

# 将结果转换为 DataFrame
df = pd.DataFrame(results)

# 输出到 CSV 文件
output_file = "company_data.csv"
df.to_csv(output_file, index=False)  # index=False 表示不保存行索引

print(f"数据已成功导出到 {output_file}")
第二步:调试与优化

在运行代码时,我们遇到了以下问题:

  1. API 调用失败:由于 API 密钥或 URL 错误,导致请求失败。
  2. 编码问题:在导出 CSV 文件时,出现了 UnicodeDecodeError
  3. 测试覆盖率不足:代码缺乏单元测试,无法保证稳定性。

通过与大模型的交互,我们逐步解决了这些问题:

  • API 调用失败:修正了 API 密钥和 URL。
  • 编码问题:在导出 CSV 文件时,显式指定了 utf-8 编码。
  • 测试覆盖率不足:生成了单元测试代码,确保每个功能模块都能正确运行。

3. 生成单元测试

为了确保代码的可靠性,我们请求大模型生成单元测试代码。以下是生成的测试用例:

import unittest
from unittest.mock import patch, MagicMock
from main import client, system_prompt, companies, results, df, output_file

class TestCompanyAnalysis(unittest.TestCase):

    @patch('main.client.chat.completions.create')
    def test_api_response(self, mock_create):
        # 模拟 API 返回的 JSON 数据
        mock_response = MagicMock()
        mock_response.choices = [MagicMock()]
        mock_response.choices[0].message.content = json.dumps({
            "主营业务": "电子商务、云计算、数字媒体和娱乐、创新业务",
            "公司性质": "上市公司",
            "成立年份": "未知"
        })
        mock_create.return_value = mock_response

        # 调用 API
        user_prompt = "阿里巴巴"
        messages = [{"role": "system", "content": system_prompt}, {"role": "user", "content": user_prompt}]
        response = client.chat.completions.create(
            model="deepseek-chat",
            messages=messages,
            response_format={'type': 'json_object'}
        )

        # 验证 API 返回的数据
        self.assertEqual(json.loads(response.choices[0].message.content), {
            "主营业务": "电子商务、云计算、数字媒体和娱乐、创新业务",
            "公司性质": "上市公司",
            "成立年份": "未知"
        })

    def test_companies_list(self):
        # 验证公司列表是否正确
        expected_companies = ["阿里巴巴", "腾讯", "百度", "华为", "字节跳动"]
        self.assertEqual(companies, expected_companies)

    def test_results_structure(self):
        # 验证 results 列表的结构是否正确
        for result in results:
            self.assertIn("公司名称", result)
            self.assertIn("主营业务", result)
            self.assertIn("公司性质", result)
            self.assertIn("成立年份", result)

    def test_dataframe_creation(self):
        # 验证 DataFrame 是否正确创建
        self.assertEqual(len(df), len(companies))
        self.assertListEqual(list(df.columns), ["公司名称", "主营业务", "公司性质", "成立年份"])

    def test_csv_output(self):
        # 验证 CSV 文件是否正确输出
        import os
        self.assertTrue(os.path.exists(output_file))
        with open(output_file, 'r') as f:
            content = f.read()
            self.assertIn("公司名称,主营业务,公司性质,成立年份", content)

if __name__ == '__main__':
    unittest.main()

4. 最终解决方案

通过与大模型的多次交互,我们最终完成了以下工作:

  1. 功能实现:成功调用 API 获取公司信息,并将结果导出为 CSV 文件。
  2. 问题修复:解决了 API 调用失败和编码问题。
  3. 测试覆盖:生成了单元测试代码,确保代码的可靠性。

5. 总结

通过本次任务,我们深刻体会到了大模型在辅助开发中的强大能力:

  • 代码生成:快速生成功能代码,减少开发时间。
  • 问题排查:帮助定位和修复问题,提高代码质量。
  • 测试支持:生成单元测试代码,确保代码的稳定性。

未来,我们将继续探索大模型在更多场景中的应用,进一步提升开发效率和代码质量。


希望这篇博客对你有所帮助!如果你有任何问题或建议,欢迎留言讨论。

Logo

中国智能体开发者社区,聚焦智能体与大模型开发,提供前沿资讯、实用工具链、开源项目及行业案例。通过技术沙龙、开发者大赛等活动,促进经验交流与协作,助力开发者快速构建创新智能应用。

更多推荐