3.6 两小时搭建四个AI应用:新闻稿生成器与智能问答系统
一、实战目标
本节通过四个示例项目,帮助你在约2小时内掌握LLM应用开发的基本流程:新闻稿生成器、智能问答系统、文档摘要工具、代码助手。书中第 3 章 3.5 示例项目(2 小时搭建首个 AI 应用) 明确列出上述四类实战,3.6 小结强调「从 0 到 1 搭建 LLM 应用的完整流程、常见问题与解决方案」——本节即对应 3.5 的代码实现与 3.6 的收尾,建议按顺序在本地跑通四个项目后再进入第 4 章提示工程进阶。
建议时间分配:新闻稿与智能问答各约 30 分钟(含阅读提示与跑通),文档摘要与代码助手各约 25 分钟;预留约 10 分钟做环境检查与依赖安装。若某项目已熟悉,可压缩时间用于扩展(如给新闻稿加 system 角色、给问答加简单前端)。
二、项目1:新闻稿生成器
根据标题和要点生成结构化新闻稿。
from openai import OpenAI
client = OpenAI()
def generate_news(title: str, points: list) -> str:
prompt = f"""请根据以下信息撰写一篇新闻稿。
标题:{title}
要点:{chr(10).join(f'- {p}' for p in points)}
要求:300字左右,结构清晰,包含导语和正文。"""
r = client.chat.completions.create(
model="gpt-3.5-turbo",
messages=[{"role": "user", "content": prompt}],
temperature=0.7,
max_tokens=800
)
return r.choices[0].message.content
提示要点:书中强调「文本生成、结构化输出」——通过「300 字左右、结构清晰、包含导语和正文」等约束即可得到较稳定的结构。若需严格格式(如固定小标题),可在提示中增加「请按:导语、背景、详情、结语四段输出」,或参考第 4 章 4.4 节用 JSON/XML 约束输出。运行示例:generate_news("某公司发布新产品", ["亮点一", "亮点二"])。
三、项目2:智能问答系统
多轮对话+FAQ集成。将FAQ作为上下文注入,模型基于FAQ回答。
def qa_with_faq(question: str, faq: str, history: list) -> str:
context = f"参考以下FAQ回答用户问题:\n{faq}"
messages = [{"role": "system", "content": context}]
messages.extend(history)
messages.append({"role": "user", "content": question})
r = client.chat.completions.create(
model="gpt-3.5-turbo",
messages=messages,
temperature=0.3,
max_tokens=500
)
return r.choices[0].message.content
上下文与 history:history 需为 messages 列表,每项为 {"role": "user"|"assistant", "content": "..."},与 3.3 节多轮对话管理一致。业务层在每次用户提问后,将 (user, 问) 与 (assistant, 答) 追加到 history 再传入下一轮,即可实现多轮对话。FAQ 可放在 system 中,也可在 user 首条中注入「参考以下 FAQ:…」;若 FAQ 很长,后续可改为 RAG 检索(第 5 章)。
四、项目3:文档摘要工具
对长文本进行摘要,提取关键信息。
def summarize(text: str, max_len: int = 200) -> str:
prompt = f"""请对以下文本进行摘要,摘要长度不超过{max_len}字,保留核心信息。
文本:
{text[:4000]}
"""
r = client.chat.completions.create(
model="gpt-3.5-turbo",
messages=[{"role": "user", "content": prompt}],
temperature=0.3,
max_tokens=500
)
return r.choices[0].message.content
长文本与视频摘要:书中 3.5 节提到「视频/文档摘要工具」——文档可直接用上述 summarize;若为视频,可先用语音转文字得到字幕或文稿,再对文稿调用 summarize。text[:4000] 为简单截断,避免超上下文;更稳妥的做法是分块摘要再合并(见 5.4 节 RAG 与长文本处理),或先抽取关键句再生成摘要(第 4 章 CoT/摘要策略)。
五、项目4:代码助手
根据需求生成或解释代码。
def code_assistant(request: str, code: str = "") -> str:
if code:
prompt = f"请解释以下代码的功能和逻辑:\n```\n{code}\n```"
else:
prompt = f"请用Python实现:{request}"
r = client.chat.completions.create(
model="gpt-3.5-turbo",
messages=[{"role": "user", "content": prompt}],
temperature=0.2,
max_tokens=1000
)
return r.choices[0].message.content
扩展方向:书中 3.5 节要求「代码生成、解释、调试」——当前示例覆盖生成与解释;调试可在 prompt 中写「以下代码有 bug,请指出并给出修复」并传入代码。后续可接入 2.9 节 Function Calling,让模型返回「执行代码、查文档」等工具调用,由业务层执行后再把结果回传,形成代码助手 Agent(5.6、5.7 节)。
六、与《大模型应用开发极简入门》第3.5节的对应
本书第3章「示例项目(2小时搭建首个AI应用)」列出四个实战:新闻稿生成器(文本生成、结构化输出)、智能问答系统(上下文对话、FAQ 集成)、视频/文档摘要工具(长文本处理、关键信息提取)、代码助手(代码生成、解释、调试)。本节四个项目与之一一对应,代码可直接运行,便于在 2 小时内完成书中要求的「从 0 到 1 搭建 LLM 应用」目标。
七、项目共性要点
7.1 提示设计
四个项目均依赖清晰的角色/任务描述与输出要求(如字数、格式)。可在此基础上增加少样本示例(Few-shot)或思维链(CoT),以提升稳定性。
7.2 模型与参数
示例中统一使用 gpt-3.5-turbo;若需更强推理或格式遵守,可改为 gpt-4。temperature:创意类(新闻稿)略高,事实类(问答、摘要、代码)略低。
7.3 扩展方向
- 新闻稿:接入 RAG,基于企业资料库生成;或加 Moderation 做内容审核。
- 问答:将 FAQ 改为 RAG 检索,支持更多文档(见第 5 章)。
- 摘要:长文本分块摘要再合并,或先抽取关键句再生成。
- 代码助手:结合 Function Calling 实现「运行代码、查文档」等工具。
7.4 与 3.3、3.4 节的衔接
3.3 节对话能力:项目 2 的 history 即多轮对话的 messages 维护,与 3.3 节一致;若需持久化,可将 history 存库或文件,下次加载后继续(见 3.3 节会话持久化)。3.4 节多模态:若新闻稿或摘要需「配图说明」,可先对图片调用 GPT-4V 得到描述,再将该描述作为要点之一传入新闻稿或摘要接口,形成「图→文→生成」流水线,与 3.4 节「图像→文本→下游 NLP」一致。
八、运行与依赖
所有示例均需已配置 OPENAI_API_KEY(如通过 .env)。依赖:pip install openai python-dotenv。将各函数保存为独立脚本或合并为一个模块,按需调用即可。若使用书中 openai.api_key = os.getenv("OPENAI_API_KEY") 的写法,需先 from dotenv import load_dotenv 并 load_dotenv();本节示例使用 OpenAI() 时,SDK 会自动从环境变量读取 OPENAI_API_KEY,无需显式传入。
九、常见问题与排查(对应书中 3.6 小结)
书中第 3 章小结提到「从 0 到 1 搭建 LLM 应用的完整流程、常见问题与解决方案」。本节四个项目常见问题包括:(1)API 报错:检查 .env 与 Key、网络与代理;(2)输出格式不稳定:加强提示中的格式约束或增加少样本;(3)长文本超长:摘要与代码助手需截断或分块后再送入;(4)多轮问答上下文丢失:智能问答需在业务层维护 history 并传入 messages。按上述要点排查,可覆盖多数首次搭建时的坑,与书中「常见问题与解决方案」的定位一致。
十一、四项目与后续章节的扩展路径
四个项目在后续章节均有对应升级路径:新闻稿生成器可接入 RAG(第 5 章)基于企业资料库生成,或加 Moderation(第 2.8 节)做内容审核;智能问答可把 FAQ 改为向量检索实现开放域问答(5.4、5.5 节);文档摘要可结合长文本分块与多段摘要合并(5.4 节);代码助手可接入 Function Calling(2.9 节)实现「运行代码、查文档」等工具,或接入 5.6、5.7 节的 Agent。书中 3.5 节「示例项目」与 3.6 小结强调的「从 0 到 1 搭建、常见问题与解决方案」在本节已完整呈现,读者可按需选一个项目深化到第 5、6 章。
11.1 与第 2 章 API、第 4 章提示工程的衔接
第 2 章:本节四个项目均使用 ChatCompletion API(2.5 节)、同一套 messages 与 model/temperature/max_tokens 参数(2.1、2.2 节);成本与限流见 2.7 节,扩展时可接入 Embeddings、Moderation、Function Calling(2.8、2.9 节)。第 4 章:新闻稿与摘要的提示可进一步用 4.1 节角色设定与结构化提示、4.3 节 CoT、4.4 节格式约束做优化;代码助手与问答的「不确定时说明」可结合 4.5 节防御性提示。先在本节跑通最小可用版本,再在第四章系统学习提示工程,效果更佳。
十、小结
四个项目覆盖了文本生成、多轮对话、摘要、代码等典型场景。掌握这些模式,即可快速搭建更多 AI 应用,并与书中第 3 章小结「从 0 到 1 搭建 LLM 应用的完整流程、常见问题与解决方案」衔接。第三章完结,下一章进入提示工程进阶。建议读者按本节顺序在 2 小时内跑通四类应用,再根据业务选择其一深入扩展(如问答升级为 RAG、代码助手接入 Function Calling),形成自己的第一个完整 LLM 应用。
第三章完结。下一章:第四章 提示工程进阶