微信扫码
添加专属顾问
# 定义 BaseLanguageModel 抽象基类,它从 Serializable, Runnable 和 ABC 继承class BaseLanguageModel(Serializable, Runnable[LanguageModelInput, LanguageModelOutput], ABC):"""与语言模型交互的抽象基类。所有语言模型的封装器都应从 BaseLanguageModel 继承。主要提供三种方法:- generate_prompt: 为一系列的提示值生成语言模型输出。提示值是可以转换为任何语言模型输入格式的模型输入(如字符串或消息)。- predict: 将单个字符串传递给语言模型并返回字符串预测。- predict_messages: 将一系列 BaseMessages(对应于单个模型调用)传递给语言模型,并返回 BaseMessage 预测。每种方法都有对应的异步方法。"""# 定义一个抽象方法 generate_prompt,需要子类进行实现def generate_prompt(self,prompts: List[PromptValue],# 输入提示的列表stop: Optional[List[str]] = None,# 生成时的停止词列表callbacks: Callbacks = None,# 回调,用于执行例如日志记录或流式处理的额外功能**kwargs: Any,# 任意的额外关键字参数,通常会传递给模型提供者的 API 调用) -> LLMResult:"""将一系列的提示传递给模型并返回模型的生成。对于提供批处理 API 的模型,此方法应使用批处理调用。使用此方法时:1. 希望利用批处理调用,2. 需要从模型中获取的输出不仅仅是最顶部生成的值,3. 构建与底层语言模型类型无关的链(例如,纯文本完成模型与聊天模型)。参数:prompts: 提示值的列表。提示值是一个可以转换为与任何语言模型匹配的格式的对象(对于纯文本生成模型为字符串,对于聊天模型为 BaseMessages)。stop: 生成时使用的停止词。模型输出在这些子字符串的首次出现处截断。callbacks: 要传递的回调。用于执行额外功能,例如在生成过程中进行日志记录或流式处理。**kwargs: 任意的额外关键字参数。通常这些会传递给模型提供者的 API 调用。返回值:LLMResult,它包含每个输入提示的候选生成列表以及特定于模型提供者的额外输出。"""
# 定义 BaseLLM 抽象基类,它从 BaseLanguageModel[str] 和 ABC(Abstract Base Class)继承class BaseLLM(BaseLanguageModel[str], ABC):"""Base LLM abstract interface.It should take in a prompt and return a string."""# 定义可选的缓存属性,其初始值为 Nonecache: Optional[bool] = None# 定义 verbose 属性,该属性决定是否打印响应文本# 默认值使用 _get_verbosity 函数的结果verbose: bool = Field(default_factory=_get_verbosity)"""Whether to print out response text."""# 定义 callbacks 属性,其初始值为 None,并从序列化中排除callbacks: Callbacks = Field(default=None, exclude=True)# 定义 callback_manager 属性,其初始值为 None,并从序列化中排除callback_manager: Optional[BaseCallbackManager] = Field(default=None, exclude=True)# 定义 tags 属性,这些标签会被添加到运行追踪中,其初始值为 None,并从序列化中排除tags: Optional[List[str]] = Field(default=None, exclude=True)"""Tags to add to the run trace."""# 定义 metadata 属性,这些元数据会被添加到运行追踪中,其初始值为 None,并从序列化中排除metadata: Optional[Dict[str, Any]] = Field(default=None, exclude=True)"""Metadata to add to the run trace."""# 内部类定义了这个 pydantic 对象的配置class Config:"""Configuration for this pydantic object."""# 允许使用任意类型arbitrary_types_allowed = True
# 继承自 BaseLLM 的 LLM 类class LLM(BaseLLM):"""Base LLM abstract class.The purpose of this class is to expose a simpler interface for workingwith LLMs, rather than expect the user to implement the full _generate method."""# 使用 @abstractmethod 装饰器定义一个抽象方法,子类需要实现这个方法def _call(self,prompt: str,# 输入提示stop: Optional[List[str]] = None,# 停止词列表run_manager: Optional[CallbackManagerForLLMRun] = None,# 运行管理器**kwargs: Any,# 其他关键字参数) -> str:"""Run the LLM on the given prompt and input."""# 此方法的实现应在子类中提供# _generate 方法使用了 _call 方法,用于处理多个提示def _generate(self,prompts: List[str],# 多个输入提示的列表stop: Optional[List[str]] = None,run_manager: Optional[CallbackManagerForLLMRun] = None,**kwargs: Any,) -> LLMResult:"""Run the LLM on the given prompt and input."""# TODO: 在此处添加缓存逻辑generations = []# 用于存储生成的文本# 检查 _call 方法的签名是否支持 run_manager 参数new_arg_supported = inspect.signature(self._call).parameters.get("run_manager")for prompt in prompts:# 遍历每个提示# 根据是否支持 run_manager 参数来选择调用方法text = (self._call(prompt, stop=stop, run_manager=run_manager, **kwargs)if new_arg_supportedelse self._call(prompt, stop=stop, **kwargs))# 将生成的文本添加到 generations 列表中generations.append([Generation(text=text)])# 返回 LLMResult 对象,其中包含 generations 列表return LLMResult(generations=generations)
class BaseOpenAI(BaseLLM):"""OpenAI 大语言模型的基类。"""def lc_secrets(self) -> Dict[str, str]:return {"openai_api_key": "OPENAI_API_KEY"}def lc_serializable(self) -> bool:return Trueclient: Any#: :meta private:model_name: str = Field("text-davinci-003", alias="model")"""使用的模型名。"""temperature: float = 0.7"""要使用的采样温度。"""max_tokens: int = 256"""完成中生成的最大令牌数。-1表示根据提示和模型的最大上下文大小返回尽可能多的令牌。"""top_p: float = 1"""在每一步考虑的令牌的总概率质量。"""frequency_penalty: float = 0"""根据频率惩罚重复的令牌。"""presence_penalty: float = 0"""惩罚重复的令牌。"""n: int = 1"""为每个提示生成多少完成。"""best_of: int = 1"""在服务器端生成best_of完成并返回“最佳”。"""model_kwargs: Dict[str, Any] = Field(default_factory=dict)"""保存任何未明确指定的`create`调用的有效模型参数。"""openai_api_key: Optional[str] = Noneopenai_api_base: Optional[str] = Noneopenai_organization: Optional[str] = None# 支持OpenAI的显式代理openai_proxy: Optional[str] = Nonebatch_size: int = 20"""传递多个文档以生成时使用的批处理大小。"""request_timeout: Optional[Union[float, Tuple[float, float]]] = None"""向OpenAI完成API的请求超时。默认为600秒。"""logit_bias: Optional[Dict[str, float]] = Field(default_factory=dict)"""调整生成特定令牌的概率。"""max_retries: int = 6"""生成时尝试的最大次数。"""streaming: bool = False"""是否流式传输结果。"""allowed_special: Union[Literal["all"], AbstractSet[str]] = set()"""允许的特殊令牌集。"""disallowed_special: Union[Literal["all"], Collection[str]] = "all""""不允许的特殊令牌集。"""tiktoken_model_name: Optional[str] = None"""使用此类时传递给tiktoken的模型名。Tiktoken用于计算文档中的令牌数量以限制它们在某个限制以下。默认情况下,设置为None时,这将与嵌入模型名称相同。但是,在某些情况下,您可能希望使用此嵌入类与tiktoken不支持的模型名称。这可以包括使用Azure嵌入或使用多个模型提供商的情况,这些提供商公开了类似OpenAI的API但模型不同。在这些情况下,为了避免在调用tiktoken时出错,您可以在此处指定要使用的模型名称。"""
import openaiimport osimport tiktoken# 加载 .env 文件from dotenv import load_dotenv, find_dotenvfrom langchain.prompts import PromptTemplatefrom langchain.llms import OpenAIfrom langchain.chains import LLMChain#from langchain.chat_models import AzureChatOpenAIfrom langchain.chat_models import ChatOpenAI #直接访问OpenAI的GPT服务_ = load_dotenv(find_dotenv())# 从环境变量中获得你的 OpenAI Key和配置URLopenai.api_key = os.getenv('OPENAI_API_KEY')openai.api_base = os.getenv('OPENAI_API_URL')model = os.getenv('OPENAI_API_MODEL')llm = OpenAI(model_name=model, temperature=0) #直接访问OpenAI的GPT服务print(llm("今天天气怎么样"))print(llm("讲10个给程序员听得笑话"))
class BaseChatModel(BaseLanguageModel[BaseMessageChunk], ABC):cache: Optional[bool] = None"""是否缓存响应。"""verbose: bool = Field(default_factory=_get_verbosity)"""是否打印响应文本。"""callbacks: Callbacks = Field(default=None, exclude=True)"""添加到运行追踪的回调函数。"""callback_manager: Optional[BaseCallbackManager] = Field(default=None, exclude=True)"""添加到运行追踪的回调函数管理器。"""tags: Optional[List[str]] = Field(default=None, exclude=True)"""添加到运行追踪的标签。"""metadata: Optional[Dict[str, Any]] = Field(default=None, exclude=True)"""添加到运行追踪的元数据。"""# 需要子类实现的 _generate 抽象方法def _generate(self,messages: List[BaseMessage],stop: Optional[List[str]] = None,run_manager: Optional[CallbackManagerForLLMRun] = None,**kwargs: Any,) -> ChatResult:
class ChatOpenAI(BaseChatModel):"""OpenAI Chat大语言模型的包装器。要使用,您应该已经安装了``openai`` python包,并且环境变量``OPENAI_API_KEY``已使用您的API密钥进行设置。即使未在此类上明确保存,也可以传入任何有效的参数至openai.create调用。"""def lc_secrets(self) -> Dict[str, str]:return {"openai_api_key": "OPENAI_API_KEY"}def lc_serializable(self) -> bool:return Trueclient: Any = None#: :meta private:model_name: str = Field(default="gpt-3.5-turbo", alias="model")"""要使用的模型名。"""temperature: float = 0.7"""使用的采样温度。"""model_kwargs: Dict[str, Any] = Field(default_factory=dict)"""保存任何未明确指定的`create`调用的有效模型参数。"""openai_api_key: Optional[str] = None"""API请求的基础URL路径,如果不使用代理或服务仿真器,请留空。"""openai_api_base: Optional[str] = Noneopenai_organization: Optional[str] = None# 支持OpenAI的显式代理openai_proxy: Optional[str] = Nonerequest_timeout: Optional[Union[float, Tuple[float, float]]] = None"""请求OpenAI完成API的超时。默认为600秒。"""max_retries: int = 6"""生成时尝试的最大次数。"""streaming: bool = False"""是否流式传输结果。"""n: int = 1"""为每个提示生成的聊天完成数。"""max_tokens: Optional[int] = None"""生成的最大令牌数。"""tiktoken_model_name: Optional[str] = None"""使用此类时传递给tiktoken的模型名称。Tiktoken用于计算文档中的令牌数以限制它们在某个限制之下。默认情况下,当设置为None时,这将与嵌入模型名称相同。但是,在某些情况下,您可能希望使用此嵌入类,模型名称不由tiktoken支持。这可能包括使用Azure嵌入或使用其中之一的多个模型提供商公开类似OpenAI的API但模型不同。在这些情况下,为了避免在调用tiktoken时出错,您可以在这里指定要使用的模型名称。"""
import openaiimport osimport tiktoken# 加载 .env 文件from dotenv import load_dotenv, find_dotenvfrom langchain.prompts import PromptTemplatefrom langchain.llms import OpenAIfrom langchain.chains import LLMChain#from langchain.chat_models import AzureChatOpenAIfrom langchain.chat_models import ChatOpenAI #直接访问OpenAI的GPT服务_ = load_dotenv(find_dotenv())# 从环境变量中获得你的 OpenAI Key和配置URLopenai.api_key = os.getenv('OPENAI_API_KEY')openai.api_base = os.getenv('OPENAI_API_URL')model = os.getenv('OPENAI_API_MODEL')llm = OpenAI(model_name=model, temperature=0) #直接访问OpenAI的GPT服务#print(llm("今天天气怎么样"))#print(llm("讲10个给程序员听得笑话"))from langchain.schema import (AIMessage,HumanMessage,SystemMessage)def message_to_string():messages = [SystemMessage(content="You are a helpful assistant."),HumanMessage(content="Who won the world series in 2020?"),AIMessage(content="The Los Angeles Dodgers won the World Series in 2020."),HumanMessage(content="Where was it played?")]print(messages)#python 入口函数if __name__ == '__main__':llm(message_to_string())result = llm("生成可执行的快速排序 Python 代码")print(result)# 使用 `exec` 定义 `quick_sort` 函数#exec(result)# 调用 GPT 生成的快排代码,测试是否可用#print(quick_sort([3,6,8,10,1,2,1,1024]))
from langchain.llms import OpenAIllm = OpenAI(api_key="your-api-key")prompt = "Customer: 'I cannot log into my account.'\nAI: 'Please try resetting your password using the link on the login page.'"response = llm.generate_prompt([prompt])print(response)
from langchain.llms import Coherellm = Cohere(api_key="your-api-key")prompt = "User has recently viewed: 'smartphones, laptops'.\nAI: 'We recommend these new gadgets for you: ...'"response = llm.generate_prompt([prompt])print(response)
from langchain.llms import HuggingFaceHubllm = HuggingFaceHub(api_key="your-api-key")prompt = "Generate a marketing slogan for a new eco-friendly water bottle."response = llm.generate_prompt([prompt])print(response)
from langchain.chat_models import ChatOpenAIfrom langchain.schema import HumanMessagechat_model = ChatOpenAI(api_key="your-api-key")message = HumanMessage(content="What is the Pythagorean theorem?")response = chat_model.chat([message])print(response.content)
53AI,企业落地大模型首选服务商
产品:场景落地咨询+大模型应用平台+行业解决方案
承诺:免费POC验证,效果达标后再合作。零风险落地应用大模型,已交付160+中大型企业
2026-07-01
LangGraph Runtime 是什么?一文讲清Runtime与Context的作用与用法!
2026-06-26
拆解Agent Harness的11大核心组件与工程实践(附下载)
2026-06-05
让 Agent 快速上生产:基于 OceanBase 和 LangChain 打造的智能体系统解决方案发布
2026-05-19
90% 的 Agent 失败,不是框架不行,而是卡在 5 个工程问题
2026-05-14
用两行代码将 AgentRun 集成到你的应用
2026-05-06
LangChain 深度智能体(Deep Agents)入门
2026-04-19
万字讲透Agent Harness的十二大模块
2026-04-08
同一个模型,换个Harness排名跳了25位:智能体基础设施完全解剖
2026-04-19
2026-04-08
2026-05-06
2026-05-19
2026-05-14
2026-06-05
2026-06-26
2026-07-01
2026-03-26
2025-11-03
2025-10-29
2025-07-14
2025-07-13
2025-07-05
2025-06-26
2025-06-13
欢迎您使用【53AI 官方网站】(以下简称“本网站”或“我们”)。本《会员服务协议》(以下简称“本协议”)是您(以下简称“会员”或“用户”)与【深圳市博思协创网络科技有限公司】之间关于注册、登录及使用本网站会员服务所订立的法律协议。
在您注册或登录前,请务必审慎阅读、充分理解各条款内容,特别是免除或限制责任的条款、知识产权条款、争议解决条款等。此类条款将以加粗形式提示您注意。 当您通过微信公众号授权、手机验证码验证或其他方式成功登录本网站时,即视为您已完全理解并同意接受本协议的全部内容。
一、 定义
本网站:指由【深圳市博思协创网络科技有限公司】运营的,域名为【53ai.com】的网站及相关移动端页面。
会员服务:指本网站向注册会员提供的知识库文章查阅、内容检索及其他相关增值服务。
知识库内容:指本网站发布的包括但不限于文字、图表、数据、研究报告、行业分析等数字化内容资源。
二、 账号注册与登录
登录方式:本网站支持以下登录方式,您可根据实际情况选择:
微信公众号授权登录:您同意将您的微信OpenID信息授权给本网站,用于创建或关联会员账号。
手机验证码登录:您需提供真实有效的手机号码,并通过短信验证码完成身份验证与登录/注册。
账号安全:您的账号仅限您本人使用,禁止赠与、借用、租用、转让或售卖。因您保管不善导致的账号被盗、密码泄露等损失,由您自行承担。
实名认证:根据相关法律法规要求,我们可能要求您在特定功能下完成实名认证。如您拒绝提供,可能无法使用部分或全部服务。
未成年人保护:若您未满18周岁,请在法定监护人的陪同下阅读本协议,并在征得监护人同意后使用本服务。
三、 服务内容与规范
知识库查阅权限:会员登录后,有权按照其会员等级对应的权限范围,在线浏览、检索本网站知识库中的相关文章及内容。
服务变更:我们有权根据业务发展需要,调整、变更或终止部分服务内容,并将以网站公告、公众号消息等方式提前通知。
禁止行为:您在使用服务时不得实施以下行为:
利用技术手段批量爬取、下载、转存知识库内容;
将知识库内容用于商业目的或未经授权地向第三方传播;
干扰本网站正常运行或侵犯其他用户合法权益;
发布违法违规信息或从事违反公序良俗的活动。
四、 知识产权声明
权利归属:本网站知识库中的排版设计、软件代码等内容的知识产权均归【公司全称】或原权利人所有,受《中华人民共和国著作权法》等法律保护。
有限许可:本网站授予会员一项非独占、不可转让、不可转授权的普通许可,仅限于个人学习、研究之目的在线查阅知识库内容。
侵权追责:未经书面许可,任何单位或个人不得以任何形式复制、转载、摘编、镜像、汇编或以其他方式使用上述内容。一经发现,我们保留追究其法律责任的权利。
五、 个人信息保护
我们重视对您个人信息的保护。关于我们如何收集、使用、存储和保护您的个人信息,请单独阅读 《隐私政策》。
您通过微信公众号授权或手机号验证所提供的信息,我们将严格按照《个人信息保护法》的规定处理,仅用于身份识别、服务提供及安全验证等必要用途。
您可以随时通过网站设置或联系客服行使查阅、更正、删除个人信息及撤回授权同意的权利。
六、 免责声明
内容准确性:知识库内容仅供参考,不构成专业建议。我们不对其完整性、准确性、时效性作任何明示或暗示的保证,您应自行判断并承担使用风险。
不可抗力:因自然灾害、政策法规变化、网络故障、第三方平台接口异常(如微信接口维护、运营商短信通道故障)等不可抗力导致的服务中断或延迟,我们不承担违约责任。
第三方链接:本网站可能包含指向第三方网站的链接,该等网站的内容和服务不受我们控制,请您自行甄别风险。
七、 违约责任
如您违反本协议约定,我们有权视情节采取警告、限制功能、暂停服务、注销账号等措施,并保留要求赔偿损失的权利。
如因您的违约行为导致我们遭受行政处罚、第三方索赔或商誉损失,您应承担全部赔偿责任(包括但不限于罚款、赔偿金、律师费、公证费等)。
八、 法律适用与争议解决
本协议的订立、执行和解释均适用中华人民共和国大陆地区法律。
因本协议产生的或与本协议有关的任何争议,双方应友好协商解决;协商不成的,任何一方均可向【公司所在地】有管辖权的人民法院提起诉讼。
九、 其他
本协议构成双方就本服务达成的完整协议,取代此前任何口头或书面约定。
本协议任一条款被认定为无效或不可执行的,不影响其他条款的效力。
我们对本协议享有最终解释权,并在法律允许的范围内保留随时修改的权利。修改后的协议一经公布即生效,继续使用服务即视为同意修订内容。