使用Ollama在Linux本地部署DeepSeek来运行斯坦福AI小镇

在原项目的基础上,我们使用 Ollama 在本地部署 DeepSeek 模型,和 embedding 模型 mxbai-embed-large,来运行 Generative Agents 项目。

环境

1
2
3
4
5
No LSB modules are available.
Distributor ID: Ubuntu
Description: Ubuntu 22.04.5 LTS
Release: 22.04
Codename: jammy

Ollama的安装和模型的本地部署

  1. 在Linux系统安装Ollama
1
curl -fsSL https://ollama.com/install.sh | sh
  1. 使用Ollama 安装生成模型, 可安装模型列表,我选择了deepseek-v2, 可根据自己的系统配置安装不同的版本。
1
2
3
4
5
# deepseek-v2:16b 
ollama run deepseek-v2:16b

# deepseek-v3:671b
ollama run deepseek-v3:671b
  1. 使用Ollama 安装embedding模型, 可安装模型列表
1
2
# mxbai-embed-large 
ollama pull mxbai-embed-large

代码修改

  1. 主要修改文件 reverie/backend_server/persona/prompt_template/gpt_structure.py, 可参考文件gpt_structure.py 中的 model_request 的函数的request_type == "ollama"

  2. 在文件开头添加变量

1
2
3
4
# Ollama API 配置
OLLAMA_API_URL = "http://localhost:11434"
MODEL = "deepseek/deepseek-chat"
EMBEDDING_MODEL = "mxbai-embed-large:latest"
  1. 修改函数 ChatGPT_single_request(prompt), GPT4_request(prompt), ChatGPT_request(prompt)。

原代码:

1
2
3
4
5
completion = openai.ChatCompletion.create(
model="gpt-3.5-turbo",
messages=[{"role": "user", "content": prompt}]
)
return completion["choices"][0]["message"]["content"]

替换代码:

1
2
3
4
5
completion = ollama.chat(
model=MODEL,
messages=[{"role": "user", "content": prompt}],
)
return completion['message']['content']
  1. 修改函数GPT_request(prompt, gpt_parameter)

原代码:

1
2
3
4
5
6
7
8
9
10
11
response = openai.Completion.create(
model=gpt_parameter["engine"],
prompt=prompt,
temperature=gpt_parameter["temperature"],
max_tokens=gpt_parameter["max_tokens"],
top_p=gpt_parameter["top_p"],
frequency_penalty=gpt_parameter["frequency_penalty"],
presence_penalty=gpt_parameter["presence_penalty"],
stream=gpt_parameter["stream"],
stop=gpt_parameter["stop"],)
return response.choices[0].text

替换代码:

1
2
3
4
5
completion = ollama.chat(
model=MODEL,
messages=[{"role": "user", "content": prompt}],
)
return completion['message']['content']
  1. 修改embeding 模型

原代码:

1
2
3
4
5
6
def get_embedding(text, model="text-embedding-ada-002"):
text = text.replace("\n", " ")
if not text:
text = "this is blank"
return openai.Embedding.create(
input=[text], model=model)['data'][0]['embedding']

替换代码:

1
2
3
4
5
6
7
8
def get_embedding(text, model=EMBEDDING_MODEL):
text = text.replace("\n", " ")
if not text:
text = "this is blank"

response = ollama.embeddings(model=model, prompt=text)
embedding = response["embedding"]
return embedding

运行

运行部分不需要做任何修改,可参考原README文件,

References

  1. 论文PDF: Generative Agents: Interactive Simulacra of Human Behavior

  2. 论文作者提供代码: Github

  3. 修改代码参考: liberow


使用Ollama在Linux本地部署DeepSeek来运行斯坦福AI小镇
https://liberow.github.io/2025/02/04/agent/generative_agents_local/
Author
liberow
Posted on
February 4, 2025
Licensed under