利用大模型辅助处理具体任务的全过程:从问题到解决方案
在现代软件开发中,大模型(如 OpenAI 的 GPT 系列)已经成为解决复杂问题的强大工具。本文将通过一个实际案例,展示如何利用大模型辅助处理具体任务的全过程。我们将从问题定义、代码实现、调试优化到最终解决方案,逐步展开。我们向大模型描述了任务需求,并请求生成 Python 代码。为了确保代码的可靠性,我们请求大模型生成单元测试代码。未来,我们将继续探索大模型在更多场景中的应用,进一步提升开发效
·
在现代软件开发中,大模型(如 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}")
第二步:调试与优化
在运行代码时,我们遇到了以下问题:
- API 调用失败:由于 API 密钥或 URL 错误,导致请求失败。
- 编码问题:在导出 CSV 文件时,出现了
UnicodeDecodeError。 - 测试覆盖率不足:代码缺乏单元测试,无法保证稳定性。
通过与大模型的交互,我们逐步解决了这些问题:
- 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. 最终解决方案
通过与大模型的多次交互,我们最终完成了以下工作:
- 功能实现:成功调用 API 获取公司信息,并将结果导出为 CSV 文件。
- 问题修复:解决了 API 调用失败和编码问题。
- 测试覆盖:生成了单元测试代码,确保代码的可靠性。
5. 总结
通过本次任务,我们深刻体会到了大模型在辅助开发中的强大能力:
- 代码生成:快速生成功能代码,减少开发时间。
- 问题排查:帮助定位和修复问题,提高代码质量。
- 测试支持:生成单元测试代码,确保代码的稳定性。
未来,我们将继续探索大模型在更多场景中的应用,进一步提升开发效率和代码质量。
希望这篇博客对你有所帮助!如果你有任何问题或建议,欢迎留言讨论。
更多推荐
所有评论(0)