通过实践引导参与者理解大模型 Agent 的概念,学习如何设计、验证和实现自己的 Agent 应用,从需求分析到代码实现的全流程体验,并重点关注当前技术限制下的实用落地方案。
决策和执行是可选的,如果模型只处理文本,是可以不需要决策和执行的。
- 理解模型的iid(独立同分布)特性:
- 训练数据分布对模型行为的影响
- 为什么相似训练样本的任务表现更好
- "模型偏好"的本质:统计规律而非真正的偏好
- 提示词工程的核心目标:
- 最大化与训练数据分布的匹配度
- 明确指令与约束条件
- 减少歧义,增强可预测性
- 不同用词的效果差异:
- "总结" vs "精炼" vs "提取要点"
- "分析" vs "评估" vs "审视"
- "创建" vs "生成" vs "构思"
- 实例对比:同一任务,不同指令词的输出差异
- 模型对特定术语的敏感度分析
- 行业特定术语的使用建议
- 结构要素:
- 背景信息
- 任务描述
- 约束条件
- 输出格式
- 评估标准
- 顺序影响分析:
- 前置背景 vs 后置背景
- 先约束后任务 vs 先任务后约束
- 最佳实践:
- 关键信息优先原则
- 临近原则
- 逻辑递进结构
- 视觉分隔与强调
- 案例演示:重构提示词顺序提升效果
- 问题:当输出内容较长,需要的约束与提示词相隔较远时
- 解决方案:
- 让模型先复述约束和要求,再执行任务
- 使用结构化提示词,明确标记约束部分
- 关键约束重复强调
- 示例:
</details>
请先复述以下约束条件,然后再进行任务:
1. 输出必须包含5个关键点
2. 每个点必须有数据支持
3. 总字数控制在1000字以内
</details>
- 效果对比:使用复述技巧前后的约束遵循率
- 长度与模型性能的关系:
- 注意力机制的局限性
- 上下文窗口大小的影响
- 长文本处理的挑战
- 优化策略:
- 任务分解:将3000字内容拆分为5个600字任务
- 重要信息前置
- 增量生成与整合
- 摘要-详情层次结构
- 案例:长文档分析的最佳实践
- 系统性迭代流程:
- 基准测试
- 单变量实验
- 结果分析
- 优化应用
- 常见优化维度:
- 指令明确性
- 示例数量与质量
- 约束条件精确度
- 格式要求清晰度
- 提示词版本管理最佳实践
- A/B测试设计与结果分析
- 单轮 vs 多轮交互的优缺点
- 多轮交互设计模式:
- 渐进式细化
- 反馈纠错循环【需要慎用,因为错误内容可能对幻觉较强的模型有比较强的影响力】
- 探索-收敛模式
- 上下文管理策略:
- 关键信息重申
- 状态追踪
- 历史摘要
- 案例:客户需求挖掘的多轮对话设计
- 活动:利用本环节学到的提示词技巧,解决前一阶段无法实现的需求
- 流程:
- 选择1-2个之前失败的元任务
- 应用新学到的提示词技巧重新设计提示词
- 测试并比较优化前后的结果
- 成果分享:
- 3-4位参与者分享优化经验
- 讲师点评并总结关键技巧
- 时间:15分钟
- 简洁架构原则:
- 从最简单的组件开始
- 避免引入不透明的框架和步骤
- 保持流程可控和可解释
- 核心组件:
- 输入处理模块
- 任务执行模块
- 结果整合模块
- 用户界面模块
- AI编程协助策略:如何利用AI帮助实现不熟悉的部分
- Streamlit优势:
- 快速开发与迭代
- Python原生支持
- 丰富的UI组件
- 部署简便
- 基本结构:
- 页面布局
- 用户输入处理
- API调用
- 结果展示
- 代码演示:简单Agent界面的实现
- 性能优化技巧
<details> <summary><b>逐字稿</b></summary>
在构建Agent原型时,我们需要一个既简单又强大的工具来快速验证我们的想法。Streamlit恰好满足这一需求,它是Python生态系统中最受欢迎的Web应用框架之一,专为数据科学和AI应用设计。
Streamlit有几个显著优势:首先,它支持快速开发与迭代,只需几行代码就能创建交互式应用。其次,它提供Python原生支持,对于熟悉Python的开发者几乎没有学习门槛。第三,它拥有丰富的UI组件,从简单的文本输入到复杂的数据可视化都能轻松实现。最后,部署非常简便,通过Streamlit Cloud甚至可以一键部署。
一个典型的Streamlit应用包含四个基本结构:页面布局定义了应用的外观和组件排列;用户输入处理负责收集和验证用户提供的信息;API调用部分连接到大语言模型和其他必要的服务;结果展示则负责以用户友好的方式呈现输出。
让我演示一个简单Agent界面的实现。这个例子创建了一个文档摘要工具:
[示例代码]
import streamlit as st
import openai
st.title("文档摘要Assistant")
# 用户输入
user_input = st.text_area("请粘贴需要摘要的文本:", height=200)
if st.button("生成摘要"):
if user_input:
with st.spinner("正在生成摘要..."):
# API调用
response = openai.ChatCompletion.create(
model="gpt-3.5-turbo",
messages=[
{"role": "system", "content": "你是一个专业的文档摘要助手。"},
{"role": "user", "content": f"请为以下文本生成一个简洁的摘要,突出关键点:\n\n{user_input}"}
]
)
# 结果展示
st.subheader("摘要结果")
st.write(response.choices[0].message.content)
else:
st.error("请输入文本内容")
关于性能优化,使用Streamlit时要注意几点:利用st.cache_data装饰器缓存计算结果;避免在主程序中加载大型模型或数据;使用会话状态(session_state)保存用户会话信息;针对大量数据,考虑使用分页或延迟加载策略。
这个简单的例子展示了Streamlit如何帮助我们快速构建功能性Agent界面。随着项目发展,我们可以逐步添加更复杂的功能和更精美的界面。
</details>
- Copilot Studio优势:
- 零代码构建企业级Agent
- 类似 GPT Store 的界面设计
- 内置知识库连接功能
- 与Microsoft生态系统集成
- 核心功能:
- 话题创建:定义Agent可以回答的问题类型
- 知识源连接:网站、文档、SharePoint、数据库
- Power Platform集成:扩展Agent功能
- 实现流程:
- 创建Copilot并定义话题范围
- 连接相关知识源
- 配置生成式回答设置
- 测试、发布与监控
- 使用场景:
- 企业内部知识助手
- 客户服务自动化
- 员工培训与支持
<details> <summary><b>逐字稿</b></summary>
对于那些不想深入代码实现的参与者,我想介绍一个强大的无代码Agent开发平台 - Microsoft Copilot Studio。这是一个企业级工具,让非技术人员也能创建功能强大的AI助手。
Copilot Studio的主要优势在于它实现了真正的零代码开发体验。你可以通过直观的界面构建企业级Agent,无需编写任何代码。它提供了类似GPT Store的界面设计,让用户可以轻松创建和分享自定义AI助手。更重要的是,它内置了知识库连接功能,可以直接连接到企业内部资源。对于已经使用Microsoft产品的组织,它与整个Microsoft生态系统无缝集成,包括Teams、SharePoint等。
Copilot Studio的核心功能围绕三个方面:首先是话题创建,你可以定义Agent可以回答的具体问题类型,设置问题示例和预期回答。其次是知识源连接,支持接入网站、文档、SharePoint、数据库等多种信息源,确保回答基于最新和最相关的信息。第三是Power Platform集成,允许你通过Power Automate自动化流程、Power Apps创建自定义应用等方式扩展Agent功能。
实现一个基本的Copilot非常简单,通常包括四个步骤:首先,创建新的Copilot并明确定义其能回答的话题范围;然后,连接相关知识源,可以是网页、文档或数据库;接着,配置生成式回答的设置,包括回答风格、长度等参数;最后,进行测试、发布并持续监控其表现。
这种无代码Agent特别适合几种使用场景:作为企业内部知识助手,帮助员工快速找到内部政策、流程或资源;用于客户服务自动化,回答常见问题并解决基本问题;或者作为员工培训与支持工具,提供即时的学习资源和指导。
对于那些希望快速部署实用Agent但不想深入代码细节的参与者,Microsoft Copilot Studio提供了一个理想的平台,让你专注于内容和用例,而不是技术实现。
</details>
- 案例:自动化PPT生成助手
- 需求分析:根据Word文档生成PPT
- 元任务测试:
1. 规划PPT内容结构
2. 生成PPT文字内容
3. 生成PPT图表建议
- 使用Streamlit串联各个模块
- 实现演示与代码讲解
- 时间:15分钟
<details> <summary><b>逐字稿</b></summary>
现在,让我通过一个完整案例来展示如何将我们学到的所有内容整合起来,构建一个实用的Agent。我们的案例是一个自动化PPT生成助手,它能根据Word文档自动创建演示幻灯片。
首先,让我们看看需求分析。许多人经常需要将冗长的Word文档转化为简洁的PPT演示,这是一项耗时且重复性高的工作。理想情况下,我们希望Agent能够理解文档内容,提取关键信息,规划合理的幻灯片结构,并生成适合演示的内容。
在开始编码前,我们进行了元任务测试,确认模型能够胜任三个关键能力:
第一,规划PPT内容结构,即根据文档内容合理划分章节和幻灯片;
第二,生成PPT文字内容,包括标题、要点和过渡语;
第三,生成PPT图表建议,根据内容提出可视化建议。
测试确认这些能力可行后,我们使用Streamlit构建了应用界面,将这些模块串联起来。
现在,让我演示这个应用的实际运行效果和核心代码:
[代码演示]
</details>
import streamlit as st
import openai
from docx import Document
import json
# 设置页面
st.set_page_config(page_title="Word转PPT助手", layout="wide")
st.title("Word文档转PPT助手")
# 文件上传
uploaded_file = st.file_uploader("上传Word文档", type=["docx"])
if uploaded_file is not None:
# 读取文档内容
doc = Document(uploaded_file)
full_text = "\n".join([para.text for para in doc.paragraphs])
with st.expander("文档内容预览"):
st.write(full_text[:500] + "..." if len(full_text) > 500 else full_text)
if st.button("生成PPT结构"):
# 第一步:规划PPT结构
structure_prompt = f"""
请分析以下文档内容,提出合适的PPT结构规划。
返回JSON格式,包含幻灯片数量和每张幻灯片的标题与要点。
文档内容:
{full_text[:4000]} # 限制长度避免超出token限制
JSON格式示例:
slides,
// 更多幻灯片...
]
}}
"""
with st.spinner("正在分析文档并规划PPT结构..."):
response = openai.ChatCompletion.create(
model="gpt-4",
messages=[
{"role": "system", "content": "你是PPT结构规划专家。请根据文档内容提供最合适的PPT结构方案。"},
{"role": "user", "content": structure_prompt}
]
)
structure_text = response.choices[0].message.content
try:
# 尝试解析JSON
structure = json.loads(structure_text)
# 显示PPT结构
st.subheader("生成的PPT结构")
for i, slide in enumerate(structure["slides"]):
col1, col2 = st.columns([1, 3])
with col1:
st.write(f"#### 幻灯片 {i+1}")
with col2:
st.write(f"标题: {slide['title']}")
st.write("要点:")
for point in slide["points"]:
st.write(f"- {point}")
if "visualization" in slide and slide["visualization"]:
st.write(f"可视化建议: {slide['visualization']}")
# 提供导出选项
st.success("PPT结构生成完成!在实际应用中,这里可以添加导出为PPT文件的功能。")
except json.JSONDecodeError:
st.error("JSON解析失败,请查看原始输出")
st.text(structure_text)
</details>
这个案例展示了如何将复杂任务拆分为多个元任务,通过适当的提示词工程引导模型完成每个步骤,最后将结果整合为用户可用的输出。
值得注意的是几个关键设计决策:我们限制了输入文本长度,避免超出模型上下文窗口;使用了结构化的JSON输出格式,便于后续处理;通过明确的指令和示例引导模型生成符合预期的内容结构。
这个简单的演示可以进一步扩展,例如添加更细致的内容处理、支持主题风格选择、甚至直接生成PowerPoint文件。关键是我们遵循了模块化设计,使系统易于理解和扩展。
</details>
- 编程组:
- 使用Streamlit实现自己的Agent原型
- 提供的资源:
- 代码模板
- API接口文档
- 常见问题解决方案
- 非编程组:
- 使用declarative agent平台构建简单应用
- 提供的资源:
- 平台使用指南
- 配置模板
- 测试案例
- 时间:1周