我问AI:
下面是我对通过编程与大模型交互的方式的了解
1、我们通过编写提示词模板,在提示词模板中插入变量
2、将用户输入的内容,替换提示词模板中的变量获得最终要使用的提示词
3、将提示词传给大模型,并且提示词中要明确要求大模型按什么格式返回,比如json格式,且要求不要有任何多余的东西,这样模型就不会乱生成,可以直接获取我们要的格式
4、对模型返回的结果进行解析,生成我们要的对象,比如数组或者json
所以关键的总结可能就是三个点,提示词、模型调用、返回结果解析对不对,只有提示词编写的足够好,模型才能够返回我们想要的结果,若我理解不对,请纠正我的理解,并且用langchain给我一个简单的例子,最后总结成一篇markdown格式的笔记,谢谢
AI给我的回答:
一、核心理解确认与补充
你将编程交互大模型的核心总结为 提示词、模型调用、返回结果解析 三个关键点,完全正确!这三个环节构成交互流程的“铁三角”,补充落地关键细节如下:
提示词:核心是“结构化”(模板+变量),同时必须明确返回格式(如JSON),避免模型乱生成,是结果可控的基础;
模型调用:除传递提示词外,需配置参数(如
temperature=0.1降低随机性),进一步提升结果稳定性;返回结果解析:必须包含异常处理(如格式解析失败、API调用失败),避免程序崩溃,是实际开发的必要边界处理。
核心逻辑概括:提示词(输入规则)→ 模型调用(传输桥梁)→ 结果解析(输出落地),三者缺一不可。
二、LangChain实战示例(极简可运行)
1. 前置准备:安装依赖
pip install openai langchain langchain-openai python-dotenv
2. 完整代码示例
# 导入核心依赖from langchain.prompts import PromptTemplatefrom langchain_openai import ChatOpenAIfrom langchain.output_parsers import JSONOutputParserfrom langchain.schema import HumanMessageimport osfrom dotenv import load_dotenv# 加载环境变量(API Key放在.env文件,避免硬编码)load_dotenv() # 直接加载.env文件中的变量到环境变量,无需手动赋值# 1. 提示词:结构化模板 + 自动格式说明parser = JSONOutputParser() # 定义JSON解析器prompt_template = """请严格按照指定格式解析以下文本,仅返回JSON内容,不要添加任何多余解释:{format_instructions}需要解析的文本:{user_input}"""# 构建提示词模板对象prompt = PromptTemplate(template=prompt_template,input_variables=["user_input"],partial_variables={"format_instructions": parser.get_format_instructions()})# 2. 模型调用:加载模型 + 封装调用逻辑llm = ChatOpenAI(model="gpt-3.5-turbo",temperature=0.1, # 降低随机性,保证格式稳定max_tokens=200)# 3. 结果解析:解析+异常处理def extract_text_info(user_input: str):"""提取用户文本的核心信息(主题+情感+关键词)"""try:formatted_prompt = prompt.format(user_input=user_input) # 渲染提示词response = llm.invoke([HumanMessage(content=formatted_prompt)]) # 调用模型parsed_result = parser.parse(response.content) # 解析结果return parsed_resultexcept Exception as e:print(f"处理失败:{str(e)}")return {"主题": "未知", "情感倾向": "未知", "关键词": []}# 测试示例if __name__ == "__main__":user_text = "我今天吃了海底捞,番茄锅底超好吃,服务也特别棒!"result = extract_text_info(user_text)print("解析后的结果:")print(f"主题:{result['主题']}")print(f"情感倾向:{result['情感倾向']}")print(f"关键词:{result['关键词']}")
3. 代码关键环节对应表
| 核心环节 | LangChain实现 | 核心作用 |
|---|---|---|
| 提示词 | PromptTemplate + JSONOutputParser | 结构化模板绑定变量,自动生成格式说明,减少手动编写成本 |
| 模型调用 | ChatOpenAI + invoke | 封装原生API逻辑,无需关注参数拼接,直接传入提示词即可调用 |
| 结果解析 | parser.parse() + 异常捕获 | 专门解析JSON格式,覆盖格式错误、API失败等常见问题 |
4. 测试输出示例
输入:我今天吃了海底捞,番茄锅底超好吃,服务也特别棒!
输出:
解析后的结果:主题:吃海底捞的体验情感倾向:积极关键词:['海底捞', '番茄锅底', '好吃', '服务', '棒']
三、关键总结
核心三环节:结构化提示词、参数化模型调用、带异常处理的结果解析,其中结构化提示词是结果可控的核心;
LangChain价值:封装通用逻辑,用
PromptTemplate、ChatOpenAI、OutputParser分别对应三环节,大幅简化开发;落地注意事项:① 降低
temperature提升稳定性;② 异常处理不可少;③ 用.env文件管理API Key,避免硬编码;通用性:核心逻辑适配所有大模型(OpenAI/文心一言/通义千问等),仅需替换LangChain的模型加载类(如
ChatBaiduWenxin)即可。(注:文档部分内容可能由 AI 生成)
