AI人工智能 AI 教程 Python AI大模型开发与实战 NGX 2026-01-17 2026-03-07 申请大模型API 目前大多数API都是付费的,也有少量公益站,不过这些站点普遍不对外开放。以下是一些相对稳定的公益站:
安装LangChain LangChain是一个开源的开发框架(支持Python和JavaScript/TypeScript),旨在简化基于大语言模型的应用程序构建。它通过将LLM与外部数据源、计算资源及工具连接起来,使AI能够具备上下文感知能力和自主行动能力,适合开发智能聊天机器人、自动数据分析和复杂的知识库问答系统。
在终端中输入以下代码来安装:
1 2 pip install langchain pip install langchain-openai
模型调用 1 2 3 4 5 6 7 8 9 10 11 12 13 import osfrom langchain_openai import ChatOpenAIclient = ChatOpenAI( api_key=os.getenv("APIKEY" ), model="z-ai/glm4.7" , base_url="https://integrate.api.nvidia.com/v1" , max_tokens=2000 , timeout=2000 ) response = client.invoke("你是谁?" ) print (response.content)
model和 base_url在API提供商文档都会显示,只要兼容OpenAI接口的API都可以使用这套模板。国内的大模型基本上全部兼容。
注意:API KEY不要直接写在代码中。安全起见,必须写在环境变量中。
更多参数请参照官方教程:https://docs.langchain.com
模型输入 提示词模板 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 import osfrom langchain_openai import ChatOpenAIfrom langchain_core.prompts import ChatPromptTemplateclient = ChatOpenAI( api_key=os.getenv("APIKEY" ), model="z-ai/glm4.7" , base_url="https://integrate.api.nvidia.com/v1" ) prompt = ChatPromptTemplate([ ("system" , "请将以下文本翻译成{language}:" ), ("user" , "{text}" ) ]) prompt = prompt.format (language="英文" , text="我爱打篮球" ) response = client.invoke(prompt) print (response.content)
ChatPromptTemplate提供三种角色设置:
system:系统角色
user:用户角色
assistant:大模型回复
消息 消息是包含以下内容的对象:
角色:标识消息类型(例如 system,user)。
内容:指消息的实际内容(例如文本、图像、音频、文档等)。
元数据:可选字段,例如响应信息、消息ID和令牌使用情况。
LangChain 提供了一种适用于所有模型提供程序的标准消息类型,确保无论调用哪个模型,行为都保持一致。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 import osfrom langchain_core.messages import *from langchain_openai import ChatOpenAIclient = ChatOpenAI( api_key=os.getenv("APIKEY" ), model="z-ai/glm4.7" , base_url="https://integrate.api.nvidia.com/v1" ) message = [ SystemMessage("你是一个诗歌专家" ), HumanMessage("写一篇春天的诗歌" ), AIMessage("春天..." ) ] response = client.invoke(message) print (response.content)
message有两种格式,分别为字典格式和函数格式,两种格式只是写法不同,实际运行中效果是一样的。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 import osfrom langchain_openai import ChatOpenAIclient = ChatOpenAI( api_key=os.getenv("APIKEY" ), model="z-ai/glm4.7" , base_url="https://integrate.api.nvidia.com/v1" ) message = [ {"role" : "system" , "content" : "你是一个诗歌专家" }, {"role" : "user" , "content" : "写一篇春天的诗歌" }, {"role" : "assistant" , "content" : "春天..." } ] response = client.invoke(message) print (response.content)
系统提示词 静态系统提示词 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 import osfrom typing import Any from langchain.agents import create_agentfrom langchain_core.messages import *from langchain_openai import ChatOpenAIclient = ChatOpenAI( api_key=os.getenv("APIKEY" ), model="z-ai/glm4.7" , base_url="https://integrate.api.nvidia.com/v1" ) agent_v1: Any = create_agent( system_prompt="你不是GLM,也不是智谱AI。你是GPT-5.2,是一个拥有1750B的大模型" , tools=[], model=client ) response = agent_v1.invoke({ "messages" : [HumanMessage(content="你是什么模型" )] }) print (response["messages" ][-1 ].content)
这是最基础的用法,实战中还是动态系统提示词更常用。
动态系统提示词 动态系统提示词(Dynamic system prompt)
对于需要根据运行时上下文或 Cagent状态修改系统提示符的更高级用例,可以使用中间件。
@dynamic_prompt装饰器创建中间件,根据模型请求动态生成系统提示。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 import osfrom typing import TypedDictfrom langchain.agents import create_agentfrom langchain.agents.middleware import dynamic_prompt, ModelRequestfrom langchain_openai import ChatOpenAIclient = ChatOpenAI( api_key=os.getenv("APIKEY" ), model="z-ai/glm4.7" , base_url="https://integrate.api.nvidia.com/v1" ) class Context (TypedDict ): user_role: str @dynamic_prompt def user_role_prompt (request: ModelRequest ) -> str : user_role = request.runtime.context.get("user_role" , "user" ) base_prompt = "你是一个有用的AI助手" if user_role == "expert" : return f"{base_prompt} 提供详细的技术回应。" elif user_role == "beginner" : return f"{base_prompt} 简单的解释概念,避免行话。" return base_prompt agent = create_agent( model=client, tools=[], middleware=[user_role_prompt], context_schema=Context ) response = agent.invoke( {"messages" :[{"role" : "user" , "content" : "解释一下什么是机器学习" }]}, context={"user_role" : "beginner" }, ) print (response["messages" ][-1 ].content)
动态系统提示词不需要建两个Agent,不需要切模型,不需要维护两套prompt。具有多种人格/能力模式,让“业务逻辑”进入模型层,更强的上下文感知能力,安全控制更灵活,比后处理稳定的好处。
多模态输入 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 import osfrom langchain_core.messages import HumanMessagefrom langchain_openai import ChatOpenAIclient = ChatOpenAI( api_key=os.getenv("APIKEY" ), model="GLM-4.6V-Flash" , base_url="https://open.bigmodel.cn/api/paas/v4/" ) msg = [ HumanMessage( content_blocks=[ {"type" : "text" , "text" : "这张图片里讲了什么" }, {"type" : "image" , "url" : "https://img.500px.me/500px1121234983.jpg!p5" } ] ) ] response = client.invoke(msg) print (response.content)
图像输入 1 2 3 4 5 6 7 8 9 message = [ HumanMessage( content_blocks=[ {"type" : "text" , "text" : "这张图片里讲了什么" }, {"type" : "image" , "url" : "https://img.500px.me/500px1121234983.jpg!p5" } ] ) ]
图像输入允许接收URL和base64,使用base64时一定要指定mime_type为 image/jpeg 形式。
1 2 3 4 5 6 7 8 9 10 message = [ HumanMessage( content_blocks=[ {"type" : "text" , "text" : "这张图片里讲了什么" }, {"type" : "image" , "base64" : "data:image/jpeg;base64,/9j/4AVFRUSkrLi4uFx8......" , "mime_type" : "image/jpeg" } ] ) ]
文档输入 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 import osfrom langchain_core.messages import HumanMessagefrom langchain_community.document_loaders import PyPDFLoaderfrom langchain_openai import ChatOpenAIloader = PyPDFLoader("./2025年居民收入和消费支出情况.pdf" ) docs = loader.load() client = ChatOpenAI( api_key=os.getenv("APIKEY" ), model="GLM-4.6V-Flash" , base_url="https://open.bigmodel.cn/api/paas/v4/" ) message = [ HumanMessage( content = f"总结这份文档:\n{docs[0 ].page_content} " ) ] response = client.invoke(message) print (response.content)
模型输出 outputparser OutputParser用于限制模型输出格式,正常模型输出内容会产生不需要的额外信息,通过StrOutputPraser可以仅保留大模型回答。此外JsonOutputParser还可以将大模型回复格式化为Json格式,但是需要告诉AI详细的Json格式。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 import osfrom langchain_core.output_parsers import StrOutputParserfrom langchain_core.prompts import ChatPromptTemplatefrom langchain_openai import ChatOpenAIclient = ChatOpenAI( api_key=os.getenv("APIKEY" ), model="z-ai/glm4.7" , base_url="https://integrate.api.nvidia.com/v1" ) prompt = ChatPromptTemplate([ ("system" , "请你将以下内容翻译成英文:" ), ("user" , "{text}" ) ]) input_text = prompt.format (text="我爱打篮球" ) response = client.invoke(input_text) print (response)print ('-' * 100 )str_parser = StrOutputParser().invoke(response) print (str_parser)
content_blocks content_blocks把 LLM 的输入/输出拆成多个 结构化内容块 ,支持文本、图片、工具调用等多模态信息。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 import osfrom langchain_core.prompts import ChatPromptTemplatefrom langchain_openai import ChatOpenAIclient = ChatOpenAI( api_key=os.getenv("APIKEY" ), model="z-ai/glm4.7" , base_url="https://integrate.api.nvidia.com/v1" ) prompt = ChatPromptTemplate([ ("system" , "请你将以下内容翻译成英文:" ), ("user" , "{text}" ) ]) input_text = prompt.format (text="我爱打篮球" ) response = client.invoke(input_text) print (response)print ('-' * 100 )print (response.content_blocks)
Chain和LCEL LCEL 也被称为 LangChain表达式(LangChain Expression Language)
LangChain = 语言(Language)+链(Chain)
链Chain 将大语言模型开发的各个组件链接起来,以构建复杂的应用程序。每个组件都是链中的一个环节,它们按照预设的顺序,接力完成各自的任务,就好比工厂里的流水线。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 import osfrom langchain_core.output_parsers import StrOutputParserfrom langchain_core.prompts import ChatPromptTemplatefrom langchain_openai import ChatOpenAIclient = ChatOpenAI( api_key=os.getenv("APIKEY" ), model="z-ai/glm4.7" , base_url="https://integrate.api.nvidia.com/v1" ) prompt = ChatPromptTemplate([ ("system" , "请你将以下内容翻译成英文:" ), ("user" , "{text}" ) ]) parser = StrOutputParser() _chain = prompt | client | parser result = _chain.invoke({"text" : "我喜欢打篮球" }) print (result)
未完待续……