生成式 AI 正在从概念验证快速走向业务落地,但真正的挑战不在于模型本身,而在于如何把能力转化为可复用、可治理、可规模化的系统。

本文以微软首席项目经理 Amit Bahree 的《大模型实战》为主线,结合完整代码与真实企业场景,循序拆解一套可落地的大模型实战路径。通过构建一个企业级智能市场研报生成助手,我们将从认知、技术到生产,全流程理解 GenAI 如何真正创造业务价值。

1.微软首席项目经理带你入门大模型实战

为什么现在需要这本书?

沃顿人机 AI 研究中心 (WHAIR) 最新报告显示,82% 的受访者每周都在使用 AI,且超过 70% 的企业高管正在实施 ROI 评估体系。生成式 AI (GenAI) 正从“尝鲜”走向“实战”,但企业面临的最大挑战是:没有现成的模板,必须在实践中探索。

在此背景下,微软首席项目经理 Amit Bahree 撰写的《Generative AI in Action》(中文版《大模型实战》)应运而生。本书美亚评分 4.6,被誉为大模型实战领域的必读之作,获得了包括微软 AI 平台副总裁 Eric Boyd 在内的多位行业领军者强力推荐。

这本书核心价值

本书以 Azure OpenAI 和 OpenAI 平台为核心,全书分三部分、共 13 章,提供了一站式的企业级 GenAI 开发路线图:

  • 建立认知 (Part 1):从 LLM 基本概念到文本、图像、代码生成等多模态应用。

  • 掌握技术 (Part 2):深入提示工程 (Prompt Engineering)、数据集成 (RAG)、模型微调 (Fine-tuning) 等硬核技能。 

  • 生产落地 (Part 3):聚焦架构设计、性能评估、成本优化及负责任的 AI (Responsible AI) 治理。

本文将结合书中丰富的配套代码(涵盖 ch01 至 ch10),通过一个贯穿始终的案例——“企业级智能市场研报生成助手”,带您深入探索本书的精髓。

配套代码:https://github.com/bahree/GenAIBook

2.贯穿案例:构建企业级市场研报生成助手

用户故事 (User Story)

让我们认识一下 Alice。Alice 是一家顶级投资咨询公司的资深分析师。

  • • 痛点:她每天要阅读数百篇即时新闻、长达几十页的财报,还要在 Bloomberg 终端和 Excel 之间反复切换。撰写一份深度研报通常需要 3 天时间,其中 70% 的时间花在数据收集和图表绘制上。

  • • 目标:她希望有一个智能助手,能帮她瞬间消化海量信息,并像一个初级分析师一样,帮她起草报告初稿、绘制趋势图,让她能专注于核心观点的输出。

解决方案:Enterprise Market Research Copilot

我们将构建一个智能助手来解放 Alice,它具备以下核心能力:

  1. 1. 理解复杂语义:自动分析非结构化文本(如 PDF 财报、新闻)。

  2. 2. 多模态生成:不仅写报告,还能根据数据自动生成趋势图和封面。

  3. 3. 实时准确:基于最新的市场数据(RAG),而非过期的模型训练数据,确保引用准确。

  4. 4. 安全合规:符合金融行业的合规要求,防止数据泄露和幻觉。

我们将跟随书中的章节,一步步实现这个系统,解决 Alice 的燃眉之急。

3.第一阶段:构建认知与原型

3.1 生成式 AI 的本质:定义专业人设

很多人误以为 GenAI 就是聊天机器人。但对于 Alice 来说,她不需要一个只会闲聊的机器人,她需要的是一个具备金融思维的初级分析师。本书前三章通过代码展示了如何通过 Prompt Engineering 赋予 LLM 这种专业人设。

在 chapters/ch03/Listing-3.19-chat.py 中,我们可以看到如何通过 Azure OpenAI SDK 与模型进行基础对话。这不仅仅是聊天,更是通过 system 角色定义 AI 的行为模式:

# file: chapters/ch03/Listing-3.19-chat.py
# 核心逻辑:通过 system prompt 定义“分析师”人设
response = client.chat.completions.create(
    model=GPT_MODEL,
    messages = [
        # 在这里,我们将 AI 定义为一位乐于助人的助手。
        # 在研报助手的案例中,我们可以将其修改为:
        # {"role":"system","content":"你是一位资深的华尔街分析师,擅长从财报中发现潜在风险。"},
        {"role":"system","content":"You are an AI assistant that helps people find information."},
        {"role":"user","content":"I want to know more about pets and why dogs are good for humans?"}
    ],
    temperature=0.8, # 控制创造性,分析报告通常需要较低的 temperature 以保证严谨
    max_tokens=800,
    # ...
)
print(response.choices[0].message.content)

这段代码展示了最基础的交互。对于我们的研报助手,system 消息是关键,它决定了模型是以“闲聊者”还是“专业分析师”的身份进行回答。

3.2 多模态能力的初步整合:一图胜千言 (DALL-E 3)

一份优秀的研报不仅要有深刻的文字分析,还需要直观的图表来支撑观点。Alice 以前需要花几个小时在 Photoshop 或 Excel 中调整图表,现在本书第四章介绍的 DALL-E 3 集成可以帮她瞬间完成这项工作。

在 chapters/ch04/aoai-image-gen.py 中,展示了如何根据文本描述生成高质量图片。在我们的案例中,这可以用于为研报自动生成封面图,或者根据数据描述生成可视化的概念图:

# file: chapters/ch04/aoai-image-gen.py
# 核心逻辑:调用 DALL-E 3 模型生成图像
def generate_images(prompt_startphrase: str):
    response = client.images.generate(
        prompt=prompt_startphrase, # 例如:"一张展示未来科技城市概念的封面图,专业财经杂志风格"
        n=image_count,
        model="dall-e-3", # 使用最新的 DALL-E 3 模型
        style="natural",  # 风格选择 natural 或 vivid
        quality="standard",
        size=image_size)
    return response

# 实际调用
# prompt = "a pineapple that's made of rainbow cake inside, food photography style"
# response = generate_images(prompt)

通过集成这个功能,分析师只需输入“生成一张展示电动汽车市场爆发式增长的图表”,助手即可自动配图。

3.3 多模态进阶:读懂财报中的图表 (GPT-4o Vision)

Alice 的痛点不仅仅是写,还有读。财报中充满了复杂的趋势图和饼状图。传统的 OCR 技术很难提取图表中的含义。

本书第五章引入了 GPT-4o 的多模态视觉能力。在 chapters/ch05/Listing-5.x-gpt4-o-multi-modality.py 中,展示了如何将图片直接作为输入发送给模型:

# file: chapters/ch05/Listing-5.x-gpt4-o-multi-modality.py
# 核心逻辑:使用 GPT-4o 理解图像内容
response = client.chat.completions.create(
  model="gpt-4o",
  messages=[
    {
      "role": "user",
      "content": [
        {"type": "text", "text": "What's in this image?"},
        {
          "type": "image_url",
          "image_url": {
            "url": "https://upload.wikimedia.org/wikipedia/commons/thumb/d/dd/Gfp-wisconsin-madison-the-nature-boardwalk.jpg/2560px-Gfp-wisconsin-madison-the-nature-boardwalk.jpg",
          },
        },
      ],
    }
  ],
  max_tokens=300,
)

这意味着 Alice 可以直接截图财报中的“营收趋势图”,让助手告诉她:“Q3 营收虽然增长,但增速相比 Q2 明显放缓。”这极大地提升了信息获取的效率。

3.4 扩展能力:AI 程序员 (Code Generation)

除了读写报告,Alice 还需要处理大量数据。有时候 Excel 的公式已经不够用了,她需要写一些 Python 脚本来清洗数据,但这超出了她的能力范围。

本书第五章展示了生成式 AI 的代码生成能力。在 chapters/ch05/codegeneration.py 中,我们可以看到如何让 AI 生成 Python 函数:

# file: chapters/ch05/codegeneration.py
# 核心逻辑:让 AI 编写复杂的业务逻辑代码
def oauth2_authenticate():
    # ... AI 自动生成的 OAuth2 认证代码 ...
    pass

在我们的案例中,Alice 可以直接对助手说:“帮我写一个 Python 脚本,计算这两张 Excel 表中 ROI 数据的皮尔逊相关系数。”助手不仅能生成代码,还能在沙箱环境中运行并直接给出结果,让她瞬间变身“技术流”分析师。

4.第二阶段:掌握核心开发技术

4.1 提示工程 (Prompt Engineering) 进阶:思维链 (CoT)

Alice 最担心的是 AI “一本正经地胡说八道”,尤其是在处理财务数据计算时。简单的提问往往不够,模型可能会直接给出一个错误的数字。本书第六章深入讲解了思维链 (Chain-of-Thought, CoT) 技术,引导模型像人类分析师一样,展示“计算过程”,从而大幅提高准确率。

在 chapters/ch06/Listing-6.4-fewshot-cot.py 中,作者展示了如何通过提供“问题-推理过程-答案”的样本(Few-shot),让模型学会逻辑推理。这种方法对于需要多步计算的金融分析至关重要。

# file: chapters/ch06/Listing-6.4-fewshot-cot.py
# 核心逻辑:在 Prompt 中包含推理步骤的样本 (Few-Shot CoT)

# 样本 1:包含解题思路
# Q: ...
# A: We start with 15 trees. Later we have 21 trees. The difference must be... 21 - 15 = 6 trees. The answer is 6.

prompt_startphrase = """
Q: There are 15 trees in the grove...
A: We start with 15 trees... (推理过程) ... The answer is 6.

Q: Michael had 58 golf balls...
A: Michael initially had 58 balls... (推理过程) ... The answer is 33.

Q: [用户的新问题:比如某公司 Q3 营收分析]
A:
"""

# 将包含思维链样本的 prompt 发送给模型
response = client.completions.create(
    model=GPT_MODEL,
    prompt=prompt_startphrase,
    # ...
)

对于研报助手,我们可以构建类似的 CoT 样本:“首先提取财报中的营收数据,然后对比去年同期数据,最后计算增长率并得出结论。”这样模型就不会直接瞎猜一个数字,而是会展示计算过程,便于人工核查。

4.2 RAG 的基石:智能文档解析 (Document Intelligence)

在进入 RAG 检索之前,有一个被很多人忽视但至关重要的步骤:数据摄取 (Ingestion)。Alice 的数据源主要是 PDF 格式的财报。如果直接把 PDF 转成文本,表格结构会乱掉,导致 AI 读不懂数据。

本书第七章专门探讨了这个问题。在 chapters/ch07/Listing-7.9-docintelligence.py 中,作者使用了 Azure Document Intelligence 来保留文档结构:

# file: chapters/ch07/Listing-7.9-docintelligence.py
# 核心逻辑:分析 PDF 文档结构,提取表格和文本
poller = document_analysis_client.begin_analyze_document(
    "prebuilt-layout", f.read())
result = poller.result()

# 遍历提取到的表格
for table_idx, table in enumerate(result.tables):
    print("Table # {} has {} rows and {} columns".format(
        table_idx, table.row_count, table.column_count
    ))
    # 智能提取单元格内容,保留行列关系
    for cell in table.cells:
        print("...Cell[{}][{}] has content '{}'".format(
            cell.row_index, cell.column_index, cell.content.encode("utf-8")
        ))

同时,在 chapters/ch07/Listing-7.7-pdf-extraction.py 中,展示了如何利用 spaCy 进行智能分块 (Chunking),确保切分出来的文本块语义完整,而不是在句子中间被截断。这是构建高质量 RAG 系统的基本功。

4.3 突破知识瓶颈:RAG 与数据集成

LLM 的训练数据是截止到过去的某一天,无法知道今天的股价或昨晚发布的最新财报。对于 Alice 来说,使用过时的数据写研报是致命的。为了解决这个问题,本书第七、八章详细介绍了检索增强生成 (RAG)

RAG 的核心流程是:向量化 (Embedding) -> 检索 (Search) -> 生成 (Generation)。它就像是给 AI 配备了一个实时更新的“外脑”。

chapters/ch08/Listing-8.9-blog-gpt.py 提供了一个完整的 RAG 实现范例,展示了如何结合 Redis 向量数据库和 OpenAI Embedding 模型:

# file: chapters/ch08/Listing-8.9-blog-gpt.py

# 1. 向量化查询:将用户的问题转化为向量
def get_embedding(text):
    embedding = client.embeddings.create(input=text, model="text-embedding-ada-002")
    return embedding.data[0].embedding

# 2. 混合检索:在 Redis 中同时利用关键词和向量进行搜索
def hybrid_search(query_vector, client, top_k=5):
    # 构建查询语句,结合 KNN 向量搜索
    base_query = f"*=>[KNN {top_k} @embedding $vector AS vector_score]"
    query = Query(base_query).return_fields("content", "vector_score")...
    results = client.ft("posts").search(query, query_params={"vector": query_vector})
    return results

# 3. 生成回答:将检索到的内容 (Context) 注入 Prompt
def get_search_results(query: str):
    # ... 获取 query_vector ...
    results = hybrid_search(query_vector, conn, top_k=5)

    # 动态构建包含上下文的 Prompt
    message = 'Use the blog post below to answer the subsequent question...'
    for i, post in enumerate(results.docs):
        # 将检索到的文章内容拼接到 prompt 中
        message += f'\n\nBlog post:\n"""\n{post.content}\n"""'

    # 最后调用 Chat Completion API (代码中略)

通过这套机制,我们的研报助手可以连接实时的财经新闻 API,确保生成的每一句分析都有据可查,彻底解决“幻觉”和“数据滞后”问题。

4.4 模型的定制化:微调 (Fine-tuning)

虽然 RAG 解决了知识更新的问题,但 Alice 的公司有独特的研报撰写风格,这是通用大模型很难通过 Prompt 完全模仿的。

本书第九章介绍了 Fine-tuning 技术。在 chapters/ch09/Listing-9.6-ft_start.py 中,展示了如何使用 Azure OpenAI SDK 提交微调任务:

# file: chapters/ch09/Listing-9.6-ft_start.py
# 核心逻辑:创建微调任务,让模型学习特定风格
ft = client.fine_tuning.jobs.create(
    training_file="file-xxxxxxxx", # 包含公司历史研报的训练数据
    model="gpt-35-turbo-0613",
    hyperparameters={
        "n_epochs":3
    },
    suffix="market-research-style" # 自定义模型后缀
)
print("Finetuning job ID:", ft.id)

通过微调,我们可以让 AI 真正掌握公司的“文风”,让生成的研报不需要大量修改就能直接发布。

5.第三阶段:迈向生产环境

5.1 架构设计与系统扩展

Alice 觉得这个工具很好用,但公司里还有 200 位像她一样的分析师。从一个人的 Demo 到全公司可用的生产级系统,需要考虑系统的稳定性、可扩展性和模块化。本书第十章提供了一个完整的端到端演示应用 AOAISearchDemo

该应用的后端架构 (chapters/ch10/AOAISearchDemo/app/backend/app.py) 采用了清晰的分层设计,利用策略模式 (Strategy Pattern) 处理不同的对话场景:

# file: chapters/ch10/AOAISearchDemo/app/backend/app.py

# 初始化 Azure 客户端 (Search, Blob, OpenAI)
search_client = SearchClient(..., credential=search_credential)
blob_client = BlobServiceClient(...)
openai_client = OpenAIClient()

# 核心架构:策略模式
# 根据请求类型(非结构化文档 vs 结构化数据库)选择不同的处理“策略”
chat_approaches = {
    # 策略 1: 处理非结构化数据(如 PDF 研报),使用 RAG 流程
    ApproachType.unstructured.name: ChatUnstructuredApproach(
        search_client,
        DefaultConfig.KB_FIELDS_SOURCEPAGE,
        DefaultConfig.KB_FIELDS_CONTENT,
        logger,
        # ...
    ),
    # 策略 2: 处理结构化数据(如 SQL 数据库),可能涉及 Text-to-SQL
    ApproachType.structured.name: ChatStructuredApproach(
        DefaultConfig.SQL_CONNECTION_STRING, logger
    ),
}

# 这种设计使得系统极易扩展。如果未来需要增加“分析社交媒体舆情”的功能,
# 只需增加一个 ChatSocialMediaApproach 即可,无需修改核心逻辑。

这种架构允许我们的研报助手灵活扩展:既可以处理非结构化的新闻文本,也可以通过 SQL 接口查询结构化的财务数据库。

此外,本书第八章还提供了 chapters/ch08/Listing-8.1-docker-compose.yml,帮助开发者快速在本地搭建 Redis Stack 向量数据库环境,确保开发环境与生产环境的一致性。

5.2 治理、安全与伦理

如果 AI 输出了带有偏见或错误的投资建议,公司可能面临巨大的法律风险。因此,企业级应用必须安全。本书特别强调了负责任的 AI (Responsible AI)。在代码层面,这体现为对输入输出的过滤、异常处理(如 ContentFilterException)以及权限管理 (AccessManager)。

# file: chapters/ch10/AOAISearchDemo/app/backend/app.py
from backend.contracts.error import (
    ContentFilterException, # 捕获内容过滤异常(如仇恨言论、暴力内容)
    UnauthorizedDBAccessException, # 数据库访问权限异常
)

# 在处理请求时,必须捕获这些异常,确保系统不会因为恶意输入而崩溃或泄露敏感信息
# (具体实现位于各 Approach 类的 run 方法中)


6.总结与活动

《Generative AI in Action》不仅仅是一本书,更是一套完整的 GenAI 开发工具箱。通过本书及其配套代码,我们不仅理解了 LLM 的原理,更掌握了 Prompt Engineering、RAG、多模态生成以及企业级架构设计等核心技能。

读后行动清单

  1. 1. 运行代码:Clone 本书代码仓库,尝试运行 ch03 的聊天 Demo 和 ch08 的 RAG Demo。

  2. 2. 构建原型:参考 ch10 的架构,为您所在的企业设计一个简单的知识库问答助手。

  3. 3. 持续演进:关注多模态和 Agent 技术(书中第四、五章),探索更复杂的应用场景。

现在,就开始您的 GenAI 实战之旅吧!

更多推荐