
系列第七篇。前六篇我们聊了开源模型部署、模型调优、三大岗位AI方案、全链路AI实战、经验沉淀和踩坑复盘。这篇收个大的——技术人的AI提效,不止是"写代码快了"这么简单。
先抛个问题:你团队里是不是有人天天说"我用AI写代码效率提升了50%",但项目交付速度好像并没有快多少?
这不是他在吹牛,而是提效这件事,不能只盯着一环看。
我见过一个团队,开发用Copilot写代码确实快了,但代码审查还是人工一行行看,测试用例还是手写,文档还是拖到最后一刻补,线上故障还是靠人肉排查。结果就是:编码省下来的时间,全被后面的环节吃掉了。
这就好比你在高速公路上开了一段快车,结果下了高速全是红绿灯,平均速度还是上不来。
真正意义上的提效,得是全链路、全角色的提效。不只是开发,运维、测试、DBA、SRE、数据工程师、甚至技术PM,每个角色都有AI能帮忙的地方。今天这篇就来盘一盘,技术人手里的AI提效牌,到底该怎么打。
先上一张图,把全角色的AI提效场景铺开看看:

看到了吧?每个角色至少有3-4个AI能帮上忙的场景。但问题在于,大多数团队目前只用到了"开发写代码"这一块,其他角色的AI提效几乎是空白。
接下来我挑几个实战场景,直接上代码和案例。
每个技术团队都有一句经典台词:"代码我先写完了,文档回头补。"
然后呢?没有然后了。
技术文档欠债是通病,不是大家不想写,而是写文档确实比写代码累——你得把脑子里的实现逻辑重新组织成别人能看懂的语言,这个转换成本很高。
但AI能帮你做这个转换。你给它代码,它帮你生成文档,你再花几分钟调一调就行。这比从零写快太多了。
下面是一个实际在用的文档自动生成工具,支持Python和Java代码:
```python
import os
import ast
import json
from typing import Optional
class DocGenerator:
"""扫描代码目录,自动生成技术文档"""
def __init__(self, llm_client, project_root: str):
self.llm = llm_client
self.project_root = project_root
self.supported_extensions = {
'.py': self._parse_python,
'.java': self._parse_java,
'.go': self._parse_go,
'.ts': self._parse_typescript,
}
def generate_docs(self, source_dir: str, output_dir: str):
"""遍历源码目录,为每个文件生成文档"""
docs = []
for root, _, files in os.walk(os.path.join(self.project_root, source_dir)):
for fname in files:
ext = os.path.splitext(fname)[1]
if ext not in self.supported_extensions:
continue
filepath = os.path.join(root, fname)
file_doc = self._process_file(filepath, ext)
if file_doc:
docs.append(file_doc)
# 汇总成索引文档
index_doc = self._generate_index(docs)
self._write_output(output_dir, 'README.md', index_doc)
# 写每个模块的详细文档
for doc in docs:
filename = doc['module'].replace('/', '_') + '.md'
self._write_output(output_dir, filename, doc['content'])
print(f"文档生成完成: {len(docs)}个模块, 输出到 {output_dir}")
return docs
def _process_file(self, filepath: str, ext: str) -> Optional[dict]:
"""处理单个源码文件"""
with open(filepath, 'r', encoding='utf-8') as f:
source_code = f.read()
# 提取代码结构信息
parser = self.supported_extensions[ext]
structure = parser(filepath, source_code)
if not structure.get('functions') and not structure.get('classes'):
return None
# 调用LLM生成文档
doc_content = self._llm_generate_doc(filepath, source_code, structure)
rel_path = os.path.relpath(filepath, self.project_root)
return {
'module': rel_path,
'content': doc_content,
'structure': structure
}
def _parse_python(self, filepath: str, source: str) -> dict:
"""解析Python文件结构"""
tree = ast.parse(source)
functions = []
classes = []
for node in ast.walk(tree):
if isinstance(node, ast.FunctionDef):
params = [arg.arg for arg in node.args.args]
ret_type = ast.dump(node.returns) if node.returns else 'Any'
functions.append({
'name': node.name,
'params': params,
'return_type': ret_type,
'docstring': ast.get_docstring(node) or '',
'line': node.lineno
})
elif isinstance(node, ast.ClassDef):
methods = [n.name for n in node.body if isinstance(n, ast.FunctionDef)]
classes.append({
'name': node.name,
'methods': methods,
'docstring': ast.get_docstring(node) or '',
'line': node.lineno
})
return {'functions': functions, 'classes': classes}
def _parse_java(self, filepath: str, source: str) -> dict:
"""简化版Java解析(正则提取)"""
import re
functions = re.findall(r'(public|private|protected)\s+\w+\s+(\w+)\s*\(([^)]*)\)', source)
classes = re.findall(r'class\s+(\w+)', source)
return {
'functions': [{'name': f[1], 'params': f[2]} for f in functions],
'classes': [{'name': c} for c in classes]
}
def _parse_go(self, filepath: str, source: str) -> dict:
"""简化版Go解析"""
import re
functions = re.findall(r'func\s+(?:\([^)]*\)\s+)?(\w+)\s*\(([^)]*)\)', source)
return {
'functions': [{'name': f[0], 'params': f[1]} for f in functions],
'classes': []
}
def _parse_typescript(self, filepath: str, source: str) -> dict:
"""简化版TypeScript解析"""
import re
functions = re.findall(r'(?:export\s+)?function\s+(\w+)\s*\(([^)]*)\)', source)
classes = re.findall(r'(?:export\s+)?class\s+(\w+)', source)
return {
'functions': [{'name': f[0], 'params': f[1]} for f in functions],
'classes': [{'name': c} for c in classes]
}
def _llm_generate_doc(self, filepath: str, source: str, structure: dict) -> str:
"""调用LLM为代码生成文档"""
# 只传结构信息和关键代码片段,控制token消耗
context = self._build_context(source, structure)
fence = chr(96) * 3
prompt = f"""你是一个技术文档工程师。请根据以下代码信息生成中文技术文档。
要求:
1. 包含模块说明、核心函数说明、使用示例
2. 语气要像给同事讲解,不要写API说明书那种机器味
3. 如果代码有潜在问题,在"注意事项"中指出
4. 输出Markdown格式
文件路径: {filepath}
代码结构:
{json.dumps(structure, ensure_ascii=False, indent=2)}
代码内容:
{fence}
{context}
{fence}
"""
response = self.llm.chat.completions.create(
model="qwen2.5-coder-7b",
messages=[{"role": "user", "content": prompt}],
temperature=0.3,
max_tokens=2000
)
return response.choices[0].message.content
def _build_context(self, source: str, structure: dict, max_chars: int = 4000) -> str:
"""构建LLM上下文,控制token消耗"""
# 如果代码太长,只传函数签名和注释
if len(source) <= max_chars:
return source
lines = source.split('\n')
context_lines = []
char_count = 0
for line in lines:
# 保留函数定义行、注释行、类定义行
stripped = line.strip()
if (stripped.startswith('def ') or
stripped.startswith('class ') or
stripped.startswith('func ') or
stripped.startswith('//') or
stripped.startswith('#') or
stripped.startswith('export') or
stripped.startswith('public') or
stripped.startswith('private')):
context_lines.append(line)
char_count += len(line)
if char_count > max_chars:
break
elif stripped and char_count < max_chars // 2:
context_lines.append(line)
char_count += len(line)
return '\n'.join(context_lines)
def _generate_index(self, docs: list) -> str:
"""生成模块索引"""
prompt = f"""以下是{len(docs)}个模块的文档摘要,请生成一个项目文档目录索引。
模块列表:
"""
for d in docs:
prompt += f"- {d['module']}\n"
prompt += "\n请生成Markdown格式的目录索引,包含每个模块的一句话说明。"
response = self.llm.chat.completions.create(
model="qwen2.5-coder-7b",
messages=[{"role": "user", "content": prompt}],
temperature=0.2,
max_tokens=1000
)
return response.choices[0].message.content
def _write_output(self, output_dir: str, filename: str, content: str):
"""写入文档文件"""
os.makedirs(output_dir, exist_ok=True)
filepath = os.path.join(output_dir, filename)
with open(filepath, 'w', encoding='utf-8') as f:
f.write(content)
# 使用示例
if __name__ == '__main__':
from openai import OpenAI
client = OpenAI(
base_url="http://localhost:8000/v1",
api_key="local"
)
gen = DocGenerator(client, project_root="./my-project")
gen.generate_docs(
source_dir="src",
output_dir="./docs/auto-generated"
)
```我们团队把这个工具接进了Git pre-commit hook,每次提交代码时自动检查对应模块的文档是否更新。效果很明显:
指标 | 接入前 | 接入后 |
|---|---|---|
模块文档覆盖率 | 23% | 87% |
新人上手时间 | 3天 | 1天 |
文档与代码不同步率 | 基本不同步 | 自动同步 |
每次写文档耗时 | 15-20分钟 | 2-3分钟(改AI生成的) |
关键点:不是让AI完全替代人写文档,而是让AI打草稿、人做校对。这个定位很重要,完全交给AI容易跑偏,完全靠人又写不动。
运维同学日常最多的操作是什么?写脚本。部署脚本、监控脚本、清理脚本、备份脚本……而且很多是临时性的需求:"帮我看看这台机器磁盘占用"、"把这三个服务的日志拉下来对比"、"这批机器需要批量更新配置"。
以前的做法是:去网上搜类似的脚本,改一改变量名,跑一下看看行不行。这个过程其实很费时间,而且不同人写出来的脚本风格不统一,出了问题别人很难接手。
```python
import re
from dataclasses import dataclass, field
from typing import Optional
@dataclass
class ScriptContext:
"""运维脚本生成的上下文信息"""
task_description: str
os_type: str = "linux" # linux / windows / macos
cluster_info: str = "" # 集群信息
safety_level: str = "medium" # low/medium/high
dry_run: bool = True # 默认先dry run
related_services: list = field(default_factory=list)
constraints: list = field(default_factory=list)
class OpsScriptGenerator:
"""根据自然语言描述生成运维脚本"""
# 预置的安全策略
SAFETY_RULES = {
"high": [
"所有文件操作必须先备份",
"所有删除操作必须加确认提示",
"所有网络操作必须指定超时",
"必须有完整的日志记录",
"必须有回滚方案",
],
"medium": [
"删除操作加确认提示",
"网络操作指定超时",
"记录操作日志",
],
"low": [
"记录操作日志",
]
}
def __init__(self, llm_client):
self.llm = llm_client
self.script_history = [] # 脚本历史,用于few-shot
def generate(self, context: ScriptContext) -> dict:
"""生成运维脚本"""
# 构建安全约束
safety_rules = self.SAFETY_RULES.get(context.safety_level, self.SAFETY_RULES["medium"])
# 构建提示词
prompt = self._build_prompt(context, safety_rules)
# 调用LLM生成脚本
response = self.llm.chat.completions.create(
model="qwen2.5-coder-14b",
messages=[
{"role": "system", "content": self._system_prompt()},
{"role": "user", "content": prompt}
],
temperature=0.2,
max_tokens=3000
)
raw_output = response.choices[0].message.content
# 解析LLM输出
result = self._parse_output(raw_output, context)
# 安全校验
result['safety_check'] = self._safety_check(result['script'], context)
# 记录历史
self.script_history.append({
'task': context.task_description,
'script': result['script'],
'approved': False
})
return result
def _system_prompt(self) -> str:
fence = chr(96) * 3
return f"""你是一个资深运维工程师,擅长编写Shell/Python运维脚本。
规则:
1. 生成的脚本必须包含完整的注释说明
2. 危险操作(rm、kill、truncate等)必须有确认提示
3. 网络操作必须设置超时时间
4. 默认使用dry-run模式,需要加--execute参数才真正执行
5. 输出格式固定为:
### 脚本说明
(一两句话说清楚这个脚本干什么)
### 脚本代码
{fence}bash
(脚本内容)
{fence}
### 使用方法
(怎么用,参数说明)
### 回滚方案
(如果出问题了怎么恢复)
### 注意事项
(需要人工确认的风险点)
"""
def _build_prompt(self, context: ScriptContext, safety_rules: list) -> str:
prompt = f"""请帮我生成一个运维脚本。
任务描述: {context.task_description}
操作系统: {context.os_type}
安全级别: {context.safety_level}
是否默认dry-run: {context.dry_run}
"""
if context.cluster_info:
prompt += f"集群信息: {context.cluster_info}\n"
if context.related_services:
prompt += f"相关服务: {', '.join(context.related_services)}\n"
if context.constraints:
prompt += f"约束条件:\n"
for c in context.constraints:
prompt += f"- {c}\n"
prompt += f"\n安全要求:\n"
for rule in safety_rules:
prompt += f"- {rule}\n"
# 如果有历史脚本,加几个做few-shot
if self.script_history:
approved = [s for s in self.script_history if s['approved']][-3:]
if approved:
prompt += "\n以下是之前类似的脚本,供参考:\n"
for item in approved:
bt = chr(96) * 3
prompt += f"\n任务: {item['task']}\n脚本:\n{bt}\n{item['script'][:500]}\n{bt}\n"
return prompt
def _parse_output(self, raw: str, context: ScriptContext) -> dict:
"""解析LLM输出"""
result = {
'description': '',
'script': '',
'usage': '',
'rollback': '',
'warnings': ''
}
# 提取各部分
sections = {
'脚本说明': 'description',
'脚本代码': 'script',
'使用方法': 'usage',
'回滚方案': 'rollback',
'注意事项': 'warnings'
}
for cn_name, key in sections.items():
pattern = rf'###\s*{cn_name}\s*\n(.*?)(?=###|$)'
match = re.search(pattern, raw, re.DOTALL)
if match:
content = match.group(1).strip()
if key == 'script':
# 提取代码块内容(用chr(96)拼出三反引号避免与外层冲突)
bt = chr(96) * 3
code_pattern = re.escape(bt) + r'(?:\w+)?\n(.*?)' + re.escape(bt)
code_match = re.search(code_pattern, content, re.DOTALL)
result[key] = code_match.group(1).strip() if code_match else content
else:
result[key] = content
return result
def _safety_check(self, script: str, context: ScriptContext) -> dict:
"""脚本安全校验"""
checks = {
'has_rm': bool(re.search(r'\brm\b', script)),
'has_kill': bool(re.search(r'\bkill\b', script)),
'has_confirm': bool(re.search(r'read\s|confirm|y/n', script, re.IGNORECASE)),
'has_timeout': bool(re.search(r'timeout\s+\d', script)),
'has_dry_run': bool(re.search(r'dry.run|--execute', script, re.IGNORECASE)),
'has_logging': bool(re.search(r'log|echo\s.*\]', script, re.IGNORECASE)),
}
issues = []
if checks['has_rm'] and not checks['has_confirm']:
issues.append("包含rm命令但没有确认提示")
if checks['has_kill'] and not checks['has_confirm']:
issues.append("包含kill命令但没有确认提示")
if context.safety_level == 'high':
if not checks['has_dry_run']:
issues.append("高危操作但未使用dry-run模式")
if not checks['has_logging']:
issues.append("高危操作但未记录日志")
return {
'checks': checks,
'issues': issues,
'passed': len(issues) == 0
}
# 使用示例
if __name__ == '__main__':
from openai import OpenAI
client = OpenAI(base_url="http://localhost:8000/v1", api_key="local")
gen = OpsScriptGenerator(client)
context = ScriptContext(
task_description="检查集群中所有节点的磁盘使用率,超过80%的自动清理/var/log下7天前的日志",
os_type="linux",
safety_level="high",
related_services=["nginx", "redis", "mysql"],
constraints=["不能影响正在运行的服务", "清理前需要列出将被删除的文件"]
)
result = gen.generate(context)
print(f"脚本说明: {result['description']}")
print(f"安全检查: {'通过' if result['safety_check']['passed'] else '有问题'}")
if result['safety_check']['issues']:
for issue in result['safety_check']['issues']:
print(f" - {issue}")
print(f"\n脚本内容:\n{result['script'][:500]}...")
```整个从需求到脚本执行的过程是这样的:

这里面有个关键设计:脚本生成后不会直接执行,必须经过人工Review和dry-run验证两道关。AI生成的脚本可能有边界情况没考虑到,直接上生产环境跑是有风险的。dry-run模式让你先看到"将要做什么",确认没问题了再加--execute真正执行。
技术团队最烦的两件事之一就是写周报(另一件是开会)。
不是周报本身没用,而是收集信息的过程太痛苦了。你得去翻Jira看完成了哪些任务,去Git看提交了什么代码,去监控看线上有没有异常,最后再花半小时把这些信息组织成领导能看懂的格式。
这事AI特别适合干——它擅长从碎片信息中提取关键点并结构化输出。
```python
import json
from datetime import datetime, timedelta
from dataclasses import dataclass
from typing import Optional
@dataclass
class ReportConfig:
"""周报配置"""
team_name: str
report_date: str
include_metrics: bool = True
include_risks: bool = True
language: str = "zh"
style: str = "concise" # concise / detailed
class WeeklyReportGenerator:
"""从多个数据源收集信息,自动生成技术周报"""
def __init__(self, llm_client, git_client=None, jira_client=None, monitor_client=None):
self.llm = llm_client
self.git = git_client
self.jira = jira_client
self.monitor = monitor_client
def generate(self, config: ReportConfig, extra_notes: str = "") -> str:
"""生成周报"""
# 第一步:从各数据源收集原始信息
raw_data = {}
if self.git:
raw_data['commits'] = self._collect_git_activity(config)
if self.jira:
raw_data['tasks'] = self._collect_jira_tasks(config)
if self.monitor and config.include_metrics:
raw_data['metrics'] = self._collect_monitoring_data(config)
if extra_notes:
raw_data['notes'] = extra_notes
# 第二步:调用LLM生成结构化周报
report = self._llm_generate_report(config, raw_data)
# 第三步:后处理,格式化输出
formatted = self._format_report(report, config)
return formatted
def _collect_git_activity(self, config: ReportConfig) -> dict:
"""收集Git活动数据"""
end_date = datetime.strptime(config.report_date, '%Y-%m-%d')
start_date = end_date - timedelta(days=7)
commits = self.git.get_commits(
since=start_date,
until=end_date,
per_page=100
)
# 按作者和仓库统计
by_author = {}
by_repo = {}
for commit in commits:
author = commit['author']
repo = commit.get('repo', 'unknown')
by_author.setdefault(author, []).append({
'message': commit['message'],
'repo': repo,
'date': commit['date']
})
by_repo.setdefault(repo, 0)
by_repo[repo] += 1
return {
'total_commits': len(commits),
'by_author': {a: len(c) for a, c in by_author.items()},
'by_repo': by_repo,
'recent_messages': [c['message'][:80] for c in commits[:20]]
}
def _collect_jira_tasks(self, config: ReportConfig) -> dict:
"""收集Jira任务数据"""
end_date = datetime.strptime(config.report_date, '%Y-%m-%d')
start_date = end_date - timedelta(days=7)
tasks = self.jira.search_issues(
jql=f"team = {config.team_name} AND "
f"updated >= {start_date.strftime('%Y-%m-%d')} AND "
f"updated <= {end_date.strftime('%Y-%m-%d')}"
)
completed = [t for t in tasks if t['status'] == 'Done']
in_progress = [t for t in tasks if t['status'] == 'In Progress']
blocked = [t for t in tasks if t['status'] == 'Blocked']
return {
'total': len(tasks),
'completed': len(completed),
'in_progress': len(in_progress),
'blocked': len(blocked),
'completed_tasks': [
{'key': t['key'], 'summary': t['summary']}
for t in completed[:15]
],
'in_progress_tasks': [
{'key': t['key'], 'summary': t['summary']}
for t in in_progress[:10]
],
'blocked_tasks': [
{'key': t['key'], 'summary': t['summary'], 'blocker': t.get('description', '')[:100]}
for t in blocked[:5]
]
}
def _collect_monitoring_data(self, config: ReportConfig) -> dict:
"""收集监控数据"""
end_date = datetime.strptime(config.report_date, '%Y-%m-%d')
start_date = end_date - timedelta(days=7)
# 获取告警统计
alerts = self.monitor.get_alerts(
start=start_date,
end=end_date
)
# 按服务分类告警
by_service = {}
for alert in alerts:
svc = alert.get('service', 'unknown')
by_service.setdefault(svc, {'count': 0, 'critical': 0})
by_service[svc]['count'] += 1
if alert.get('severity') == 'critical':
by_service[svc]['critical'] += 1
# 获取关键指标
metrics = self.monitor.get_metrics_summary(
start=start_date,
end=end_date,
metrics=['cpu_usage', 'memory_usage', 'error_rate', 'qps']
)
return {
'total_alerts': len(alerts),
'critical_alerts': sum(1 for a in alerts if a.get('severity') == 'critical'),
'by_service': by_service,
'metrics_summary': metrics
}
def _llm_generate_report(self, config: ReportConfig, raw_data: dict) -> dict:
"""调用LLM生成结构化周报内容"""
style_instruction = {
'concise': "简洁风格,每个部分3-5句话,突出重点",
'detailed': "详细风格,每个部分展开说明,包含数据和分析"
}.get(config.style, "简洁风格")
prompt = f"""你是技术团队的周报助手。请根据以下原始数据生成本周的技术周报。
团队: {config.team_name}
报告日期: {config.report_date}
风格要求: {style_instruction}
原始数据(JSON格式):
{json.dumps(raw_data, ensure_ascii=False, indent=2)}
请按以下结构输出:
1. 本周工作概要: (一段话总结本周主要进展)
2. 完成事项: (列出本周完成的主要任务)
3. 进行中事项: (列出正在进行的任务和进展)
4. 线上情况: (告警/异常/关键指标变化)
5. 风险与阻塞: (如果有blocked任务或指标异常)
6. 下周计划: (基于本周进展推断下周可能的工作方向)
注意:
- 不要简单罗列数据,要有总结性描述
- 如果有异常数据(如告警突增),要主动指出
- 语气要像团队内部沟通,不要太正式
"""
response = self.llm.chat.completions.create(
model="qwen2.5-7b",
messages=[{"role": "user", "content": prompt}],
temperature=0.4,
max_tokens=2500
)
return {'content': response.choices[0].message.content}
def _format_report(self, report: dict, config: ReportConfig) -> str:
"""格式化最终输出"""
header = f"# {config.team_name} 技术周报 ({config.report_date})\n\n"
footer = f"\n---\n*本报告由AI辅助生成,请人工确认后发送*\n"
return header + report['content'] + footer
# 使用示例
if __name__ == '__main__':
from openai import OpenAI
client = OpenAI(base_url="http://localhost:8000/v1", api_key="local")
gen = WeeklyReportGenerator(
llm_client=client,
git_client=None, # 实际使用时传入Git API client
jira_client=None,
monitor_client=None
)
config = ReportConfig(
team_name="Platform-Team",
report_date="2026-08-21",
include_metrics=True,
style="concise"
)
report = gen.generate(config, extra_notes="本周主要在做缓存层重构,下周计划上线灰度")
print(report)
```前面三个场景,每个都是一个独立工具。但真正提效到位的团队,不会停留在"每个人用各自的AI工具"这个阶段。你需要的是一个提效工具平台——把散落的AI能力收敛成统一入口,让大家共享、复用、持续优化。
提效平台的架构长这样:

平台化的价值不在于"功能更多",而在于三点:
第一,Prompt复用。同一个"代码文档生成"能力,张三写了一套Prompt,李四又写了一套,质量参差不齐。收到平台里统一管理,好用的Prompt沉淀下来,大家共享,差的淘汰掉。
第二,效果可追溯。谁用了什么能力,效果怎么样,花了多少token,一清二楚。这样你才能回答"AI到底帮我们省了多少时间"这个问题。
第三,安全可控。所有AI调用经过统一网关,可以做敏感信息过滤、调用审计、成本限流。不用担心理工不小心把生产环境密钥传给了云端API。
最后说一个很多人忽略的问题:你怎么知道AI到底提了多少效?
光靠主观感受是不够的,得有量化指标。我推荐三个维度:

我见过一个团队的做法特别实在:他们搞了个"AI使用前后对比"实验——同一批任务,前一周不允许用AI工具,后一周放开使用,记录两组的完成时间和产出质量。数据出来后,领导直接拍板给AI平台预算。
这就是用数据说话的力量。你说"AI提效了",领导可能半信半疑;你说"同样一批任务,用AI后平均完成时间从4小时降到2.5小时,Bug率降了15%",领导直接批预算。
AI不是一个工具,是一种新的工作方式。
什么意思呢?以前你遇到问题,第一反应是"我去搜一下"、"我问问同事"。现在你应该养成一个习惯——第一反应是"这个事AI能不能帮我做"。不是什么都要找AI,而是先过一遍脑子,能交给AI的别自己硬扛。
但这里有个前提:你得知道AI能做什么、不能做什么。这不需要你懂模型原理,但需要你实际用过、踩过坑、知道边界在哪。这也是我写这个系列七篇文章的初衷——不是教你理论,是分享真实的实战经验,让你少走弯路。
最后给想落地AI提效的团队三个建议:
AI提效这条路,刚起步。大家一起摸着石头过河,摸多了就知道哪条路能走通了。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。