语言模型
任何DSPy代码的第一步都是设置你的语言模型。例如,你可以如下配置OpenAI的GPT-4o-mini作为默认LM。
几个不同的语言模型
您可以通过设置环境变量 OPENAI_API_KEY
或传递下方的 api_key
进行身份验证。
您可以通过设置GEMINI_API_KEY环境变量或在下方传递api_key
来进行身份验证。
您可以通过设置ANTHROPIC_API_KEY环境变量或在下方传递api_key
进行身份验证。
如果您在Databricks平台上,通过他们的SDK认证是自动的。如果不是,您可以设置环境变量DATABRICKS_API_KEY
和DATABRICKS_API_BASE
,或者在下方传入api_key
和api_base
。
首先,安装 SGLang 并使用你的语言模型启动其服务器。
> pip install "sglang[all]"
> pip install flashinfer -i https://flashinfer.ai/whl/cu121/torch2.4/
> CUDA_VISIBLE_DEVICES=0 python -m sglang.launch_server --port 7501 --model-path meta-llama/Meta-Llama-3-8B-Instruct
然后,从您的DSPy代码中将其作为OpenAI兼容端点进行连接。
首先,安装 Ollama 并使用你的语言模型启动其服务器。
然后,从您的DSPy代码中连接到它。
在DSPy中,您可以使用任何由LiteLLM支持的数十种LLM提供商。只需按照他们的说明设置{PROVIDER}_API_KEY
以及如何将{provider_name}/{model_name}
传递给构造函数。
一些示例:
anyscale/mistralai/Mistral-7B-Instruct-v0.1
, 使用ANYSCALE_API_KEY
together_ai/togethercomputer/llama-2-70b-chat
, 使用TOGETHERAI_API_KEY
sagemaker/<your-endpoint-name>
, 使用AWS_ACCESS_KEY_ID
,AWS_SECRET_ACCESS_KEY
, 和AWS_REGION_NAME
azure/
, 使用AZURE_API_KEY
,AZURE_API_BASE
,AZURE_API_VERSION
, 以及可选的AZURE_AD_TOKEN
和AZURE_API_TYPE
作为环境变量。如果你在未设置环境变量的情况下初始化外部模型,请使用以下方式:lm = dspy.LM('azure/
', api_key = 'AZURE_API_KEY' , api_base = 'AZURE_API_BASE', api_version = 'AZURE_API_VERSION')
如果你的提供商提供OpenAI兼容的端点,只需在你的完整模型名称前添加openai/
前缀。
如果遇到错误,请参考LiteLLM Docs来确认是否使用了相同的变量名称/遵循了正确的流程。
直接调用语言模型。
直接调用您上面配置的lm
非常简单。这为您提供了统一的API,并让您受益于自动缓存等实用功能。
使用LM与DSPy模块。
习惯性的DSPy涉及使用模块,我们将在下一个指南中讨论。
使用多个语言模型。
你可以通过dspy.configure
全局更改默认LM,或者使用dspy.context
在代码块内部更改它。
提示
使用dspy.configure
和dspy.context
是线程安全的!
配置语言模型生成。
对于任何语言模型,你可以在初始化时或每次后续调用中配置以下任意属性。
默认情况下,DSPy中的语言模型会被缓存。如果你重复相同的调用,你会得到相同的输出。但你可以通过设置cache=False
来关闭缓存。
如果你想保持缓存启用但强制发起新请求(例如,为了获取多样化输出),
请在调用时传递一个唯一的rollup_id
并设置非零的temperature
。DSPy在查找缓存条目时会同时哈希输入
和rollup_id
,因此不同的值会强制发起新的LM请求,同时
仍会缓存具有相同输入和rollup_id
的未来调用。该ID也会被记录在
lm.history
中,这使得在实验期间轻松追踪或比较不同的rollup。仅更改
rollup_id
而保持temperature=0
不会影响LM的输出。
你也可以将这些LM参数直接传递给DSPy模块。在初始化时提供它们会为每次调用设置默认值:
要针对单次调用覆盖它们,在调用模块时提供一个 config
字典:
在这两种情况下,rollout_id
会被转发到底层语言模型,影响其缓存行为,并与每个响应一同存储,以便您稍后可以回放或分析特定的 rollout。
检查输出和使用元数据。
每个LM对象都会维护其交互历史,包括输入、输出、令牌使用量(和$$$成本)以及元数据。
输出:
dict_keys(['prompt', 'messages', 'kwargs', 'response', 'outputs', 'usage', 'cost', 'timestamp', 'uuid', 'model', 'response_model', 'model_type])
高级:构建自定义语言模型并编写您自己的适配器。
虽然很少需要,你可以通过继承dspy.BaseLM
来编写自定义语言模型。DSPy生态系统中的另一个高级层是适配器,它位于DSPy签名和语言模型之间。本指南的未来版本将讨论这些高级功能,尽管你可能不需要它们。