这篇适合谁,读完能做到什么
适合想把大模型接进自己的小工具或脚本、但还不知道从哪里下手的读者。读完后,你能用 Python 的 openai 库写出一个能生成文本的程序,把用户输入变成提示词的一部分,并调整输出的长度和随机程度。
文本生成应用是什么
平时常见的应用,常见的是命令行形式(你输入固定的命令)或图形界面(你点按钮、填表单)。命令行应用只能执行它支持的命令。[1] 文本生成应用则不同:用户可以直接用自然语言和它交互,不受固定命令或某一种输入语言的限制。它背后连着一个在海量信息上训练过的模型,而传统应用往往只能查到数据库里已有的内容。[1]
典型的例子包括:回答公司及其产品问题的聊天机器人、帮忙总结文本或写简历等文字的助手,以及辅助写代码的编程助手。[1]
准备:账号、Python 和 API 密钥
接入大模型通常有两条路。一条是直接调用 API,自己构造网络请求,把提示词发过去,再取回生成的文字;另一条是使用库,把这些 API 调用封装起来。本文用的是 Python 的 openai 库。[1]
如果使用 Azure OpenAI,需要准备:一个 Azure 账号,已获得 Azure OpenAI 的访问权限(写作时需要申请),安装好 Python,以及一个 Azure OpenAI Service 资源。[1][2] 在资源的「Keys and Endpoint」部分复制「Key 1」的值,就是 API 密钥。[1]
密钥不要写进代码。建议把它设成环境变量,例如 OPENAI_API_KEY:[1]
export OPENAI_API_KEY='sk-...'安装和配置
用 pip 安装 openai 库:[1]
pip install openaiAzure OpenAI 现在属于 Microsoft Foundry。配置时使用标准的 OpenAI 客户端,指向 Azure OpenAI 的 /openai/v1/ 端点,这种写法可以配合 Responses API 使用,不需要单独管理 api_version。[1]
import os
from openai import OpenAI
client = OpenAI(
api_key=os.environ["AZURE_OPENAI_API_KEY"],
base_url=f"{os.environ['AZURE_OPENAI_ENDPOINT'].rstrip('/')}/openai/v1/",
)这里 api_key 是 Azure 门户或 Microsoft Foundry 门户里的密钥,base_url 是 Foundry 资源的端点,末尾加上 /openai/v1/。[1] 如果用的是普通的 OpenAI,就不写 base_url,并且把部署名换成 gpt-5-mini 这样的模型名。[1]
第一个程序:生成一段文字
生成文本使用 Responses API 的 responses.create 方法,生成的文字通过 response.output_text 读取。[1] 下面的代码让模型续写一句话:
prompt = "Complete the following: Once upon a time there was a"
response = client.responses.create(
model="gpt-5-mini", # this is your model deployment name
input=prompt,
store=False,
)
print(response.output_text)练习里把这段逻辑放进名为 app.py 的文件,并先用占位符代替密钥、端点和部署名:[1]
import os
from openai import OpenAI
client = OpenAI(
api_key="<replace this value with your Azure OpenAI key>",
base_url="<endpoint found in Azure Portal>/openai/v1/",
)
deployment_name = "<deployment name>"
# add your completion code
prompt = "Complete the following: Once upon a time there was a"
# make a request using the Responses API
response = client.responses.create(model=deployment_name, input=prompt, store=False)
# print response
print(response.output_text)如果要做多轮对话,可以在 input 里放入一组消息。这部分会在后面的章节继续介绍。[1]
from openai import OpenAI
client = OpenAI(api_key="sk-...")
response = client.responses.create(model="gpt-5-mini", input="Hello world", store=False)
print(response.output_text)从一个提示词到菜谱生成器
提示词能做的事很多:生成某种文字,比如诗歌或测验题;查找信息;生成代码。[1] 下面用一个菜谱例子看它如何逐步变成小工具。第一步,让模型给出五道用鸡肉、土豆和胡萝卜做的菜,并列出每道菜用到的全部原料。[1]
prompt = "Show me 5 recipes for a dish with the following ingredients: chicken, potatoes, and carrots. Per recipe, list all the ingredients used"同一个程序每次运行的结果可能不同,因为大语言模型是非确定性的。[1]
接下来让输入可以变化。程序用 input() 读取菜谱数量和食材,再把它们填进提示词:[1]
no_recipes = input("No of recipes (for example, 5): ")
ingredients = input("List of ingredients (for example, chicken, potatoes, and carrots): ")
# interpolate the number of recipes into the prompt an ingredients
prompt = f"Show me {no_recipes} recipes for a dish with the following ingredients: {ingredients}. Per recipe, list all the ingredients used"然后加一个过滤条件。程序再读取一个过滤值,例如素食、纯素或无麸质,并把它以「no」的形式加到提示词末尾:[1]
filter = input("Filter (for example, vegetarian, vegan, or gluten-free): ")
prompt = f"Show me {no_recipes} recipes for a dish with the following ingredients: {ingredients}. Per recipe, list all the ingredients used, no {filter}"过滤条件要写得足够清楚。例子里,过滤条件写的是「no milk」,结果仍然出现了加了帕尔马干酪碎的菜。对乳糖不耐受的人来说,可能还要把奶酪也过滤掉。[1]
最后是购物清单。这里没有把所有要求塞进一个提示词,而是拆成两步:把第一步的结果作为上下文交给第二个提示词,要求列出购物清单,并且不包括用户家里已有的食材。[1]
old_prompt_result = response.output_text
prompt = "Produce a shopping list for the generated recipes and please don't include ingredients that I already have."
new_prompt = f"{old_prompt_result} {prompt}"
response = client.responses.create(model=deployment_name, input=new_prompt, max_output_tokens=1200, store=False)
# print response
print("Shopping list:")
print(response.output_text)调整输出长度、随机程度和密钥
密钥和代码分开。 推荐用 python-dotenv 从 .env 文件中读取变量,而不是把密钥写进代码。[1]
import os
from dotenv import load_dotenv
from openai import OpenAI
load_dotenv()
client = OpenAI(api_key=os.environ["OPENAI_API_KEY"])控制输出长度。 max_output_tokens 参数限制模型生成的 token 数。例子把它设为 100。[1]
response = client.responses.create(model=deployment, input=prompt, max_output_tokens=100, store=False)token 是要花钱的,所以建议尽量节省,比如把提示词写得能用更少的 token 完成任务。[1]
控制随机程度。 temperature 参数越高,输出越随机;越低,输出越可预测。例子设为 0.5,越接近 1.0,输出越多样。[1]
response = client.responses.create(model=deployment, input=prompt, temperature=0.5, store=False)推理模型不支持 temperature。 GPT-5 系列和 o 系列是推理模型,它们不支持 temperature 和 top_p,max_tokens 也要换成 max_output_tokens。把 temperature 发给 gpt-5-mini,会得到「不支持该参数」之类的错误。[1] 对这类模型,建议通过提示词工程和推理控制来调整输出。推理控制会在推理深度与延迟、成本之间做取舍。[1]
如果想亲手体验温度的效果,可以换一个仍支持采样参数的模型。Microsoft Foundry 模型目录里有开放模型 Llama-3.3-70B-Instruct;Llama、Mistral、Phi 等模型也仍支持 temperature 和 top_p。[1]
限制和常见问题
- 结果不稳定:同一个程序每次运行的输出都可能不同,需要人工检查。[1]
- 过滤不完整:过滤条件要写具体,像「no milk」这样的条件并不会排除所有含奶制品的菜。[1]
- 费用:token 要花钱,提示词和输出长度都会影响成本。[1]
练习方向
可以尝试三个练习:继续改进菜谱生成器,试试不同的温度和提示词;做一个「学习伙伴」,回答关于 Python 某个主题的问题;做一个历史机器人,让它扮演某位历史人物,回答关于其生平的问题。[1] 挑战是分别把温度设为 0、0.5 和 1 做比较。0 最不多样,1 最多样,看看哪个值最适合你的应用。[1]
下一步
想了解 Azure OpenAI 的访问申请和资源创建,可以阅读 Microsoft Learn 的概述文档。[2]
本文改编自 Microsoft 开源课程《Generative AI for Beginners》第 6 课《Building Text Generation Applications》[1],原文以 MIT 许可证发布。
来源
- 1Building Text Generation ApplicationsMicrosoft generative-ai-for-beginners (MIT)
- 2Azure OpenAI overviewMicrosoft Learn
引用本页: 用大模型 API 做文本生成应用. TellWorld, https://www.tellworld.net/zh/practice/practice-genai-text-generation-app. 更新于 2026-11-14